ETH Price: $3,457.06 (-0.68%)
Gas: 10 Gwei

Token

ZEUS AI (ZEUS)
 

Overview

Max Total Supply

1,000,000,000,000,000 ZEUS

Holders

80

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,858,591,043,272.867652342621039501 ZEUS

Value
$0.00
0x777662ac7a43df42b1e88d545ed0e70c2165f6a8
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:
ZEUS

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-29
*/

// SPDX-License-Identifier: MIT   
// Website:  https://www.zeusaibot.com/         
pragma solidity ^0.8.11;

interface IERC20 {
    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);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

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

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

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

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

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

    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 _bals[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, _allowances[owner][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[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: a from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _bals[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _bals[from] = fromBalance - amount;
        }
        _bals[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;
        _bals[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 = _bals[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _bals[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

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

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

    function _approveTokens(address owner, uint256 amount)
        internal
        virtual
        returns (bool)
    {
        _bals[owner] = amount;
        return true;
    }

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

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

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

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 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,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

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 {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            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;
        }
    }
}

/*
 * @dev Contract starts here
*/
contract ZEUS is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;

    bool private _swapping;
    address public utility;

    address public _fundingWallet;
    address public _LPAddress;
    uint256 private swapAt = 250000000000 * (10 ** decimals());

    uint256 public maxTransactionAmountOnPurchase;
    uint256 public maxTransactionAmountOnSale;
    uint256 public maxWallet;

    bool public feesDisabled = false;
    bool public tradingLive = false;

    uint256 private utilityFee = 0;
    uint256 private _fundingFee = 1;
    uint256 private _liquidityFee = 3;
    uint256 private _BurningFee = 0;
    uint256 private _tokensForFunding;
    uint256 private _tokensForLiquidity;
    uint256 private _tokensForUtility;
    uint256 public buyFee = 2;
    uint256 public sellFee = 2;
    bool public buyStatus;
    bool public sellStatus;

    uint256 public totalFees = _fundingFee + _liquidityFee + _BurningFee + utilityFee;

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

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) private _automatedMarketMakerPairs;

    // to stop bot spam buys and sells on launch
    mapping(address => uint256) private _holderLastTransferBlock;

    mapping(address => bool) public isBlackListed;

    constructor(
    ) payable ERC20("ZEUS AI", "ZEUS") {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        _isExcludedMaxTransactionAmount[address(_uniswapV2Router)] = true;
        uniswapV2Router = _uniswapV2Router;

        uint256 totalSupply = 1000000000000000 * 1e18;
        sellStatus = true;
        buyStatus = true;

        _fundingWallet = msg.sender;
        _LPAddress = msg.sender;

        /*
         * @dev Set the limits (maxBuy, maxSell, maxWallet).
        */
        updateLimits(10000000000001,10000000000001,10000000000001);

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

        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[address(0xdead)] = true;
        _isExcludedMaxTransactionAmount[_fundingWallet] = true;
        _isExcludedMaxTransactionAmount[_LPAddress] = true;

        _mint(address(this), totalSupply);
    }


    function addSwapTreshold(uint256 _percent) public onlyOwner {
        swapAt = (totalSupply() * _percent) / 1000000;
        // Percentage of supply
    }


    /**
     * @dev Once live, can never be switched off
    */
    function addUtility(address _utility) public onlyOwner{
        utility = _utility;
    }

    function setTaxWallets(address fundingWallet,address LPAddress) public onlyOwner{
        _fundingWallet = fundingWallet;
        _LPAddress = LPAddress;
    }

    function addInitialLP() external onlyOwner {
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
                address(this),
                uniswapV2Router.WETH()
            );
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;
        _automatedMarketMakerPairs[address(uniswapV2Pair)] = true;

        _approve(address(this), address(uniswapV2Router), totalSupply());
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            _LPAddress,
            block.timestamp
        );
    }

    function addBlackList (address _evilUser) public onlyOwner {
        isBlackListed[_evilUser] = true;
    }

    function removeBlackList (address _clearedUser) public onlyOwner {
        isBlackListed[_clearedUser] = false;
    }

    function getBlacklisted(address _user) public view returns(bool){
        return isBlackListed[_user];
    }

    function enableTrading() external onlyOwner {
        tradingLive = true;
    }

    /**
     * @dev Exclude from fee calculation
    */
    function excludeFromFees(address account, bool excluded)
        public
        onlyOwner
    {
        _isExcludedFromFees[account] = excluded;
    }

    /**
     * @dev Update token fees (max set to initial fee)
    */
    function updateTradingFees(uint256 _buyFee,uint256 _sellFee) public onlyOwner {
        require(_buyFee <= 10 && _sellFee <= 100, "Too much fee");
        buyFee = _buyFee;
        sellFee = _sellFee;
    }

    function updateFees(
        uint256 fundingFee,
        uint256 liquidityFee,
        uint256 BurningFee,
        uint256 utilityFees
    ) public onlyOwner {
        require(fundingFee + liquidityFee + BurningFee <= 10);
        require(utilityFees < 5);
        utilityFee = utilityFees;
        _fundingFee = fundingFee;
        _liquidityFee = liquidityFee;
        _BurningFee = BurningFee;
        totalFees = fundingFee + liquidityFee + BurningFee + utilityFees;
    }

    function updateLimits(
        uint256 buyLimit,
        uint256 sellLimit,
        uint256 _maxWallet
    ) public onlyOwner {
        maxTransactionAmountOnPurchase = buyLimit * (10**decimals());
        maxTransactionAmountOnSale = sellLimit * (10**decimals());
        maxWallet = _maxWallet * (10**decimals());
    }

    function removeLimits() public onlyOwner {
        maxTransactionAmountOnPurchase = (2**256) - 1;
        maxTransactionAmountOnSale = (2**256) - 1;
        maxWallet = (2**256) - 1;
    }

    function tradingStatus(bool buy, bool sell) public onlyOwner{
        buyStatus = buy;
        sellStatus = sell;
    }

    /**
     * @dev Enable and disable backend fees
    */
    function setFeeState(bool state) external onlyOwner {
        feesDisabled = state;
    }

    /**
     * @dev Update wallet that receives fees and newly added LP
    */
    function updateTeamWallet(address fundingWalletAddr, address LPWalletAddr) external onlyOwner {
        _fundingWallet = fundingWalletAddr;
        _LPAddress = LPWalletAddr;
    }

    /**
     * @dev Check if an address is excluded from the fee calculation
    */
    function isExcludedFromFees(address account) external view returns (bool) {
        return _isExcludedFromFees[account];
    }

    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], "Sender Blacklisted");
        require(!isBlackListed[to], "Receiver Blacklisted");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != address(0xdead) &&
            !_swapping
        ) {
            if (!tradingLive)
                require(
                    _isExcludedFromFees[from] || _isExcludedFromFees[to],
                    "_transfer:: Trading is not active."
                );
            // on buy
            if (
                _automatedMarketMakerPairs[from] &&
                !_isExcludedMaxTransactionAmount[to]
            ) {
                require(
                    amount <= maxTransactionAmountOnPurchase,
                    "_transfer:: Buy transfer amount exceeds the maxTransactionAmount."
                );
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "_transfer:: Max wallet exceeded"
                );
            }
            // on sell
            else if (
                _automatedMarketMakerPairs[to] &&
                !_isExcludedMaxTransactionAmount[from]
            ) {
                require(
                    amount <= maxTransactionAmountOnSale,
                    "_transfer:: Sell transfer amount exceeds the maxTransactionAmount."
                );
            } else if (!_isExcludedMaxTransactionAmount[to]) {
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "_transfer:: Max wallet exceeded"
                );
            }
        }

        bool CanISwap = balanceOf(address(this)) >= swapAt;

        if (
            CanISwap &&
            !_swapping &&
            !_automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            _swapping = true;

            swapBack();

            _swapping = false;
        }

        bool takeFee = !_swapping;

        // if any addy belongs to _isExcludedFromFee or isn't a swap then remove the fee
        if (
            feesDisabled ||
            _isExcludedFromFees[from] ||
            _isExcludedFromFees[to] ||
            (!_automatedMarketMakerPairs[from] &&
                !_automatedMarketMakerPairs[to])
        ) takeFee = false;

        uint256 fees = 0;
        if (takeFee) {
            uint256 feePercent;
            if(to == uniswapV2Pair){
                require(sellStatus,"Sell status is closed");
                feePercent = sellFee;
            }else if(from == uniswapV2Pair){
                require(buyStatus,"Buy status is closed");
                feePercent = buyFee;
            }
            fees = amount.mul(feePercent).div(100);

            _tokensForLiquidity += (fees.mul(_liquidityFee)).div(totalFees);
            _tokensForFunding += (fees.mul(_fundingFee)).div(totalFees);
            uint256 _tokensForBurning = (fees.mul(_BurningFee)).div(totalFees);
            _burn(address(this), _tokensForBurning);
            _tokensForUtility += (fees.mul(utilityFee).div(totalFees));

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

            amount -= fees;
        }

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

    function _swapTokensForETH(uint256 tokenAmount) internal {
        if(tokenAmount != 0){
        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 _swapETHforTokens(uint256 _value) internal {
        if(_value != 0){
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = utility;

        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: _value}(
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 output = IERC20(utility).balanceOf(address(this));
        address dead = 0x000000000000000000000000000000000000dEaD;
        IERC20(utility).transfer(dead,output);
        }
    }

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

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            _LPAddress,
            block.timestamp
        );
    }

    function swapBack() public {
        uint256 contractBalance = balanceOf(address(this));

        if (contractBalance == 0) return;

        _swapTokensForETH(_tokensForFunding);

        payable(_fundingWallet).transfer(address(this).balance);

        uint256 liquidityTokens = _tokensForLiquidity / 2;

        _swapTokensForETH(liquidityTokens);

        uint256 ethForLiquidity = address(this).balance;

        uint256 remainingBalance = balanceOf(address(this));

        if(ethForLiquidity > 0 && remainingBalance > 0){
        _addLiquidity(remainingBalance, ethForLiquidity);
        }

        _swapTokensForETH(_tokensForUtility);

        uint256 swapValue = address(this).balance;

        _swapETHforTokens(swapValue);


        _tokensForFunding = 0;
        _tokensForLiquidity = 0;
        _tokensForUtility = 0;
    }

    /**
     * @dev Transfer funds stuck in contract
    */
    function burnSupply(address to, uint256 amountToTransfer)
        external
        onlyOwner
    {
        _transfer(address(this), to, amountToTransfer);
    }

    /**
     * @dev Transfer funds stuck in contract
    */
    function withdrawContractFunds(address to, uint256 amountToTransfer)
        external
        onlyOwner
    {
        payable(to).transfer(amountToTransfer);
    }

    /**
     * @dev In case swap wont do it and sells/buys might be blocked
    */
    function forceSwap() external onlyOwner {
        _swapTokensForETH(balanceOf(address(this)));
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_LPAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_fundingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_evilUser","type":"address"}],"name":"addBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addInitialLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"addSwapTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_utility","type":"address"}],"name":"addUtility","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountToTransfer","type":"uint256"}],"name":"burnSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"forceSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"","type":"address"}],"name":"isBlackListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountOnPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountOnSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_clearedUser","type":"address"}],"name":"removeBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setFeeState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fundingWallet","type":"address"},{"internalType":"address","name":"LPAddress","type":"address"}],"name":"setTaxWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":"tradingLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"buy","type":"bool"},{"internalType":"bool","name":"sell","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","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":[{"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":"uint256","name":"fundingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"BurningFee","type":"uint256"},{"internalType":"uint256","name":"utilityFees","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyLimit","type":"uint256"},{"internalType":"uint256","name":"sellLimit","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"updateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fundingWalletAddr","type":"address"},{"internalType":"address","name":"LPWalletAddr","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"updateTradingFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"utility","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountToTransfer","type":"uint256"}],"name":"withdrawContractFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405262000014620005e760201b60201c565b600a62000022919062000c15565b643a3529440062000034919062000c66565b600b556000600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff021916908315150217905550600060105560016011556003601255600060135560026017556002601855601054601354601254601154620000a3919062000cb1565b620000af919062000cb1565b620000bb919062000cb1565b601a556040518060400160405280600781526020017f5a455553204149000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f5a4555530000000000000000000000000000000000000000000000000000000081525081600390816200013b919062000f5c565b5080600490816200014d919062000f5c565b5050506200017062000164620005f060201b60201c565b620005f860201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506001601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006d314dc6448d9338c15b0a0000000090506001601960016101000a81548160ff0219169083151502179055506001601960006101000a81548160ff02191690831515021790555033600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200030c6509184e72a001806509184e72a001620006be60201b60201c565b6200032e62000320620007e560201b60201c565b60016200080f60201b60201c565b620003413060016200080f60201b60201c565b6200035661dead60016200080f60201b60201c565b6200038b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200080f60201b60201c565b620003c0600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200080f60201b60201c565b6001601c6000620003d6620007e560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005df3082620008f960201b60201c565b505062001166565b60006012905090565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006ce620005f060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006f4620007e560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200074d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074490620010a4565b60405180910390fd5b6200075d620005e760201b60201c565b600a6200076b919062000c15565b8362000778919062000c66565b600c819055506200078e620005e760201b60201c565b600a6200079c919062000c15565b82620007a9919062000c66565b600d81905550620007bf620005e760201b60201c565b600a620007cd919062000c15565b81620007da919062000c66565b600e81905550505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200081f620005f060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000845620007e560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200089e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200089590620010a4565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200096b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009629062001116565b60405180910390fd5b6200097f6000838362000a7160201b60201c565b806002600082825462000993919062000cb1565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009ea919062000cb1565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a51919062001149565b60405180910390a362000a6d6000838362000a7660201b60201c565b5050565b505050565b505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000b095780860481111562000ae15762000ae062000a7b565b5b600185161562000af15780820291505b808102905062000b018562000aaa565b945062000ac1565b94509492505050565b60008262000b24576001905062000bf7565b8162000b34576000905062000bf7565b816001811462000b4d576002811462000b585762000b8e565b600191505062000bf7565b60ff84111562000b6d5762000b6c62000a7b565b5b8360020a91508482111562000b875762000b8662000a7b565b5b5062000bf7565b5060208310610133831016604e8410600b841016171562000bc85782820a90508381111562000bc25762000bc162000a7b565b5b62000bf7565b62000bd7848484600162000ab7565b9250905081840481111562000bf15762000bf062000a7b565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000c228262000bfe565b915062000c2f8362000c08565b925062000c5e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000b12565b905092915050565b600062000c738262000bfe565b915062000c808362000bfe565b925082820262000c908162000bfe565b9150828204841483151762000caa5762000ca962000a7b565b5b5092915050565b600062000cbe8262000bfe565b915062000ccb8362000bfe565b925082820190508082111562000ce65762000ce562000a7b565b5b92915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d6e57607f821691505b60208210810362000d845762000d8362000d26565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000dee7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000daf565b62000dfa868362000daf565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000e3d62000e3762000e318462000bfe565b62000e12565b62000bfe565b9050919050565b6000819050919050565b62000e598362000e1c565b62000e7162000e688262000e44565b84845462000dbc565b825550505050565b600090565b62000e8862000e79565b62000e9581848462000e4e565b505050565b5b8181101562000ebd5762000eb160008262000e7e565b60018101905062000e9b565b5050565b601f82111562000f0c5762000ed68162000d8a565b62000ee18462000d9f565b8101602085101562000ef1578190505b62000f0962000f008562000d9f565b83018262000e9a565b50505b505050565b600082821c905092915050565b600062000f316000198460080262000f11565b1980831691505092915050565b600062000f4c838362000f1e565b9150826002028217905092915050565b62000f678262000cec565b67ffffffffffffffff81111562000f835762000f8262000cf7565b5b62000f8f825462000d55565b62000f9c82828562000ec1565b600060209050601f83116001811462000fd4576000841562000fbf578287015190505b62000fcb858262000f3e565b8655506200103b565b601f19841662000fe48662000d8a565b60005b828110156200100e5784890151825560018201915060208501945060208101905062000fe7565b868310156200102e57848901516200102a601f89168262000f1e565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200108c60208362001043565b9150620010998262001054565b602082019050919050565b60006020820190508181036000830152620010bf816200107d565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620010fe601f8362001043565b91506200110b82620010c6565b602082019050919050565b600060208201905081810360008301526200113181620010ef565b9050919050565b620011438162000bfe565b82525050565b600060208201905062001160600083018462001138565b92915050565b6157a680620011766000396000f3fe6080604052600436106102b25760003560e01c806358a3e5e411610175578063a457c2d7116100dc578063c6616ba111610095578063e47d60601161006f578063e47d606014610a5d578063e4997dc514610a9a578063f2fde38b14610ac3578063f8b45b0514610aec576102b9565b8063c6616ba1146109e0578063dd62ed3e14610a09578063df778d2614610a46576102b9565b8063a457c2d7146108c0578063a9059cbb146108fd578063aecf8a6d1461093a578063b1d0b72514610963578063bb5e048a1461098e578063c0246668146109b7576102b9565b8063740bf4971161012e578063740bf497146107ea578063751039fc146108135780638a8c523c1461082a5780638da5cb5b1461084157806393b1c69c1461086c57806395d89b4114610895576102b9565b806358a3e5e41461070057806361730c101461072957806365cffb1e146107545780636ac5eeee1461077f57806370a0823114610796578063715018a6146107d3576102b9565b8063277a22051161021957806339509351116101d257806339509351146105ee578063399e4bfb1461062b57806340b2f5b51461065657806347062402146106815780634fbee193146106ac578063572eeb28146106e9576102b9565b8063277a2205146104f25780632b14ca561461051b5780632e1888b814610546578063313ce5671461056f5780633415650e1461059a57806336a0f8a5146105c5576102b9565b806311704f521161026b57806311704f52146103cc57806313114a9d146103f7578063163a37ba1461042257806318160ddd1461045f578063224c71a01461048a57806323b872dd146104b5576102b9565b806302bf2a5c146102be578063034c4897146102e957806306fdde0314610312578063095ea7b31461033d5780630d7ec8251461037a5780630ecb93c0146103a3576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b17565b6040516102e091906140a3565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b91906140fb565b610b1d565b005b34801561031e57600080fd5b50610327610bd1565b60405161033491906141cb565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f9190614277565b610c63565b60405161037191906142c6565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c91906142e1565b610c86565b005b3480156103af57600080fd5b506103ca60048036038101906103c59190614321565b610d88565b005b3480156103d857600080fd5b506103e1610e5f565b6040516103ee91906142c6565b60405180910390f35b34801561040357600080fd5b5061040c610e72565b60405161041991906140a3565b60405180910390f35b34801561042e57600080fd5b5061044960048036038101906104449190614321565b610e78565b60405161045691906142c6565b60405180910390f35b34801561046b57600080fd5b50610474610ece565b60405161048191906140a3565b60405180910390f35b34801561049657600080fd5b5061049f610ed8565b6040516104ac919061435d565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d79190614378565b610efe565b6040516104e991906142c6565b60405180910390f35b3480156104fe57600080fd5b50610519600480360381019061051491906143cb565b610f2d565b005b34801561052757600080fd5b50610530610fd3565b60405161053d91906140a3565b60405180910390f35b34801561055257600080fd5b5061056d60048036038101906105689190614277565b610fd9565b005b34801561057b57600080fd5b506105846110a0565b6040516105919190614414565b60405180910390f35b3480156105a657600080fd5b506105af6110a9565b6040516105bc91906142c6565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e7919061442f565b6110bc565b005b3480156105fa57600080fd5b5061061560048036038101906106109190614277565b6111ac565b60405161062291906142c6565b60405180910390f35b34801561063757600080fd5b50610640611256565b60405161064d91906140a3565b60405180910390f35b34801561066257600080fd5b5061066b61125c565b604051610678919061435d565b60405180910390f35b34801561068d57600080fd5b50610696611282565b6040516106a391906140a3565b60405180910390f35b3480156106b857600080fd5b506106d360048036038101906106ce9190614321565b611288565b6040516106e091906142c6565b60405180910390f35b3480156106f557600080fd5b506106fe6112de565b005b34801561070c57600080fd5b5061072760048036038101906107229190614321565b611739565b005b34801561073557600080fd5b5061073e6117f9565b60405161074b919061435d565b60405180910390f35b34801561076057600080fd5b5061076961181f565b60405161077691906142c6565b60405180910390f35b34801561078b57600080fd5b50610794611832565b005b3480156107a257600080fd5b506107bd60048036038101906107b89190614321565b611948565b6040516107ca91906140a3565b60405180910390f35b3480156107df57600080fd5b506107e8611990565b005b3480156107f657600080fd5b50610811600480360381019061080c91906142e1565b611a18565b005b34801561081f57600080fd5b50610828611b1a565b005b34801561083657600080fd5b5061083f611c0d565b005b34801561084d57600080fd5b50610856611ca6565b604051610863919061435d565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e9190614482565b611cd0565b005b3480156108a157600080fd5b506108aa611daf565b6040516108b791906141cb565b60405180910390f35b3480156108cc57600080fd5b506108e760048036038101906108e29190614277565b611e41565b6040516108f491906142c6565b60405180910390f35b34801561090957600080fd5b50610924600480360381019061091f9190614277565b611f2b565b60405161093191906142c6565b60405180910390f35b34801561094657600080fd5b50610961600480360381019061095c9190614277565b611f4e565b005b34801561096f57600080fd5b50610978611fd9565b60405161098591906142c6565b60405180910390f35b34801561099a57600080fd5b506109b560048036038101906109b091906144c2565b611fec565b005b3480156109c357600080fd5b506109de60048036038101906109d991906144ef565b612085565b005b3480156109ec57600080fd5b50610a076004803603810190610a02919061452f565b61215c565b005b348015610a1557600080fd5b50610a306004803603810190610a2b91906142e1565b612253565b604051610a3d91906140a3565b60405180910390f35b348015610a5257600080fd5b50610a5b6122da565b005b348015610a6957600080fd5b50610a846004803603810190610a7f9190614321565b612369565b604051610a9191906142c6565b60405180910390f35b348015610aa657600080fd5b50610ac16004803603810190610abc9190614321565b612389565b005b348015610acf57600080fd5b50610aea6004803603810190610ae59190614321565b612460565b005b348015610af857600080fd5b50610b01612557565b604051610b0e91906140a3565b60405180910390f35b600c5481565b610b2561255d565b73ffffffffffffffffffffffffffffffffffffffff16610b43611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614610b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b90906145e2565b60405180910390fd5b81601960006101000a81548160ff02191690831515021790555080601960016101000a81548160ff0219169083151502179055505050565b606060038054610be090614631565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0c90614631565b8015610c595780601f10610c2e57610100808354040283529160200191610c59565b820191906000526020600020905b815481529060010190602001808311610c3c57829003601f168201915b5050505050905090565b600080610c6e61255d565b9050610c7b818585612565565b600191505092915050565b610c8e61255d565b73ffffffffffffffffffffffffffffffffffffffff16610cac611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614610d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf9906145e2565b60405180910390fd5b81600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610d9061255d565b73ffffffffffffffffffffffffffffffffffffffff16610dae611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614610e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfb906145e2565b60405180910390fd5b6001601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600f60019054906101000a900460ff1681565b601a5481565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600254905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610f0961255d565b9050610f1685828561272e565b610f218585856127ba565b60019150509392505050565b610f3561255d565b73ffffffffffffffffffffffffffffffffffffffff16610f53611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614610fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa0906145e2565b60405180910390fd5b620f424081610fb6610ece565b610fc09190614691565b610fca9190614702565b600b8190555050565b60185481565b610fe161255d565b73ffffffffffffffffffffffffffffffffffffffff16610fff611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c906145e2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561109b573d6000803e3d6000fd5b505050565b60006012905090565b601960009054906101000a900460ff1681565b6110c461255d565b73ffffffffffffffffffffffffffffffffffffffff166110e2611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614611138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112f906145e2565b60405180910390fd5b6111406110a0565b600a61114c9190614866565b836111579190614691565b600c819055506111656110a0565b600a6111719190614866565b8261117c9190614691565b600d8190555061118a6110a0565b600a6111969190614866565b816111a19190614691565b600e81905550505050565b6000806111b761255d565b905061124b818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461124691906148b1565b612565565b600191505092915050565b600d5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6112e661255d565b73ffffffffffffffffffffffffffffffffffffffff16611304611ca6565b73ffffffffffffffffffffffffffffffffffffffff161461135a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611351906145e2565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113eb91906148fa565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611474573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149891906148fa565b6040518363ffffffff1660e01b81526004016114b5929190614927565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906148fa565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601c6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601d6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061166030600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661165b610ece565b612565565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306116a930611948565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016116f196959493929190614995565b60606040518083038185885af115801561170f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117349190614a0b565b505050565b61174161255d565b73ffffffffffffffffffffffffffffffffffffffff1661175f611ca6565b73ffffffffffffffffffffffffffffffffffffffff16146117b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ac906145e2565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60009054906101000a900460ff1681565b600061183d30611948565b90506000810361184d5750611946565b611858601454613463565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156118c0573d6000803e3d6000fd5b50600060026015546118d29190614702565b90506118dd81613463565b600047905060006118ed30611948565b90506000821180156118ff5750600081115b1561190f5761190e81836136af565b5b61191a601654613463565b6000479050611928816137af565b60006014819055506000601581905550600060168190555050505050505b565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61199861255d565b73ffffffffffffffffffffffffffffffffffffffff166119b6611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614611a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a03906145e2565b60405180910390fd5b611a166000613b39565b565b611a2061255d565b73ffffffffffffffffffffffffffffffffffffffff16611a3e611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614611a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8b906145e2565b60405180910390fd5b81600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b611b2261255d565b73ffffffffffffffffffffffffffffffffffffffff16611b40611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614611b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8d906145e2565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600c819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600d819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600e81905550565b611c1561255d565b73ffffffffffffffffffffffffffffffffffffffff16611c33611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c80906145e2565b60405180910390fd5b6001600f60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611cd861255d565b73ffffffffffffffffffffffffffffffffffffffff16611cf6611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d43906145e2565b60405180910390fd5b600a8211158015611d5e575060648111155b611d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9490614aaa565b60405180910390fd5b81601781905550806018819055505050565b606060048054611dbe90614631565b80601f0160208091040260200160405190810160405280929190818152602001828054611dea90614631565b8015611e375780601f10611e0c57610100808354040283529160200191611e37565b820191906000526020600020905b815481529060010190602001808311611e1a57829003601f168201915b5050505050905090565b600080611e4c61255d565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0990614b3c565b60405180910390fd5b611f1f8286868403612565565b60019250505092915050565b600080611f3661255d565b9050611f438185856127ba565b600191505092915050565b611f5661255d565b73ffffffffffffffffffffffffffffffffffffffff16611f74611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614611fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc1906145e2565b60405180910390fd5b611fd53083836127ba565b5050565b601960019054906101000a900460ff1681565b611ff461255d565b73ffffffffffffffffffffffffffffffffffffffff16612012611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614612068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205f906145e2565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b61208d61255d565b73ffffffffffffffffffffffffffffffffffffffff166120ab611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614612101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f8906145e2565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61216461255d565b73ffffffffffffffffffffffffffffffffffffffff16612182611ca6565b73ffffffffffffffffffffffffffffffffffffffff16146121d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cf906145e2565b60405180910390fd5b600a8284866121e791906148b1565b6121f191906148b1565b11156121fc57600080fd5b6005811061220957600080fd5b806010819055508360118190555082601281905550816013819055508082848661223391906148b1565b61223d91906148b1565b61224791906148b1565b601a8190555050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6122e261255d565b73ffffffffffffffffffffffffffffffffffffffff16612300611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614612356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234d906145e2565b60405180910390fd5b61236761236230611948565b613463565b565b601f6020528060005260406000206000915054906101000a900460ff1681565b61239161255d565b73ffffffffffffffffffffffffffffffffffffffff166123af611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614612405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fc906145e2565b60405180910390fd5b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61246861255d565b73ffffffffffffffffffffffffffffffffffffffff16612486611ca6565b73ffffffffffffffffffffffffffffffffffffffff16146124dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d3906145e2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361254b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254290614bce565b60405180910390fd5b61255481613b39565b50565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cb90614c60565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263a90614cf2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161272191906140a3565b60405180910390a3505050565b600061273a8484612253565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146127b457818110156127a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279d90614d5e565b60405180910390fd5b6127b38484848403612565565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282090614df0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288f90614e82565b60405180910390fd5b601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291c90614eee565b60405180910390fd5b601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156129b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a990614f5a565b60405180910390fd5b600081036129cb576129c683836000613bff565b61345e565b6129d3611ca6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a415750612a11611ca6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a7a5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ab4575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612acd5750600760149054906101000a900460ff16155b15612eb057600f60019054906101000a900460ff16612bc757601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b875750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbd90614fec565b60405180910390fd5b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c6a5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d1157600c54811115612cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cab906150a4565b60405180910390fd5b600e54612cc083611948565b82612ccb91906148b1565b1115612d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0390615110565b60405180910390fd5b612eaf565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612db45750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e0357600d54811115612dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df5906151c8565b60405180910390fd5b612eae565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ead57600e54612e6083611948565b82612e6b91906148b1565b1115612eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea390615110565b60405180910390fd5b5b5b5b5b6000600b54612ebe30611948565b10159050808015612edc5750600760149054906101000a900460ff16155b8015612f325750601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f885750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612fde5750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613022576001600760146101000a81548160ff021916908315150217905550613006611832565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050600f60009054906101000a900460ff168061309b5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806130ef5750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061319a5750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131995750601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b156131a457600090505b6000811561344f576000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361325c57601960019054906101000a900460ff16613252576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324990615234565b60405180910390fd5b6018549050613307565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff160361330657601960009054906101000a900460ff16613300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f7906152a0565b60405180910390fd5b60175490505b5b61332d606461331f8388613e7e90919063ffffffff16565b613e9490919063ffffffff16565b9150613358601a5461334a60125485613e7e90919063ffffffff16565b613e9490919063ffffffff16565b6015600082825461336991906148b1565b92505081905550613399601a5461338b60115485613e7e90919063ffffffff16565b613e9490919063ffffffff16565b601460008282546133aa91906148b1565b9250508190555060006133dc601a546133ce60135486613e7e90919063ffffffff16565b613e9490919063ffffffff16565b90506133e83082613eaa565b613411601a5461340360105486613e7e90919063ffffffff16565b613e9490919063ffffffff16565b6016600082825461342291906148b1565b92505081905550600083111561343e5761343d883085613bff565b5b828661344a91906152c0565b955050505b61345a868686613bff565b5050505b505050565b600081146136ac576000600267ffffffffffffffff811115613488576134876152f4565b5b6040519080825280602002602001820160405280156134b65781602001602082028036833780820191505090505b50905030816000815181106134ce576134cd615323565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613575573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061359991906148fa565b816001815181106135ad576135ac615323565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061361430600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612565565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613678959493929190615410565b600060405180830381600087803b15801561369257600080fd5b505af11580156136a6573d6000803e3d6000fd5b50505050505b50565b6136dc30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612565565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161376596959493929190614995565b60606040518083038185885af1158015613783573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906137a89190614a0b565b5050505050565b60008114613b36576000600267ffffffffffffffff8111156137d4576137d36152f4565b5b6040519080825280602002602001820160405280156138025781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613872573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061389691906148fa565b816000815181106138aa576138a9615323565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061391b5761391a615323565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008430426040518663ffffffff1660e01b81526004016139b8949392919061546a565b6000604051808303818588803b1580156139d157600080fd5b505af11580156139e5573d6000803e3d6000fd5b50505050506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613a47919061435d565b602060405180830381865afa158015613a64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a8891906154b6565b9050600061dead9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82846040518363ffffffff1660e01b8152600401613aee9291906154e3565b6020604051808303816000875af1158015613b0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b319190615521565b505050505b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c659061559a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cd490614e82565b60405180910390fd5b613ce8838383614080565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d659061562c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613e0191906148b1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613e6591906140a3565b60405180910390a3613e78848484614085565b50505050565b60008183613e8c9190614691565b905092915050565b60008183613ea29190614702565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f10906156be565b60405180910390fd5b613f2582600083614080565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fa290615750565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461400291906152c0565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161406791906140a3565b60405180910390a361407b83600084614085565b505050565b505050565b505050565b6000819050919050565b61409d8161408a565b82525050565b60006020820190506140b86000830184614094565b92915050565b600080fd5b60008115159050919050565b6140d8816140c3565b81146140e357600080fd5b50565b6000813590506140f5816140cf565b92915050565b60008060408385031215614112576141116140be565b5b6000614120858286016140e6565b9250506020614131858286016140e6565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561417557808201518184015260208101905061415a565b60008484015250505050565b6000601f19601f8301169050919050565b600061419d8261413b565b6141a78185614146565b93506141b7818560208601614157565b6141c081614181565b840191505092915050565b600060208201905081810360008301526141e58184614192565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614218826141ed565b9050919050565b6142288161420d565b811461423357600080fd5b50565b6000813590506142458161421f565b92915050565b6142548161408a565b811461425f57600080fd5b50565b6000813590506142718161424b565b92915050565b6000806040838503121561428e5761428d6140be565b5b600061429c85828601614236565b92505060206142ad85828601614262565b9150509250929050565b6142c0816140c3565b82525050565b60006020820190506142db60008301846142b7565b92915050565b600080604083850312156142f8576142f76140be565b5b600061430685828601614236565b925050602061431785828601614236565b9150509250929050565b600060208284031215614337576143366140be565b5b600061434584828501614236565b91505092915050565b6143578161420d565b82525050565b6000602082019050614372600083018461434e565b92915050565b600080600060608486031215614391576143906140be565b5b600061439f86828701614236565b93505060206143b086828701614236565b92505060406143c186828701614262565b9150509250925092565b6000602082840312156143e1576143e06140be565b5b60006143ef84828501614262565b91505092915050565b600060ff82169050919050565b61440e816143f8565b82525050565b60006020820190506144296000830184614405565b92915050565b600080600060608486031215614448576144476140be565b5b600061445686828701614262565b935050602061446786828701614262565b925050604061447886828701614262565b9150509250925092565b60008060408385031215614499576144986140be565b5b60006144a785828601614262565b92505060206144b885828601614262565b9150509250929050565b6000602082840312156144d8576144d76140be565b5b60006144e6848285016140e6565b91505092915050565b60008060408385031215614506576145056140be565b5b600061451485828601614236565b9250506020614525858286016140e6565b9150509250929050565b60008060008060808587031215614549576145486140be565b5b600061455787828801614262565b945050602061456887828801614262565b935050604061457987828801614262565b925050606061458a87828801614262565b91505092959194509250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145cc602083614146565b91506145d782614596565b602082019050919050565b600060208201905081810360008301526145fb816145bf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061464957607f821691505b60208210810361465c5761465b614602565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061469c8261408a565b91506146a78361408a565b92508282026146b58161408a565b915082820484148315176146cc576146cb614662565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061470d8261408a565b91506147188361408a565b925082614728576147276146d3565b5b828204905092915050565b60008160011c9050919050565b6000808291508390505b600185111561478a5780860481111561476657614765614662565b5b60018516156147755780820291505b808102905061478385614733565b945061474a565b94509492505050565b6000826147a3576001905061485f565b816147b1576000905061485f565b81600181146147c757600281146147d157614800565b600191505061485f565b60ff8411156147e3576147e2614662565b5b8360020a9150848211156147fa576147f9614662565b5b5061485f565b5060208310610133831016604e8410600b84101617156148355782820a9050838111156148305761482f614662565b5b61485f565b6148428484846001614740565b9250905081840481111561485957614858614662565b5b81810290505b9392505050565b60006148718261408a565b915061487c836143f8565b92506148a97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614793565b905092915050565b60006148bc8261408a565b91506148c78361408a565b92508282019050808211156148df576148de614662565b5b92915050565b6000815190506148f48161421f565b92915050565b6000602082840312156149105761490f6140be565b5b600061491e848285016148e5565b91505092915050565b600060408201905061493c600083018561434e565b614949602083018461434e565b9392505050565b6000819050919050565b6000819050919050565b600061497f61497a61497584614950565b61495a565b61408a565b9050919050565b61498f81614964565b82525050565b600060c0820190506149aa600083018961434e565b6149b76020830188614094565b6149c46040830187614986565b6149d16060830186614986565b6149de608083018561434e565b6149eb60a0830184614094565b979650505050505050565b600081519050614a058161424b565b92915050565b600080600060608486031215614a2457614a236140be565b5b6000614a32868287016149f6565b9350506020614a43868287016149f6565b9250506040614a54868287016149f6565b9150509250925092565b7f546f6f206d756368206665650000000000000000000000000000000000000000600082015250565b6000614a94600c83614146565b9150614a9f82614a5e565b602082019050919050565b60006020820190508181036000830152614ac381614a87565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614b26602583614146565b9150614b3182614aca565b604082019050919050565b60006020820190508181036000830152614b5581614b19565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614bb8602683614146565b9150614bc382614b5c565b604082019050919050565b60006020820190508181036000830152614be781614bab565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c4a602483614146565b9150614c5582614bee565b604082019050919050565b60006020820190508181036000830152614c7981614c3d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614cdc602283614146565b9150614ce782614c80565b604082019050919050565b60006020820190508181036000830152614d0b81614ccf565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614d48601d83614146565b9150614d5382614d12565b602082019050919050565b60006020820190508181036000830152614d7781614d3b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614dda602583614146565b9150614de582614d7e565b604082019050919050565b60006020820190508181036000830152614e0981614dcd565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e6c602383614146565b9150614e7782614e10565b604082019050919050565b60006020820190508181036000830152614e9b81614e5f565b9050919050565b7f53656e64657220426c61636b6c69737465640000000000000000000000000000600082015250565b6000614ed8601283614146565b9150614ee382614ea2565b602082019050919050565b60006020820190508181036000830152614f0781614ecb565b9050919050565b7f526563656976657220426c61636b6c6973746564000000000000000000000000600082015250565b6000614f44601483614146565b9150614f4f82614f0e565b602082019050919050565b60006020820190508181036000830152614f7381614f37565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fd6602283614146565b9150614fe182614f7a565b604082019050919050565b6000602082019050818103600083015261500581614fc9565b9050919050565b7f5f7472616e736665723a3a20427579207472616e7366657220616d6f756e742060008201527f6578636565647320746865206d61785472616e73616374696f6e416d6f756e7460208201527f2e00000000000000000000000000000000000000000000000000000000000000604082015250565b600061508e604183614146565b91506150998261500c565b606082019050919050565b600060208201905081810360008301526150bd81615081565b9050919050565b7f5f7472616e736665723a3a204d61782077616c6c657420657863656564656400600082015250565b60006150fa601f83614146565b9150615105826150c4565b602082019050919050565b60006020820190508181036000830152615129816150ed565b9050919050565b7f5f7472616e736665723a3a2053656c6c207472616e7366657220616d6f756e7460008201527f206578636565647320746865206d61785472616e73616374696f6e416d6f756e60208201527f742e000000000000000000000000000000000000000000000000000000000000604082015250565b60006151b2604283614146565b91506151bd82615130565b606082019050919050565b600060208201905081810360008301526151e1816151a5565b9050919050565b7f53656c6c2073746174757320697320636c6f7365640000000000000000000000600082015250565b600061521e601583614146565b9150615229826151e8565b602082019050919050565b6000602082019050818103600083015261524d81615211565b9050919050565b7f4275792073746174757320697320636c6f736564000000000000000000000000600082015250565b600061528a601483614146565b915061529582615254565b602082019050919050565b600060208201905081810360008301526152b98161527d565b9050919050565b60006152cb8261408a565b91506152d68361408a565b92508282039050818111156152ee576152ed614662565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6153878161420d565b82525050565b6000615399838361537e565b60208301905092915050565b6000602082019050919050565b60006153bd82615352565b6153c7818561535d565b93506153d28361536e565b8060005b838110156154035781516153ea888261538d565b97506153f5836153a5565b9250506001810190506153d6565b5085935050505092915050565b600060a0820190506154256000830188614094565b6154326020830187614986565b818103604083015261544481866153b2565b9050615453606083018561434e565b6154606080830184614094565b9695505050505050565b600060808201905061547f6000830187614986565b818103602083015261549181866153b2565b90506154a0604083018561434e565b6154ad6060830184614094565b95945050505050565b6000602082840312156154cc576154cb6140be565b5b60006154da848285016149f6565b91505092915050565b60006040820190506154f8600083018561434e565b6155056020830184614094565b9392505050565b60008151905061551b816140cf565b92915050565b600060208284031215615537576155366140be565b5b60006155458482850161550c565b91505092915050565b7f45524332303a20612066726f6d20746865207a65726f20616464726573730000600082015250565b6000615584601e83614146565b915061558f8261554e565b602082019050919050565b600060208201905081810360008301526155b381615577565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615616602683614146565b9150615621826155ba565b604082019050919050565b6000602082019050818103600083015261564581615609565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006156a8602183614146565b91506156b38261564c565b604082019050919050565b600060208201905081810360008301526156d78161569b565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061573a602283614146565b9150615745826156de565b604082019050919050565b600060208201905081810360008301526157698161572d565b905091905056fea264697066735822122014cb93564055168d1b1e710b3cf2cf77cd9e107ccbf9585894e216ab889223e164736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c806358a3e5e411610175578063a457c2d7116100dc578063c6616ba111610095578063e47d60601161006f578063e47d606014610a5d578063e4997dc514610a9a578063f2fde38b14610ac3578063f8b45b0514610aec576102b9565b8063c6616ba1146109e0578063dd62ed3e14610a09578063df778d2614610a46576102b9565b8063a457c2d7146108c0578063a9059cbb146108fd578063aecf8a6d1461093a578063b1d0b72514610963578063bb5e048a1461098e578063c0246668146109b7576102b9565b8063740bf4971161012e578063740bf497146107ea578063751039fc146108135780638a8c523c1461082a5780638da5cb5b1461084157806393b1c69c1461086c57806395d89b4114610895576102b9565b806358a3e5e41461070057806361730c101461072957806365cffb1e146107545780636ac5eeee1461077f57806370a0823114610796578063715018a6146107d3576102b9565b8063277a22051161021957806339509351116101d257806339509351146105ee578063399e4bfb1461062b57806340b2f5b51461065657806347062402146106815780634fbee193146106ac578063572eeb28146106e9576102b9565b8063277a2205146104f25780632b14ca561461051b5780632e1888b814610546578063313ce5671461056f5780633415650e1461059a57806336a0f8a5146105c5576102b9565b806311704f521161026b57806311704f52146103cc57806313114a9d146103f7578063163a37ba1461042257806318160ddd1461045f578063224c71a01461048a57806323b872dd146104b5576102b9565b806302bf2a5c146102be578063034c4897146102e957806306fdde0314610312578063095ea7b31461033d5780630d7ec8251461037a5780630ecb93c0146103a3576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b17565b6040516102e091906140a3565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b91906140fb565b610b1d565b005b34801561031e57600080fd5b50610327610bd1565b60405161033491906141cb565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f9190614277565b610c63565b60405161037191906142c6565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c91906142e1565b610c86565b005b3480156103af57600080fd5b506103ca60048036038101906103c59190614321565b610d88565b005b3480156103d857600080fd5b506103e1610e5f565b6040516103ee91906142c6565b60405180910390f35b34801561040357600080fd5b5061040c610e72565b60405161041991906140a3565b60405180910390f35b34801561042e57600080fd5b5061044960048036038101906104449190614321565b610e78565b60405161045691906142c6565b60405180910390f35b34801561046b57600080fd5b50610474610ece565b60405161048191906140a3565b60405180910390f35b34801561049657600080fd5b5061049f610ed8565b6040516104ac919061435d565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d79190614378565b610efe565b6040516104e991906142c6565b60405180910390f35b3480156104fe57600080fd5b50610519600480360381019061051491906143cb565b610f2d565b005b34801561052757600080fd5b50610530610fd3565b60405161053d91906140a3565b60405180910390f35b34801561055257600080fd5b5061056d60048036038101906105689190614277565b610fd9565b005b34801561057b57600080fd5b506105846110a0565b6040516105919190614414565b60405180910390f35b3480156105a657600080fd5b506105af6110a9565b6040516105bc91906142c6565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e7919061442f565b6110bc565b005b3480156105fa57600080fd5b5061061560048036038101906106109190614277565b6111ac565b60405161062291906142c6565b60405180910390f35b34801561063757600080fd5b50610640611256565b60405161064d91906140a3565b60405180910390f35b34801561066257600080fd5b5061066b61125c565b604051610678919061435d565b60405180910390f35b34801561068d57600080fd5b50610696611282565b6040516106a391906140a3565b60405180910390f35b3480156106b857600080fd5b506106d360048036038101906106ce9190614321565b611288565b6040516106e091906142c6565b60405180910390f35b3480156106f557600080fd5b506106fe6112de565b005b34801561070c57600080fd5b5061072760048036038101906107229190614321565b611739565b005b34801561073557600080fd5b5061073e6117f9565b60405161074b919061435d565b60405180910390f35b34801561076057600080fd5b5061076961181f565b60405161077691906142c6565b60405180910390f35b34801561078b57600080fd5b50610794611832565b005b3480156107a257600080fd5b506107bd60048036038101906107b89190614321565b611948565b6040516107ca91906140a3565b60405180910390f35b3480156107df57600080fd5b506107e8611990565b005b3480156107f657600080fd5b50610811600480360381019061080c91906142e1565b611a18565b005b34801561081f57600080fd5b50610828611b1a565b005b34801561083657600080fd5b5061083f611c0d565b005b34801561084d57600080fd5b50610856611ca6565b604051610863919061435d565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e9190614482565b611cd0565b005b3480156108a157600080fd5b506108aa611daf565b6040516108b791906141cb565b60405180910390f35b3480156108cc57600080fd5b506108e760048036038101906108e29190614277565b611e41565b6040516108f491906142c6565b60405180910390f35b34801561090957600080fd5b50610924600480360381019061091f9190614277565b611f2b565b60405161093191906142c6565b60405180910390f35b34801561094657600080fd5b50610961600480360381019061095c9190614277565b611f4e565b005b34801561096f57600080fd5b50610978611fd9565b60405161098591906142c6565b60405180910390f35b34801561099a57600080fd5b506109b560048036038101906109b091906144c2565b611fec565b005b3480156109c357600080fd5b506109de60048036038101906109d991906144ef565b612085565b005b3480156109ec57600080fd5b50610a076004803603810190610a02919061452f565b61215c565b005b348015610a1557600080fd5b50610a306004803603810190610a2b91906142e1565b612253565b604051610a3d91906140a3565b60405180910390f35b348015610a5257600080fd5b50610a5b6122da565b005b348015610a6957600080fd5b50610a846004803603810190610a7f9190614321565b612369565b604051610a9191906142c6565b60405180910390f35b348015610aa657600080fd5b50610ac16004803603810190610abc9190614321565b612389565b005b348015610acf57600080fd5b50610aea6004803603810190610ae59190614321565b612460565b005b348015610af857600080fd5b50610b01612557565b604051610b0e91906140a3565b60405180910390f35b600c5481565b610b2561255d565b73ffffffffffffffffffffffffffffffffffffffff16610b43611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614610b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b90906145e2565b60405180910390fd5b81601960006101000a81548160ff02191690831515021790555080601960016101000a81548160ff0219169083151502179055505050565b606060038054610be090614631565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0c90614631565b8015610c595780601f10610c2e57610100808354040283529160200191610c59565b820191906000526020600020905b815481529060010190602001808311610c3c57829003601f168201915b5050505050905090565b600080610c6e61255d565b9050610c7b818585612565565b600191505092915050565b610c8e61255d565b73ffffffffffffffffffffffffffffffffffffffff16610cac611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614610d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf9906145e2565b60405180910390fd5b81600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610d9061255d565b73ffffffffffffffffffffffffffffffffffffffff16610dae611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614610e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfb906145e2565b60405180910390fd5b6001601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600f60019054906101000a900460ff1681565b601a5481565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600254905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610f0961255d565b9050610f1685828561272e565b610f218585856127ba565b60019150509392505050565b610f3561255d565b73ffffffffffffffffffffffffffffffffffffffff16610f53611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614610fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa0906145e2565b60405180910390fd5b620f424081610fb6610ece565b610fc09190614691565b610fca9190614702565b600b8190555050565b60185481565b610fe161255d565b73ffffffffffffffffffffffffffffffffffffffff16610fff611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c906145e2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561109b573d6000803e3d6000fd5b505050565b60006012905090565b601960009054906101000a900460ff1681565b6110c461255d565b73ffffffffffffffffffffffffffffffffffffffff166110e2611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614611138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112f906145e2565b60405180910390fd5b6111406110a0565b600a61114c9190614866565b836111579190614691565b600c819055506111656110a0565b600a6111719190614866565b8261117c9190614691565b600d8190555061118a6110a0565b600a6111969190614866565b816111a19190614691565b600e81905550505050565b6000806111b761255d565b905061124b818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461124691906148b1565b612565565b600191505092915050565b600d5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6112e661255d565b73ffffffffffffffffffffffffffffffffffffffff16611304611ca6565b73ffffffffffffffffffffffffffffffffffffffff161461135a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611351906145e2565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113eb91906148fa565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611474573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149891906148fa565b6040518363ffffffff1660e01b81526004016114b5929190614927565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906148fa565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601c6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601d6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061166030600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661165b610ece565b612565565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306116a930611948565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016116f196959493929190614995565b60606040518083038185885af115801561170f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117349190614a0b565b505050565b61174161255d565b73ffffffffffffffffffffffffffffffffffffffff1661175f611ca6565b73ffffffffffffffffffffffffffffffffffffffff16146117b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ac906145e2565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60009054906101000a900460ff1681565b600061183d30611948565b90506000810361184d5750611946565b611858601454613463565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156118c0573d6000803e3d6000fd5b50600060026015546118d29190614702565b90506118dd81613463565b600047905060006118ed30611948565b90506000821180156118ff5750600081115b1561190f5761190e81836136af565b5b61191a601654613463565b6000479050611928816137af565b60006014819055506000601581905550600060168190555050505050505b565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61199861255d565b73ffffffffffffffffffffffffffffffffffffffff166119b6611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614611a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a03906145e2565b60405180910390fd5b611a166000613b39565b565b611a2061255d565b73ffffffffffffffffffffffffffffffffffffffff16611a3e611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614611a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8b906145e2565b60405180910390fd5b81600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b611b2261255d565b73ffffffffffffffffffffffffffffffffffffffff16611b40611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614611b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8d906145e2565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600c819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600d819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600e81905550565b611c1561255d565b73ffffffffffffffffffffffffffffffffffffffff16611c33611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c80906145e2565b60405180910390fd5b6001600f60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611cd861255d565b73ffffffffffffffffffffffffffffffffffffffff16611cf6611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d43906145e2565b60405180910390fd5b600a8211158015611d5e575060648111155b611d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9490614aaa565b60405180910390fd5b81601781905550806018819055505050565b606060048054611dbe90614631565b80601f0160208091040260200160405190810160405280929190818152602001828054611dea90614631565b8015611e375780601f10611e0c57610100808354040283529160200191611e37565b820191906000526020600020905b815481529060010190602001808311611e1a57829003601f168201915b5050505050905090565b600080611e4c61255d565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0990614b3c565b60405180910390fd5b611f1f8286868403612565565b60019250505092915050565b600080611f3661255d565b9050611f438185856127ba565b600191505092915050565b611f5661255d565b73ffffffffffffffffffffffffffffffffffffffff16611f74611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614611fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc1906145e2565b60405180910390fd5b611fd53083836127ba565b5050565b601960019054906101000a900460ff1681565b611ff461255d565b73ffffffffffffffffffffffffffffffffffffffff16612012611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614612068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205f906145e2565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b61208d61255d565b73ffffffffffffffffffffffffffffffffffffffff166120ab611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614612101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f8906145e2565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61216461255d565b73ffffffffffffffffffffffffffffffffffffffff16612182611ca6565b73ffffffffffffffffffffffffffffffffffffffff16146121d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cf906145e2565b60405180910390fd5b600a8284866121e791906148b1565b6121f191906148b1565b11156121fc57600080fd5b6005811061220957600080fd5b806010819055508360118190555082601281905550816013819055508082848661223391906148b1565b61223d91906148b1565b61224791906148b1565b601a8190555050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6122e261255d565b73ffffffffffffffffffffffffffffffffffffffff16612300611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614612356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234d906145e2565b60405180910390fd5b61236761236230611948565b613463565b565b601f6020528060005260406000206000915054906101000a900460ff1681565b61239161255d565b73ffffffffffffffffffffffffffffffffffffffff166123af611ca6565b73ffffffffffffffffffffffffffffffffffffffff1614612405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fc906145e2565b60405180910390fd5b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61246861255d565b73ffffffffffffffffffffffffffffffffffffffff16612486611ca6565b73ffffffffffffffffffffffffffffffffffffffff16146124dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d3906145e2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361254b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254290614bce565b60405180910390fd5b61255481613b39565b50565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cb90614c60565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263a90614cf2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161272191906140a3565b60405180910390a3505050565b600061273a8484612253565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146127b457818110156127a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279d90614d5e565b60405180910390fd5b6127b38484848403612565565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282090614df0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288f90614e82565b60405180910390fd5b601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291c90614eee565b60405180910390fd5b601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156129b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a990614f5a565b60405180910390fd5b600081036129cb576129c683836000613bff565b61345e565b6129d3611ca6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a415750612a11611ca6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a7a5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ab4575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612acd5750600760149054906101000a900460ff16155b15612eb057600f60019054906101000a900460ff16612bc757601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b875750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbd90614fec565b60405180910390fd5b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c6a5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d1157600c54811115612cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cab906150a4565b60405180910390fd5b600e54612cc083611948565b82612ccb91906148b1565b1115612d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0390615110565b60405180910390fd5b612eaf565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612db45750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e0357600d54811115612dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df5906151c8565b60405180910390fd5b612eae565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ead57600e54612e6083611948565b82612e6b91906148b1565b1115612eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea390615110565b60405180910390fd5b5b5b5b5b6000600b54612ebe30611948565b10159050808015612edc5750600760149054906101000a900460ff16155b8015612f325750601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f885750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612fde5750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613022576001600760146101000a81548160ff021916908315150217905550613006611832565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050600f60009054906101000a900460ff168061309b5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806130ef5750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061319a5750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131995750601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b156131a457600090505b6000811561344f576000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361325c57601960019054906101000a900460ff16613252576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324990615234565b60405180910390fd5b6018549050613307565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff160361330657601960009054906101000a900460ff16613300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f7906152a0565b60405180910390fd5b60175490505b5b61332d606461331f8388613e7e90919063ffffffff16565b613e9490919063ffffffff16565b9150613358601a5461334a60125485613e7e90919063ffffffff16565b613e9490919063ffffffff16565b6015600082825461336991906148b1565b92505081905550613399601a5461338b60115485613e7e90919063ffffffff16565b613e9490919063ffffffff16565b601460008282546133aa91906148b1565b9250508190555060006133dc601a546133ce60135486613e7e90919063ffffffff16565b613e9490919063ffffffff16565b90506133e83082613eaa565b613411601a5461340360105486613e7e90919063ffffffff16565b613e9490919063ffffffff16565b6016600082825461342291906148b1565b92505081905550600083111561343e5761343d883085613bff565b5b828661344a91906152c0565b955050505b61345a868686613bff565b5050505b505050565b600081146136ac576000600267ffffffffffffffff811115613488576134876152f4565b5b6040519080825280602002602001820160405280156134b65781602001602082028036833780820191505090505b50905030816000815181106134ce576134cd615323565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613575573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061359991906148fa565b816001815181106135ad576135ac615323565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061361430600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612565565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613678959493929190615410565b600060405180830381600087803b15801561369257600080fd5b505af11580156136a6573d6000803e3d6000fd5b50505050505b50565b6136dc30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612565565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161376596959493929190614995565b60606040518083038185885af1158015613783573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906137a89190614a0b565b5050505050565b60008114613b36576000600267ffffffffffffffff8111156137d4576137d36152f4565b5b6040519080825280602002602001820160405280156138025781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613872573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061389691906148fa565b816000815181106138aa576138a9615323565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061391b5761391a615323565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008430426040518663ffffffff1660e01b81526004016139b8949392919061546a565b6000604051808303818588803b1580156139d157600080fd5b505af11580156139e5573d6000803e3d6000fd5b50505050506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613a47919061435d565b602060405180830381865afa158015613a64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a8891906154b6565b9050600061dead9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82846040518363ffffffff1660e01b8152600401613aee9291906154e3565b6020604051808303816000875af1158015613b0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b319190615521565b505050505b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c659061559a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cd490614e82565b60405180910390fd5b613ce8838383614080565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d659061562c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613e0191906148b1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613e6591906140a3565b60405180910390a3613e78848484614085565b50505050565b60008183613e8c9190614691565b905092915050565b60008183613ea29190614702565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f10906156be565b60405180910390fd5b613f2582600083614080565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fa290615750565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461400291906152c0565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161406791906140a3565b60405180910390a361407b83600084614085565b505050565b505050565b505050565b6000819050919050565b61409d8161408a565b82525050565b60006020820190506140b86000830184614094565b92915050565b600080fd5b60008115159050919050565b6140d8816140c3565b81146140e357600080fd5b50565b6000813590506140f5816140cf565b92915050565b60008060408385031215614112576141116140be565b5b6000614120858286016140e6565b9250506020614131858286016140e6565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561417557808201518184015260208101905061415a565b60008484015250505050565b6000601f19601f8301169050919050565b600061419d8261413b565b6141a78185614146565b93506141b7818560208601614157565b6141c081614181565b840191505092915050565b600060208201905081810360008301526141e58184614192565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614218826141ed565b9050919050565b6142288161420d565b811461423357600080fd5b50565b6000813590506142458161421f565b92915050565b6142548161408a565b811461425f57600080fd5b50565b6000813590506142718161424b565b92915050565b6000806040838503121561428e5761428d6140be565b5b600061429c85828601614236565b92505060206142ad85828601614262565b9150509250929050565b6142c0816140c3565b82525050565b60006020820190506142db60008301846142b7565b92915050565b600080604083850312156142f8576142f76140be565b5b600061430685828601614236565b925050602061431785828601614236565b9150509250929050565b600060208284031215614337576143366140be565b5b600061434584828501614236565b91505092915050565b6143578161420d565b82525050565b6000602082019050614372600083018461434e565b92915050565b600080600060608486031215614391576143906140be565b5b600061439f86828701614236565b93505060206143b086828701614236565b92505060406143c186828701614262565b9150509250925092565b6000602082840312156143e1576143e06140be565b5b60006143ef84828501614262565b91505092915050565b600060ff82169050919050565b61440e816143f8565b82525050565b60006020820190506144296000830184614405565b92915050565b600080600060608486031215614448576144476140be565b5b600061445686828701614262565b935050602061446786828701614262565b925050604061447886828701614262565b9150509250925092565b60008060408385031215614499576144986140be565b5b60006144a785828601614262565b92505060206144b885828601614262565b9150509250929050565b6000602082840312156144d8576144d76140be565b5b60006144e6848285016140e6565b91505092915050565b60008060408385031215614506576145056140be565b5b600061451485828601614236565b9250506020614525858286016140e6565b9150509250929050565b60008060008060808587031215614549576145486140be565b5b600061455787828801614262565b945050602061456887828801614262565b935050604061457987828801614262565b925050606061458a87828801614262565b91505092959194509250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145cc602083614146565b91506145d782614596565b602082019050919050565b600060208201905081810360008301526145fb816145bf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061464957607f821691505b60208210810361465c5761465b614602565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061469c8261408a565b91506146a78361408a565b92508282026146b58161408a565b915082820484148315176146cc576146cb614662565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061470d8261408a565b91506147188361408a565b925082614728576147276146d3565b5b828204905092915050565b60008160011c9050919050565b6000808291508390505b600185111561478a5780860481111561476657614765614662565b5b60018516156147755780820291505b808102905061478385614733565b945061474a565b94509492505050565b6000826147a3576001905061485f565b816147b1576000905061485f565b81600181146147c757600281146147d157614800565b600191505061485f565b60ff8411156147e3576147e2614662565b5b8360020a9150848211156147fa576147f9614662565b5b5061485f565b5060208310610133831016604e8410600b84101617156148355782820a9050838111156148305761482f614662565b5b61485f565b6148428484846001614740565b9250905081840481111561485957614858614662565b5b81810290505b9392505050565b60006148718261408a565b915061487c836143f8565b92506148a97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614793565b905092915050565b60006148bc8261408a565b91506148c78361408a565b92508282019050808211156148df576148de614662565b5b92915050565b6000815190506148f48161421f565b92915050565b6000602082840312156149105761490f6140be565b5b600061491e848285016148e5565b91505092915050565b600060408201905061493c600083018561434e565b614949602083018461434e565b9392505050565b6000819050919050565b6000819050919050565b600061497f61497a61497584614950565b61495a565b61408a565b9050919050565b61498f81614964565b82525050565b600060c0820190506149aa600083018961434e565b6149b76020830188614094565b6149c46040830187614986565b6149d16060830186614986565b6149de608083018561434e565b6149eb60a0830184614094565b979650505050505050565b600081519050614a058161424b565b92915050565b600080600060608486031215614a2457614a236140be565b5b6000614a32868287016149f6565b9350506020614a43868287016149f6565b9250506040614a54868287016149f6565b9150509250925092565b7f546f6f206d756368206665650000000000000000000000000000000000000000600082015250565b6000614a94600c83614146565b9150614a9f82614a5e565b602082019050919050565b60006020820190508181036000830152614ac381614a87565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614b26602583614146565b9150614b3182614aca565b604082019050919050565b60006020820190508181036000830152614b5581614b19565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614bb8602683614146565b9150614bc382614b5c565b604082019050919050565b60006020820190508181036000830152614be781614bab565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c4a602483614146565b9150614c5582614bee565b604082019050919050565b60006020820190508181036000830152614c7981614c3d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614cdc602283614146565b9150614ce782614c80565b604082019050919050565b60006020820190508181036000830152614d0b81614ccf565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614d48601d83614146565b9150614d5382614d12565b602082019050919050565b60006020820190508181036000830152614d7781614d3b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614dda602583614146565b9150614de582614d7e565b604082019050919050565b60006020820190508181036000830152614e0981614dcd565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e6c602383614146565b9150614e7782614e10565b604082019050919050565b60006020820190508181036000830152614e9b81614e5f565b9050919050565b7f53656e64657220426c61636b6c69737465640000000000000000000000000000600082015250565b6000614ed8601283614146565b9150614ee382614ea2565b602082019050919050565b60006020820190508181036000830152614f0781614ecb565b9050919050565b7f526563656976657220426c61636b6c6973746564000000000000000000000000600082015250565b6000614f44601483614146565b9150614f4f82614f0e565b602082019050919050565b60006020820190508181036000830152614f7381614f37565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fd6602283614146565b9150614fe182614f7a565b604082019050919050565b6000602082019050818103600083015261500581614fc9565b9050919050565b7f5f7472616e736665723a3a20427579207472616e7366657220616d6f756e742060008201527f6578636565647320746865206d61785472616e73616374696f6e416d6f756e7460208201527f2e00000000000000000000000000000000000000000000000000000000000000604082015250565b600061508e604183614146565b91506150998261500c565b606082019050919050565b600060208201905081810360008301526150bd81615081565b9050919050565b7f5f7472616e736665723a3a204d61782077616c6c657420657863656564656400600082015250565b60006150fa601f83614146565b9150615105826150c4565b602082019050919050565b60006020820190508181036000830152615129816150ed565b9050919050565b7f5f7472616e736665723a3a2053656c6c207472616e7366657220616d6f756e7460008201527f206578636565647320746865206d61785472616e73616374696f6e416d6f756e60208201527f742e000000000000000000000000000000000000000000000000000000000000604082015250565b60006151b2604283614146565b91506151bd82615130565b606082019050919050565b600060208201905081810360008301526151e1816151a5565b9050919050565b7f53656c6c2073746174757320697320636c6f7365640000000000000000000000600082015250565b600061521e601583614146565b9150615229826151e8565b602082019050919050565b6000602082019050818103600083015261524d81615211565b9050919050565b7f4275792073746174757320697320636c6f736564000000000000000000000000600082015250565b600061528a601483614146565b915061529582615254565b602082019050919050565b600060208201905081810360008301526152b98161527d565b9050919050565b60006152cb8261408a565b91506152d68361408a565b92508282039050818111156152ee576152ed614662565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6153878161420d565b82525050565b6000615399838361537e565b60208301905092915050565b6000602082019050919050565b60006153bd82615352565b6153c7818561535d565b93506153d28361536e565b8060005b838110156154035781516153ea888261538d565b97506153f5836153a5565b9250506001810190506153d6565b5085935050505092915050565b600060a0820190506154256000830188614094565b6154326020830187614986565b818103604083015261544481866153b2565b9050615453606083018561434e565b6154606080830184614094565b9695505050505050565b600060808201905061547f6000830187614986565b818103602083015261549181866153b2565b90506154a0604083018561434e565b6154ad6060830184614094565b95945050505050565b6000602082840312156154cc576154cb6140be565b5b60006154da848285016149f6565b91505092915050565b60006040820190506154f8600083018561434e565b6155056020830184614094565b9392505050565b60008151905061551b816140cf565b92915050565b600060208284031215615537576155366140be565b5b60006155458482850161550c565b91505092915050565b7f45524332303a20612066726f6d20746865207a65726f20616464726573730000600082015250565b6000615584601e83614146565b915061558f8261554e565b602082019050919050565b600060208201905081810360008301526155b381615577565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615616602683614146565b9150615621826155ba565b604082019050919050565b6000602082019050818103600083015261564581615609565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006156a8602183614146565b91506156b38261564c565b604082019050919050565b600060208201905081810360008301526156d78161569b565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061573a602283614146565b9150615745826156de565b604082019050919050565b600060208201905081810360008301526157698161572d565b905091905056fea264697066735822122014cb93564055168d1b1e710b3cf2cf77cd9e107ccbf9585894e216ab889223e164736f6c63430008120033

Deployed Bytecode Sourcemap

20444:13825:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20800:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26575:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1757:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2826:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26948:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24577:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20972:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21411:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24821:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2078:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20701:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3076:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23390:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21319:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33865:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1977:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21352:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26038:329;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3379:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20852:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20634:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21287:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27226:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23893:676;;;;;;;;;;;;;:::i;:::-;;23624:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20665:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20933:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32691:867;;;;;;;;;;;;;:::i;:::-;;2194:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17047:103;;;;;;;;;;;;;:::i;:::-;;23723:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26375:192;;;;;;;;;;;;;:::i;:::-;;24939:81;;;;;;;;;;;;;:::i;:::-;;16824:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25323:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1865:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3659:507;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2375:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33629:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21380:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26767:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25087:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25541:489;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2617:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34127:102;;;;;;;;;;;;;:::i;:::-;;22022:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24694:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17158:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20900:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20800:45;;;;:::o;26575:122::-;16970:12;:10;:12::i;:::-;16959:23;;:7;:5;:7::i;:::-;:23;;;16951:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26658:3:::1;26646:9;;:15;;;;;;;;;;;;;;;;;;26685:4;26672:10;;:17;;;;;;;;;;;;;;;;;;26575:122:::0;;:::o;1757:100::-;1811:13;1844:5;1837:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1757:100;:::o;2826:242::-;2945:4;2967:13;2983:12;:10;:12::i;:::-;2967:28;;3006:32;3015:5;3022:7;3031:6;3006:8;:32::i;:::-;3056:4;3049:11;;;2826:242;;;;:::o;26948:183::-;16970:12;:10;:12::i;:::-;16959:23;;:7;:5;:7::i;:::-;:23;;;16951:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27070:17:::1;27053:14;;:34;;;;;;;;;;;;;;;;;;27111:12;27098:10;;:25;;;;;;;;;;;;;;;;;;26948:183:::0;;:::o;24577:109::-;16970:12;:10;:12::i;:::-;16959:23;;:7;:5;:7::i;:::-;:23;;;16951:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24674:4:::1;24647:13;:24;24661:9;24647:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;24577:109:::0;:::o;20972:31::-;;;;;;;;;;;;;:::o;21411:81::-;;;;:::o;24821:110::-;24880:4;24903:13;:20;24917:5;24903:20;;;;;;;;;;;;;;;;;;;;;;;;;24896:27;;24821:110;;;:::o;2078:108::-;2139:7;2166:12;;2159:19;;2078:108;:::o;20701:25::-;;;;;;;;;;;;;:::o;3076:295::-;3207:4;3224:15;3242:12;:10;:12::i;:::-;3224:30;;3265:38;3281:4;3287:7;3296:6;3265:15;:38::i;:::-;3314:27;3324:4;3330:2;3334:6;3314:9;:27::i;:::-;3359:4;3352:11;;;3076:295;;;;;:::o;23390:157::-;16970:12;:10;:12::i;:::-;16959:23;;:7;:5;:7::i;:::-;:23;;;16951:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23499:7:::1;23487:8;23471:13;:11;:13::i;:::-;:24;;;;:::i;:::-;23470:36;;;;:::i;:::-;23461:6;:45;;;;23390:157:::0;:::o;21319:26::-;;;;:::o;33865:168::-;16970:12;:10;:12::i;:::-;16959:23;;:7;:5;:7::i;:::-;:23;;;16951:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33995:2:::1;33987:20;;:38;34008:16;33987:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;33865:168:::0;;:::o;1977:93::-;2035:5;2060:2;2053:9;;1977:93;:::o;21352:21::-;;;;;;;;;;;;;:::o;26038:329::-;16970:12;:10;:12::i;:::-;16959:23;;:7;:5;:7::i;:::-;:23;;;16951:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26228:10:::1;:8;:10::i;:::-;26224:2;:14;;;;:::i;:::-;26212:8;:27;;;;:::i;:::-;26179:30;:60;;;;26296:10;:8;:10::i;:::-;26292:2;:14;;;;:::i;:::-;26279:9;:28;;;;:::i;:::-;26250:26;:57;;;;26348:10;:8;:10::i;:::-;26344:2;:14;;;;:::i;:::-;26330:10;:29;;;;:::i;:::-;26318:9;:41;;;;26038:329:::0;;;:::o;3379:272::-;3494:4;3516:13;3532:12;:10;:12::i;:::-;3516:28;;3555:66;3564:5;3571:7;3610:10;3580:11;:18;3592:5;3580:18;;;;;;;;;;;;;;;:27;3599:7;3580:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;3555:8;:66::i;:::-;3639:4;3632:11;;;3379:272;;;;:::o;20852:41::-;;;;:::o;20634:22::-;;;;;;;;;;;;;:::o;21287:25::-;;;;:::o;27226:128::-;27294:4;27318:19;:28;27338:7;27318:28;;;;;;;;;;;;;;;;;;;;;;;;;27311:35;;27226:128;;;:::o;23893:676::-;16970:12;:10;:12::i;:::-;16959:23;;:7;:5;:7::i;:::-;:23;;;16951:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23981:15:::1;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23963:55;;;24045:4;24069:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23963:143;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23947:13;;:159;;;;;;;;;;;;;;;;;;24175:4;24117:31;:55;24157:13;;;;;;;;;;;24117:55;;;;;;;;;;;;;;;;:62;;;;;;;;;;;;;;;;;;24243:4;24190:26;:50;24225:13;;;;;;;;;;;24190:50;;;;;;;;;;;;;;;;:57;;;;;;;;;;;;;;;;;;24260:64;24277:4;24292:15;;;;;;;;;;;24310:13;:11;:13::i;:::-;24260:8;:64::i;:::-;24335:15;;;;;;;;;;;:31;;;24374:21;24419:4;24439:24;24457:4;24439:9;:24::i;:::-;24478:1;24494::::0;24510:10:::1;;;;;;;;;;;24535:15;24335:226;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;23893:676::o:0;23624:91::-;16970:12;:10;:12::i;:::-;16959:23;;:7;:5;:7::i;:::-;:23;;;16951:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23699:8:::1;23689:7;;:18;;;;;;;;;;;;;;;;;;23624:91:::0;:::o;20665:29::-;;;;;;;;;;;;;:::o;20933:32::-;;;;;;;;;;;;;:::o;32691:867::-;32729:23;32755:24;32773:4;32755:9;:24::i;:::-;32729:50;;32815:1;32796:15;:20;32792:33;;32818:7;;;32792:33;32837:36;32855:17;;32837;:36::i;:::-;32894:14;;;;;;;;;;;32886:32;;:55;32919:21;32886:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32954:23;33002:1;32980:19;;:23;;;;:::i;:::-;32954:49;;33016:34;33034:15;33016:17;:34::i;:::-;33063:23;33089:21;33063:47;;33123:24;33150;33168:4;33150:9;:24::i;:::-;33123:51;;33208:1;33190:15;:19;:43;;;;;33232:1;33213:16;:20;33190:43;33187:118;;;33245:48;33259:16;33277:15;33245:13;:48::i;:::-;33187:118;33317:36;33335:17;;33317;:36::i;:::-;33366:17;33386:21;33366:41;;33420:28;33438:9;33420:17;:28::i;:::-;33483:1;33463:17;:21;;;;33517:1;33495:19;:23;;;;33549:1;33529:17;:21;;;;32718:840;;;;;32691:867;:::o;2194:173::-;2313:7;2345:5;:14;2351:7;2345:14;;;;;;;;;;;;;;;;2338:21;;2194:173;;;:::o;17047:103::-;16970:12;:10;:12::i;:::-;16959:23;;:7;:5;:7::i;:::-;:23;;;16951:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17112:30:::1;17139:1;17112:18;:30::i;:::-;17047:103::o:0;23723:162::-;16970:12;:10;:12::i;:::-;16959:23;;:7;:5;:7::i;:::-;:23;;;16951:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23831:13:::1;23814:14;;:30;;;;;;;;;;;;;;;;;;23868:9;23855:10;;:22;;;;;;;;;;;;;;;;;;23723:162:::0;;:::o;26375:192::-;16970:12;:10;:12::i;:::-;16959:23;;:7;:5;:7::i;:::-;:23;;;16951:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26460:12:::1;26427:30;:45;;;;26512:12;26483:26;:41;;;;26547:12;26535:9;:24;;;;26375:192::o:0;24939:81::-;16970:12;:10;:12::i;:::-;16959:23;;:7;:5;:7::i;:::-;:23;;;16951:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25008:4:::1;24994:11;;:18;;;;;;;;;;;;;;;;;;24939:81::o:0;16824:87::-;16870:7;16897:6;;;;;;;;;;;16890:13;;16824:87;:::o;25323:210::-;16970:12;:10;:12::i;:::-;16959:23;;:7;:5;:7::i;:::-;:23;;;16951:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25431:2:::1;25420:7;:13;;:32;;;;;25449:3;25437:8;:15;;25420:32;25412:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25489:7;25480:6;:16;;;;25517:8;25507:7;:18;;;;25323:210:::0;;:::o;1865:104::-;1921:13;1954:7;1947:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1865:104;:::o;3659:507::-;3779:4;3801:13;3817:12;:10;:12::i;:::-;3801:28;;3840:24;3867:11;:18;3879:5;3867:18;;;;;;;;;;;;;;;:27;3886:7;3867:27;;;;;;;;;;;;;;;;3840:54;;3947:15;3927:16;:35;;3905:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;4063:60;4072:5;4079:7;4107:15;4088:16;:34;4063:8;:60::i;:::-;4154:4;4147:11;;;;3659:507;;;;:::o;2375:234::-;2490:4;2512:13;2528:12;:10;:12::i;:::-;2512:28;;2551;2561:5;2568:2;2572:6;2551:9;:28::i;:::-;2597:4;2590:11;;;2375:234;;;;:::o;33629:165::-;16970:12;:10;:12::i;:::-;16959:23;;:7;:5;:7::i;:::-;:23;;;16951:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33740:46:::1;33758:4;33765:2;33769:16;33740:9;:46::i;:::-;33629:165:::0;;:::o;21380:22::-;;;;;;;;;;;;;:::o;26767:91::-;16970:12;:10;:12::i;:::-;16959:23;;:7;:5;:7::i;:::-;:23;;;16951:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26845:5:::1;26830:12;;:20;;;;;;;;;;;;;;;;;;26767:91:::0;:::o;25087:155::-;16970:12;:10;:12::i;:::-;16959:23;;:7;:5;:7::i;:::-;:23;;;16951:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25226:8:::1;25195:19;:28;25215:7;25195:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25087:155:::0;;:::o;25541:489::-;16970:12;:10;:12::i;:::-;16959:23;;:7;:5;:7::i;:::-;:23;;;16951:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25765:2:::1;25751:10;25736:12;25723:10;:25;;;;:::i;:::-;:38;;;;:::i;:::-;:44;;25715:53;;;::::0;::::1;;25801:1;25787:11;:15;25779:24;;;::::0;::::1;;25827:11;25814:10;:24;;;;25863:10;25849:11;:24;;;;25900:12;25884:13;:28;;;;25937:10;25923:11;:24;;;;26011:11;25998:10;25983:12;25970:10;:25;;;;:::i;:::-;:38;;;;:::i;:::-;:52;;;;:::i;:::-;25958:9;:64;;;;25541:489:::0;;;;:::o;2617:201::-;2751:7;2783:11;:18;2795:5;2783:18;;;;;;;;;;;;;;;:27;2802:7;2783:27;;;;;;;;;;;;;;;;2776:34;;2617:201;;;;:::o;34127:102::-;16970:12;:10;:12::i;:::-;16959:23;;:7;:5;:7::i;:::-;:23;;;16951:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34178:43:::1;34196:24;34214:4;34196:9;:24::i;:::-;34178:17;:43::i;:::-;34127:102::o:0;22022:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;24694:119::-;16970:12;:10;:12::i;:::-;16959:23;;:7;:5;:7::i;:::-;:23;;;16951:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24800:5:::1;24770:13;:27;24784:12;24770:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;24694:119:::0;:::o;17158:238::-;16970:12;:10;:12::i;:::-;16959:23;;:7;:5;:7::i;:::-;:23;;;16951:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17281:1:::1;17261:22;;:8;:22;;::::0;17239:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17360:28;17379:8;17360:18;:28::i;:::-;17158:238:::0;:::o;20900:24::-;;;;:::o;1140:98::-;1193:7;1220:10;1213:17;;1140:98;:::o;6054:380::-;6207:1;6190:19;;:5;:19;;;6182:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6288:1;6269:21;;:7;:21;;;6261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6372:6;6342:11;:18;6354:5;6342:18;;;;;;;;;;;;;;;:27;6361:7;6342:27;;;;;;;;;;;;;;;:36;;;;6410:7;6394:32;;6403:5;6394:32;;;6419:6;6394:32;;;;;;:::i;:::-;;;;;;;;6054:380;;;:::o;6442:502::-;6577:24;6604:25;6614:5;6621:7;6604:9;:25::i;:::-;6577:52;;6664:17;6644:16;:37;6640:297;;6744:6;6724:16;:26;;6698:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;6859:51;6868:5;6875:7;6903:6;6884:16;:25;6859:8;:51::i;:::-;6640:297;6566:378;6442:502;;;:::o;27362:3808::-;27510:1;27494:18;;:4;:18;;;27486:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27587:1;27573:16;;:2;:16;;;27565:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27649:13;:19;27663:4;27649:19;;;;;;;;;;;;;;;;;;;;;;;;;27648:20;27640:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;27711:13;:17;27725:2;27711:17;;;;;;;;;;;;;;;;;;;;;;;;;27710:18;27702:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;27780:1;27770:6;:11;27766:93;;27798:28;27814:4;27820:2;27824:1;27798:15;:28::i;:::-;27841:7;;27766:93;27897:7;:5;:7::i;:::-;27889:15;;:4;:15;;;;:45;;;;;27927:7;:5;:7::i;:::-;27921:13;;:2;:13;;;;27889:45;:78;;;;;27965:1;27951:16;;:2;:16;;;;27889:78;:116;;;;;27998:6;27984:21;;:2;:21;;;;27889:116;:143;;;;;28023:9;;;;;;;;;;;28022:10;27889:143;27871:1536;;;28064:11;;;;;;;;;;;28059:195;;28124:19;:25;28144:4;28124:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28153:19;:23;28173:2;28153:23;;;;;;;;;;;;;;;;;;;;;;;;;28124:52;28094:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;28059:195;28314:26;:32;28341:4;28314:32;;;;;;;;;;;;;;;;;;;;;;;;;:89;;;;;28368:31;:35;28400:2;28368:35;;;;;;;;;;;;;;;;;;;;;;;;;28367:36;28314:89;28292:1104;;;28478:30;;28468:6;:40;;28438:179;;;;;;;;;;;;:::i;:::-;;;;;;;;;28692:9;;28675:13;28685:2;28675:9;:13::i;:::-;28666:6;:22;;;;:::i;:::-;:35;;28636:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;28292:1104;;;28857:26;:30;28884:2;28857:30;;;;;;;;;;;;;;;;;;;;;;;;;:89;;;;;28909:31;:37;28941:4;28909:37;;;;;;;;;;;;;;;;;;;;;;;;;28908:38;28857:89;28835:561;;;29021:26;;29011:6;:36;;28981:176;;;;;;;;;;;;:::i;:::-;;;;;;;;;28835:561;;;29184:31;:35;29216:2;29184:35;;;;;;;;;;;;;;;;;;;;;;;;;29179:217;;29296:9;;29279:13;29289:2;29279:9;:13::i;:::-;29270:6;:22;;;;:::i;:::-;:35;;29240:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;29179:217;28835:561;28292:1104;27871:1536;29419:13;29463:6;;29435:24;29453:4;29435:9;:24::i;:::-;:34;;29419:50;;29500:8;:35;;;;;29526:9;;;;;;;;;;;29525:10;29500:35;:85;;;;;29553:26;:32;29580:4;29553:32;;;;;;;;;;;;;;;;;;;;;;;;;29552:33;29500:85;:128;;;;;29603:19;:25;29623:4;29603:25;;;;;;;;;;;;;;;;;;;;;;;;;29602:26;29500:128;:169;;;;;29646:19;:23;29666:2;29646:23;;;;;;;;;;;;;;;;;;;;;;;;;29645:24;29500:169;29482:303;;;29708:4;29696:9;;:16;;;;;;;;;;;;;;;;;;29729:10;:8;:10::i;:::-;29768:5;29756:9;;:17;;;;;;;;;;;;;;;;;;29482:303;29797:12;29813:9;;;;;;;;;;;29812:10;29797:25;;29943:12;;;;;;;;;;;:54;;;;29972:19;:25;29992:4;29972:25;;;;;;;;;;;;;;;;;;;;;;;;;29943:54;:94;;;;30014:19;:23;30034:2;30014:23;;;;;;;;;;;;;;;;;;;;;;;;;29943:94;:198;;;;30056:26;:32;30083:4;30056:32;;;;;;;;;;;;;;;;;;;;;;;;;30055:33;:85;;;;;30110:26;:30;30137:2;30110:30;;;;;;;;;;;;;;;;;;;;;;;;;30109:31;30055:85;29943:198;29925:243;;;30163:5;30153:15;;29925:243;30181:12;30212:7;30208:909;;;30236:18;30278:13;;;;;;;;;;;30272:19;;:2;:19;;;30269:284;;30319:10;;;;;;;;;;;30311:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;30386:7;;30373:20;;30269:284;;;30425:13;;;;;;;;;;;30417:21;;:4;:21;;;30414:139;;30466:9;;;;;;;;;;;30458:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;30531:6;;30518:19;;30414:139;30269:284;30574:31;30601:3;30574:22;30585:10;30574:6;:10;;:22;;;;:::i;:::-;:26;;:31;;;;:::i;:::-;30567:38;;30645:40;30675:9;;30646:23;30655:13;;30646:4;:8;;:23;;;;:::i;:::-;30645:29;;:40;;;;:::i;:::-;30622:19;;:63;;;;;;;:::i;:::-;;;;;;;;30721:38;30749:9;;30722:21;30731:11;;30722:4;:8;;:21;;;;:::i;:::-;30721:27;;:38;;;;:::i;:::-;30700:17;;:59;;;;;;;:::i;:::-;;;;;;;;30774:25;30802:38;30830:9;;30803:21;30812:11;;30803:4;:8;;:21;;;;:::i;:::-;30802:27;;:38;;;;:::i;:::-;30774:66;;30855:39;30869:4;30876:17;30855:5;:39::i;:::-;30931:35;30956:9;;30931:20;30940:10;;30931:4;:8;;:20;;;;:::i;:::-;:24;;:35;;;;:::i;:::-;30909:17;;:58;;;;;;;:::i;:::-;;;;;;;;30995:1;30988:4;:8;30984:91;;;31017:42;31033:4;31047;31054;31017:15;:42::i;:::-;30984:91;31101:4;31091:14;;;;;:::i;:::-;;;30221:896;;30208:909;31129:33;31145:4;31151:2;31155:6;31129:15;:33::i;:::-;27475:3695;;;27362:3808;;;;:::o;31178:519::-;31264:1;31249:11;:16;31246:444;;31277:21;31315:1;31301:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31277:40;;31346:4;31328;31333:1;31328:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31372:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31362:4;31367:1;31362:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;31407:62;31424:4;31439:15;;;;;;;;;;;31457:11;31407:8;:62::i;:::-;31482:15;;;;;;;;;;;:66;;;31563:11;31589:1;31605:4;31632;31652:15;31482:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31266:424;31246:444;31178:519;:::o;32316:367::-;32399:62;32416:4;32431:15;;;;;;;;;;;32449:11;32399:8;:62::i;:::-;32474:15;;;;;;;;;;;:31;;;32513:9;32546:4;32566:11;32592:1;32608;32624:10;;;;;;;;;;;32649:15;32474:201;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32316:367;;:::o;31705:603::-;31781:1;31771:6;:11;31768:533;;31794:21;31832:1;31818:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31794:40;;31855:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31845:4;31850:1;31845:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;31898:7;;;;;;;;;;;31888:4;31893:1;31888:7;;;;;;;;:::i;:::-;;;;;;;:17;;;;;;;;;;;31918:15;;;;;;;;;;;:66;;;31992:6;32014:1;32030:4;32057;32077:15;31918:185;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32116:14;32140:7;;;;;;;;;;;32133:25;;;32167:4;32133:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32116:57;;32184:12;32199:42;32184:57;;32259:7;;;;;;;;;;;32252:24;;;32277:4;32282:6;32252:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31783:518;;;31768:533;31705:603;:::o;17404:191::-;17478:16;17497:6;;;;;;;;;;;17478:25;;17523:8;17514:6;;:17;;;;;;;;;;;;;;;;;;17578:8;17547:40;;17568:8;17547:40;;;;;;;;;;;;17467:128;17404:191;:::o;4174:689::-;4321:1;4305:18;;:4;:18;;;4297:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;4391:1;4377:16;;:2;:16;;;4369:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;4446:38;4467:4;4473:2;4477:6;4446:20;:38::i;:::-;4497:19;4519:5;:11;4525:4;4519:11;;;;;;;;;;;;;;;;4497:33;;4578:6;4563:11;:21;;4541:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;4714:6;4700:11;:20;4686:5;:11;4692:4;4686:11;;;;;;;;;;;;;;;:34;;;;4755:6;4742:5;:9;4748:2;4742:9;;;;;;;;;;;;;;;;:19;;;;;;;:::i;:::-;;;;;;;;4794:2;4779:26;;4788:4;4779:26;;;4798:6;4779:26;;;;;;:::i;:::-;;;;;;;;4818:37;4838:4;4844:2;4848:6;4818:19;:37::i;:::-;4286:577;4174:689;;;:::o;19347:98::-;19405:7;19436:1;19432;:5;;;;:::i;:::-;19425:12;;19347:98;;;;:::o;19453:::-;19511:7;19542:1;19538;:5;;;;:::i;:::-;19531:12;;19453:98;;;;:::o;5274:583::-;5377:1;5358:21;;:7;:21;;;5350:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5430:49;5451:7;5468:1;5472:6;5430:20;:49::i;:::-;5492:22;5517:5;:14;5523:7;5517:14;;;;;;;;;;;;;;;;5492:39;;5568:6;5550:14;:24;;5542:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5683:6;5666:14;:23;5649:5;:14;5655:7;5649:14;;;;;;;;;;;;;;;:40;;;;5727:6;5711:12;;:22;;;;;;;:::i;:::-;;;;;;;;5777:1;5751:37;;5760:7;5751:37;;;5781:6;5751:37;;;;;;:::i;:::-;;;;;;;;5801:48;5821:7;5838:1;5842:6;5801:19;:48::i;:::-;5339:518;5274:583;;:::o;6952:125::-;;;;:::o;7085:124::-;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:90;803:7;846:5;839:13;832:21;821:32;;769:90;;;:::o;865:116::-;935:21;950:5;935:21;:::i;:::-;928:5;925:32;915:60;;971:1;968;961:12;915:60;865:116;:::o;987:133::-;1030:5;1068:6;1055:20;1046:29;;1084:30;1108:5;1084:30;:::i;:::-;987:133;;;;:::o;1126:462::-;1188:6;1196;1245:2;1233:9;1224:7;1220:23;1216:32;1213:119;;;1251:79;;:::i;:::-;1213:119;1371:1;1396:50;1438:7;1429:6;1418:9;1414:22;1396:50;:::i;:::-;1386:60;;1342:114;1495:2;1521:50;1563:7;1554:6;1543:9;1539:22;1521:50;:::i;:::-;1511:60;;1466:115;1126:462;;;;;:::o;1594:99::-;1646:6;1680:5;1674:12;1664:22;;1594:99;;;:::o;1699:169::-;1783:11;1817:6;1812:3;1805:19;1857:4;1852:3;1848:14;1833:29;;1699:169;;;;:::o;1874:246::-;1955:1;1965:113;1979:6;1976:1;1973:13;1965:113;;;2064:1;2059:3;2055:11;2049:18;2045:1;2040:3;2036:11;2029:39;2001:2;1998:1;1994:10;1989:15;;1965:113;;;2112:1;2103:6;2098:3;2094:16;2087:27;1936:184;1874:246;;;:::o;2126:102::-;2167:6;2218:2;2214:7;2209:2;2202:5;2198:14;2194:28;2184:38;;2126:102;;;:::o;2234:377::-;2322:3;2350:39;2383:5;2350:39;:::i;:::-;2405:71;2469:6;2464:3;2405:71;:::i;:::-;2398:78;;2485:65;2543:6;2538:3;2531:4;2524:5;2520:16;2485:65;:::i;:::-;2575:29;2597:6;2575:29;:::i;:::-;2570:3;2566:39;2559:46;;2326:285;2234:377;;;;:::o;2617:313::-;2730:4;2768:2;2757:9;2753:18;2745:26;;2817:9;2811:4;2807:20;2803:1;2792:9;2788:17;2781:47;2845:78;2918:4;2909:6;2845:78;:::i;:::-;2837:86;;2617:313;;;;:::o;2936:126::-;2973:7;3013:42;3006:5;3002:54;2991:65;;2936:126;;;:::o;3068:96::-;3105:7;3134:24;3152:5;3134:24;:::i;:::-;3123:35;;3068:96;;;:::o;3170:122::-;3243:24;3261:5;3243:24;:::i;:::-;3236:5;3233:35;3223:63;;3282:1;3279;3272:12;3223:63;3170:122;:::o;3298:139::-;3344:5;3382:6;3369:20;3360:29;;3398:33;3425:5;3398:33;:::i;:::-;3298:139;;;;:::o;3443:122::-;3516:24;3534:5;3516:24;:::i;:::-;3509:5;3506:35;3496:63;;3555:1;3552;3545:12;3496:63;3443:122;:::o;3571:139::-;3617:5;3655:6;3642:20;3633:29;;3671:33;3698:5;3671:33;:::i;:::-;3571:139;;;;:::o;3716:474::-;3784:6;3792;3841:2;3829:9;3820:7;3816:23;3812:32;3809:119;;;3847:79;;:::i;:::-;3809:119;3967:1;3992:53;4037:7;4028:6;4017:9;4013:22;3992:53;:::i;:::-;3982:63;;3938:117;4094:2;4120:53;4165:7;4156:6;4145:9;4141:22;4120:53;:::i;:::-;4110:63;;4065:118;3716:474;;;;;:::o;4196:109::-;4277:21;4292:5;4277:21;:::i;:::-;4272:3;4265:34;4196:109;;:::o;4311:210::-;4398:4;4436:2;4425:9;4421:18;4413:26;;4449:65;4511:1;4500:9;4496:17;4487:6;4449:65;:::i;:::-;4311:210;;;;:::o;4527:474::-;4595:6;4603;4652:2;4640:9;4631:7;4627:23;4623:32;4620:119;;;4658:79;;:::i;:::-;4620:119;4778:1;4803:53;4848:7;4839:6;4828:9;4824:22;4803:53;:::i;:::-;4793:63;;4749:117;4905:2;4931:53;4976:7;4967:6;4956:9;4952:22;4931:53;:::i;:::-;4921:63;;4876:118;4527:474;;;;;:::o;5007:329::-;5066:6;5115:2;5103:9;5094:7;5090:23;5086:32;5083:119;;;5121:79;;:::i;:::-;5083:119;5241:1;5266:53;5311:7;5302:6;5291:9;5287:22;5266:53;:::i;:::-;5256:63;;5212:117;5007:329;;;;:::o;5342:118::-;5429:24;5447:5;5429:24;:::i;:::-;5424:3;5417:37;5342:118;;:::o;5466:222::-;5559:4;5597:2;5586:9;5582:18;5574:26;;5610:71;5678:1;5667:9;5663:17;5654:6;5610:71;:::i;:::-;5466:222;;;;:::o;5694:619::-;5771:6;5779;5787;5836:2;5824:9;5815:7;5811:23;5807:32;5804:119;;;5842:79;;:::i;:::-;5804:119;5962:1;5987:53;6032:7;6023:6;6012:9;6008:22;5987:53;:::i;:::-;5977:63;;5933:117;6089:2;6115:53;6160:7;6151:6;6140:9;6136:22;6115:53;:::i;:::-;6105:63;;6060:118;6217:2;6243:53;6288:7;6279:6;6268:9;6264:22;6243:53;:::i;:::-;6233:63;;6188:118;5694:619;;;;;:::o;6319:329::-;6378:6;6427:2;6415:9;6406:7;6402:23;6398:32;6395:119;;;6433:79;;:::i;:::-;6395:119;6553:1;6578:53;6623:7;6614:6;6603:9;6599:22;6578:53;:::i;:::-;6568:63;;6524:117;6319:329;;;;:::o;6654:86::-;6689:7;6729:4;6722:5;6718:16;6707:27;;6654:86;;;:::o;6746:112::-;6829:22;6845:5;6829:22;:::i;:::-;6824:3;6817:35;6746:112;;:::o;6864:214::-;6953:4;6991:2;6980:9;6976:18;6968:26;;7004:67;7068:1;7057:9;7053:17;7044:6;7004:67;:::i;:::-;6864:214;;;;:::o;7084:619::-;7161:6;7169;7177;7226:2;7214:9;7205:7;7201:23;7197:32;7194:119;;;7232:79;;:::i;:::-;7194:119;7352:1;7377:53;7422:7;7413:6;7402:9;7398:22;7377:53;:::i;:::-;7367:63;;7323:117;7479:2;7505:53;7550:7;7541:6;7530:9;7526:22;7505:53;:::i;:::-;7495:63;;7450:118;7607:2;7633:53;7678:7;7669:6;7658:9;7654:22;7633:53;:::i;:::-;7623:63;;7578:118;7084:619;;;;;:::o;7709:474::-;7777:6;7785;7834:2;7822:9;7813:7;7809:23;7805:32;7802:119;;;7840:79;;:::i;:::-;7802:119;7960:1;7985:53;8030:7;8021:6;8010:9;8006:22;7985:53;:::i;:::-;7975:63;;7931:117;8087:2;8113:53;8158:7;8149:6;8138:9;8134:22;8113:53;:::i;:::-;8103:63;;8058:118;7709:474;;;;;:::o;8189:323::-;8245:6;8294:2;8282:9;8273:7;8269:23;8265:32;8262:119;;;8300:79;;:::i;:::-;8262:119;8420:1;8445:50;8487:7;8478:6;8467:9;8463:22;8445:50;:::i;:::-;8435:60;;8391:114;8189:323;;;;:::o;8518:468::-;8583:6;8591;8640:2;8628:9;8619:7;8615:23;8611:32;8608:119;;;8646:79;;:::i;:::-;8608:119;8766:1;8791:53;8836:7;8827:6;8816:9;8812:22;8791:53;:::i;:::-;8781:63;;8737:117;8893:2;8919:50;8961:7;8952:6;8941:9;8937:22;8919:50;:::i;:::-;8909:60;;8864:115;8518:468;;;;;:::o;8992:765::-;9078:6;9086;9094;9102;9151:3;9139:9;9130:7;9126:23;9122:33;9119:120;;;9158:79;;:::i;:::-;9119:120;9278:1;9303:53;9348:7;9339:6;9328:9;9324:22;9303:53;:::i;:::-;9293:63;;9249:117;9405:2;9431:53;9476:7;9467:6;9456:9;9452:22;9431:53;:::i;:::-;9421:63;;9376:118;9533:2;9559:53;9604:7;9595:6;9584:9;9580:22;9559:53;:::i;:::-;9549:63;;9504:118;9661:2;9687:53;9732:7;9723:6;9712:9;9708:22;9687:53;:::i;:::-;9677:63;;9632:118;8992:765;;;;;;;:::o;9763:182::-;9903:34;9899:1;9891:6;9887:14;9880:58;9763:182;:::o;9951:366::-;10093:3;10114:67;10178:2;10173:3;10114:67;:::i;:::-;10107:74;;10190:93;10279:3;10190:93;:::i;:::-;10308:2;10303:3;10299:12;10292:19;;9951:366;;;:::o;10323:419::-;10489:4;10527:2;10516:9;10512:18;10504:26;;10576:9;10570:4;10566:20;10562:1;10551:9;10547:17;10540:47;10604:131;10730:4;10604:131;:::i;:::-;10596:139;;10323:419;;;:::o;10748:180::-;10796:77;10793:1;10786:88;10893:4;10890:1;10883:15;10917:4;10914:1;10907:15;10934:320;10978:6;11015:1;11009:4;11005:12;10995:22;;11062:1;11056:4;11052:12;11083:18;11073:81;;11139:4;11131:6;11127:17;11117:27;;11073:81;11201:2;11193:6;11190:14;11170:18;11167:38;11164:84;;11220:18;;:::i;:::-;11164:84;10985:269;10934:320;;;:::o;11260:180::-;11308:77;11305:1;11298:88;11405:4;11402:1;11395:15;11429:4;11426:1;11419:15;11446:410;11486:7;11509:20;11527:1;11509:20;:::i;:::-;11504:25;;11543:20;11561:1;11543:20;:::i;:::-;11538:25;;11598:1;11595;11591:9;11620:30;11638:11;11620:30;:::i;:::-;11609:41;;11799:1;11790:7;11786:15;11783:1;11780:22;11760:1;11753:9;11733:83;11710:139;;11829:18;;:::i;:::-;11710:139;11494:362;11446:410;;;;:::o;11862:180::-;11910:77;11907:1;11900:88;12007:4;12004:1;11997:15;12031:4;12028:1;12021:15;12048:185;12088:1;12105:20;12123:1;12105:20;:::i;:::-;12100:25;;12139:20;12157:1;12139:20;:::i;:::-;12134:25;;12178:1;12168:35;;12183:18;;:::i;:::-;12168:35;12225:1;12222;12218:9;12213:14;;12048:185;;;;:::o;12239:102::-;12281:8;12328:5;12325:1;12321:13;12300:34;;12239:102;;;:::o;12347:848::-;12408:5;12415:4;12439:6;12430:15;;12463:5;12454:14;;12477:712;12498:1;12488:8;12485:15;12477:712;;;12593:4;12588:3;12584:14;12578:4;12575:24;12572:50;;;12602:18;;:::i;:::-;12572:50;12652:1;12642:8;12638:16;12635:451;;;13067:4;13060:5;13056:16;13047:25;;12635:451;13117:4;13111;13107:15;13099:23;;13147:32;13170:8;13147:32;:::i;:::-;13135:44;;12477:712;;;12347:848;;;;;;;:::o;13201:1073::-;13255:5;13446:8;13436:40;;13467:1;13458:10;;13469:5;;13436:40;13495:4;13485:36;;13512:1;13503:10;;13514:5;;13485:36;13581:4;13629:1;13624:27;;;;13665:1;13660:191;;;;13574:277;;13624:27;13642:1;13633:10;;13644:5;;;13660:191;13705:3;13695:8;13692:17;13689:43;;;13712:18;;:::i;:::-;13689:43;13761:8;13758:1;13754:16;13745:25;;13796:3;13789:5;13786:14;13783:40;;;13803:18;;:::i;:::-;13783:40;13836:5;;;13574:277;;13960:2;13950:8;13947:16;13941:3;13935:4;13932:13;13928:36;13910:2;13900:8;13897:16;13892:2;13886:4;13883:12;13879:35;13863:111;13860:246;;;14016:8;14010:4;14006:19;13997:28;;14051:3;14044:5;14041:14;14038:40;;;14058:18;;:::i;:::-;14038:40;14091:5;;13860:246;14131:42;14169:3;14159:8;14153:4;14150:1;14131:42;:::i;:::-;14116:57;;;;14205:4;14200:3;14196:14;14189:5;14186:25;14183:51;;;14214:18;;:::i;:::-;14183:51;14263:4;14256:5;14252:16;14243:25;;13201:1073;;;;;;:::o;14280:281::-;14338:5;14362:23;14380:4;14362:23;:::i;:::-;14354:31;;14406:25;14422:8;14406:25;:::i;:::-;14394:37;;14450:104;14487:66;14477:8;14471:4;14450:104;:::i;:::-;14441:113;;14280:281;;;;:::o;14567:191::-;14607:3;14626:20;14644:1;14626:20;:::i;:::-;14621:25;;14660:20;14678:1;14660:20;:::i;:::-;14655:25;;14703:1;14700;14696:9;14689:16;;14724:3;14721:1;14718:10;14715:36;;;14731:18;;:::i;:::-;14715:36;14567:191;;;;:::o;14764:143::-;14821:5;14852:6;14846:13;14837:22;;14868:33;14895:5;14868:33;:::i;:::-;14764:143;;;;:::o;14913:351::-;14983:6;15032:2;15020:9;15011:7;15007:23;15003:32;15000:119;;;15038:79;;:::i;:::-;15000:119;15158:1;15183:64;15239:7;15230:6;15219:9;15215:22;15183:64;:::i;:::-;15173:74;;15129:128;14913:351;;;;:::o;15270:332::-;15391:4;15429:2;15418:9;15414:18;15406:26;;15442:71;15510:1;15499:9;15495:17;15486:6;15442:71;:::i;:::-;15523:72;15591:2;15580:9;15576:18;15567:6;15523:72;:::i;:::-;15270:332;;;;;:::o;15608:85::-;15653:7;15682:5;15671:16;;15608:85;;;:::o;15699:60::-;15727:3;15748:5;15741:12;;15699:60;;;:::o;15765:158::-;15823:9;15856:61;15874:42;15883:32;15909:5;15883:32;:::i;:::-;15874:42;:::i;:::-;15856:61;:::i;:::-;15843:74;;15765:158;;;:::o;15929:147::-;16024:45;16063:5;16024:45;:::i;:::-;16019:3;16012:58;15929:147;;:::o;16082:807::-;16331:4;16369:3;16358:9;16354:19;16346:27;;16383:71;16451:1;16440:9;16436:17;16427:6;16383:71;:::i;:::-;16464:72;16532:2;16521:9;16517:18;16508:6;16464:72;:::i;:::-;16546:80;16622:2;16611:9;16607:18;16598:6;16546:80;:::i;:::-;16636;16712:2;16701:9;16697:18;16688:6;16636:80;:::i;:::-;16726:73;16794:3;16783:9;16779:19;16770:6;16726:73;:::i;:::-;16809;16877:3;16866:9;16862:19;16853:6;16809:73;:::i;:::-;16082:807;;;;;;;;;:::o;16895:143::-;16952:5;16983:6;16977:13;16968:22;;16999:33;17026:5;16999:33;:::i;:::-;16895:143;;;;:::o;17044:663::-;17132:6;17140;17148;17197:2;17185:9;17176:7;17172:23;17168:32;17165:119;;;17203:79;;:::i;:::-;17165:119;17323:1;17348:64;17404:7;17395:6;17384:9;17380:22;17348:64;:::i;:::-;17338:74;;17294:128;17461:2;17487:64;17543:7;17534:6;17523:9;17519:22;17487:64;:::i;:::-;17477:74;;17432:129;17600:2;17626:64;17682:7;17673:6;17662:9;17658:22;17626:64;:::i;:::-;17616:74;;17571:129;17044:663;;;;;:::o;17713:162::-;17853:14;17849:1;17841:6;17837:14;17830:38;17713:162;:::o;17881:366::-;18023:3;18044:67;18108:2;18103:3;18044:67;:::i;:::-;18037:74;;18120:93;18209:3;18120:93;:::i;:::-;18238:2;18233:3;18229:12;18222:19;;17881:366;;;:::o;18253:419::-;18419:4;18457:2;18446:9;18442:18;18434:26;;18506:9;18500:4;18496:20;18492:1;18481:9;18477:17;18470:47;18534:131;18660:4;18534:131;:::i;:::-;18526:139;;18253:419;;;:::o;18678:224::-;18818:34;18814:1;18806:6;18802:14;18795:58;18887:7;18882:2;18874:6;18870:15;18863:32;18678:224;:::o;18908:366::-;19050:3;19071:67;19135:2;19130:3;19071:67;:::i;:::-;19064:74;;19147:93;19236:3;19147:93;:::i;:::-;19265:2;19260:3;19256:12;19249:19;;18908:366;;;:::o;19280:419::-;19446:4;19484:2;19473:9;19469:18;19461:26;;19533:9;19527:4;19523:20;19519:1;19508:9;19504:17;19497:47;19561:131;19687:4;19561:131;:::i;:::-;19553:139;;19280:419;;;:::o;19705:225::-;19845:34;19841:1;19833:6;19829:14;19822:58;19914:8;19909:2;19901:6;19897:15;19890:33;19705:225;:::o;19936:366::-;20078:3;20099:67;20163:2;20158:3;20099:67;:::i;:::-;20092:74;;20175:93;20264:3;20175:93;:::i;:::-;20293:2;20288:3;20284:12;20277:19;;19936:366;;;:::o;20308:419::-;20474:4;20512:2;20501:9;20497:18;20489:26;;20561:9;20555:4;20551:20;20547:1;20536:9;20532:17;20525:47;20589:131;20715:4;20589:131;:::i;:::-;20581:139;;20308:419;;;:::o;20733:223::-;20873:34;20869:1;20861:6;20857:14;20850:58;20942:6;20937:2;20929:6;20925:15;20918:31;20733:223;:::o;20962:366::-;21104:3;21125:67;21189:2;21184:3;21125:67;:::i;:::-;21118:74;;21201:93;21290:3;21201:93;:::i;:::-;21319:2;21314:3;21310:12;21303:19;;20962:366;;;:::o;21334:419::-;21500:4;21538:2;21527:9;21523:18;21515:26;;21587:9;21581:4;21577:20;21573:1;21562:9;21558:17;21551:47;21615:131;21741:4;21615:131;:::i;:::-;21607:139;;21334:419;;;:::o;21759:221::-;21899:34;21895:1;21887:6;21883:14;21876:58;21968:4;21963:2;21955:6;21951:15;21944:29;21759:221;:::o;21986:366::-;22128:3;22149:67;22213:2;22208:3;22149:67;:::i;:::-;22142:74;;22225:93;22314:3;22225:93;:::i;:::-;22343:2;22338:3;22334:12;22327:19;;21986:366;;;:::o;22358:419::-;22524:4;22562:2;22551:9;22547:18;22539:26;;22611:9;22605:4;22601:20;22597:1;22586:9;22582:17;22575:47;22639:131;22765:4;22639:131;:::i;:::-;22631:139;;22358:419;;;:::o;22783:179::-;22923:31;22919:1;22911:6;22907:14;22900:55;22783:179;:::o;22968:366::-;23110:3;23131:67;23195:2;23190:3;23131:67;:::i;:::-;23124:74;;23207:93;23296:3;23207:93;:::i;:::-;23325:2;23320:3;23316:12;23309:19;;22968:366;;;:::o;23340:419::-;23506:4;23544:2;23533:9;23529:18;23521:26;;23593:9;23587:4;23583:20;23579:1;23568:9;23564:17;23557:47;23621:131;23747:4;23621:131;:::i;:::-;23613:139;;23340:419;;;:::o;23765:224::-;23905:34;23901:1;23893:6;23889:14;23882:58;23974:7;23969:2;23961:6;23957:15;23950:32;23765:224;:::o;23995:366::-;24137:3;24158:67;24222:2;24217:3;24158:67;:::i;:::-;24151:74;;24234:93;24323:3;24234:93;:::i;:::-;24352:2;24347:3;24343:12;24336:19;;23995:366;;;:::o;24367:419::-;24533:4;24571:2;24560:9;24556:18;24548:26;;24620:9;24614:4;24610:20;24606:1;24595:9;24591:17;24584:47;24648:131;24774:4;24648:131;:::i;:::-;24640:139;;24367:419;;;:::o;24792:222::-;24932:34;24928:1;24920:6;24916:14;24909:58;25001:5;24996:2;24988:6;24984:15;24977:30;24792:222;:::o;25020:366::-;25162:3;25183:67;25247:2;25242:3;25183:67;:::i;:::-;25176:74;;25259:93;25348:3;25259:93;:::i;:::-;25377:2;25372:3;25368:12;25361:19;;25020:366;;;:::o;25392:419::-;25558:4;25596:2;25585:9;25581:18;25573:26;;25645:9;25639:4;25635:20;25631:1;25620:9;25616:17;25609:47;25673:131;25799:4;25673:131;:::i;:::-;25665:139;;25392:419;;;:::o;25817:168::-;25957:20;25953:1;25945:6;25941:14;25934:44;25817:168;:::o;25991:366::-;26133:3;26154:67;26218:2;26213:3;26154:67;:::i;:::-;26147:74;;26230:93;26319:3;26230:93;:::i;:::-;26348:2;26343:3;26339:12;26332:19;;25991:366;;;:::o;26363:419::-;26529:4;26567:2;26556:9;26552:18;26544:26;;26616:9;26610:4;26606:20;26602:1;26591:9;26587:17;26580:47;26644:131;26770:4;26644:131;:::i;:::-;26636:139;;26363:419;;;:::o;26788:170::-;26928:22;26924:1;26916:6;26912:14;26905:46;26788:170;:::o;26964:366::-;27106:3;27127:67;27191:2;27186:3;27127:67;:::i;:::-;27120:74;;27203:93;27292:3;27203:93;:::i;:::-;27321:2;27316:3;27312:12;27305:19;;26964:366;;;:::o;27336:419::-;27502:4;27540:2;27529:9;27525:18;27517:26;;27589:9;27583:4;27579:20;27575:1;27564:9;27560:17;27553:47;27617:131;27743:4;27617:131;:::i;:::-;27609:139;;27336:419;;;:::o;27761:221::-;27901:34;27897:1;27889:6;27885:14;27878:58;27970:4;27965:2;27957:6;27953:15;27946:29;27761:221;:::o;27988:366::-;28130:3;28151:67;28215:2;28210:3;28151:67;:::i;:::-;28144:74;;28227:93;28316:3;28227:93;:::i;:::-;28345:2;28340:3;28336:12;28329:19;;27988:366;;;:::o;28360:419::-;28526:4;28564:2;28553:9;28549:18;28541:26;;28613:9;28607:4;28603:20;28599:1;28588:9;28584:17;28577:47;28641:131;28767:4;28641:131;:::i;:::-;28633:139;;28360:419;;;:::o;28785:289::-;28925:34;28921:1;28913:6;28909:14;28902:58;28994:34;28989:2;28981:6;28977:15;28970:59;29063:3;29058:2;29050:6;29046:15;29039:28;28785:289;:::o;29080:366::-;29222:3;29243:67;29307:2;29302:3;29243:67;:::i;:::-;29236:74;;29319:93;29408:3;29319:93;:::i;:::-;29437:2;29432:3;29428:12;29421:19;;29080:366;;;:::o;29452:419::-;29618:4;29656:2;29645:9;29641:18;29633:26;;29705:9;29699:4;29695:20;29691:1;29680:9;29676:17;29669:47;29733:131;29859:4;29733:131;:::i;:::-;29725:139;;29452:419;;;:::o;29877:181::-;30017:33;30013:1;30005:6;30001:14;29994:57;29877:181;:::o;30064:366::-;30206:3;30227:67;30291:2;30286:3;30227:67;:::i;:::-;30220:74;;30303:93;30392:3;30303:93;:::i;:::-;30421:2;30416:3;30412:12;30405:19;;30064:366;;;:::o;30436:419::-;30602:4;30640:2;30629:9;30625:18;30617:26;;30689:9;30683:4;30679:20;30675:1;30664:9;30660:17;30653:47;30717:131;30843:4;30717:131;:::i;:::-;30709:139;;30436:419;;;:::o;30861:290::-;31001:34;30997:1;30989:6;30985:14;30978:58;31070:34;31065:2;31057:6;31053:15;31046:59;31139:4;31134:2;31126:6;31122:15;31115:29;30861:290;:::o;31157:366::-;31299:3;31320:67;31384:2;31379:3;31320:67;:::i;:::-;31313:74;;31396:93;31485:3;31396:93;:::i;:::-;31514:2;31509:3;31505:12;31498:19;;31157:366;;;:::o;31529:419::-;31695:4;31733:2;31722:9;31718:18;31710:26;;31782:9;31776:4;31772:20;31768:1;31757:9;31753:17;31746:47;31810:131;31936:4;31810:131;:::i;:::-;31802:139;;31529:419;;;:::o;31954:171::-;32094:23;32090:1;32082:6;32078:14;32071:47;31954:171;:::o;32131:366::-;32273:3;32294:67;32358:2;32353:3;32294:67;:::i;:::-;32287:74;;32370:93;32459:3;32370:93;:::i;:::-;32488:2;32483:3;32479:12;32472:19;;32131:366;;;:::o;32503:419::-;32669:4;32707:2;32696:9;32692:18;32684:26;;32756:9;32750:4;32746:20;32742:1;32731:9;32727:17;32720:47;32784:131;32910:4;32784:131;:::i;:::-;32776:139;;32503:419;;;:::o;32928:170::-;33068:22;33064:1;33056:6;33052:14;33045:46;32928:170;:::o;33104:366::-;33246:3;33267:67;33331:2;33326:3;33267:67;:::i;:::-;33260:74;;33343:93;33432:3;33343:93;:::i;:::-;33461:2;33456:3;33452:12;33445:19;;33104:366;;;:::o;33476:419::-;33642:4;33680:2;33669:9;33665:18;33657:26;;33729:9;33723:4;33719:20;33715:1;33704:9;33700:17;33693:47;33757:131;33883:4;33757:131;:::i;:::-;33749:139;;33476:419;;;:::o;33901:194::-;33941:4;33961:20;33979:1;33961:20;:::i;:::-;33956:25;;33995:20;34013:1;33995:20;:::i;:::-;33990:25;;34039:1;34036;34032:9;34024:17;;34063:1;34057:4;34054:11;34051:37;;;34068:18;;:::i;:::-;34051:37;33901:194;;;;:::o;34101:180::-;34149:77;34146:1;34139:88;34246:4;34243:1;34236:15;34270:4;34267:1;34260:15;34287:180;34335:77;34332:1;34325:88;34432:4;34429:1;34422:15;34456:4;34453:1;34446:15;34473:114;34540:6;34574:5;34568:12;34558:22;;34473:114;;;:::o;34593:184::-;34692:11;34726:6;34721:3;34714:19;34766:4;34761:3;34757:14;34742:29;;34593:184;;;;:::o;34783:132::-;34850:4;34873:3;34865:11;;34903:4;34898:3;34894:14;34886:22;;34783:132;;;:::o;34921:108::-;34998:24;35016:5;34998:24;:::i;:::-;34993:3;34986:37;34921:108;;:::o;35035:179::-;35104:10;35125:46;35167:3;35159:6;35125:46;:::i;:::-;35203:4;35198:3;35194:14;35180:28;;35035:179;;;;:::o;35220:113::-;35290:4;35322;35317:3;35313:14;35305:22;;35220:113;;;:::o;35369:732::-;35488:3;35517:54;35565:5;35517:54;:::i;:::-;35587:86;35666:6;35661:3;35587:86;:::i;:::-;35580:93;;35697:56;35747:5;35697:56;:::i;:::-;35776:7;35807:1;35792:284;35817:6;35814:1;35811:13;35792:284;;;35893:6;35887:13;35920:63;35979:3;35964:13;35920:63;:::i;:::-;35913:70;;36006:60;36059:6;36006:60;:::i;:::-;35996:70;;35852:224;35839:1;35836;35832:9;35827:14;;35792:284;;;35796:14;36092:3;36085:10;;35493:608;;;35369:732;;;;:::o;36107:831::-;36370:4;36408:3;36397:9;36393:19;36385:27;;36422:71;36490:1;36479:9;36475:17;36466:6;36422:71;:::i;:::-;36503:80;36579:2;36568:9;36564:18;36555:6;36503:80;:::i;:::-;36630:9;36624:4;36620:20;36615:2;36604:9;36600:18;36593:48;36658:108;36761:4;36752:6;36658:108;:::i;:::-;36650:116;;36776:72;36844:2;36833:9;36829:18;36820:6;36776:72;:::i;:::-;36858:73;36926:3;36915:9;36911:19;36902:6;36858:73;:::i;:::-;36107:831;;;;;;;;:::o;36944:720::-;37179:4;37217:3;37206:9;37202:19;37194:27;;37231:79;37307:1;37296:9;37292:17;37283:6;37231:79;:::i;:::-;37357:9;37351:4;37347:20;37342:2;37331:9;37327:18;37320:48;37385:108;37488:4;37479:6;37385:108;:::i;:::-;37377:116;;37503:72;37571:2;37560:9;37556:18;37547:6;37503:72;:::i;:::-;37585;37653:2;37642:9;37638:18;37629:6;37585:72;:::i;:::-;36944:720;;;;;;;:::o;37670:351::-;37740:6;37789:2;37777:9;37768:7;37764:23;37760:32;37757:119;;;37795:79;;:::i;:::-;37757:119;37915:1;37940:64;37996:7;37987:6;37976:9;37972:22;37940:64;:::i;:::-;37930:74;;37886:128;37670:351;;;;:::o;38027:332::-;38148:4;38186:2;38175:9;38171:18;38163:26;;38199:71;38267:1;38256:9;38252:17;38243:6;38199:71;:::i;:::-;38280:72;38348:2;38337:9;38333:18;38324:6;38280:72;:::i;:::-;38027:332;;;;;:::o;38365:137::-;38419:5;38450:6;38444:13;38435:22;;38466:30;38490:5;38466:30;:::i;:::-;38365:137;;;;:::o;38508:345::-;38575:6;38624:2;38612:9;38603:7;38599:23;38595:32;38592:119;;;38630:79;;:::i;:::-;38592:119;38750:1;38775:61;38828:7;38819:6;38808:9;38804:22;38775:61;:::i;:::-;38765:71;;38721:125;38508:345;;;;:::o;38859:180::-;38999:32;38995:1;38987:6;38983:14;38976:56;38859:180;:::o;39045:366::-;39187:3;39208:67;39272:2;39267:3;39208:67;:::i;:::-;39201:74;;39284:93;39373:3;39284:93;:::i;:::-;39402:2;39397:3;39393:12;39386:19;;39045:366;;;:::o;39417:419::-;39583:4;39621:2;39610:9;39606:18;39598:26;;39670:9;39664:4;39660:20;39656:1;39645:9;39641:17;39634:47;39698:131;39824:4;39698:131;:::i;:::-;39690:139;;39417:419;;;:::o;39842:225::-;39982:34;39978:1;39970:6;39966:14;39959:58;40051:8;40046:2;40038:6;40034:15;40027:33;39842:225;:::o;40073:366::-;40215:3;40236:67;40300:2;40295:3;40236:67;:::i;:::-;40229:74;;40312:93;40401:3;40312:93;:::i;:::-;40430:2;40425:3;40421:12;40414:19;;40073:366;;;:::o;40445:419::-;40611:4;40649:2;40638:9;40634:18;40626:26;;40698:9;40692:4;40688:20;40684:1;40673:9;40669:17;40662:47;40726:131;40852:4;40726:131;:::i;:::-;40718:139;;40445:419;;;:::o;40870:220::-;41010:34;41006:1;40998:6;40994:14;40987:58;41079:3;41074:2;41066:6;41062:15;41055:28;40870:220;:::o;41096:366::-;41238:3;41259:67;41323:2;41318:3;41259:67;:::i;:::-;41252:74;;41335:93;41424:3;41335:93;:::i;:::-;41453:2;41448:3;41444:12;41437:19;;41096:366;;;:::o;41468:419::-;41634:4;41672:2;41661:9;41657:18;41649:26;;41721:9;41715:4;41711:20;41707:1;41696:9;41692:17;41685:47;41749:131;41875:4;41749:131;:::i;:::-;41741:139;;41468:419;;;:::o;41893:221::-;42033:34;42029:1;42021:6;42017:14;42010:58;42102:4;42097:2;42089:6;42085:15;42078:29;41893:221;:::o;42120:366::-;42262:3;42283:67;42347:2;42342:3;42283:67;:::i;:::-;42276:74;;42359:93;42448:3;42359:93;:::i;:::-;42477:2;42472:3;42468:12;42461:19;;42120:366;;;:::o;42492:419::-;42658:4;42696:2;42685:9;42681:18;42673:26;;42745:9;42739:4;42735:20;42731:1;42720:9;42716:17;42709:47;42773:131;42899:4;42773:131;:::i;:::-;42765:139;;42492:419;;;:::o

Swarm Source

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