ETH Price: $3,361.96 (-2.63%)

Token

BitToken (BTX)
 

Overview

Max Total Supply

1,000,000 BTX

Holders

258 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.982596041022539214 BTX

Value
$0.00
0xa3b5ffee94f9ba0cc8e4140416f1a21c95ad112b
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

BitToken functions as an index that mirrors Bitcoin's price movements and repurchases itself when Bitcoin's price rises. The outcome? A more affordable and scarce version of Bitcoin with increased leverage.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BitToken

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-27
*/

// SPDX-License-Identifier: MIT

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;

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

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 BitToken is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;

    bool private _swapping;
    address public utility;

    address private _fundingWallet;
    address private _resevoirWallet;
    address private _marketingWallet;
    address private _LPAddress;
    uint256 private swapAt = 25000 * (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 = 0;
    uint256 private _liquidityFee = 0;
    uint256 private _resevoirFee = 0;
    uint256 private _marketingFee = 0;

    uint256 private _tokensForUtility;
    uint256 private _tokensForFunding;
    uint256 private _tokensForLiquidity;
    uint256 private _tokensForResevoir;
    uint256 private _tokensForMarketing;

    uint256 public buyFee;
    uint256 public sellFee;

    bool public buyStatus;
    bool public sellStatus;

    bool private utilityActive;

    uint256 public totalFees =
        _fundingFee + _liquidityFee + _resevoirFee + _marketingFee + 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(
        string memory name,
        string memory symbol,
        uint256 _percent,
        address _utility,
        bool _utilityActive,
        address fundingWallet,
        address resevoirWallet,
        address marketingWallet,
        address LPAddress,
        uint256 _buyFee,
        uint256 _sellFee
    ) payable ERC20(name, symbol) {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        addSwapTreshold(_percent);
        addUtility(_utility, _utilityActive);
        setTaxWallets(
            fundingWallet,
            resevoirWallet,
            marketingWallet,
            LPAddress
        );
        updateTradingFees(_buyFee, _sellFee);

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

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

        _fundingWallet = msg.sender;
        _resevoirWallet = msg.sender;
        _marketingWallet = msg.sender;
        _LPAddress = msg.sender;

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

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

        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[address(0xdead)] = true;
        _isExcludedMaxTransactionAmount[_fundingWallet] = true;
        _isExcludedMaxTransactionAmount[_resevoirWallet] = true;
        _isExcludedMaxTransactionAmount[_marketingWallet] = 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, bool active) public onlyOwner {
        utility = _utility;
        utilityActive = active;
    }

    function setTaxWallets(
        address fundingWallet,
        address resevoirWallet,
        address marketingWallet,
        address LPAddress
    ) public onlyOwner {
        _fundingWallet = fundingWallet;
        _resevoirWallet = resevoirWallet;
        _marketingWallet = marketingWallet;
        _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 resevoirFee,
        uint256 marketingFee,
        uint256 utilityFees
    ) public onlyOwner {
        require(fundingFee + resevoirFee + marketingFee + liquidityFee <= 20);
        require(utilityFees < 5);
        utilityFee = utilityFees;
        _fundingFee = fundingFee;
        _liquidityFee = liquidityFee;
        _resevoirFee = resevoirFee;
        _marketingFee = marketingFee;
        totalFees =
            fundingFee +
            liquidityFee +
            resevoirFee +
            marketingFee +
            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;
    }

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

    /**
     * @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);
            _tokensForResevoir += (fees.mul(_resevoirFee)).div(totalFees);
            _tokensForMarketing += (fees.mul(_marketingFee)).div(totalFees);
            _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));
            if (utilityActive) {
                address dead = 0x000000000000000000000000000000000000dEaD;
                IERC20(utility).transfer(dead, output);
            } else {
                IERC20(utility).transfer(_fundingWallet, 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 getOptimalResult(
        uint256 tokenAmt
    ) public view returns (uint256[] memory) {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        return uniswapV2Router.getAmountsOut(tokenAmt, path);
    }

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

        if (contractBalance == 0) return;

        uint256 liquidityTokens = _tokensForLiquidity / 2;
        uint256 totalSwap = liquidityTokens +
            _tokensForFunding +
            _tokensForResevoir +
            _tokensForMarketing +
            _tokensForUtility;

        _swapTokensForETH(totalSwap);
        if (_tokensForUtility > 0.0001 ether) {
            uint256[] memory ethForUtility = getOptimalResult(
                _tokensForUtility
            );
            _swapETHforTokens(ethForUtility[1]);
        }
        if (liquidityTokens > 0.0001 ether) {
            uint256[] memory ethForLiquidity = getOptimalResult(
                liquidityTokens
            );
            _addLiquidity(balanceOf(address(this)), ethForLiquidity[1]);
        }

        uint256 fees = _fundingFee + _resevoirFee + _marketingFee;
        payable(_fundingWallet).transfer(
            address(this).balance.mul(_fundingFee).div(fees)
        );
        payable(_resevoirWallet).transfer(
            address(this).balance.mul(_resevoirFee).div(fees)
        );
        payable(_marketingWallet).transfer(
            address(this).balance.mul(_marketingFee).div(fees)
        );

        _tokensForFunding = 0;
        _tokensForLiquidity = 0;
        _tokensForResevoir = 0;
        _tokensForMarketing = 0;
        _tokensForUtility = 0;
    }

    /**
     * @dev Transfer funds stuck in contract
     */
    function updateSupply(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":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"address","name":"_utility","type":"address"},{"internalType":"bool","name":"_utilityActive","type":"bool"},{"internalType":"address","name":"fundingWallet","type":"address"},{"internalType":"address","name":"resevoirWallet","type":"address"},{"internalType":"address","name":"marketingWallet","type":"address"},{"internalType":"address","name":"LPAddress","type":"address"},{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"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":[{"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"},{"internalType":"bool","name":"active","type":"bool"}],"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":[],"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":"uint256","name":"tokenAmt","type":"uint256"}],"name":"getOptimalResult","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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":"resevoirWallet","type":"address"},{"internalType":"address","name":"marketingWallet","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":"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":"resevoirFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","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":"to","type":"address"},{"internalType":"uint256","name":"amountToTransfer","type":"uint256"}],"name":"updateSupply","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"}]

608060405262000014620007d160201b60201c565b600a6200002291906200124b565b6161a86200003191906200129c565b600d556000601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff021916908315150217905550600060125560006013556000601455600060155560006016556012546016546015546014546013546200009e9190620012fd565b620000aa9190620012fd565b620000b69190620012fd565b620000c29190620012fd565b601f556040516200774a3803806200774a8339818101604052810190620000ea9190620015ca565b8a8a8160039081620000fd919062001956565b5080600490816200010f919062001956565b5050506200013262000126620007da60201b60201c565b620007e260201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015c8a620008a860201b60201c565b6200016e89896200096d60201b60201c565b620001828787878762000a5b60201b60201c565b62000194838362000bf460201b60201c565b6001602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600069d3c21bcecceda100000090506001601e60016101000a81548160ff0219169083151502179055506001601e60006101000a81548160ff02191690831515021790555033600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200038d6127118061271162000cea60201b60201c565b620003af620003a162000e1160201b60201c565b600162000e3b60201b60201c565b620003c230600162000e3b60201b60201c565b620003d761dead600162000e3b60201b60201c565b6200040c600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000e3b60201b60201c565b62000441600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000e3b60201b60201c565b62000476600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000e3b60201b60201c565b620004ab600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000e3b60201b60201c565b600160216000620004c162000e1160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001602160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016021600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160216000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160216000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160216000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160216000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620007be308262000f2560201b60201c565b5050505050505050505050505062001c39565b60006012905090565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620008b8620007da60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008de62000e1160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000937576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200092e9062001a9e565b60405180910390fd5b620f4240816200094c6200109d60201b60201c565b6200095891906200129c565b62000964919062001aef565b600d8190555050565b6200097d620007da60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620009a362000e1160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620009fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009f39062001a9e565b60405180910390fd5b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601e60026101000a81548160ff0219169083151502179055505050565b62000a6b620007da60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a9162000e1160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ae19062001a9e565b60405180910390fd5b83600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b62000c04620007da60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000c2a62000e1160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000c83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c7a9062001a9e565b60405180910390fd5b600a821115801562000c96575060648111155b62000cd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ccf9062001b77565b60405180910390fd5b81601c8190555080601d819055505050565b62000cfa620007da60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000d2062000e1160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000d79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d709062001a9e565b60405180910390fd5b62000d89620007d160201b60201c565b600a62000d9791906200124b565b8362000da491906200129c565b600e8190555062000dba620007d160201b60201c565b600a62000dc891906200124b565b8262000dd591906200129c565b600f8190555062000deb620007d160201b60201c565b600a62000df991906200124b565b8162000e0691906200129c565b601081905550505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000e4b620007da60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000e7162000e1160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000eca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ec19062001a9e565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000f97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f8e9062001be9565b60405180910390fd5b62000fab60008383620010a760201b60201c565b806002600082825462000fbf9190620012fd565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620010169190620012fd565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200107d919062001c1c565b60405180910390a36200109960008383620010ac60201b60201c565b5050565b6000600254905090565b505050565b505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200113f57808604811115620011175762001116620010b1565b5b6001851615620011275780820291505b80810290506200113785620010e0565b9450620010f7565b94509492505050565b6000826200115a57600190506200122d565b816200116a57600090506200122d565b81600181146200118357600281146200118e57620011c4565b60019150506200122d565b60ff841115620011a357620011a2620010b1565b5b8360020a915084821115620011bd57620011bc620010b1565b5b506200122d565b5060208310610133831016604e8410600b8410161715620011fe5782820a905083811115620011f857620011f7620010b1565b5b6200122d565b6200120d8484846001620010ed565b92509050818404811115620012275762001226620010b1565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620012588262001234565b915062001265836200123e565b9250620012947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001148565b905092915050565b6000620012a98262001234565b9150620012b68362001234565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620012f257620012f1620010b1565b5b828202905092915050565b60006200130a8262001234565b9150620013178362001234565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200134f576200134e620010b1565b5b828201905092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620013c38262001378565b810181811067ffffffffffffffff82111715620013e557620013e462001389565b5b80604052505050565b6000620013fa6200135a565b9050620014088282620013b8565b919050565b600067ffffffffffffffff8211156200142b576200142a62001389565b5b620014368262001378565b9050602081019050919050565b60005b838110156200146357808201518184015260208101905062001446565b8381111562001473576000848401525b50505050565b6000620014906200148a846200140d565b620013ee565b905082815260208101848484011115620014af57620014ae62001373565b5b620014bc84828562001443565b509392505050565b600082601f830112620014dc57620014db6200136e565b5b8151620014ee84826020860162001479565b91505092915050565b620015028162001234565b81146200150e57600080fd5b50565b6000815190506200152281620014f7565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620015558262001528565b9050919050565b620015678162001548565b81146200157357600080fd5b50565b60008151905062001587816200155c565b92915050565b60008115159050919050565b620015a4816200158d565b8114620015b057600080fd5b50565b600081519050620015c48162001599565b92915050565b60008060008060008060008060008060006101608c8e031215620015f357620015f262001364565b5b60008c015167ffffffffffffffff81111562001614576200161362001369565b5b620016228e828f01620014c4565b9b505060208c015167ffffffffffffffff81111562001646576200164562001369565b5b620016548e828f01620014c4565b9a50506040620016678e828f0162001511565b99505060606200167a8e828f0162001576565b98505060806200168d8e828f01620015b3565b97505060a0620016a08e828f0162001576565b96505060c0620016b38e828f0162001576565b95505060e0620016c68e828f0162001576565b945050610100620016da8e828f0162001576565b935050610120620016ee8e828f0162001511565b925050610140620017028e828f0162001511565b9150509295989b509295989b9093969950565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200176857607f821691505b6020821081036200177e576200177d62001720565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620017e87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620017a9565b620017f48683620017a9565b95508019841693508086168417925050509392505050565b6000819050919050565b600062001837620018316200182b8462001234565b6200180c565b62001234565b9050919050565b6000819050919050565b620018538362001816565b6200186b62001862826200183e565b848454620017b6565b825550505050565b600090565b6200188262001873565b6200188f81848462001848565b505050565b5b81811015620018b757620018ab60008262001878565b60018101905062001895565b5050565b601f8211156200190657620018d08162001784565b620018db8462001799565b81016020851015620018eb578190505b62001903620018fa8562001799565b83018262001894565b50505b505050565b600082821c905092915050565b60006200192b600019846008026200190b565b1980831691505092915050565b600062001946838362001918565b9150826002028217905092915050565b620019618262001715565b67ffffffffffffffff8111156200197d576200197c62001389565b5b6200198982546200174f565b62001996828285620018bb565b600060209050601f831160018114620019ce5760008415620019b9578287015190505b620019c5858262001938565b86555062001a35565b601f198416620019de8662001784565b60005b8281101562001a0857848901518255600182019150602085019450602081019050620019e1565b8683101562001a28578489015162001a24601f89168262001918565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001a8660208362001a3d565b915062001a938262001a4e565b602082019050919050565b6000602082019050818103600083015262001ab98162001a77565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062001afc8262001234565b915062001b098362001234565b92508262001b1c5762001b1b62001ac0565b5b828204905092915050565b7f546f6f206d756368206665650000000000000000000000000000000000000000600082015250565b600062001b5f600c8362001a3d565b915062001b6c8262001b27565b602082019050919050565b6000602082019050818103600083015262001b928162001b50565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001bd1601f8362001a3d565b915062001bde8262001b99565b602082019050919050565b6000602082019050818103600083015262001c048162001bc2565b9050919050565b62001c168162001234565b82525050565b600060208201905062001c33600083018462001c0b565b92915050565b615b018062001c496000396000f3fe6080604052600436106102815760003560e01c8063572eeb281161014f57806395d89b41116100c1578063dd62ed3e1161007a578063dd62ed3e1461096d578063df778d26146109aa578063e47d6060146109c1578063e4997dc5146109fe578063f2fde38b14610a27578063f8b45b0514610a5057610288565b806395d89b411461084b578063a457c2d714610876578063a9059cbb146108b3578063b1d0b725146108f0578063bb5e048a1461091b578063c02466681461094457610288565b8063715018a611610113578063715018a614610775578063751039fc1461078c5780638a8c523c146107a35780638ac7f595146107ba5780638da5cb5b146107f757806393b1c69c1461082257610288565b8063572eeb28146106b657806365cffb1e146106cd578063677ef846146106f85780636ac5eeee1461072157806370a082311461073857610288565b80632b14ca56116101f3578063399e4bfb116101ac578063399e4bfb146105a657806340b2f5b5146105d1578063457ffca2146105fc57806347062402146106255780634ec39958146106505780634fbee1931461067957610288565b80632b14ca56146104965780632e1888b8146104c1578063313ce567146104ea5780633415650e1461051557806336a0f8a514610540578063395093511461056957610288565b806311704f521161024557806311704f521461037257806313114a9d1461039d578063163a37ba146103c857806318160ddd1461040557806323b872dd14610430578063277a22051461046d57610288565b806302bf2a5c1461028d57806306fdde03146102b8578063095ea7b3146102e35780630980234f146103205780630ecb93c01461034957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610a7b565b6040516102af9190614223565b60405180910390f35b3480156102c457600080fd5b506102cd610a81565b6040516102da91906142d7565b60405180910390f35b3480156102ef57600080fd5b5061030a60048036038101906103059190614397565b610b13565b60405161031791906143f2565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190614439565b610b36565b005b34801561035557600080fd5b50610370600480360381019061036b9190614479565b610c11565b005b34801561037e57600080fd5b50610387610ce8565b60405161039491906143f2565b60405180910390f35b3480156103a957600080fd5b506103b2610cfb565b6040516103bf9190614223565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190614479565b610d01565b6040516103fc91906143f2565b60405180910390f35b34801561041157600080fd5b5061041a610d57565b6040516104279190614223565b60405180910390f35b34801561043c57600080fd5b50610457600480360381019061045291906144a6565b610d61565b60405161046491906143f2565b60405180910390f35b34801561047957600080fd5b50610494600480360381019061048f91906144f9565b610d90565b005b3480156104a257600080fd5b506104ab610e36565b6040516104b89190614223565b60405180910390f35b3480156104cd57600080fd5b506104e860048036038101906104e39190614397565b610e3c565b005b3480156104f657600080fd5b506104ff610f03565b60405161050c9190614542565b60405180910390f35b34801561052157600080fd5b5061052a610f0c565b60405161053791906143f2565b60405180910390f35b34801561054c57600080fd5b506105676004803603810190610562919061455d565b610f1f565b005b34801561057557600080fd5b50610590600480360381019061058b9190614397565b61100f565b60405161059d91906143f2565b60405180910390f35b3480156105b257600080fd5b506105bb6110b9565b6040516105c89190614223565b60405180910390f35b3480156105dd57600080fd5b506105e66110bf565b6040516105f391906145bf565b60405180910390f35b34801561060857600080fd5b50610623600480360381019061061e91906145da565b6110e5565b005b34801561063157600080fd5b5061063a6111fa565b6040516106479190614223565b60405180910390f35b34801561065c57600080fd5b5061067760048036038101906106729190614397565b611200565b005b34801561068557600080fd5b506106a0600480360381019061069b9190614479565b61128b565b6040516106ad91906143f2565b60405180910390f35b3480156106c257600080fd5b506106cb6112e1565b005b3480156106d957600080fd5b506106e261173c565b6040516106ef91906143f2565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a9190614655565b61174f565b005b34801561072d57600080fd5b506107366118d5565b005b34801561074457600080fd5b5061075f600480360381019061075a9190614479565b611bd1565b60405161076c9190614223565b60405180910390f35b34801561078157600080fd5b5061078a611c19565b005b34801561079857600080fd5b506107a1611ca1565b005b3480156107af57600080fd5b506107b8611d94565b005b3480156107c657600080fd5b506107e160048036038101906107dc91906144f9565b611e2d565b6040516107ee919061477a565b60405180910390f35b34801561080357600080fd5b5061080c612056565b60405161081991906145bf565b60405180910390f35b34801561082e57600080fd5b506108496004803603810190610844919061479c565b612080565b005b34801561085757600080fd5b5061086061215f565b60405161086d91906142d7565b60405180910390f35b34801561088257600080fd5b5061089d60048036038101906108989190614397565b6121f1565b6040516108aa91906143f2565b60405180910390f35b3480156108bf57600080fd5b506108da60048036038101906108d59190614397565b6122db565b6040516108e791906143f2565b60405180910390f35b3480156108fc57600080fd5b506109056122fe565b60405161091291906143f2565b60405180910390f35b34801561092757600080fd5b50610942600480360381019061093d91906147dc565b612311565b005b34801561095057600080fd5b5061096b60048036038101906109669190614439565b6123aa565b005b34801561097957600080fd5b50610994600480360381019061098f9190614809565b612481565b6040516109a19190614223565b60405180910390f35b3480156109b657600080fd5b506109bf612508565b005b3480156109cd57600080fd5b506109e860048036038101906109e39190614479565b612597565b6040516109f591906143f2565b60405180910390f35b348015610a0a57600080fd5b50610a256004803603810190610a209190614479565b6125b7565b005b348015610a3357600080fd5b50610a4e6004803603810190610a499190614479565b61268e565b005b348015610a5c57600080fd5b50610a65612785565b604051610a729190614223565b60405180910390f35b600e5481565b606060038054610a9090614878565b80601f0160208091040260200160405190810160405280929190818152602001828054610abc90614878565b8015610b095780601f10610ade57610100808354040283529160200191610b09565b820191906000526020600020905b815481529060010190602001808311610aec57829003601f168201915b5050505050905090565b600080610b1e61278b565b9050610b2b818585612793565b600191505092915050565b610b3e61278b565b73ffffffffffffffffffffffffffffffffffffffff16610b5c612056565b73ffffffffffffffffffffffffffffffffffffffff1614610bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba9906148f5565b60405180910390fd5b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601e60026101000a81548160ff0219169083151502179055505050565b610c1961278b565b73ffffffffffffffffffffffffffffffffffffffff16610c37612056565b73ffffffffffffffffffffffffffffffffffffffff1614610c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c84906148f5565b60405180910390fd5b6001602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601160019054906101000a900460ff1681565b601f5481565b6000602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600254905090565b600080610d6c61278b565b9050610d7985828561295c565b610d848585856129e8565b60019150509392505050565b610d9861278b565b73ffffffffffffffffffffffffffffffffffffffff16610db6612056565b73ffffffffffffffffffffffffffffffffffffffff1614610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e03906148f5565b60405180910390fd5b620f424081610e19610d57565b610e239190614944565b610e2d91906149cd565b600d8190555050565b601d5481565b610e4461278b565b73ffffffffffffffffffffffffffffffffffffffff16610e62612056565b73ffffffffffffffffffffffffffffffffffffffff1614610eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaf906148f5565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610efe573d6000803e3d6000fd5b505050565b60006012905090565b601e60009054906101000a900460ff1681565b610f2761278b565b73ffffffffffffffffffffffffffffffffffffffff16610f45612056565b73ffffffffffffffffffffffffffffffffffffffff1614610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f92906148f5565b60405180910390fd5b610fa3610f03565b600a610faf9190614b31565b83610fba9190614944565b600e81905550610fc8610f03565b600a610fd49190614b31565b82610fdf9190614944565b600f81905550610fed610f03565b600a610ff99190614b31565b816110049190614944565b601081905550505050565b60008061101a61278b565b90506110ae818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110a99190614b7c565b612793565b600191505092915050565b600f5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110ed61278b565b73ffffffffffffffffffffffffffffffffffffffff1661110b612056565b73ffffffffffffffffffffffffffffffffffffffff1614611161576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611158906148f5565b60405180910390fd5b6014848385886111719190614b7c565b61117b9190614b7c565b6111859190614b7c565b111561119057600080fd5b6005811061119d57600080fd5b806012819055508460138190555083601481905550826015819055508160168190555080828486886111cf9190614b7c565b6111d99190614b7c565b6111e39190614b7c565b6111ed9190614b7c565b601f819055505050505050565b601c5481565b61120861278b565b73ffffffffffffffffffffffffffffffffffffffff16611226612056565b73ffffffffffffffffffffffffffffffffffffffff161461127c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611273906148f5565b60405180910390fd5b6112873083836129e8565b5050565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6112e961278b565b73ffffffffffffffffffffffffffffffffffffffff16611307612056565b73ffffffffffffffffffffffffffffffffffffffff161461135d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611354906148f5565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ee9190614be7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611477573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149b9190614be7565b6040518363ffffffff1660e01b81526004016114b8929190614c14565b6020604051808303816000875af11580156114d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fb9190614be7565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160216000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160226000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061166330600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661165e610d57565b612793565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306116ac30611bd1565b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016116f496959493929190614c82565b60606040518083038185885af1158015611712573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117379190614cf8565b505050565b601160009054906101000a900460ff1681565b61175761278b565b73ffffffffffffffffffffffffffffffffffffffff16611775612056565b73ffffffffffffffffffffffffffffffffffffffff16146117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c2906148f5565b60405180910390fd5b83600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b60006118e030611bd1565b9050600081036118f05750611bcf565b6000600260195461190191906149cd565b90506000601754601b54601a546018548561191c9190614b7c565b6119269190614b7c565b6119309190614b7c565b61193a9190614b7c565b9050611945816136db565b655af3107a4000601754111561198a576000611962601754611e2d565b90506119888160018151811061197b5761197a614d4b565b5b6020026020010151613927565b505b655af3107a40008211156119d45760006119a383611e2d565b90506119d26119b130611bd1565b826001815181106119c5576119c4614d4b565b5b6020026020010151613d8f565b505b60006016546015546013546119e99190614b7c565b6119f39190614b7c565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611a5883611a4a60135447613e8f90919063ffffffff16565b613ea590919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015611a83573d6000803e3d6000fd5b50600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611ae783611ad960155447613e8f90919063ffffffff16565b613ea590919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015611b12573d6000803e3d6000fd5b50600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611b7683611b6860165447613e8f90919063ffffffff16565b613ea590919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015611ba1573d6000803e3d6000fd5b50600060188190555060006019819055506000601a819055506000601b819055506000601781905550505050505b565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c2161278b565b73ffffffffffffffffffffffffffffffffffffffff16611c3f612056565b73ffffffffffffffffffffffffffffffffffffffff1614611c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8c906148f5565b60405180910390fd5b611c9f6000613ebb565b565b611ca961278b565b73ffffffffffffffffffffffffffffffffffffffff16611cc7612056565b73ffffffffffffffffffffffffffffffffffffffff1614611d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d14906148f5565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600e819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600f819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601081905550565b611d9c61278b565b73ffffffffffffffffffffffffffffffffffffffff16611dba612056565b73ffffffffffffffffffffffffffffffffffffffff1614611e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e07906148f5565b60405180910390fd5b6001601160016101000a81548160ff021916908315150217905550565b60606000600267ffffffffffffffff811115611e4c57611e4b614d7a565b5b604051908082528060200260200182016040528015611e7a5781602001602082028036833780820191505090505b5090503081600081518110611e9257611e91614d4b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5d9190614be7565b81600181518110611f7157611f70614d4b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b8152600401612008929190614e67565b600060405180830381865afa158015612025573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061204e9190614fb0565b915050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61208861278b565b73ffffffffffffffffffffffffffffffffffffffff166120a6612056565b73ffffffffffffffffffffffffffffffffffffffff16146120fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f3906148f5565b60405180910390fd5b600a821115801561210e575060648111155b61214d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214490615045565b60405180910390fd5b81601c8190555080601d819055505050565b60606004805461216e90614878565b80601f016020809104026020016040519081016040528092919081815260200182805461219a90614878565b80156121e75780601f106121bc576101008083540402835291602001916121e7565b820191906000526020600020905b8154815290600101906020018083116121ca57829003601f168201915b5050505050905090565b6000806121fc61278b565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156122c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b9906150d7565b60405180910390fd5b6122cf8286868403612793565b60019250505092915050565b6000806122e661278b565b90506122f38185856129e8565b600191505092915050565b601e60019054906101000a900460ff1681565b61231961278b565b73ffffffffffffffffffffffffffffffffffffffff16612337612056565b73ffffffffffffffffffffffffffffffffffffffff161461238d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612384906148f5565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b6123b261278b565b73ffffffffffffffffffffffffffffffffffffffff166123d0612056565b73ffffffffffffffffffffffffffffffffffffffff1614612426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241d906148f5565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61251061278b565b73ffffffffffffffffffffffffffffffffffffffff1661252e612056565b73ffffffffffffffffffffffffffffffffffffffff1614612584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257b906148f5565b60405180910390fd5b61259561259030611bd1565b6136db565b565b60246020528060005260406000206000915054906101000a900460ff1681565b6125bf61278b565b73ffffffffffffffffffffffffffffffffffffffff166125dd612056565b73ffffffffffffffffffffffffffffffffffffffff1614612633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262a906148f5565b60405180910390fd5b6000602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61269661278b565b73ffffffffffffffffffffffffffffffffffffffff166126b4612056565b73ffffffffffffffffffffffffffffffffffffffff161461270a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612701906148f5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612779576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277090615169565b60405180910390fd5b61278281613ebb565b50565b60105481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f9906151fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612871576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128689061528d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161294f9190614223565b60405180910390a3505050565b60006129688484612481565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146129e257818110156129d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cb906152f9565b60405180910390fd5b6129e18484848403612793565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4e9061538b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abd9061541d565b60405180910390fd5b602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4a90615489565b60405180910390fd5b602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd7906154f5565b60405180910390fd5b60008103612bf957612bf483836000613f81565b6136d6565b612c01612056565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c6f5750612c3f612056565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ca85750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ce2575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cfb5750600760149054906101000a900460ff16155b156130de57601160019054906101000a900460ff16612df557602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612db55750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612deb90615587565b60405180910390fd5b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e985750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f3f57600e54811115612ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed99061563f565b60405180910390fd5b601054612eee83611bd1565b82612ef99190614b7c565b1115612f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f31906156ab565b60405180910390fd5b6130dd565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fe25750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561303157600f5481111561302c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302390615763565b60405180910390fd5b6130dc565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130db5760105461308e83611bd1565b826130999190614b7c565b11156130da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d1906156ab565b60405180910390fd5b5b5b5b5b6000600d546130ec30611bd1565b1015905080801561310a5750600760149054906101000a900460ff16155b80156131605750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131b65750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561320c5750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613250576001600760146101000a81548160ff0219169083151502179055506132346118d5565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601160009054906101000a900460ff16806132c95750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061331d5750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806133c85750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133c75750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b156133d257600090505b600081156136c7576000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361348a57601e60019054906101000a900460ff16613480576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613477906157cf565b60405180910390fd5b601d549050613535565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff160361353457601e60009054906101000a900460ff1661352e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135259061583b565b60405180910390fd5b601c5490505b5b61355b606461354d8388613e8f90919063ffffffff16565b613ea590919063ffffffff16565b9150613586601f5461357860145485613e8f90919063ffffffff16565b613ea590919063ffffffff16565b601960008282546135979190614b7c565b925050819055506135c7601f546135b960135485613e8f90919063ffffffff16565b613ea590919063ffffffff16565b601860008282546135d89190614b7c565b92505081905550613608601f546135fa60155485613e8f90919063ffffffff16565b613ea590919063ffffffff16565b601a60008282546136199190614b7c565b92505081905550613649601f5461363b60165485613e8f90919063ffffffff16565b613ea590919063ffffffff16565b601b600082825461365a9190614b7c565b9250508190555061368a601f5461367c60125485613e8f90919063ffffffff16565b613ea590919063ffffffff16565b6017600082825461369b9190614b7c565b9250508190555060008211156136b7576136b6873084613f81565b5b81856136c3919061585b565b9450505b6136d2868686613f81565b5050505b505050565b60008114613924576000600267ffffffffffffffff811115613700576136ff614d7a565b5b60405190808252806020026020018201604052801561372e5781602001602082028036833780820191505090505b509050308160008151811061374657613745614d4b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138119190614be7565b8160018151811061382557613824614d4b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061388c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612793565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016138f095949392919061588f565b600060405180830381600087803b15801561390a57600080fd5b505af115801561391e573d6000803e3d6000fd5b50505050505b50565b60008114613d8c576000600267ffffffffffffffff81111561394c5761394b614d7a565b5b60405190808252806020026020018201604052801561397a5781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139ea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0e9190614be7565b81600081518110613a2257613a21614d4b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613a9357613a92614d4b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008430426040518663ffffffff1660e01b8152600401613b3094939291906158e9565b6000604051808303818588803b158015613b4957600080fd5b505af1158015613b5d573d6000803e3d6000fd5b50505050506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613bbf91906145bf565b602060405180830381865afa158015613bdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c009190615935565b9050601e60029054906101000a900460ff1615613cc557600061dead9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82846040518363ffffffff1660e01b8152600401613c7b929190615962565b6020604051808303816000875af1158015613c9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cbe91906159a0565b5050613d89565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401613d44929190615962565b6020604051808303816000875af1158015613d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d8791906159a0565b505b50505b50565b613dbc30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612793565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613e4596959493929190614c82565b60606040518083038185885af1158015613e63573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613e889190614cf8565b5050505050565b60008183613e9d9190614944565b905092915050565b60008183613eb391906149cd565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fe790615a19565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361405f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140569061541d565b60405180910390fd5b61406a838383614200565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156140f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140e790615aab565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546141839190614b7c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516141e79190614223565b60405180910390a36141fa848484614205565b50505050565b505050565b505050565b6000819050919050565b61421d8161420a565b82525050565b60006020820190506142386000830184614214565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561427857808201518184015260208101905061425d565b83811115614287576000848401525b50505050565b6000601f19601f8301169050919050565b60006142a98261423e565b6142b38185614249565b93506142c381856020860161425a565b6142cc8161428d565b840191505092915050565b600060208201905081810360008301526142f1818461429e565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143388261430d565b9050919050565b6143488161432d565b811461435357600080fd5b50565b6000813590506143658161433f565b92915050565b6143748161420a565b811461437f57600080fd5b50565b6000813590506143918161436b565b92915050565b600080604083850312156143ae576143ad614303565b5b60006143bc85828601614356565b92505060206143cd85828601614382565b9150509250929050565b60008115159050919050565b6143ec816143d7565b82525050565b600060208201905061440760008301846143e3565b92915050565b614416816143d7565b811461442157600080fd5b50565b6000813590506144338161440d565b92915050565b600080604083850312156144505761444f614303565b5b600061445e85828601614356565b925050602061446f85828601614424565b9150509250929050565b60006020828403121561448f5761448e614303565b5b600061449d84828501614356565b91505092915050565b6000806000606084860312156144bf576144be614303565b5b60006144cd86828701614356565b93505060206144de86828701614356565b92505060406144ef86828701614382565b9150509250925092565b60006020828403121561450f5761450e614303565b5b600061451d84828501614382565b91505092915050565b600060ff82169050919050565b61453c81614526565b82525050565b60006020820190506145576000830184614533565b92915050565b60008060006060848603121561457657614575614303565b5b600061458486828701614382565b935050602061459586828701614382565b92505060406145a686828701614382565b9150509250925092565b6145b98161432d565b82525050565b60006020820190506145d460008301846145b0565b92915050565b600080600080600060a086880312156145f6576145f5614303565b5b600061460488828901614382565b955050602061461588828901614382565b945050604061462688828901614382565b935050606061463788828901614382565b925050608061464888828901614382565b9150509295509295909350565b6000806000806080858703121561466f5761466e614303565b5b600061467d87828801614356565b945050602061468e87828801614356565b935050604061469f87828801614356565b92505060606146b087828801614356565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6146f18161420a565b82525050565b600061470383836146e8565b60208301905092915050565b6000602082019050919050565b6000614727826146bc565b61473181856146c7565b935061473c836146d8565b8060005b8381101561476d57815161475488826146f7565b975061475f8361470f565b925050600181019050614740565b5085935050505092915050565b60006020820190508181036000830152614794818461471c565b905092915050565b600080604083850312156147b3576147b2614303565b5b60006147c185828601614382565b92505060206147d285828601614382565b9150509250929050565b6000602082840312156147f2576147f1614303565b5b600061480084828501614424565b91505092915050565b600080604083850312156148205761481f614303565b5b600061482e85828601614356565b925050602061483f85828601614356565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061489057607f821691505b6020821081036148a3576148a2614849565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006148df602083614249565b91506148ea826148a9565b602082019050919050565b6000602082019050818103600083015261490e816148d2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061494f8261420a565b915061495a8361420a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561499357614992614915565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149d88261420a565b91506149e38361420a565b9250826149f3576149f261499e565b5b828204905092915050565b60008160011c9050919050565b6000808291508390505b6001851115614a5557808604811115614a3157614a30614915565b5b6001851615614a405780820291505b8081029050614a4e856149fe565b9450614a15565b94509492505050565b600082614a6e5760019050614b2a565b81614a7c5760009050614b2a565b8160018114614a925760028114614a9c57614acb565b6001915050614b2a565b60ff841115614aae57614aad614915565b5b8360020a915084821115614ac557614ac4614915565b5b50614b2a565b5060208310610133831016604e8410600b8410161715614b005782820a905083811115614afb57614afa614915565b5b614b2a565b614b0d8484846001614a0b565b92509050818404811115614b2457614b23614915565b5b81810290505b9392505050565b6000614b3c8261420a565b9150614b4783614526565b9250614b747fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614a5e565b905092915050565b6000614b878261420a565b9150614b928361420a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614bc757614bc6614915565b5b828201905092915050565b600081519050614be18161433f565b92915050565b600060208284031215614bfd57614bfc614303565b5b6000614c0b84828501614bd2565b91505092915050565b6000604082019050614c2960008301856145b0565b614c3660208301846145b0565b9392505050565b6000819050919050565b6000819050919050565b6000614c6c614c67614c6284614c3d565b614c47565b61420a565b9050919050565b614c7c81614c51565b82525050565b600060c082019050614c9760008301896145b0565b614ca46020830188614214565b614cb16040830187614c73565b614cbe6060830186614c73565b614ccb60808301856145b0565b614cd860a0830184614214565b979650505050505050565b600081519050614cf28161436b565b92915050565b600080600060608486031215614d1157614d10614303565b5b6000614d1f86828701614ce3565b9350506020614d3086828701614ce3565b9250506040614d4186828701614ce3565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614dde8161432d565b82525050565b6000614df08383614dd5565b60208301905092915050565b6000602082019050919050565b6000614e1482614da9565b614e1e8185614db4565b9350614e2983614dc5565b8060005b83811015614e5a578151614e418882614de4565b9750614e4c83614dfc565b925050600181019050614e2d565b5085935050505092915050565b6000604082019050614e7c6000830185614214565b8181036020830152614e8e8184614e09565b90509392505050565b600080fd5b614ea58261428d565b810181811067ffffffffffffffff82111715614ec457614ec3614d7a565b5b80604052505050565b6000614ed76142f9565b9050614ee38282614e9c565b919050565b600067ffffffffffffffff821115614f0357614f02614d7a565b5b602082029050602081019050919050565b600080fd5b6000614f2c614f2784614ee8565b614ecd565b90508083825260208201905060208402830185811115614f4f57614f4e614f14565b5b835b81811015614f785780614f648882614ce3565b845260208401935050602081019050614f51565b5050509392505050565b600082601f830112614f9757614f96614e97565b5b8151614fa7848260208601614f19565b91505092915050565b600060208284031215614fc657614fc5614303565b5b600082015167ffffffffffffffff811115614fe457614fe3614308565b5b614ff084828501614f82565b91505092915050565b7f546f6f206d756368206665650000000000000000000000000000000000000000600082015250565b600061502f600c83614249565b915061503a82614ff9565b602082019050919050565b6000602082019050818103600083015261505e81615022565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006150c1602583614249565b91506150cc82615065565b604082019050919050565b600060208201905081810360008301526150f0816150b4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615153602683614249565b915061515e826150f7565b604082019050919050565b6000602082019050818103600083015261518281615146565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006151e5602483614249565b91506151f082615189565b604082019050919050565b60006020820190508181036000830152615214816151d8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615277602283614249565b91506152828261521b565b604082019050919050565b600060208201905081810360008301526152a68161526a565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006152e3601d83614249565b91506152ee826152ad565b602082019050919050565b60006020820190508181036000830152615312816152d6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615375602583614249565b915061538082615319565b604082019050919050565b600060208201905081810360008301526153a481615368565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615407602383614249565b9150615412826153ab565b604082019050919050565b60006020820190508181036000830152615436816153fa565b9050919050565b7f53656e64657220426c61636b6c69737465640000000000000000000000000000600082015250565b6000615473601283614249565b915061547e8261543d565b602082019050919050565b600060208201905081810360008301526154a281615466565b9050919050565b7f526563656976657220426c61636b6c6973746564000000000000000000000000600082015250565b60006154df601483614249565b91506154ea826154a9565b602082019050919050565b6000602082019050818103600083015261550e816154d2565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b6000615571602283614249565b915061557c82615515565b604082019050919050565b600060208201905081810360008301526155a081615564565b9050919050565b7f5f7472616e736665723a3a20427579207472616e7366657220616d6f756e742060008201527f6578636565647320746865206d61785472616e73616374696f6e416d6f756e7460208201527f2e00000000000000000000000000000000000000000000000000000000000000604082015250565b6000615629604183614249565b9150615634826155a7565b606082019050919050565b600060208201905081810360008301526156588161561c565b9050919050565b7f5f7472616e736665723a3a204d61782077616c6c657420657863656564656400600082015250565b6000615695601f83614249565b91506156a08261565f565b602082019050919050565b600060208201905081810360008301526156c481615688565b9050919050565b7f5f7472616e736665723a3a2053656c6c207472616e7366657220616d6f756e7460008201527f206578636565647320746865206d61785472616e73616374696f6e416d6f756e60208201527f742e000000000000000000000000000000000000000000000000000000000000604082015250565b600061574d604283614249565b9150615758826156cb565b606082019050919050565b6000602082019050818103600083015261577c81615740565b9050919050565b7f53656c6c2073746174757320697320636c6f7365640000000000000000000000600082015250565b60006157b9601583614249565b91506157c482615783565b602082019050919050565b600060208201905081810360008301526157e8816157ac565b9050919050565b7f4275792073746174757320697320636c6f736564000000000000000000000000600082015250565b6000615825601483614249565b9150615830826157ef565b602082019050919050565b6000602082019050818103600083015261585481615818565b9050919050565b60006158668261420a565b91506158718361420a565b92508282101561588457615883614915565b5b828203905092915050565b600060a0820190506158a46000830188614214565b6158b16020830187614c73565b81810360408301526158c38186614e09565b90506158d260608301856145b0565b6158df6080830184614214565b9695505050505050565b60006080820190506158fe6000830187614c73565b81810360208301526159108186614e09565b905061591f60408301856145b0565b61592c6060830184614214565b95945050505050565b60006020828403121561594b5761594a614303565b5b600061595984828501614ce3565b91505092915050565b600060408201905061597760008301856145b0565b6159846020830184614214565b9392505050565b60008151905061599a8161440d565b92915050565b6000602082840312156159b6576159b5614303565b5b60006159c48482850161598b565b91505092915050565b7f45524332303a20612066726f6d20746865207a65726f20616464726573730000600082015250565b6000615a03601e83614249565b9150615a0e826159cd565b602082019050919050565b60006020820190508181036000830152615a32816159f6565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615a95602683614249565b9150615aa082615a39565b604082019050919050565b60006020820190508181036000830152615ac481615a88565b905091905056fea2646970667358221220a44f3ebe343de30e0e75c7f2fcecab43d22413f792109b11c271ff6de97e337164736f6c634300080f0033000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c5990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018c2f250ae9874495a781012629054572afd2be000000000000000000000000018c2f250ae9874495a781012629054572afd2be000000000000000000000000dd092a9f41b41201381d4128cc9a412863910c88000000000000000000000000018c2f250ae9874495a781012629054572afd2be000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008426974546f6b656e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034254580000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102815760003560e01c8063572eeb281161014f57806395d89b41116100c1578063dd62ed3e1161007a578063dd62ed3e1461096d578063df778d26146109aa578063e47d6060146109c1578063e4997dc5146109fe578063f2fde38b14610a27578063f8b45b0514610a5057610288565b806395d89b411461084b578063a457c2d714610876578063a9059cbb146108b3578063b1d0b725146108f0578063bb5e048a1461091b578063c02466681461094457610288565b8063715018a611610113578063715018a614610775578063751039fc1461078c5780638a8c523c146107a35780638ac7f595146107ba5780638da5cb5b146107f757806393b1c69c1461082257610288565b8063572eeb28146106b657806365cffb1e146106cd578063677ef846146106f85780636ac5eeee1461072157806370a082311461073857610288565b80632b14ca56116101f3578063399e4bfb116101ac578063399e4bfb146105a657806340b2f5b5146105d1578063457ffca2146105fc57806347062402146106255780634ec39958146106505780634fbee1931461067957610288565b80632b14ca56146104965780632e1888b8146104c1578063313ce567146104ea5780633415650e1461051557806336a0f8a514610540578063395093511461056957610288565b806311704f521161024557806311704f521461037257806313114a9d1461039d578063163a37ba146103c857806318160ddd1461040557806323b872dd14610430578063277a22051461046d57610288565b806302bf2a5c1461028d57806306fdde03146102b8578063095ea7b3146102e35780630980234f146103205780630ecb93c01461034957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610a7b565b6040516102af9190614223565b60405180910390f35b3480156102c457600080fd5b506102cd610a81565b6040516102da91906142d7565b60405180910390f35b3480156102ef57600080fd5b5061030a60048036038101906103059190614397565b610b13565b60405161031791906143f2565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190614439565b610b36565b005b34801561035557600080fd5b50610370600480360381019061036b9190614479565b610c11565b005b34801561037e57600080fd5b50610387610ce8565b60405161039491906143f2565b60405180910390f35b3480156103a957600080fd5b506103b2610cfb565b6040516103bf9190614223565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190614479565b610d01565b6040516103fc91906143f2565b60405180910390f35b34801561041157600080fd5b5061041a610d57565b6040516104279190614223565b60405180910390f35b34801561043c57600080fd5b50610457600480360381019061045291906144a6565b610d61565b60405161046491906143f2565b60405180910390f35b34801561047957600080fd5b50610494600480360381019061048f91906144f9565b610d90565b005b3480156104a257600080fd5b506104ab610e36565b6040516104b89190614223565b60405180910390f35b3480156104cd57600080fd5b506104e860048036038101906104e39190614397565b610e3c565b005b3480156104f657600080fd5b506104ff610f03565b60405161050c9190614542565b60405180910390f35b34801561052157600080fd5b5061052a610f0c565b60405161053791906143f2565b60405180910390f35b34801561054c57600080fd5b506105676004803603810190610562919061455d565b610f1f565b005b34801561057557600080fd5b50610590600480360381019061058b9190614397565b61100f565b60405161059d91906143f2565b60405180910390f35b3480156105b257600080fd5b506105bb6110b9565b6040516105c89190614223565b60405180910390f35b3480156105dd57600080fd5b506105e66110bf565b6040516105f391906145bf565b60405180910390f35b34801561060857600080fd5b50610623600480360381019061061e91906145da565b6110e5565b005b34801561063157600080fd5b5061063a6111fa565b6040516106479190614223565b60405180910390f35b34801561065c57600080fd5b5061067760048036038101906106729190614397565b611200565b005b34801561068557600080fd5b506106a0600480360381019061069b9190614479565b61128b565b6040516106ad91906143f2565b60405180910390f35b3480156106c257600080fd5b506106cb6112e1565b005b3480156106d957600080fd5b506106e261173c565b6040516106ef91906143f2565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a9190614655565b61174f565b005b34801561072d57600080fd5b506107366118d5565b005b34801561074457600080fd5b5061075f600480360381019061075a9190614479565b611bd1565b60405161076c9190614223565b60405180910390f35b34801561078157600080fd5b5061078a611c19565b005b34801561079857600080fd5b506107a1611ca1565b005b3480156107af57600080fd5b506107b8611d94565b005b3480156107c657600080fd5b506107e160048036038101906107dc91906144f9565b611e2d565b6040516107ee919061477a565b60405180910390f35b34801561080357600080fd5b5061080c612056565b60405161081991906145bf565b60405180910390f35b34801561082e57600080fd5b506108496004803603810190610844919061479c565b612080565b005b34801561085757600080fd5b5061086061215f565b60405161086d91906142d7565b60405180910390f35b34801561088257600080fd5b5061089d60048036038101906108989190614397565b6121f1565b6040516108aa91906143f2565b60405180910390f35b3480156108bf57600080fd5b506108da60048036038101906108d59190614397565b6122db565b6040516108e791906143f2565b60405180910390f35b3480156108fc57600080fd5b506109056122fe565b60405161091291906143f2565b60405180910390f35b34801561092757600080fd5b50610942600480360381019061093d91906147dc565b612311565b005b34801561095057600080fd5b5061096b60048036038101906109669190614439565b6123aa565b005b34801561097957600080fd5b50610994600480360381019061098f9190614809565b612481565b6040516109a19190614223565b60405180910390f35b3480156109b657600080fd5b506109bf612508565b005b3480156109cd57600080fd5b506109e860048036038101906109e39190614479565b612597565b6040516109f591906143f2565b60405180910390f35b348015610a0a57600080fd5b50610a256004803603810190610a209190614479565b6125b7565b005b348015610a3357600080fd5b50610a4e6004803603810190610a499190614479565b61268e565b005b348015610a5c57600080fd5b50610a65612785565b604051610a729190614223565b60405180910390f35b600e5481565b606060038054610a9090614878565b80601f0160208091040260200160405190810160405280929190818152602001828054610abc90614878565b8015610b095780601f10610ade57610100808354040283529160200191610b09565b820191906000526020600020905b815481529060010190602001808311610aec57829003601f168201915b5050505050905090565b600080610b1e61278b565b9050610b2b818585612793565b600191505092915050565b610b3e61278b565b73ffffffffffffffffffffffffffffffffffffffff16610b5c612056565b73ffffffffffffffffffffffffffffffffffffffff1614610bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba9906148f5565b60405180910390fd5b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601e60026101000a81548160ff0219169083151502179055505050565b610c1961278b565b73ffffffffffffffffffffffffffffffffffffffff16610c37612056565b73ffffffffffffffffffffffffffffffffffffffff1614610c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c84906148f5565b60405180910390fd5b6001602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601160019054906101000a900460ff1681565b601f5481565b6000602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600254905090565b600080610d6c61278b565b9050610d7985828561295c565b610d848585856129e8565b60019150509392505050565b610d9861278b565b73ffffffffffffffffffffffffffffffffffffffff16610db6612056565b73ffffffffffffffffffffffffffffffffffffffff1614610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e03906148f5565b60405180910390fd5b620f424081610e19610d57565b610e239190614944565b610e2d91906149cd565b600d8190555050565b601d5481565b610e4461278b565b73ffffffffffffffffffffffffffffffffffffffff16610e62612056565b73ffffffffffffffffffffffffffffffffffffffff1614610eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaf906148f5565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610efe573d6000803e3d6000fd5b505050565b60006012905090565b601e60009054906101000a900460ff1681565b610f2761278b565b73ffffffffffffffffffffffffffffffffffffffff16610f45612056565b73ffffffffffffffffffffffffffffffffffffffff1614610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f92906148f5565b60405180910390fd5b610fa3610f03565b600a610faf9190614b31565b83610fba9190614944565b600e81905550610fc8610f03565b600a610fd49190614b31565b82610fdf9190614944565b600f81905550610fed610f03565b600a610ff99190614b31565b816110049190614944565b601081905550505050565b60008061101a61278b565b90506110ae818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110a99190614b7c565b612793565b600191505092915050565b600f5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110ed61278b565b73ffffffffffffffffffffffffffffffffffffffff1661110b612056565b73ffffffffffffffffffffffffffffffffffffffff1614611161576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611158906148f5565b60405180910390fd5b6014848385886111719190614b7c565b61117b9190614b7c565b6111859190614b7c565b111561119057600080fd5b6005811061119d57600080fd5b806012819055508460138190555083601481905550826015819055508160168190555080828486886111cf9190614b7c565b6111d99190614b7c565b6111e39190614b7c565b6111ed9190614b7c565b601f819055505050505050565b601c5481565b61120861278b565b73ffffffffffffffffffffffffffffffffffffffff16611226612056565b73ffffffffffffffffffffffffffffffffffffffff161461127c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611273906148f5565b60405180910390fd5b6112873083836129e8565b5050565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6112e961278b565b73ffffffffffffffffffffffffffffffffffffffff16611307612056565b73ffffffffffffffffffffffffffffffffffffffff161461135d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611354906148f5565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ee9190614be7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611477573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149b9190614be7565b6040518363ffffffff1660e01b81526004016114b8929190614c14565b6020604051808303816000875af11580156114d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fb9190614be7565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160216000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160226000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061166330600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661165e610d57565b612793565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306116ac30611bd1565b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016116f496959493929190614c82565b60606040518083038185885af1158015611712573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117379190614cf8565b505050565b601160009054906101000a900460ff1681565b61175761278b565b73ffffffffffffffffffffffffffffffffffffffff16611775612056565b73ffffffffffffffffffffffffffffffffffffffff16146117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c2906148f5565b60405180910390fd5b83600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b60006118e030611bd1565b9050600081036118f05750611bcf565b6000600260195461190191906149cd565b90506000601754601b54601a546018548561191c9190614b7c565b6119269190614b7c565b6119309190614b7c565b61193a9190614b7c565b9050611945816136db565b655af3107a4000601754111561198a576000611962601754611e2d565b90506119888160018151811061197b5761197a614d4b565b5b6020026020010151613927565b505b655af3107a40008211156119d45760006119a383611e2d565b90506119d26119b130611bd1565b826001815181106119c5576119c4614d4b565b5b6020026020010151613d8f565b505b60006016546015546013546119e99190614b7c565b6119f39190614b7c565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611a5883611a4a60135447613e8f90919063ffffffff16565b613ea590919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015611a83573d6000803e3d6000fd5b50600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611ae783611ad960155447613e8f90919063ffffffff16565b613ea590919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015611b12573d6000803e3d6000fd5b50600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611b7683611b6860165447613e8f90919063ffffffff16565b613ea590919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015611ba1573d6000803e3d6000fd5b50600060188190555060006019819055506000601a819055506000601b819055506000601781905550505050505b565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c2161278b565b73ffffffffffffffffffffffffffffffffffffffff16611c3f612056565b73ffffffffffffffffffffffffffffffffffffffff1614611c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8c906148f5565b60405180910390fd5b611c9f6000613ebb565b565b611ca961278b565b73ffffffffffffffffffffffffffffffffffffffff16611cc7612056565b73ffffffffffffffffffffffffffffffffffffffff1614611d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d14906148f5565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600e819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600f819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601081905550565b611d9c61278b565b73ffffffffffffffffffffffffffffffffffffffff16611dba612056565b73ffffffffffffffffffffffffffffffffffffffff1614611e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e07906148f5565b60405180910390fd5b6001601160016101000a81548160ff021916908315150217905550565b60606000600267ffffffffffffffff811115611e4c57611e4b614d7a565b5b604051908082528060200260200182016040528015611e7a5781602001602082028036833780820191505090505b5090503081600081518110611e9257611e91614d4b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5d9190614be7565b81600181518110611f7157611f70614d4b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b8152600401612008929190614e67565b600060405180830381865afa158015612025573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061204e9190614fb0565b915050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61208861278b565b73ffffffffffffffffffffffffffffffffffffffff166120a6612056565b73ffffffffffffffffffffffffffffffffffffffff16146120fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f3906148f5565b60405180910390fd5b600a821115801561210e575060648111155b61214d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214490615045565b60405180910390fd5b81601c8190555080601d819055505050565b60606004805461216e90614878565b80601f016020809104026020016040519081016040528092919081815260200182805461219a90614878565b80156121e75780601f106121bc576101008083540402835291602001916121e7565b820191906000526020600020905b8154815290600101906020018083116121ca57829003601f168201915b5050505050905090565b6000806121fc61278b565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156122c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b9906150d7565b60405180910390fd5b6122cf8286868403612793565b60019250505092915050565b6000806122e661278b565b90506122f38185856129e8565b600191505092915050565b601e60019054906101000a900460ff1681565b61231961278b565b73ffffffffffffffffffffffffffffffffffffffff16612337612056565b73ffffffffffffffffffffffffffffffffffffffff161461238d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612384906148f5565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b6123b261278b565b73ffffffffffffffffffffffffffffffffffffffff166123d0612056565b73ffffffffffffffffffffffffffffffffffffffff1614612426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241d906148f5565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61251061278b565b73ffffffffffffffffffffffffffffffffffffffff1661252e612056565b73ffffffffffffffffffffffffffffffffffffffff1614612584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257b906148f5565b60405180910390fd5b61259561259030611bd1565b6136db565b565b60246020528060005260406000206000915054906101000a900460ff1681565b6125bf61278b565b73ffffffffffffffffffffffffffffffffffffffff166125dd612056565b73ffffffffffffffffffffffffffffffffffffffff1614612633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262a906148f5565b60405180910390fd5b6000602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61269661278b565b73ffffffffffffffffffffffffffffffffffffffff166126b4612056565b73ffffffffffffffffffffffffffffffffffffffff161461270a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612701906148f5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612779576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277090615169565b60405180910390fd5b61278281613ebb565b50565b60105481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f9906151fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612871576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128689061528d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161294f9190614223565b60405180910390a3505050565b60006129688484612481565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146129e257818110156129d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cb906152f9565b60405180910390fd5b6129e18484848403612793565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4e9061538b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abd9061541d565b60405180910390fd5b602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4a90615489565b60405180910390fd5b602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd7906154f5565b60405180910390fd5b60008103612bf957612bf483836000613f81565b6136d6565b612c01612056565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c6f5750612c3f612056565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ca85750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ce2575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cfb5750600760149054906101000a900460ff16155b156130de57601160019054906101000a900460ff16612df557602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612db55750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612deb90615587565b60405180910390fd5b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e985750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f3f57600e54811115612ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed99061563f565b60405180910390fd5b601054612eee83611bd1565b82612ef99190614b7c565b1115612f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f31906156ab565b60405180910390fd5b6130dd565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fe25750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561303157600f5481111561302c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302390615763565b60405180910390fd5b6130dc565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130db5760105461308e83611bd1565b826130999190614b7c565b11156130da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d1906156ab565b60405180910390fd5b5b5b5b5b6000600d546130ec30611bd1565b1015905080801561310a5750600760149054906101000a900460ff16155b80156131605750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131b65750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561320c5750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613250576001600760146101000a81548160ff0219169083151502179055506132346118d5565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601160009054906101000a900460ff16806132c95750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061331d5750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806133c85750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133c75750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b156133d257600090505b600081156136c7576000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361348a57601e60019054906101000a900460ff16613480576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613477906157cf565b60405180910390fd5b601d549050613535565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff160361353457601e60009054906101000a900460ff1661352e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135259061583b565b60405180910390fd5b601c5490505b5b61355b606461354d8388613e8f90919063ffffffff16565b613ea590919063ffffffff16565b9150613586601f5461357860145485613e8f90919063ffffffff16565b613ea590919063ffffffff16565b601960008282546135979190614b7c565b925050819055506135c7601f546135b960135485613e8f90919063ffffffff16565b613ea590919063ffffffff16565b601860008282546135d89190614b7c565b92505081905550613608601f546135fa60155485613e8f90919063ffffffff16565b613ea590919063ffffffff16565b601a60008282546136199190614b7c565b92505081905550613649601f5461363b60165485613e8f90919063ffffffff16565b613ea590919063ffffffff16565b601b600082825461365a9190614b7c565b9250508190555061368a601f5461367c60125485613e8f90919063ffffffff16565b613ea590919063ffffffff16565b6017600082825461369b9190614b7c565b9250508190555060008211156136b7576136b6873084613f81565b5b81856136c3919061585b565b9450505b6136d2868686613f81565b5050505b505050565b60008114613924576000600267ffffffffffffffff811115613700576136ff614d7a565b5b60405190808252806020026020018201604052801561372e5781602001602082028036833780820191505090505b509050308160008151811061374657613745614d4b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138119190614be7565b8160018151811061382557613824614d4b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061388c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612793565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016138f095949392919061588f565b600060405180830381600087803b15801561390a57600080fd5b505af115801561391e573d6000803e3d6000fd5b50505050505b50565b60008114613d8c576000600267ffffffffffffffff81111561394c5761394b614d7a565b5b60405190808252806020026020018201604052801561397a5781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139ea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0e9190614be7565b81600081518110613a2257613a21614d4b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613a9357613a92614d4b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008430426040518663ffffffff1660e01b8152600401613b3094939291906158e9565b6000604051808303818588803b158015613b4957600080fd5b505af1158015613b5d573d6000803e3d6000fd5b50505050506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613bbf91906145bf565b602060405180830381865afa158015613bdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c009190615935565b9050601e60029054906101000a900460ff1615613cc557600061dead9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82846040518363ffffffff1660e01b8152600401613c7b929190615962565b6020604051808303816000875af1158015613c9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cbe91906159a0565b5050613d89565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401613d44929190615962565b6020604051808303816000875af1158015613d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d8791906159a0565b505b50505b50565b613dbc30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612793565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613e4596959493929190614c82565b60606040518083038185885af1158015613e63573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613e889190614cf8565b5050505050565b60008183613e9d9190614944565b905092915050565b60008183613eb391906149cd565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fe790615a19565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361405f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140569061541d565b60405180910390fd5b61406a838383614200565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156140f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140e790615aab565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546141839190614b7c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516141e79190614223565b60405180910390a36141fa848484614205565b50505050565b505050565b505050565b6000819050919050565b61421d8161420a565b82525050565b60006020820190506142386000830184614214565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561427857808201518184015260208101905061425d565b83811115614287576000848401525b50505050565b6000601f19601f8301169050919050565b60006142a98261423e565b6142b38185614249565b93506142c381856020860161425a565b6142cc8161428d565b840191505092915050565b600060208201905081810360008301526142f1818461429e565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143388261430d565b9050919050565b6143488161432d565b811461435357600080fd5b50565b6000813590506143658161433f565b92915050565b6143748161420a565b811461437f57600080fd5b50565b6000813590506143918161436b565b92915050565b600080604083850312156143ae576143ad614303565b5b60006143bc85828601614356565b92505060206143cd85828601614382565b9150509250929050565b60008115159050919050565b6143ec816143d7565b82525050565b600060208201905061440760008301846143e3565b92915050565b614416816143d7565b811461442157600080fd5b50565b6000813590506144338161440d565b92915050565b600080604083850312156144505761444f614303565b5b600061445e85828601614356565b925050602061446f85828601614424565b9150509250929050565b60006020828403121561448f5761448e614303565b5b600061449d84828501614356565b91505092915050565b6000806000606084860312156144bf576144be614303565b5b60006144cd86828701614356565b93505060206144de86828701614356565b92505060406144ef86828701614382565b9150509250925092565b60006020828403121561450f5761450e614303565b5b600061451d84828501614382565b91505092915050565b600060ff82169050919050565b61453c81614526565b82525050565b60006020820190506145576000830184614533565b92915050565b60008060006060848603121561457657614575614303565b5b600061458486828701614382565b935050602061459586828701614382565b92505060406145a686828701614382565b9150509250925092565b6145b98161432d565b82525050565b60006020820190506145d460008301846145b0565b92915050565b600080600080600060a086880312156145f6576145f5614303565b5b600061460488828901614382565b955050602061461588828901614382565b945050604061462688828901614382565b935050606061463788828901614382565b925050608061464888828901614382565b9150509295509295909350565b6000806000806080858703121561466f5761466e614303565b5b600061467d87828801614356565b945050602061468e87828801614356565b935050604061469f87828801614356565b92505060606146b087828801614356565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6146f18161420a565b82525050565b600061470383836146e8565b60208301905092915050565b6000602082019050919050565b6000614727826146bc565b61473181856146c7565b935061473c836146d8565b8060005b8381101561476d57815161475488826146f7565b975061475f8361470f565b925050600181019050614740565b5085935050505092915050565b60006020820190508181036000830152614794818461471c565b905092915050565b600080604083850312156147b3576147b2614303565b5b60006147c185828601614382565b92505060206147d285828601614382565b9150509250929050565b6000602082840312156147f2576147f1614303565b5b600061480084828501614424565b91505092915050565b600080604083850312156148205761481f614303565b5b600061482e85828601614356565b925050602061483f85828601614356565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061489057607f821691505b6020821081036148a3576148a2614849565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006148df602083614249565b91506148ea826148a9565b602082019050919050565b6000602082019050818103600083015261490e816148d2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061494f8261420a565b915061495a8361420a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561499357614992614915565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149d88261420a565b91506149e38361420a565b9250826149f3576149f261499e565b5b828204905092915050565b60008160011c9050919050565b6000808291508390505b6001851115614a5557808604811115614a3157614a30614915565b5b6001851615614a405780820291505b8081029050614a4e856149fe565b9450614a15565b94509492505050565b600082614a6e5760019050614b2a565b81614a7c5760009050614b2a565b8160018114614a925760028114614a9c57614acb565b6001915050614b2a565b60ff841115614aae57614aad614915565b5b8360020a915084821115614ac557614ac4614915565b5b50614b2a565b5060208310610133831016604e8410600b8410161715614b005782820a905083811115614afb57614afa614915565b5b614b2a565b614b0d8484846001614a0b565b92509050818404811115614b2457614b23614915565b5b81810290505b9392505050565b6000614b3c8261420a565b9150614b4783614526565b9250614b747fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614a5e565b905092915050565b6000614b878261420a565b9150614b928361420a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614bc757614bc6614915565b5b828201905092915050565b600081519050614be18161433f565b92915050565b600060208284031215614bfd57614bfc614303565b5b6000614c0b84828501614bd2565b91505092915050565b6000604082019050614c2960008301856145b0565b614c3660208301846145b0565b9392505050565b6000819050919050565b6000819050919050565b6000614c6c614c67614c6284614c3d565b614c47565b61420a565b9050919050565b614c7c81614c51565b82525050565b600060c082019050614c9760008301896145b0565b614ca46020830188614214565b614cb16040830187614c73565b614cbe6060830186614c73565b614ccb60808301856145b0565b614cd860a0830184614214565b979650505050505050565b600081519050614cf28161436b565b92915050565b600080600060608486031215614d1157614d10614303565b5b6000614d1f86828701614ce3565b9350506020614d3086828701614ce3565b9250506040614d4186828701614ce3565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614dde8161432d565b82525050565b6000614df08383614dd5565b60208301905092915050565b6000602082019050919050565b6000614e1482614da9565b614e1e8185614db4565b9350614e2983614dc5565b8060005b83811015614e5a578151614e418882614de4565b9750614e4c83614dfc565b925050600181019050614e2d565b5085935050505092915050565b6000604082019050614e7c6000830185614214565b8181036020830152614e8e8184614e09565b90509392505050565b600080fd5b614ea58261428d565b810181811067ffffffffffffffff82111715614ec457614ec3614d7a565b5b80604052505050565b6000614ed76142f9565b9050614ee38282614e9c565b919050565b600067ffffffffffffffff821115614f0357614f02614d7a565b5b602082029050602081019050919050565b600080fd5b6000614f2c614f2784614ee8565b614ecd565b90508083825260208201905060208402830185811115614f4f57614f4e614f14565b5b835b81811015614f785780614f648882614ce3565b845260208401935050602081019050614f51565b5050509392505050565b600082601f830112614f9757614f96614e97565b5b8151614fa7848260208601614f19565b91505092915050565b600060208284031215614fc657614fc5614303565b5b600082015167ffffffffffffffff811115614fe457614fe3614308565b5b614ff084828501614f82565b91505092915050565b7f546f6f206d756368206665650000000000000000000000000000000000000000600082015250565b600061502f600c83614249565b915061503a82614ff9565b602082019050919050565b6000602082019050818103600083015261505e81615022565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006150c1602583614249565b91506150cc82615065565b604082019050919050565b600060208201905081810360008301526150f0816150b4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615153602683614249565b915061515e826150f7565b604082019050919050565b6000602082019050818103600083015261518281615146565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006151e5602483614249565b91506151f082615189565b604082019050919050565b60006020820190508181036000830152615214816151d8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615277602283614249565b91506152828261521b565b604082019050919050565b600060208201905081810360008301526152a68161526a565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006152e3601d83614249565b91506152ee826152ad565b602082019050919050565b60006020820190508181036000830152615312816152d6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615375602583614249565b915061538082615319565b604082019050919050565b600060208201905081810360008301526153a481615368565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615407602383614249565b9150615412826153ab565b604082019050919050565b60006020820190508181036000830152615436816153fa565b9050919050565b7f53656e64657220426c61636b6c69737465640000000000000000000000000000600082015250565b6000615473601283614249565b915061547e8261543d565b602082019050919050565b600060208201905081810360008301526154a281615466565b9050919050565b7f526563656976657220426c61636b6c6973746564000000000000000000000000600082015250565b60006154df601483614249565b91506154ea826154a9565b602082019050919050565b6000602082019050818103600083015261550e816154d2565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b6000615571602283614249565b915061557c82615515565b604082019050919050565b600060208201905081810360008301526155a081615564565b9050919050565b7f5f7472616e736665723a3a20427579207472616e7366657220616d6f756e742060008201527f6578636565647320746865206d61785472616e73616374696f6e416d6f756e7460208201527f2e00000000000000000000000000000000000000000000000000000000000000604082015250565b6000615629604183614249565b9150615634826155a7565b606082019050919050565b600060208201905081810360008301526156588161561c565b9050919050565b7f5f7472616e736665723a3a204d61782077616c6c657420657863656564656400600082015250565b6000615695601f83614249565b91506156a08261565f565b602082019050919050565b600060208201905081810360008301526156c481615688565b9050919050565b7f5f7472616e736665723a3a2053656c6c207472616e7366657220616d6f756e7460008201527f206578636565647320746865206d61785472616e73616374696f6e416d6f756e60208201527f742e000000000000000000000000000000000000000000000000000000000000604082015250565b600061574d604283614249565b9150615758826156cb565b606082019050919050565b6000602082019050818103600083015261577c81615740565b9050919050565b7f53656c6c2073746174757320697320636c6f7365640000000000000000000000600082015250565b60006157b9601583614249565b91506157c482615783565b602082019050919050565b600060208201905081810360008301526157e8816157ac565b9050919050565b7f4275792073746174757320697320636c6f736564000000000000000000000000600082015250565b6000615825601483614249565b9150615830826157ef565b602082019050919050565b6000602082019050818103600083015261585481615818565b9050919050565b60006158668261420a565b91506158718361420a565b92508282101561588457615883614915565b5b828203905092915050565b600060a0820190506158a46000830188614214565b6158b16020830187614c73565b81810360408301526158c38186614e09565b90506158d260608301856145b0565b6158df6080830184614214565b9695505050505050565b60006080820190506158fe6000830187614c73565b81810360208301526159108186614e09565b905061591f60408301856145b0565b61592c6060830184614214565b95945050505050565b60006020828403121561594b5761594a614303565b5b600061595984828501614ce3565b91505092915050565b600060408201905061597760008301856145b0565b6159846020830184614214565b9392505050565b60008151905061599a8161440d565b92915050565b6000602082840312156159b6576159b5614303565b5b60006159c48482850161598b565b91505092915050565b7f45524332303a20612066726f6d20746865207a65726f20616464726573730000600082015250565b6000615a03601e83614249565b9150615a0e826159cd565b602082019050919050565b60006020820190508181036000830152615a32816159f6565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615a95602683614249565b9150615aa082615a39565b604082019050919050565b60006020820190508181036000830152615ac481615a88565b905091905056fea2646970667358221220a44f3ebe343de30e0e75c7f2fcecab43d22413f792109b11c271ff6de97e337164736f6c634300080f0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c5990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018c2f250ae9874495a781012629054572afd2be000000000000000000000000018c2f250ae9874495a781012629054572afd2be000000000000000000000000dd092a9f41b41201381d4128cc9a412863910c88000000000000000000000000018c2f250ae9874495a781012629054572afd2be000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008426974546f6b656e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034254580000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): BitToken
Arg [1] : symbol (string): BTX
Arg [2] : _percent (uint256): 1
Arg [3] : _utility (address): 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599
Arg [4] : _utilityActive (bool): False
Arg [5] : fundingWallet (address): 0x018c2F250Ae9874495a781012629054572AFd2Be
Arg [6] : resevoirWallet (address): 0x018c2F250Ae9874495a781012629054572AFd2Be
Arg [7] : marketingWallet (address): 0xDD092A9f41b41201381D4128cc9A412863910C88
Arg [8] : LPAddress (address): 0x018c2F250Ae9874495a781012629054572AFd2Be
Arg [9] : _buyFee (uint256): 0
Arg [10] : _sellFee (uint256): 0

-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [3] : 0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [5] : 000000000000000000000000018c2f250ae9874495a781012629054572afd2be
Arg [6] : 000000000000000000000000018c2f250ae9874495a781012629054572afd2be
Arg [7] : 000000000000000000000000dd092a9f41b41201381d4128cc9a412863910c88
Arg [8] : 000000000000000000000000018c2f250ae9874495a781012629054572afd2be
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [12] : 426974546f6b656e000000000000000000000000000000000000000000000000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [14] : 4254580000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

20218:16128:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20650:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1704:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2698:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24552:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25722:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20822:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21418:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25964:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2025:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2932:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24317:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21293:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35939:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1924:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21324:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27360:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3235:265;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20702:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20412:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26693:659;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21265:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35711:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28159:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25050:664;;;;;;;;;;;;;:::i;:::-;;20783:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24698:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34148:1491;;;;;;;;;;;;;:::i;:::-;;2141:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16853:103;;;;;;;;;;;;;:::i;:::-;;27703:198;;;;;;;;;;;;;:::i;:::-;;26084:81;;;;;;;;;;;;;:::i;:::-;;33842:298;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16630:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26449:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1812:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3508:500;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2288:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21352:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27972:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26233:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2514:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36204:102;;;;;;;;;;;;;:::i;:::-;;22055:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25838:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16964:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20750:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20650:45;;;;:::o;1704:100::-;1758:13;1791:5;1784:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1704:100;:::o;2698:226::-;2806:4;2823:13;2839:12;:10;:12::i;:::-;2823:28;;2862:32;2871:5;2878:7;2887:6;2862:8;:32::i;:::-;2912:4;2905:11;;;2698:226;;;;:::o;24552:138::-;16776:12;:10;:12::i;:::-;16765:23;;:7;:5;:7::i;:::-;:23;;;16757:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24641:8:::1;24631:7;;:18;;;;;;;;;;;;;;;;;;24676:6;24660:13;;:22;;;;;;;;;;;;;;;;;;24552:138:::0;;:::o;25722:108::-;16776:12;:10;:12::i;:::-;16765:23;;:7;:5;:7::i;:::-;:23;;;16757:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25818:4:::1;25791:13;:24;25805:9;25791:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;25722:108:::0;:::o;20822:31::-;;;;;;;;;;;;;:::o;21418:107::-;;;;:::o;25964:112::-;26024:4;26048:13;:20;26062:5;26048:20;;;;;;;;;;;;;;;;;;;;;;;;;26041:27;;25964:112;;;:::o;2025:108::-;2086:7;2113:12;;2106:19;;2025:108;:::o;2932:295::-;3063:4;3080:15;3098:12;:10;:12::i;:::-;3080:30;;3121:38;3137:4;3143:7;3152:6;3121:15;:38::i;:::-;3170:27;3180:4;3186:2;3190:6;3170:9;:27::i;:::-;3215:4;3208:11;;;2932:295;;;;;:::o;24317:157::-;16776:12;:10;:12::i;:::-;16765:23;;:7;:5;:7::i;:::-;:23;;;16757:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24426:7:::1;24414:8;24398:13;:11;:13::i;:::-;:24;;;;:::i;:::-;24397:36;;;;:::i;:::-;24388:6;:45;;;;24317:157:::0;:::o;21293:22::-;;;;:::o;35939:170::-;16776:12;:10;:12::i;:::-;16765:23;;:7;:5;:7::i;:::-;:23;;;16757:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36071:2:::1;36063:20;;:38;36084:16;36063:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;35939:170:::0;;:::o;1924:93::-;1982:5;2007:2;2000:9;;1924:93;:::o;21324:21::-;;;;;;;;;;;;;:::o;27360:335::-;16776:12;:10;:12::i;:::-;16765:23;;:7;:5;:7::i;:::-;:23;;;16757:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27552:10:::1;:8;:10::i;:::-;27546:2;:16;;;;:::i;:::-;27534:8;:29;;;;:::i;:::-;27501:30;:62;;;;27622:10;:8;:10::i;:::-;27616:2;:16;;;;:::i;:::-;27603:9;:30;;;;:::i;:::-;27574:26;:59;;;;27676:10;:8;:10::i;:::-;27670:2;:16;;;;:::i;:::-;27656:10;:31;;;;:::i;:::-;27644:9;:43;;;;27360:335:::0;;;:::o;3235:265::-;3348:4;3365:13;3381:12;:10;:12::i;:::-;3365:28;;3404:66;3413:5;3420:7;3459:10;3429:11;:18;3441:5;3429:18;;;;;;;;;;;;;;;:27;3448:7;3429:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;3404:8;:66::i;:::-;3488:4;3481:11;;;3235:265;;;;:::o;20702:41::-;;;;:::o;20412:22::-;;;;;;;;;;;;;:::o;26693:659::-;16776:12;:10;:12::i;:::-;16765:23;;:7;:5;:7::i;:::-;:23;;;16757:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26965:2:::1;26949:12;26934;26920:11;26907:10;:24;;;;:::i;:::-;:39;;;;:::i;:::-;:54;;;;:::i;:::-;:60;;26899:69;;;::::0;::::1;;27001:1;26987:11;:15;26979:24;;;::::0;::::1;;27027:11;27014:10;:24;;;;27063:10;27049:11;:24;;;;27100:12;27084:13;:28;;;;27138:11;27123:12;:26;;;;27176:12;27160:13;:28;;;;27333:11;27305:12;27278:11;27250:12;27224:10;:38;;;;:::i;:::-;:65;;;;:::i;:::-;:93;;;;:::i;:::-;:120;;;;:::i;:::-;27199:9;:145;;;;26693:659:::0;;;;;:::o;21265:21::-;;;;:::o;35711:156::-;16776:12;:10;:12::i;:::-;16765:23;;:7;:5;:7::i;:::-;:23;;;16757:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35813:46:::1;35831:4;35838:2;35842:16;35813:9;:46::i;:::-;35711:156:::0;;:::o;28159:128::-;28227:4;28251:19;:28;28271:7;28251:28;;;;;;;;;;;;;;;;;;;;;;;;;28244:35;;28159:128;;;:::o;25050:664::-;16776:12;:10;:12::i;:::-;16765:23;;:7;:5;:7::i;:::-;:23;;;16757:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25138:15:::1;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25120:55;;;25198:4;25218:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25120:131;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25104:13;;:147;;;;;;;;;;;;;;;;;;25320:4;25262:31;:55;25302:13;;;;;;;;;;;25262:55;;;;;;;;;;;;;;;;:62;;;;;;;;;;;;;;;;;;25388:4;25335:26;:50;25370:13;;;;;;;;;;;25335:50;;;;;;;;;;;;;;;;:57;;;;;;;;;;;;;;;;;;25405:64;25422:4;25437:15;;;;;;;;;;;25455:13;:11;:13::i;:::-;25405:8;:64::i;:::-;25480:15;;;;;;;;;;;:31;;;25519:21;25564:4;25584:24;25602:4;25584:9;:24::i;:::-;25623:1;25639::::0;25655:10:::1;;;;;;;;;;;25680:15;25480:226;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25050:664::o:0;20783:32::-;;;;;;;;;;;;;:::o;24698:344::-;16776:12;:10;:12::i;:::-;16765:23;;:7;:5;:7::i;:::-;:23;;;16757:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24900:13:::1;24883:14;;:30;;;;;;;;;;;;;;;;;;24942:14;24924:15;;:32;;;;;;;;;;;;;;;;;;24986:15;24967:16;;:34;;;;;;;;;;;;;;;;;;25025:9;25012:10;;:22;;;;;;;;;;;;;;;;;;24698:344:::0;;;;:::o;34148:1491::-;34186:23;34212:24;34230:4;34212:9;:24::i;:::-;34186:50;;34272:1;34253:15;:20;34249:33;;34275:7;;;34249:33;34294:23;34342:1;34320:19;;:23;;;;:::i;:::-;34294:49;;34354:17;34507;;34472:19;;34438:18;;34405:17;;34374:15;:48;;;;:::i;:::-;:82;;;;:::i;:::-;:117;;;;:::i;:::-;:150;;;;:::i;:::-;34354:170;;34537:28;34555:9;34537:17;:28::i;:::-;34600:12;34580:17;;:32;34576:215;;;34629:30;34662:67;34697:17;;34662:16;:67::i;:::-;34629:100;;34744:35;34762:13;34776:1;34762:16;;;;;;;;:::i;:::-;;;;;;;;34744:17;:35::i;:::-;34614:177;34576:215;34823:12;34805:15;:30;34801:237;;;34852:32;34887:65;34922:15;34887:16;:65::i;:::-;34852:100;;34967:59;34981:24;34999:4;34981:9;:24::i;:::-;35007:15;35023:1;35007:18;;;;;;;;:::i;:::-;;;;;;;;34967:13;:59::i;:::-;34837:201;34801:237;35050:12;35094:13;;35079:12;;35065:11;;:26;;;;:::i;:::-;:42;;;;:::i;:::-;35050:57;;35126:14;;;;;;;;;;;35118:32;;:106;35165:48;35208:4;35165:38;35191:11;;35165:21;:25;;:38;;;;:::i;:::-;:42;;:48;;;;:::i;:::-;35118:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35243:15;;;;;;;;;;;35235:33;;:108;35283:49;35327:4;35283:39;35309:12;;35283:21;:25;;:39;;;;:::i;:::-;:43;;:49;;;;:::i;:::-;35235:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35362:16;;;;;;;;;;;35354:34;;:110;35403:50;35448:4;35403:40;35429:13;;35403:21;:25;;:40;;;;:::i;:::-;:44;;:50;;;;:::i;:::-;35354:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35497:1;35477:17;:21;;;;35531:1;35509:19;:23;;;;35564:1;35543:18;:22;;;;35598:1;35576:19;:23;;;;35630:1;35610:17;:21;;;;34175:1464;;;;34148:1491;:::o;2141:139::-;2231:7;2258:5;:14;2264:7;2258:14;;;;;;;;;;;;;;;;2251:21;;2141:139;;;:::o;16853:103::-;16776:12;:10;:12::i;:::-;16765:23;;:7;:5;:7::i;:::-;:23;;;16757:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16918:30:::1;16945:1;16918:18;:30::i;:::-;16853:103::o:0;27703:198::-;16776:12;:10;:12::i;:::-;16765:23;;:7;:5;:7::i;:::-;:23;;;16757:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27788:14:::1;27755:30;:47;;;;27842:14;27813:26;:43;;;;27879:14;27867:9;:26;;;;27703:198::o:0;26084:81::-;16776:12;:10;:12::i;:::-;16765:23;;:7;:5;:7::i;:::-;:23;;;16757:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26153:4:::1;26139:11;;:18;;;;;;;;;;;;;;;;;;26084:81::o:0;33842:298::-;33923:16;33952:21;33990:1;33976:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33952:40;;34021:4;34003;34008:1;34003:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;34047:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34037:4;34042:1;34037:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;34087:15;;;;;;;;;;;:29;;;34117:8;34127:4;34087:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34080:52;;;33842:298;;;:::o;16630:87::-;16676:7;16703:6;;;;;;;;;;;16696:13;;16630:87;:::o;26449:236::-;16776:12;:10;:12::i;:::-;16765:23;;:7;:5;:7::i;:::-;:23;;;16757:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26583:2:::1;26572:7;:13;;:32;;;;;26601:3;26589:8;:15;;26572:32;26564:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26641:7;26632:6;:16;;;;26669:8;26659:7;:18;;;;26449:236:::0;;:::o;1812:104::-;1868:13;1901:7;1894:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1812:104;:::o;3508:500::-;3626:4;3643:13;3659:12;:10;:12::i;:::-;3643:28;;3682:24;3709:11;:18;3721:5;3709:18;;;;;;;;;;;;;;;:27;3728:7;3709:27;;;;;;;;;;;;;;;;3682:54;;3789:15;3769:16;:35;;3747:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;3905:60;3914:5;3921:7;3949:15;3930:16;:34;3905:8;:60::i;:::-;3996:4;3989:11;;;;3508:500;;;;:::o;2288:218::-;2392:4;2409:13;2425:12;:10;:12::i;:::-;2409:28;;2448;2458:5;2465:2;2469:6;2448:9;:28::i;:::-;2494:4;2487:11;;;2288:218;;;;:::o;21352:22::-;;;;;;;;;;;;;:::o;27972:91::-;16776:12;:10;:12::i;:::-;16765:23;;:7;:5;:7::i;:::-;:23;;;16757:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28050:5:::1;28035:12;;:20;;;;;;;;;;;;;;;;;;27972:91:::0;:::o;26233:132::-;16776:12;:10;:12::i;:::-;16765:23;;:7;:5;:7::i;:::-;:23;;;16757:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26349:8:::1;26318:19;:28;26338:7;26318:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26233:132:::0;;:::o;2514:176::-;2628:7;2655:11;:18;2667:5;2655:18;;;;;;;;;;;;;;;:27;2674:7;2655:27;;;;;;;;;;;;;;;;2648:34;;2514:176;;;;:::o;36204:102::-;16776:12;:10;:12::i;:::-;16765:23;;:7;:5;:7::i;:::-;:23;;;16757:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36255:43:::1;36273:24;36291:4;36273:9;:24::i;:::-;36255:17;:43::i;:::-;36204:102::o:0;22055:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;25838:118::-;16776:12;:10;:12::i;:::-;16765:23;;:7;:5;:7::i;:::-;:23;;;16757:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25943:5:::1;25913:13;:27;25927:12;25913:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;25838:118:::0;:::o;16964:238::-;16776:12;:10;:12::i;:::-;16765:23;;:7;:5;:7::i;:::-;:23;;;16757:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17087:1:::1;17067:22;;:8;:22;;::::0;17045:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17166:28;17185:8;17166:18;:28::i;:::-;16964:238:::0;:::o;20750:24::-;;;;:::o;1087:98::-;1140:7;1167:10;1160:17;;1087:98;:::o;5889:380::-;6042:1;6025:19;;:5;:19;;;6017:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6123:1;6104:21;;:7;:21;;;6096:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6207:6;6177:11;:18;6189:5;6177:18;;;;;;;;;;;;;;;:27;6196:7;6177:27;;;;;;;;;;;;;;;:36;;;;6245:7;6229:32;;6238:5;6229:32;;;6254:6;6229:32;;;;;;:::i;:::-;;;;;;;;5889:380;;;:::o;6277:502::-;6412:24;6439:25;6449:5;6456:7;6439:9;:25::i;:::-;6412:52;;6499:17;6479:16;:37;6475:297;;6579:6;6559:16;:26;;6533:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;6694:51;6703:5;6710:7;6738:6;6719:16;:25;6694:8;:51::i;:::-;6475:297;6401:378;6277:502;;;:::o;28295:3834::-;28443:1;28427:18;;:4;:18;;;28419:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28520:1;28506:16;;:2;:16;;;28498:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28582:13;:19;28596:4;28582:19;;;;;;;;;;;;;;;;;;;;;;;;;28581:20;28573:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;28644:13;:17;28658:2;28644:17;;;;;;;;;;;;;;;;;;;;;;;;;28643:18;28635:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;28713:1;28703:6;:11;28699:93;;28731:28;28747:4;28753:2;28757:1;28731:15;:28::i;:::-;28774:7;;28699:93;28830:7;:5;:7::i;:::-;28822:15;;:4;:15;;;;:45;;;;;28860:7;:5;:7::i;:::-;28854:13;;:2;:13;;;;28822:45;:78;;;;;28898:1;28884:16;;:2;:16;;;;28822:78;:116;;;;;28931:6;28917:21;;:2;:21;;;;28822:116;:143;;;;;28956:9;;;;;;;;;;;28955:10;28822:143;28804:1536;;;28997:11;;;;;;;;;;;28992:195;;29057:19;:25;29077:4;29057:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;29086:19;:23;29106:2;29086:23;;;;;;;;;;;;;;;;;;;;;;;;;29057:52;29027:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;28992:195;29247:26;:32;29274:4;29247:32;;;;;;;;;;;;;;;;;;;;;;;;;:89;;;;;29301:31;:35;29333:2;29301:35;;;;;;;;;;;;;;;;;;;;;;;;;29300:36;29247:89;29225:1104;;;29411:30;;29401:6;:40;;29371:179;;;;;;;;;;;;:::i;:::-;;;;;;;;;29625:9;;29608:13;29618:2;29608:9;:13::i;:::-;29599:6;:22;;;;:::i;:::-;:35;;29569:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;29225:1104;;;29790:26;:30;29817:2;29790:30;;;;;;;;;;;;;;;;;;;;;;;;;:89;;;;;29842:31;:37;29874:4;29842:37;;;;;;;;;;;;;;;;;;;;;;;;;29841:38;29790:89;29768:561;;;29954:26;;29944:6;:36;;29914:176;;;;;;;;;;;;:::i;:::-;;;;;;;;;29768:561;;;30117:31;:35;30149:2;30117:35;;;;;;;;;;;;;;;;;;;;;;;;;30112:217;;30229:9;;30212:13;30222:2;30212:9;:13::i;:::-;30203:6;:22;;;;:::i;:::-;:35;;30173:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;30112:217;29768:561;29225:1104;28804:1536;30352:13;30396:6;;30368:24;30386:4;30368:9;:24::i;:::-;:34;;30352:50;;30433:8;:35;;;;;30459:9;;;;;;;;;;;30458:10;30433:35;:85;;;;;30486:26;:32;30513:4;30486:32;;;;;;;;;;;;;;;;;;;;;;;;;30485:33;30433:85;:128;;;;;30536:19;:25;30556:4;30536:25;;;;;;;;;;;;;;;;;;;;;;;;;30535:26;30433:128;:169;;;;;30579:19;:23;30599:2;30579:23;;;;;;;;;;;;;;;;;;;;;;;;;30578:24;30433:169;30415:303;;;30641:4;30629:9;;:16;;;;;;;;;;;;;;;;;;30662:10;:8;:10::i;:::-;30701:5;30689:9;;:17;;;;;;;;;;;;;;;;;;30415:303;30730:12;30746:9;;;;;;;;;;;30745:10;30730:25;;30876:12;;;;;;;;;;;:54;;;;30905:19;:25;30925:4;30905:25;;;;;;;;;;;;;;;;;;;;;;;;;30876:54;:94;;;;30947:19;:23;30967:2;30947:23;;;;;;;;;;;;;;;;;;;;;;;;;30876:94;:198;;;;30989:26;:32;31016:4;30989:32;;;;;;;;;;;;;;;;;;;;;;;;;30988:33;:85;;;;;31043:26;:30;31070:2;31043:30;;;;;;;;;;;;;;;;;;;;;;;;;31042:31;30988:85;30876:198;30858:243;;;31096:5;31086:15;;30858:243;31114:12;31145:7;31141:935;;;31169:18;31212:13;;;;;;;;;;;31206:19;;:2;:19;;;31202:291;;31254:10;;;;;;;;;;;31246:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;31322:7;;31309:20;;31202:291;;;31363:13;;;;;;;;;;;31355:21;;:4;:21;;;31351:142;;31405:9;;;;;;;;;;;31397:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;31471:6;;31458:19;;31351:142;31202:291;31514:31;31541:3;31514:22;31525:10;31514:6;:10;;:22;;;;:::i;:::-;:26;;:31;;;;:::i;:::-;31507:38;;31585:40;31615:9;;31586:23;31595:13;;31586:4;:8;;:23;;;;:::i;:::-;31585:29;;:40;;;;:::i;:::-;31562:19;;:63;;;;;;;:::i;:::-;;;;;;;;31661:38;31689:9;;31662:21;31671:11;;31662:4;:8;;:21;;;;:::i;:::-;31661:27;;:38;;;;:::i;:::-;31640:17;;:59;;;;;;;:::i;:::-;;;;;;;;31736:39;31765:9;;31737:22;31746:12;;31737:4;:8;;:22;;;;:::i;:::-;31736:28;;:39;;;;:::i;:::-;31714:18;;:61;;;;;;;:::i;:::-;;;;;;;;31813:40;31843:9;;31814:23;31823:13;;31814:4;:8;;:23;;;;:::i;:::-;31813:29;;:40;;;;:::i;:::-;31790:19;;:63;;;;;;;:::i;:::-;;;;;;;;31890:35;31915:9;;31890:20;31899:10;;31890:4;:8;;:20;;;;:::i;:::-;:24;;:35;;;;:::i;:::-;31868:17;;:58;;;;;;;:::i;:::-;;;;;;;;31954:1;31947:4;:8;31943:91;;;31976:42;31992:4;32006;32013;31976:15;:42::i;:::-;31943:91;32060:4;32050:14;;;;;:::i;:::-;;;31154:922;31141:935;32088:33;32104:4;32110:2;32114:6;32088:15;:33::i;:::-;28408:3721;;;28295:3834;;;;:::o;32137:565::-;32224:1;32209:11;:16;32205:490;;32242:21;32280:1;32266:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32242:40;;32315:4;32297;32302:1;32297:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32345:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32335:4;32340:1;32335:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;32384:62;32401:4;32416:15;;;;;;;;;;;32434:11;32384:8;:62::i;:::-;32463:15;;;;;;;;;;;:66;;;32548:11;32578:1;32598:4;32629;32653:15;32463:220;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32227:468;32205:490;32137:565;:::o;32710:749::-;32787:1;32777:6;:11;32773:679;;32805:21;32843:1;32829:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32805:40;;32870:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32860:4;32865:1;32860:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;32917:7;;;;;;;;;;;32907:4;32912:1;32907:7;;;;;;;;:::i;:::-;;;;;;;:17;;;;;;;;;;;32941:15;;;;;;;;;;;:66;;;33033:6;33055:1;33058:4;33072;33079:15;32941:154;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33112:14;33136:7;;;;;;;;;;;33129:25;;;33163:4;33129:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33112:57;;33188:13;;;;;;;;;;;33184:257;;;33222:12;33237:42;33222:57;;33305:7;;;;;;;;;;;33298:24;;;33323:4;33329:6;33298:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33203:149;33184:257;;;33384:7;;;;;;;;;;;33377:24;;;33402:14;;;;;;;;;;;33418:6;33377:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33184:257;32790:662;;32773:679;32710:749;:::o;33467:367::-;33550:62;33567:4;33582:15;;;;;;;;;;;33600:11;33550:8;:62::i;:::-;33625:15;;;;;;;;;;;:31;;;33664:9;33697:4;33717:11;33743:1;33759;33775:10;;;;;;;;;;;33800:15;33625:201;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33467:367;;:::o;19118:98::-;19176:7;19207:1;19203;:5;;;;:::i;:::-;19196:12;;19118:98;;;;:::o;19224:::-;19282:7;19313:1;19309;:5;;;;:::i;:::-;19302:12;;19224:98;;;;:::o;17210:191::-;17284:16;17303:6;;;;;;;;;;;17284:25;;17329:8;17320:6;;:17;;;;;;;;;;;;;;;;;;17384:8;17353:40;;17374:8;17353:40;;;;;;;;;;;;17273:128;17210:191;:::o;4016:689::-;4163:1;4147:18;;:4;:18;;;4139:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;4233:1;4219:16;;:2;:16;;;4211:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;4288:38;4309:4;4315:2;4319:6;4288:20;:38::i;:::-;4339:19;4361:5;:11;4367:4;4361:11;;;;;;;;;;;;;;;;4339:33;;4420:6;4405:11;:21;;4383:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;4556:6;4542:11;:20;4528:5;:11;4534:4;4528:11;;;;;;;;;;;;;;;:34;;;;4597:6;4584:5;:9;4590:2;4584:9;;;;;;;;;;;;;;;;:19;;;;;;;:::i;:::-;;;;;;;;4636:2;4621:26;;4630:4;4621:26;;;4640:6;4621:26;;;;;;:::i;:::-;;;;;;;;4660:37;4680:4;4686:2;4690:6;4660:19;:37::i;:::-;4128:577;4016:689;;;:::o;6787:125::-;;;;:::o;6920: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;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1832:75::-;1865:6;1898:2;1892:9;1882:19;;1832:75;:::o;1913:117::-;2022:1;2019;2012:12;2036:117;2145:1;2142;2135:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:116::-;3916:21;3931:5;3916:21;:::i;:::-;3909:5;3906:32;3896:60;;3952:1;3949;3942:12;3896:60;3846:116;:::o;3968:133::-;4011:5;4049:6;4036:20;4027:29;;4065:30;4089:5;4065:30;:::i;:::-;3968:133;;;;:::o;4107:468::-;4172:6;4180;4229:2;4217:9;4208:7;4204:23;4200:32;4197:119;;;4235:79;;:::i;:::-;4197:119;4355:1;4380:53;4425:7;4416:6;4405:9;4401:22;4380:53;:::i;:::-;4370:63;;4326:117;4482:2;4508:50;4550:7;4541:6;4530:9;4526:22;4508:50;:::i;:::-;4498:60;;4453:115;4107:468;;;;;:::o;4581:329::-;4640:6;4689:2;4677:9;4668:7;4664:23;4660:32;4657:119;;;4695:79;;:::i;:::-;4657:119;4815:1;4840:53;4885:7;4876:6;4865:9;4861:22;4840:53;:::i;:::-;4830:63;;4786:117;4581:329;;;;:::o;4916:619::-;4993:6;5001;5009;5058:2;5046:9;5037:7;5033:23;5029:32;5026:119;;;5064:79;;:::i;:::-;5026:119;5184:1;5209:53;5254:7;5245:6;5234:9;5230:22;5209:53;:::i;:::-;5199:63;;5155:117;5311:2;5337:53;5382:7;5373:6;5362:9;5358:22;5337:53;:::i;:::-;5327:63;;5282:118;5439:2;5465:53;5510:7;5501:6;5490:9;5486:22;5465:53;:::i;:::-;5455:63;;5410:118;4916:619;;;;;:::o;5541:329::-;5600:6;5649:2;5637:9;5628:7;5624:23;5620:32;5617:119;;;5655:79;;:::i;:::-;5617:119;5775:1;5800:53;5845:7;5836:6;5825:9;5821:22;5800:53;:::i;:::-;5790:63;;5746:117;5541:329;;;;:::o;5876:86::-;5911:7;5951:4;5944:5;5940:16;5929:27;;5876:86;;;:::o;5968:112::-;6051:22;6067:5;6051:22;:::i;:::-;6046:3;6039:35;5968:112;;:::o;6086:214::-;6175:4;6213:2;6202:9;6198:18;6190:26;;6226:67;6290:1;6279:9;6275:17;6266:6;6226:67;:::i;:::-;6086:214;;;;:::o;6306:619::-;6383:6;6391;6399;6448:2;6436:9;6427:7;6423:23;6419:32;6416:119;;;6454:79;;:::i;:::-;6416:119;6574:1;6599:53;6644:7;6635:6;6624:9;6620:22;6599:53;:::i;:::-;6589:63;;6545:117;6701:2;6727:53;6772:7;6763:6;6752:9;6748:22;6727:53;:::i;:::-;6717:63;;6672:118;6829:2;6855:53;6900:7;6891:6;6880:9;6876:22;6855:53;:::i;:::-;6845:63;;6800:118;6306:619;;;;;:::o;6931:118::-;7018:24;7036:5;7018:24;:::i;:::-;7013:3;7006:37;6931:118;;:::o;7055:222::-;7148:4;7186:2;7175:9;7171:18;7163:26;;7199:71;7267:1;7256:9;7252:17;7243:6;7199:71;:::i;:::-;7055:222;;;;:::o;7283:911::-;7378:6;7386;7394;7402;7410;7459:3;7447:9;7438:7;7434:23;7430:33;7427:120;;;7466:79;;:::i;:::-;7427:120;7586:1;7611:53;7656:7;7647:6;7636:9;7632:22;7611:53;:::i;:::-;7601:63;;7557:117;7713:2;7739:53;7784:7;7775:6;7764:9;7760:22;7739:53;:::i;:::-;7729:63;;7684:118;7841:2;7867:53;7912:7;7903:6;7892:9;7888:22;7867:53;:::i;:::-;7857:63;;7812:118;7969:2;7995:53;8040:7;8031:6;8020:9;8016:22;7995:53;:::i;:::-;7985:63;;7940:118;8097:3;8124:53;8169:7;8160:6;8149:9;8145:22;8124:53;:::i;:::-;8114:63;;8068:119;7283:911;;;;;;;;:::o;8200:765::-;8286:6;8294;8302;8310;8359:3;8347:9;8338:7;8334:23;8330:33;8327:120;;;8366:79;;:::i;:::-;8327:120;8486:1;8511:53;8556:7;8547:6;8536:9;8532:22;8511:53;:::i;:::-;8501:63;;8457:117;8613:2;8639:53;8684:7;8675:6;8664:9;8660:22;8639:53;:::i;:::-;8629:63;;8584:118;8741:2;8767:53;8812:7;8803:6;8792:9;8788:22;8767:53;:::i;:::-;8757:63;;8712:118;8869:2;8895:53;8940:7;8931:6;8920:9;8916:22;8895:53;:::i;:::-;8885:63;;8840:118;8200:765;;;;;;;:::o;8971:114::-;9038:6;9072:5;9066:12;9056:22;;8971:114;;;:::o;9091:184::-;9190:11;9224:6;9219:3;9212:19;9264:4;9259:3;9255:14;9240:29;;9091:184;;;;:::o;9281:132::-;9348:4;9371:3;9363:11;;9401:4;9396:3;9392:14;9384:22;;9281:132;;;:::o;9419:108::-;9496:24;9514:5;9496:24;:::i;:::-;9491:3;9484:37;9419:108;;:::o;9533:179::-;9602:10;9623:46;9665:3;9657:6;9623:46;:::i;:::-;9701:4;9696:3;9692:14;9678:28;;9533:179;;;;:::o;9718:113::-;9788:4;9820;9815:3;9811:14;9803:22;;9718:113;;;:::o;9867:732::-;9986:3;10015:54;10063:5;10015:54;:::i;:::-;10085:86;10164:6;10159:3;10085:86;:::i;:::-;10078:93;;10195:56;10245:5;10195:56;:::i;:::-;10274:7;10305:1;10290:284;10315:6;10312:1;10309:13;10290:284;;;10391:6;10385:13;10418:63;10477:3;10462:13;10418:63;:::i;:::-;10411:70;;10504:60;10557:6;10504:60;:::i;:::-;10494:70;;10350:224;10337:1;10334;10330:9;10325:14;;10290:284;;;10294:14;10590:3;10583:10;;9991:608;;;9867:732;;;;:::o;10605:373::-;10748:4;10786:2;10775:9;10771:18;10763:26;;10835:9;10829:4;10825:20;10821:1;10810:9;10806:17;10799:47;10863:108;10966:4;10957:6;10863:108;:::i;:::-;10855:116;;10605:373;;;;:::o;10984:474::-;11052:6;11060;11109:2;11097:9;11088:7;11084:23;11080:32;11077:119;;;11115:79;;:::i;:::-;11077:119;11235:1;11260:53;11305:7;11296:6;11285:9;11281:22;11260:53;:::i;:::-;11250:63;;11206:117;11362:2;11388:53;11433:7;11424:6;11413:9;11409:22;11388:53;:::i;:::-;11378:63;;11333:118;10984:474;;;;;:::o;11464:323::-;11520:6;11569:2;11557:9;11548:7;11544:23;11540:32;11537:119;;;11575:79;;:::i;:::-;11537:119;11695:1;11720:50;11762:7;11753:6;11742:9;11738:22;11720:50;:::i;:::-;11710:60;;11666:114;11464:323;;;;:::o;11793:474::-;11861:6;11869;11918:2;11906:9;11897:7;11893:23;11889:32;11886:119;;;11924:79;;:::i;:::-;11886:119;12044:1;12069:53;12114:7;12105:6;12094:9;12090:22;12069:53;:::i;:::-;12059:63;;12015:117;12171:2;12197:53;12242:7;12233:6;12222:9;12218:22;12197:53;:::i;:::-;12187:63;;12142:118;11793:474;;;;;:::o;12273:180::-;12321:77;12318:1;12311:88;12418:4;12415:1;12408:15;12442:4;12439:1;12432:15;12459:320;12503:6;12540:1;12534:4;12530:12;12520:22;;12587:1;12581:4;12577:12;12608:18;12598:81;;12664:4;12656:6;12652:17;12642:27;;12598:81;12726:2;12718:6;12715:14;12695:18;12692:38;12689:84;;12745:18;;:::i;:::-;12689:84;12510:269;12459:320;;;:::o;12785:182::-;12925:34;12921:1;12913:6;12909:14;12902:58;12785:182;:::o;12973:366::-;13115:3;13136:67;13200:2;13195:3;13136:67;:::i;:::-;13129:74;;13212:93;13301:3;13212:93;:::i;:::-;13330:2;13325:3;13321:12;13314:19;;12973:366;;;:::o;13345:419::-;13511:4;13549:2;13538:9;13534:18;13526:26;;13598:9;13592:4;13588:20;13584:1;13573:9;13569:17;13562:47;13626:131;13752:4;13626:131;:::i;:::-;13618:139;;13345:419;;;:::o;13770:180::-;13818:77;13815:1;13808:88;13915:4;13912:1;13905:15;13939:4;13936:1;13929:15;13956:348;13996:7;14019:20;14037:1;14019:20;:::i;:::-;14014:25;;14053:20;14071:1;14053:20;:::i;:::-;14048:25;;14241:1;14173:66;14169:74;14166:1;14163:81;14158:1;14151:9;14144:17;14140:105;14137:131;;;14248:18;;:::i;:::-;14137:131;14296:1;14293;14289:9;14278:20;;13956:348;;;;:::o;14310:180::-;14358:77;14355:1;14348:88;14455:4;14452:1;14445:15;14479:4;14476:1;14469:15;14496:185;14536:1;14553:20;14571:1;14553:20;:::i;:::-;14548:25;;14587:20;14605:1;14587:20;:::i;:::-;14582:25;;14626:1;14616:35;;14631:18;;:::i;:::-;14616:35;14673:1;14670;14666:9;14661:14;;14496:185;;;;:::o;14687:102::-;14729:8;14776:5;14773:1;14769:13;14748:34;;14687:102;;;:::o;14795:848::-;14856:5;14863:4;14887:6;14878:15;;14911:5;14902:14;;14925:712;14946:1;14936:8;14933:15;14925:712;;;15041:4;15036:3;15032:14;15026:4;15023:24;15020:50;;;15050:18;;:::i;:::-;15020:50;15100:1;15090:8;15086:16;15083:451;;;15515:4;15508:5;15504:16;15495:25;;15083:451;15565:4;15559;15555:15;15547:23;;15595:32;15618:8;15595:32;:::i;:::-;15583:44;;14925:712;;;14795:848;;;;;;;:::o;15649:1073::-;15703:5;15894:8;15884:40;;15915:1;15906:10;;15917:5;;15884:40;15943:4;15933:36;;15960:1;15951:10;;15962:5;;15933:36;16029:4;16077:1;16072:27;;;;16113:1;16108:191;;;;16022:277;;16072:27;16090:1;16081:10;;16092:5;;;16108:191;16153:3;16143:8;16140:17;16137:43;;;16160:18;;:::i;:::-;16137:43;16209:8;16206:1;16202:16;16193:25;;16244:3;16237:5;16234:14;16231:40;;;16251:18;;:::i;:::-;16231:40;16284:5;;;16022:277;;16408:2;16398:8;16395:16;16389:3;16383:4;16380:13;16376:36;16358:2;16348:8;16345:16;16340:2;16334:4;16331:12;16327:35;16311:111;16308:246;;;16464:8;16458:4;16454:19;16445:28;;16499:3;16492:5;16489:14;16486:40;;;16506:18;;:::i;:::-;16486:40;16539:5;;16308:246;16579:42;16617:3;16607:8;16601:4;16598:1;16579:42;:::i;:::-;16564:57;;;;16653:4;16648:3;16644:14;16637:5;16634:25;16631:51;;;16662:18;;:::i;:::-;16631:51;16711:4;16704:5;16700:16;16691:25;;15649:1073;;;;;;:::o;16728:281::-;16786:5;16810:23;16828:4;16810:23;:::i;:::-;16802:31;;16854:25;16870:8;16854:25;:::i;:::-;16842:37;;16898:104;16935:66;16925:8;16919:4;16898:104;:::i;:::-;16889:113;;16728:281;;;;:::o;17015:305::-;17055:3;17074:20;17092:1;17074:20;:::i;:::-;17069:25;;17108:20;17126:1;17108:20;:::i;:::-;17103:25;;17262:1;17194:66;17190:74;17187:1;17184:81;17181:107;;;17268:18;;:::i;:::-;17181:107;17312:1;17309;17305:9;17298:16;;17015:305;;;;:::o;17326:143::-;17383:5;17414:6;17408:13;17399:22;;17430:33;17457:5;17430:33;:::i;:::-;17326:143;;;;:::o;17475:351::-;17545:6;17594:2;17582:9;17573:7;17569:23;17565:32;17562:119;;;17600:79;;:::i;:::-;17562:119;17720:1;17745:64;17801:7;17792:6;17781:9;17777:22;17745:64;:::i;:::-;17735:74;;17691:128;17475:351;;;;:::o;17832:332::-;17953:4;17991:2;17980:9;17976:18;17968:26;;18004:71;18072:1;18061:9;18057:17;18048:6;18004:71;:::i;:::-;18085:72;18153:2;18142:9;18138:18;18129:6;18085:72;:::i;:::-;17832:332;;;;;:::o;18170:85::-;18215:7;18244:5;18233:16;;18170:85;;;:::o;18261:60::-;18289:3;18310:5;18303:12;;18261:60;;;:::o;18327:158::-;18385:9;18418:61;18436:42;18445:32;18471:5;18445:32;:::i;:::-;18436:42;:::i;:::-;18418:61;:::i;:::-;18405:74;;18327:158;;;:::o;18491:147::-;18586:45;18625:5;18586:45;:::i;:::-;18581:3;18574:58;18491:147;;:::o;18644:807::-;18893:4;18931:3;18920:9;18916:19;18908:27;;18945:71;19013:1;19002:9;18998:17;18989:6;18945:71;:::i;:::-;19026:72;19094:2;19083:9;19079:18;19070:6;19026:72;:::i;:::-;19108:80;19184:2;19173:9;19169:18;19160:6;19108:80;:::i;:::-;19198;19274:2;19263:9;19259:18;19250:6;19198:80;:::i;:::-;19288:73;19356:3;19345:9;19341:19;19332:6;19288:73;:::i;:::-;19371;19439:3;19428:9;19424:19;19415:6;19371:73;:::i;:::-;18644:807;;;;;;;;;:::o;19457:143::-;19514:5;19545:6;19539:13;19530:22;;19561:33;19588:5;19561:33;:::i;:::-;19457:143;;;;:::o;19606:663::-;19694:6;19702;19710;19759:2;19747:9;19738:7;19734:23;19730:32;19727:119;;;19765:79;;:::i;:::-;19727:119;19885:1;19910:64;19966:7;19957:6;19946:9;19942:22;19910:64;:::i;:::-;19900:74;;19856:128;20023:2;20049:64;20105:7;20096:6;20085:9;20081:22;20049:64;:::i;:::-;20039:74;;19994:129;20162:2;20188:64;20244:7;20235:6;20224:9;20220:22;20188:64;:::i;:::-;20178:74;;20133:129;19606:663;;;;;:::o;20275:180::-;20323:77;20320:1;20313:88;20420:4;20417:1;20410:15;20444:4;20441:1;20434:15;20461:180;20509:77;20506:1;20499:88;20606:4;20603:1;20596:15;20630:4;20627:1;20620:15;20647:114;20714:6;20748:5;20742:12;20732:22;;20647:114;;;:::o;20767:184::-;20866:11;20900:6;20895:3;20888:19;20940:4;20935:3;20931:14;20916:29;;20767:184;;;;:::o;20957:132::-;21024:4;21047:3;21039:11;;21077:4;21072:3;21068:14;21060:22;;20957:132;;;:::o;21095:108::-;21172:24;21190:5;21172:24;:::i;:::-;21167:3;21160:37;21095:108;;:::o;21209:179::-;21278:10;21299:46;21341:3;21333:6;21299:46;:::i;:::-;21377:4;21372:3;21368:14;21354:28;;21209:179;;;;:::o;21394:113::-;21464:4;21496;21491:3;21487:14;21479:22;;21394:113;;;:::o;21543:732::-;21662:3;21691:54;21739:5;21691:54;:::i;:::-;21761:86;21840:6;21835:3;21761:86;:::i;:::-;21754:93;;21871:56;21921:5;21871:56;:::i;:::-;21950:7;21981:1;21966:284;21991:6;21988:1;21985:13;21966:284;;;22067:6;22061:13;22094:63;22153:3;22138:13;22094:63;:::i;:::-;22087:70;;22180:60;22233:6;22180:60;:::i;:::-;22170:70;;22026:224;22013:1;22010;22006:9;22001:14;;21966:284;;;21970:14;22266:3;22259:10;;21667:608;;;21543:732;;;;:::o;22281:483::-;22452:4;22490:2;22479:9;22475:18;22467:26;;22503:71;22571:1;22560:9;22556:17;22547:6;22503:71;:::i;:::-;22621:9;22615:4;22611:20;22606:2;22595:9;22591:18;22584:48;22649:108;22752:4;22743:6;22649:108;:::i;:::-;22641:116;;22281:483;;;;;:::o;22770:117::-;22879:1;22876;22869:12;22893:281;22976:27;22998:4;22976:27;:::i;:::-;22968:6;22964:40;23106:6;23094:10;23091:22;23070:18;23058:10;23055:34;23052:62;23049:88;;;23117:18;;:::i;:::-;23049:88;23157:10;23153:2;23146:22;22936:238;22893:281;;:::o;23180:129::-;23214:6;23241:20;;:::i;:::-;23231:30;;23270:33;23298:4;23290:6;23270:33;:::i;:::-;23180:129;;;:::o;23315:311::-;23392:4;23482:18;23474:6;23471:30;23468:56;;;23504:18;;:::i;:::-;23468:56;23554:4;23546:6;23542:17;23534:25;;23614:4;23608;23604:15;23596:23;;23315:311;;;:::o;23632:117::-;23741:1;23738;23731:12;23772:732;23879:5;23904:81;23920:64;23977:6;23920:64;:::i;:::-;23904:81;:::i;:::-;23895:90;;24005:5;24034:6;24027:5;24020:21;24068:4;24061:5;24057:16;24050:23;;24121:4;24113:6;24109:17;24101:6;24097:30;24150:3;24142:6;24139:15;24136:122;;;24169:79;;:::i;:::-;24136:122;24284:6;24267:231;24301:6;24296:3;24293:15;24267:231;;;24376:3;24405:48;24449:3;24437:10;24405:48;:::i;:::-;24400:3;24393:61;24483:4;24478:3;24474:14;24467:21;;24343:155;24327:4;24322:3;24318:14;24311:21;;24267:231;;;24271:21;23885:619;;23772:732;;;;;:::o;24527:385::-;24609:5;24658:3;24651:4;24643:6;24639:17;24635:27;24625:122;;24666:79;;:::i;:::-;24625:122;24776:6;24770:13;24801:105;24902:3;24894:6;24887:4;24879:6;24875:17;24801:105;:::i;:::-;24792:114;;24615:297;24527:385;;;;:::o;24918:554::-;25013:6;25062:2;25050:9;25041:7;25037:23;25033:32;25030:119;;;25068:79;;:::i;:::-;25030:119;25209:1;25198:9;25194:17;25188:24;25239:18;25231:6;25228:30;25225:117;;;25261:79;;:::i;:::-;25225:117;25366:89;25447:7;25438:6;25427:9;25423:22;25366:89;:::i;:::-;25356:99;;25159:306;24918:554;;;;:::o;25478:162::-;25618:14;25614:1;25606:6;25602:14;25595:38;25478:162;:::o;25646:366::-;25788:3;25809:67;25873:2;25868:3;25809:67;:::i;:::-;25802:74;;25885:93;25974:3;25885:93;:::i;:::-;26003:2;25998:3;25994:12;25987:19;;25646:366;;;:::o;26018:419::-;26184:4;26222:2;26211:9;26207:18;26199:26;;26271:9;26265:4;26261:20;26257:1;26246:9;26242:17;26235:47;26299:131;26425:4;26299:131;:::i;:::-;26291:139;;26018:419;;;:::o;26443:224::-;26583:34;26579:1;26571:6;26567:14;26560:58;26652:7;26647:2;26639:6;26635:15;26628:32;26443:224;:::o;26673:366::-;26815:3;26836:67;26900:2;26895:3;26836:67;:::i;:::-;26829:74;;26912:93;27001:3;26912:93;:::i;:::-;27030:2;27025:3;27021:12;27014:19;;26673:366;;;:::o;27045:419::-;27211:4;27249:2;27238:9;27234:18;27226:26;;27298:9;27292:4;27288:20;27284:1;27273:9;27269:17;27262:47;27326:131;27452:4;27326:131;:::i;:::-;27318:139;;27045:419;;;:::o;27470:225::-;27610:34;27606:1;27598:6;27594:14;27587:58;27679:8;27674:2;27666:6;27662:15;27655:33;27470:225;:::o;27701:366::-;27843:3;27864:67;27928:2;27923:3;27864:67;:::i;:::-;27857:74;;27940:93;28029:3;27940:93;:::i;:::-;28058:2;28053:3;28049:12;28042:19;;27701:366;;;:::o;28073:419::-;28239:4;28277:2;28266:9;28262:18;28254:26;;28326:9;28320:4;28316:20;28312:1;28301:9;28297:17;28290:47;28354:131;28480:4;28354:131;:::i;:::-;28346:139;;28073:419;;;:::o;28498:223::-;28638:34;28634:1;28626:6;28622:14;28615:58;28707:6;28702:2;28694:6;28690:15;28683:31;28498:223;:::o;28727:366::-;28869:3;28890:67;28954:2;28949:3;28890:67;:::i;:::-;28883:74;;28966:93;29055:3;28966:93;:::i;:::-;29084:2;29079:3;29075:12;29068:19;;28727:366;;;:::o;29099:419::-;29265:4;29303:2;29292:9;29288:18;29280:26;;29352:9;29346:4;29342:20;29338:1;29327:9;29323:17;29316:47;29380:131;29506:4;29380:131;:::i;:::-;29372:139;;29099:419;;;:::o;29524:221::-;29664:34;29660:1;29652:6;29648:14;29641:58;29733:4;29728:2;29720:6;29716:15;29709:29;29524:221;:::o;29751:366::-;29893:3;29914:67;29978:2;29973:3;29914:67;:::i;:::-;29907:74;;29990:93;30079:3;29990:93;:::i;:::-;30108:2;30103:3;30099:12;30092:19;;29751:366;;;:::o;30123:419::-;30289:4;30327:2;30316:9;30312:18;30304:26;;30376:9;30370:4;30366:20;30362:1;30351:9;30347:17;30340:47;30404:131;30530:4;30404:131;:::i;:::-;30396:139;;30123:419;;;:::o;30548:179::-;30688:31;30684:1;30676:6;30672:14;30665:55;30548:179;:::o;30733:366::-;30875:3;30896:67;30960:2;30955:3;30896:67;:::i;:::-;30889:74;;30972:93;31061:3;30972:93;:::i;:::-;31090:2;31085:3;31081:12;31074:19;;30733:366;;;:::o;31105:419::-;31271:4;31309:2;31298:9;31294:18;31286:26;;31358:9;31352:4;31348:20;31344:1;31333:9;31329:17;31322:47;31386:131;31512:4;31386:131;:::i;:::-;31378:139;;31105:419;;;:::o;31530:224::-;31670:34;31666:1;31658:6;31654:14;31647:58;31739:7;31734:2;31726:6;31722:15;31715:32;31530:224;:::o;31760:366::-;31902:3;31923:67;31987:2;31982:3;31923:67;:::i;:::-;31916:74;;31999:93;32088:3;31999:93;:::i;:::-;32117:2;32112:3;32108:12;32101:19;;31760:366;;;:::o;32132:419::-;32298:4;32336:2;32325:9;32321:18;32313:26;;32385:9;32379:4;32375:20;32371:1;32360:9;32356:17;32349:47;32413:131;32539:4;32413:131;:::i;:::-;32405:139;;32132:419;;;:::o;32557:222::-;32697:34;32693:1;32685:6;32681:14;32674:58;32766:5;32761:2;32753:6;32749:15;32742:30;32557:222;:::o;32785:366::-;32927:3;32948:67;33012:2;33007:3;32948:67;:::i;:::-;32941:74;;33024:93;33113:3;33024:93;:::i;:::-;33142:2;33137:3;33133:12;33126:19;;32785:366;;;:::o;33157:419::-;33323:4;33361:2;33350:9;33346:18;33338:26;;33410:9;33404:4;33400:20;33396:1;33385:9;33381:17;33374:47;33438:131;33564:4;33438:131;:::i;:::-;33430:139;;33157:419;;;:::o;33582:168::-;33722:20;33718:1;33710:6;33706:14;33699:44;33582:168;:::o;33756:366::-;33898:3;33919:67;33983:2;33978:3;33919:67;:::i;:::-;33912:74;;33995:93;34084:3;33995:93;:::i;:::-;34113:2;34108:3;34104:12;34097:19;;33756:366;;;:::o;34128:419::-;34294:4;34332:2;34321:9;34317:18;34309:26;;34381:9;34375:4;34371:20;34367:1;34356:9;34352:17;34345:47;34409:131;34535:4;34409:131;:::i;:::-;34401:139;;34128:419;;;:::o;34553:170::-;34693:22;34689:1;34681:6;34677:14;34670:46;34553:170;:::o;34729:366::-;34871:3;34892:67;34956:2;34951:3;34892:67;:::i;:::-;34885:74;;34968:93;35057:3;34968:93;:::i;:::-;35086:2;35081:3;35077:12;35070:19;;34729:366;;;:::o;35101:419::-;35267:4;35305:2;35294:9;35290:18;35282:26;;35354:9;35348:4;35344:20;35340:1;35329:9;35325:17;35318:47;35382:131;35508:4;35382:131;:::i;:::-;35374:139;;35101:419;;;:::o;35526:221::-;35666:34;35662:1;35654:6;35650:14;35643:58;35735:4;35730:2;35722:6;35718:15;35711:29;35526:221;:::o;35753:366::-;35895:3;35916:67;35980:2;35975:3;35916:67;:::i;:::-;35909:74;;35992:93;36081:3;35992:93;:::i;:::-;36110:2;36105:3;36101:12;36094:19;;35753:366;;;:::o;36125:419::-;36291:4;36329:2;36318:9;36314:18;36306:26;;36378:9;36372:4;36368:20;36364:1;36353:9;36349:17;36342:47;36406:131;36532:4;36406:131;:::i;:::-;36398:139;;36125:419;;;:::o;36550:289::-;36690:34;36686:1;36678:6;36674:14;36667:58;36759:34;36754:2;36746:6;36742:15;36735:59;36828:3;36823:2;36815:6;36811:15;36804:28;36550:289;:::o;36845:366::-;36987:3;37008:67;37072:2;37067:3;37008:67;:::i;:::-;37001:74;;37084:93;37173:3;37084:93;:::i;:::-;37202:2;37197:3;37193:12;37186:19;;36845:366;;;:::o;37217:419::-;37383:4;37421:2;37410:9;37406:18;37398:26;;37470:9;37464:4;37460:20;37456:1;37445:9;37441:17;37434:47;37498:131;37624:4;37498:131;:::i;:::-;37490:139;;37217:419;;;:::o;37642:181::-;37782:33;37778:1;37770:6;37766:14;37759:57;37642:181;:::o;37829:366::-;37971:3;37992:67;38056:2;38051:3;37992:67;:::i;:::-;37985:74;;38068:93;38157:3;38068:93;:::i;:::-;38186:2;38181:3;38177:12;38170:19;;37829:366;;;:::o;38201:419::-;38367:4;38405:2;38394:9;38390:18;38382:26;;38454:9;38448:4;38444:20;38440:1;38429:9;38425:17;38418:47;38482:131;38608:4;38482:131;:::i;:::-;38474:139;;38201:419;;;:::o;38626:290::-;38766:34;38762:1;38754:6;38750:14;38743:58;38835:34;38830:2;38822:6;38818:15;38811:59;38904:4;38899:2;38891:6;38887:15;38880:29;38626:290;:::o;38922:366::-;39064:3;39085:67;39149:2;39144:3;39085:67;:::i;:::-;39078:74;;39161:93;39250:3;39161:93;:::i;:::-;39279:2;39274:3;39270:12;39263:19;;38922:366;;;:::o;39294:419::-;39460:4;39498:2;39487:9;39483:18;39475:26;;39547:9;39541:4;39537:20;39533:1;39522:9;39518:17;39511:47;39575:131;39701:4;39575:131;:::i;:::-;39567:139;;39294:419;;;:::o;39719:171::-;39859:23;39855:1;39847:6;39843:14;39836:47;39719:171;:::o;39896:366::-;40038:3;40059:67;40123:2;40118:3;40059:67;:::i;:::-;40052:74;;40135:93;40224:3;40135:93;:::i;:::-;40253:2;40248:3;40244:12;40237:19;;39896:366;;;:::o;40268:419::-;40434:4;40472:2;40461:9;40457:18;40449:26;;40521:9;40515:4;40511:20;40507:1;40496:9;40492:17;40485:47;40549:131;40675:4;40549:131;:::i;:::-;40541:139;;40268:419;;;:::o;40693:170::-;40833:22;40829:1;40821:6;40817:14;40810:46;40693:170;:::o;40869:366::-;41011:3;41032:67;41096:2;41091:3;41032:67;:::i;:::-;41025:74;;41108:93;41197:3;41108:93;:::i;:::-;41226:2;41221:3;41217:12;41210:19;;40869:366;;;:::o;41241:419::-;41407:4;41445:2;41434:9;41430:18;41422:26;;41494:9;41488:4;41484:20;41480:1;41469:9;41465:17;41458:47;41522:131;41648:4;41522:131;:::i;:::-;41514:139;;41241:419;;;:::o;41666:191::-;41706:4;41726:20;41744:1;41726:20;:::i;:::-;41721:25;;41760:20;41778:1;41760:20;:::i;:::-;41755:25;;41799:1;41796;41793:8;41790:34;;;41804:18;;:::i;:::-;41790:34;41849:1;41846;41842:9;41834:17;;41666:191;;;;:::o;41863:831::-;42126:4;42164:3;42153:9;42149:19;42141:27;;42178:71;42246:1;42235:9;42231:17;42222:6;42178:71;:::i;:::-;42259:80;42335:2;42324:9;42320:18;42311:6;42259:80;:::i;:::-;42386:9;42380:4;42376:20;42371:2;42360:9;42356:18;42349:48;42414:108;42517:4;42508:6;42414:108;:::i;:::-;42406:116;;42532:72;42600:2;42589:9;42585:18;42576:6;42532:72;:::i;:::-;42614:73;42682:3;42671:9;42667:19;42658:6;42614:73;:::i;:::-;41863:831;;;;;;;;:::o;42700:720::-;42935:4;42973:3;42962:9;42958:19;42950:27;;42987:79;43063:1;43052:9;43048:17;43039:6;42987:79;:::i;:::-;43113:9;43107:4;43103:20;43098:2;43087:9;43083:18;43076:48;43141:108;43244:4;43235:6;43141:108;:::i;:::-;43133:116;;43259:72;43327:2;43316:9;43312:18;43303:6;43259:72;:::i;:::-;43341;43409:2;43398:9;43394:18;43385:6;43341:72;:::i;:::-;42700:720;;;;;;;:::o;43426:351::-;43496:6;43545:2;43533:9;43524:7;43520:23;43516:32;43513:119;;;43551:79;;:::i;:::-;43513:119;43671:1;43696:64;43752:7;43743:6;43732:9;43728:22;43696:64;:::i;:::-;43686:74;;43642:128;43426:351;;;;:::o;43783:332::-;43904:4;43942:2;43931:9;43927:18;43919:26;;43955:71;44023:1;44012:9;44008:17;43999:6;43955:71;:::i;:::-;44036:72;44104:2;44093:9;44089:18;44080:6;44036:72;:::i;:::-;43783:332;;;;;:::o;44121:137::-;44175:5;44206:6;44200:13;44191:22;;44222:30;44246:5;44222:30;:::i;:::-;44121:137;;;;:::o;44264:345::-;44331:6;44380:2;44368:9;44359:7;44355:23;44351:32;44348:119;;;44386:79;;:::i;:::-;44348:119;44506:1;44531:61;44584:7;44575:6;44564:9;44560:22;44531:61;:::i;:::-;44521:71;;44477:125;44264:345;;;;:::o;44615:180::-;44755:32;44751:1;44743:6;44739:14;44732:56;44615:180;:::o;44801:366::-;44943:3;44964:67;45028:2;45023:3;44964:67;:::i;:::-;44957:74;;45040:93;45129:3;45040:93;:::i;:::-;45158:2;45153:3;45149:12;45142:19;;44801:366;;;:::o;45173:419::-;45339:4;45377:2;45366:9;45362:18;45354:26;;45426:9;45420:4;45416:20;45412:1;45401:9;45397:17;45390:47;45454:131;45580:4;45454:131;:::i;:::-;45446:139;;45173:419;;;:::o;45598:225::-;45738:34;45734:1;45726:6;45722:14;45715:58;45807:8;45802:2;45794:6;45790:15;45783:33;45598:225;:::o;45829:366::-;45971:3;45992:67;46056:2;46051:3;45992:67;:::i;:::-;45985:74;;46068:93;46157:3;46068:93;:::i;:::-;46186:2;46181:3;46177:12;46170:19;;45829:366;;;:::o;46201:419::-;46367:4;46405:2;46394:9;46390:18;46382:26;;46454:9;46448:4;46444:20;46440:1;46429:9;46425:17;46418:47;46482:131;46608:4;46482:131;:::i;:::-;46474:139;;46201:419;;;:::o

Swarm Source

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