ETH Price: $3,569.23 (+8.25%)

Token

PhenX (PNX)
 

Overview

Max Total Supply

1,000,000 PNX

Holders

1,118 (0.00%)

Market

Price

$0.04 @ 0.000011 ETH

Onchain Market Cap

$37,558.99

Circulating Supply Market Cap

$37,559.00

Other Info

Token Contract (WITH 9 Decimals)

Balance
4,455.15 PNX

Value
$167.33 ( ~0.0468812821126264 Eth) [0.4455%]
0x9A4dd52D7a7F5585D66660F6A84b792E8a0E7C7a
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Experience decentralized trading as it was meant to be, with low gas fees and zero transaction costs.

# Exchange Pair Price  24H Volume % Volume
1
Uniswap V2 (Ethereum)
0XD166B7D9824CC5359360B47389ABA9341CE12619-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$0.038
0.0000111 Eth
$69.70
1,832.796 0XD166B7D9824CC5359360B47389ABA9341CE12619
100.0000%

Contract Source Code Verified (Exact Match)

Contract Name:
Phenx

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-07-29
*/

// SPDX-License-Identifier: MIT

/**
https://t.me/phenxdex
https://x.com/Phenxdex
https://phenx.xyz/
*/

pragma solidity ^0.8.26;
pragma experimental ABIEncoderV2;

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 Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

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

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _balances[account];
    }

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

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

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

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    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);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    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);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

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

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

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

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

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

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

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

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

interface 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 IUniswapV2Router02 {
    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 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;
}

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public operationsWallet; // operations wallet for marketing, admin, and general project expenses
    address public developmentWallet; // development wallet for development expenses

    uint256 public maxTransactionAmount;
    uint256 public minSwapTokensAtAmount;
    uint256 public maxSwapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    uint256 public launchedAt;
    uint256 public launchedAtTimestamp;
    uint256 public antiSnipingTime = 0 seconds;

    uint256 public buyTotalFees = 75;
    uint256 public buyMarketingFee = 25;
    uint256 public buyDevelopmentFee = 25;
    uint256 public buyLiquidityFee = 25;

    uint256 public sellTotalFees = 75;
    uint256 public sellMarketingFee = 25;
    uint256 public sellDevelopmentFee = 25;
    uint256 public sellLiquidityFee = 25;

    uint256 public tokensForMarketing;
    uint256 public tokensForDevelopment;
    uint256 public tokensForLiquidity;

    /******************/

    // exclude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public _isExcludedMaxWallet;
/*     mapping(address => bool) public isSniper;
 */
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event operationsWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event developmentWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("PhenX", "PNX") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
                        0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D // eth
             
/*             0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24 // base
 */        );

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

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

        uint256 totalSupply = 1000000 * 10 ** 9;

        maxTransactionAmount = totalSupply / 100;
        maxWallet = totalSupply / 50;
        minSwapTokensAtAmount = 1000 * 10 ** 9;
        maxSwapTokensAtAmount = 100000 * 10 ** 9;

        operationsWallet = address(0x7e122Cef5eB62674f536e315C3371578615e5E44);
        developmentWallet = address(0x3270EcCA611f2eA69985542eb00E9F0bb651AfBD);

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

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

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

        _mint(owner(), totalSupply);
    }

    receive() external payable {}

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function updateSwapTokensAtAmount(
        uint256 minAmount,
        uint256 maxAmount
    ) external onlyOwner returns (bool) {
        require(
            minAmount < maxAmount,
            "Min amount must be less than max amount"
        );
        minSwapTokensAtAmount = minAmount;
        maxSwapTokensAtAmount = maxAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum > 1000 * 10 ** 9,
            "Min amount must be greater than 1000"
        );
        maxTransactionAmount = newNum * (10 ** 9);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum > 1000 * 10 ** 9,
            "Min amount must be greater than 1000"
        );

        maxWallet = newNum * (10 ** 9);
    }

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

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

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _developmentFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        require(
            _marketingFee + _developmentFee + _liquidityFee <= 25,
            "Total fees must be less than 25 or equal to 25"
        );

        buyMarketingFee = _marketingFee;
        buyDevelopmentFee = _developmentFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyMarketingFee + buyDevelopmentFee + buyLiquidityFee;
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _developmentFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        require(
            _marketingFee + _developmentFee + _liquidityFee <= 25,
            "Total fees must be less than 25 or equal to 25"
        );

        sellMarketingFee = _marketingFee;
        sellDevelopmentFee = _developmentFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees =
            sellMarketingFee +
            sellDevelopmentFee +
            sellLiquidityFee;
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateOperationsWallet(
        address newOperationsWallet
    ) external onlyOwner {
        require(
            !isContract(newOperationsWallet),
            "Can't set contract as wallet"
        );
        emit operationsWalletUpdated(newOperationsWallet, operationsWallet);
        operationsWallet = newOperationsWallet;
    }

    function updateDevelopmentWallet(
        address newDevelopmentWallet
    ) external onlyOwner {
        require(
            !isContract(newDevelopmentWallet),
            "Can't set contract as wallet"
        );
        emit developmentWalletUpdated(newDevelopmentWallet, developmentWallet);
        developmentWallet = newDevelopmentWallet;
    }

    function isContract(address account) public view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

/*     function addSniperInList(address _account) external onlyOwner {
        require(
            _account != address(operationsWallet) &&
                _account != address(developmentWallet) &&
                _account != address(uniswapV2Router) &&
                _account != owner(),
            "We can not blacklist marketing wallet or the router or the owner or the zero address"
        );
        require(!isSniper[_account], "Sniper already exist");
        isSniper[_account] = true;
    } */

/*     function removeSniperFromList(address _account) external onlyOwner {
        require(isSniper[_account], "Not a sniper");
        isSniper[_account] = false;
    }
 */
    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(!isSniper[to], "Sniper detected");
        require(!isSniper[from], "Sniper detected"); */

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

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }
                // antibot
/*                 if (
                    block.timestamp < launchedAtTimestamp + antiSnipingTime &&
                    from != address(uniswapV2Router)
                ) {
                    if (from == uniswapV2Pair) {
                        isSniper[to] = true;
                    } else if (to == uniswapV2Pair) {
                        isSniper[from] = true;
                    }
                } */
                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to] &&
                    !_isExcludedMaxWallet[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from] &&
                    !_isExcludedMaxWallet[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (
                    !_isExcludedMaxTransactionAmount[to] &&
                    !_isExcludedMaxWallet[to]
                ) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= minSwapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForDevelopment +=
                    (fees * sellDevelopmentFee) /
                    sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForDevelopment +=
                    (fees * buyDevelopmentFee) /
                    buyTotalFees;
            }

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

            amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDevelopment;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > maxSwapTokensAtAmount) {
            contractBalance = maxSwapTokensAtAmount;
        } else if (contractBalance < minSwapTokensAtAmount) {
            return;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );

        uint256 ethForDevelopment = ethBalance.mul(tokensForDevelopment).div(
            totalTokensToSwap
        );

        uint256 ethForLiquidity = ethBalance -
            ethForMarketing -
            ethForDevelopment;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDevelopment = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

        (success, ) = address(operationsWallet).call{value: ethForMarketing}(
            ""
        );

        (success, ) = address(developmentWallet).call{value: ethForDevelopment}(
            ""
        );
    }

    function withdrawETH(uint256 _amount) external onlyOwner {
        require(address(this).balance >= _amount, "Invalid Amount");
        payable(msg.sender).transfer(_amount);
    }

    function withdrawToken(IERC20 _token, uint256 _amount) external onlyOwner {
        require(_token != IERC20(address(this)), "Cannot withdraw PhenX");
        require(_token.balanceOf(address(this)) >= _amount, "Invalid Amount");
        _token.transfer(msg.sender, _amount);
    }

    function launch() public onlyOwner {
        require(launchedAt == 0, "Already launched");
        launchedAt = block.number;
        launchedAtTimestamp = block.timestamp;
        tradingActive = true;
        swapEnabled = true;
    }

    function reduceLaunchTaxes() public onlyOwner {
        require(launchedAt > 0, "Not launched");

        uint256 reduction = 5;
        uint256 minimumFee = 5;
        uint256 minimumTotalFee = 15;

        buyLiquidityFee = buyLiquidityFee > reduction
            ? buyLiquidityFee - reduction
            : minimumFee;
        buyMarketingFee = buyMarketingFee > reduction
            ? buyMarketingFee - reduction
            : minimumFee;
        buyDevelopmentFee = buyDevelopmentFee > reduction
            ? buyDevelopmentFee - reduction
            : minimumFee;
        sellLiquidityFee = sellLiquidityFee > reduction
            ? sellLiquidityFee - reduction
            : minimumFee;
        sellMarketingFee = sellMarketingFee > reduction
            ? sellMarketingFee - reduction
            : minimumFee;
        sellDevelopmentFee = sellDevelopmentFee > reduction
            ? sellDevelopmentFee - reduction
            : minimumFee;
        buyTotalFees = buyMarketingFee + buyDevelopmentFee + buyLiquidityFee;
        sellTotalFees =
            sellMarketingFee +
            sellDevelopmentFee +
            sellLiquidityFee;
        require(
            buyTotalFees >= minimumTotalFee,
            "Buy total fees below minimum"
        );
        require(
            sellTotalFees >= minimumTotalFee,
            "Sell total fees below minimum"
        );
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"developmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"operationsWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiSnipingTime","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isContract","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":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSwapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minSwapTokensAtAmount","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":"operationsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reduceLaunchTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevelopmentWallet","type":"address"}],"name":"updateDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOperationsWallet","type":"address"}],"name":"updateOperationsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minAmount","type":"uint256"},{"internalType":"uint256","name":"maxAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600c5f6101000a81548160ff0219169083151502179055505f600c60016101000a81548160ff0219169083151502179055505f600c60026101000a81548160ff0219169083151502179055505f600f55604b601055601960115560196012556019601355604b601455601960155560196016556019601755348015610089575f80fd5b506040518060400160405280600581526020017f5068656e580000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f504e58000000000000000000000000000000000000000000000000000000000081525081600390816101059190610d62565b5080600490816101159190610d62565b50505061013461012961053d60201b60201c565b61054460201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d905061015d81600161060760201b60201c565b61016e8160016106e760201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061020f9190610e8f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610274573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102989190610e8f565b6040518363ffffffff1660e01b81526004016102b5929190610ec9565b6020604051808303815f875af11580156102d1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102f59190610e8f565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505061033b60a051600161060760201b60201c565b61034e60a05160016106e760201b60201c565b61036160a05160016107c760201b60201c565b5f66038d7ea4c6800090506064816103799190610f4a565b60088190555060328161038c9190610f4a565b600b8190555064e8d4a51000600981905550655af3107a4000600a81905550737e122cef5eb62674f536e315c3371578615e5e4460065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733270ecca611f2ea69985542eb00e9f0bb651afbd60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061047161046461086560201b60201c565b600161088d60201b60201c565b61048230600161088d60201b60201c565b61049561dead600161088d60201b60201c565b6104b36104a661086560201b60201c565b600161060760201b60201c565b6104c430600161060760201b60201c565b6104d761dead600161060760201b60201c565b6104f56104e861086560201b60201c565b60016106e760201b60201c565b6105063060016106e760201b60201c565b61051961dead60016106e760201b60201c565b61053661052a61086560201b60201c565b826109bb60201b60201c565b50506110e8565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61061561053d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1661063961086560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161461068f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068690610fd4565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6106f561053d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1661071961086560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161461076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076690610fd4565b60405180910390fd5b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61089b61053d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166108bf61086560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614610915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090c90610fd4565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516109af919061100c565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a209061106f565b60405180910390fd5b610a3a5f8383610b1e60201b60201c565b8060025f828254610a4b919061108d565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610a9d919061108d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b0191906110cf565b60405180910390a3610b1a5f8383610b2360201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610ba357607f821691505b602082108103610bb657610bb5610b5f565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610c187fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610bdd565b610c228683610bdd565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610c66610c61610c5c84610c3a565b610c43565b610c3a565b9050919050565b5f819050919050565b610c7f83610c4c565b610c93610c8b82610c6d565b848454610be9565b825550505050565b5f90565b610ca7610c9b565b610cb2818484610c76565b505050565b5b81811015610cd557610cca5f82610c9f565b600181019050610cb8565b5050565b601f821115610d1a57610ceb81610bbc565b610cf484610bce565b81016020851015610d03578190505b610d17610d0f85610bce565b830182610cb7565b50505b505050565b5f82821c905092915050565b5f610d3a5f1984600802610d1f565b1980831691505092915050565b5f610d528383610d2b565b9150826002028217905092915050565b610d6b82610b28565b67ffffffffffffffff811115610d8457610d83610b32565b5b610d8e8254610b8c565b610d99828285610cd9565b5f60209050601f831160018114610dca575f8415610db8578287015190505b610dc28582610d47565b865550610e29565b601f198416610dd886610bbc565b5f5b82811015610dff57848901518255600182019150602085019450602081019050610dda565b86831015610e1c5784890151610e18601f891682610d2b565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610e5e82610e35565b9050919050565b610e6e81610e54565b8114610e78575f80fd5b50565b5f81519050610e8981610e65565b92915050565b5f60208284031215610ea457610ea3610e31565b5b5f610eb184828501610e7b565b91505092915050565b610ec381610e54565b82525050565b5f604082019050610edc5f830185610eba565b610ee96020830184610eba565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610f5482610c3a565b9150610f5f83610c3a565b925082610f6f57610f6e610ef0565b5b828204905092915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f610fbe602083610f7a565b9150610fc982610f8a565b602082019050919050565b5f6020820190508181035f830152610feb81610fb2565b9050919050565b5f8115159050919050565b61100681610ff2565b82525050565b5f60208201905061101f5f830184610ffd565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f611059601f83610f7a565b915061106482611025565b602082019050919050565b5f6020820190508181035f8301526110868161104d565b9050919050565b5f61109782610c3a565b91506110a283610c3a565b92508282019050808211156110ba576110b9610f1d565b5b92915050565b6110c981610c3a565b82525050565b5f6020820190506110e25f8301846110c0565b92915050565b60805160a0516157dd6111335f395f818161157e0152611dca01525f818161105c01528181613f230152818161400201528181614029015281816140bf01526140e601526157dd5ff3fe6080604052600436106103b0575f3560e01c80638da5cb5b116101e6578063c18bc1951161010c578063ef8700e51161009f578063f2fde38b1161006e578063f2fde38b14610dd3578063f637434214610dfb578063f8b45b0514610e25578063fd72e22a14610e4f576103b7565b8063ef8700e514610d2f578063f023f57314610d59578063f11a24d314610d81578063f14210a614610dab576103b7565b8063d85ba063116100db578063d85ba06314610c63578063d9c81c5714610c8d578063db47268114610cc9578063dd62ed3e14610cf3576103b7565b8063c18bc19514610bbf578063c6d2577d14610be7578063c8c8ebe414610c11578063d2fcc00114610c3b576103b7565b8063a9059cbb11610184578063bf56b37111610153578063bf56b37114610b1b578063c024666814610b45578063c04a541414610b6d578063c17b5b8c14610b97576103b7565b8063a9059cbb14610a4f578063b204141114610a8b578063b62496f514610ab5578063bbc0c74214610af1576103b7565b806395d89b41116101c057806395d89b41146109995780639a7a23d6146109c35780639e281a98146109eb578063a457c2d714610a13576103b7565b80638da5cb5b1461091d5780639213691314610947578063924de9b714610971576103b7565b8063313ce567116102d65780636ddd1713116102695780637571336a116102385780637571336a146108795780637bce5a04146108a15780638095d564146108cb5780638c19b37b146108f3576103b7565b80636ddd1713146107d357806370a08231146107fd578063715018a614610839578063751039fc1461084f576103b7565b80634a62bb65116102a55780634a62bb651461072d5780634fbee193146107575780635e9620dd146107935780636a486a8e146107a9576103b7565b8063313ce56714610673578063395093511461069d5780633c8d355f146106d957806349bd5a5e14610703576103b7565b806318a94cf11161034e57806323b872dd1161031d57806323b872dd146105a957806327c8f835146105e55780632c0e22cc1461060f57806330d5d18d1461064b576103b7565b806318a94cf1146105035780631a8145bb1461052d5780631f3fed8f14610557578063203e727e14610581576103b7565b806310d5de531161038a57806310d5de531461043757806316279055146104735780631694505e146104af57806318160ddd146104d9576103b7565b806301339c21146103bb57806306fdde03146103d1578063095ea7b3146103fb576103b7565b366103b757005b5f80fd5b3480156103c6575f80fd5b506103cf610e79565b005b3480156103dc575f80fd5b506103e5610f7f565b6040516103f29190614202565b60405180910390f35b348015610406575f80fd5b50610421600480360381019061041c91906142b3565b61100f565b60405161042e919061430b565b60405180910390f35b348015610442575f80fd5b5061045d60048036038101906104589190614324565b61102c565b60405161046a919061430b565b60405180910390f35b34801561047e575f80fd5b5061049960048036038101906104949190614324565b611049565b6040516104a6919061430b565b60405180910390f35b3480156104ba575f80fd5b506104c361105a565b6040516104d091906143aa565b60405180910390f35b3480156104e4575f80fd5b506104ed61107e565b6040516104fa91906143d2565b60405180910390f35b34801561050e575f80fd5b50610517611087565b60405161052491906143d2565b60405180910390f35b348015610538575f80fd5b5061054161108d565b60405161054e91906143d2565b60405180910390f35b348015610562575f80fd5b5061056b611093565b60405161057891906143d2565b60405180910390f35b34801561058c575f80fd5b506105a760048036038101906105a291906143eb565b611099565b005b3480156105b4575f80fd5b506105cf60048036038101906105ca9190614416565b611175565b6040516105dc919061430b565b60405180910390f35b3480156105f0575f80fd5b506105f9611267565b6040516106069190614475565b60405180910390f35b34801561061a575f80fd5b506106356004803603810190610630919061448e565b61126d565b604051610642919061430b565b60405180910390f35b348015610656575f80fd5b50610671600480360381019061066c9190614324565b611344565b005b34801561067e575f80fd5b506106876114c7565b60405161069491906144e7565b60405180910390f35b3480156106a8575f80fd5b506106c360048036038101906106be91906142b3565b6114cf565b6040516106d0919061430b565b60405180910390f35b3480156106e4575f80fd5b506106ed611576565b6040516106fa91906143d2565b60405180910390f35b34801561070e575f80fd5b5061071761157c565b6040516107249190614475565b60405180910390f35b348015610738575f80fd5b506107416115a0565b60405161074e919061430b565b60405180910390f35b348015610762575f80fd5b5061077d60048036038101906107789190614324565b6115b2565b60405161078a919061430b565b60405180910390f35b34801561079e575f80fd5b506107a7611604565b005b3480156107b4575f80fd5b506107bd611880565b6040516107ca91906143d2565b60405180910390f35b3480156107de575f80fd5b506107e7611886565b6040516107f4919061430b565b60405180910390f35b348015610808575f80fd5b50610823600480360381019061081e9190614324565b611899565b60405161083091906143d2565b60405180910390f35b348015610844575f80fd5b5061084d6118de565b005b34801561085a575f80fd5b50610863611965565b604051610870919061430b565b60405180910390f35b348015610884575f80fd5b5061089f600480360381019061089a919061452a565b611a02565b005b3480156108ac575f80fd5b506108b5611ad6565b6040516108c291906143d2565b60405180910390f35b3480156108d6575f80fd5b506108f160048036038101906108ec9190614568565b611adc565b005b3480156108fe575f80fd5b50610907611bef565b60405161091491906143d2565b60405180910390f35b348015610928575f80fd5b50610931611bf5565b60405161093e9190614475565b60405180910390f35b348015610952575f80fd5b5061095b611c1d565b60405161096891906143d2565b60405180910390f35b34801561097c575f80fd5b50610997600480360381019061099291906145b8565b611c23565b005b3480156109a4575f80fd5b506109ad611cbc565b6040516109ba9190614202565b60405180910390f35b3480156109ce575f80fd5b506109e960048036038101906109e4919061452a565b611d4c565b005b3480156109f6575f80fd5b50610a116004803603810190610a0c919061461e565b611e64565b005b348015610a1e575f80fd5b50610a396004803603810190610a3491906142b3565b612088565b604051610a46919061430b565b60405180910390f35b348015610a5a575f80fd5b50610a756004803603810190610a7091906142b3565b61216e565b604051610a82919061430b565b60405180910390f35b348015610a96575f80fd5b50610a9f61218b565b604051610aac91906143d2565b60405180910390f35b348015610ac0575f80fd5b50610adb6004803603810190610ad69190614324565b612191565b604051610ae8919061430b565b60405180910390f35b348015610afc575f80fd5b50610b056121ae565b604051610b12919061430b565b60405180910390f35b348015610b26575f80fd5b50610b2f6121c1565b604051610b3c91906143d2565b60405180910390f35b348015610b50575f80fd5b50610b6b6004803603810190610b66919061452a565b6121c7565b005b348015610b78575f80fd5b50610b816122e9565b604051610b8e9190614475565b60405180910390f35b348015610ba2575f80fd5b50610bbd6004803603810190610bb89190614568565b61230e565b005b348015610bca575f80fd5b50610be56004803603810190610be091906143eb565b612421565b005b348015610bf2575f80fd5b50610bfb6124fd565b604051610c0891906143d2565b60405180910390f35b348015610c1c575f80fd5b50610c25612503565b604051610c3291906143d2565b60405180910390f35b348015610c46575f80fd5b50610c616004803603810190610c5c919061452a565b612509565b005b348015610c6e575f80fd5b50610c776125dd565b604051610c8491906143d2565b60405180910390f35b348015610c98575f80fd5b50610cb36004803603810190610cae9190614324565b6125e3565b604051610cc0919061430b565b60405180910390f35b348015610cd4575f80fd5b50610cdd612600565b604051610cea91906143d2565b60405180910390f35b348015610cfe575f80fd5b50610d196004803603810190610d14919061465c565b612606565b604051610d2691906143d2565b60405180910390f35b348015610d3a575f80fd5b50610d43612688565b604051610d5091906143d2565b60405180910390f35b348015610d64575f80fd5b50610d7f6004803603810190610d7a9190614324565b61268e565b005b348015610d8c575f80fd5b50610d95612811565b604051610da291906143d2565b60405180910390f35b348015610db6575f80fd5b50610dd16004803603810190610dcc91906143eb565b612817565b005b348015610dde575f80fd5b50610df96004803603810190610df49190614324565b61291d565b005b348015610e06575f80fd5b50610e0f612a13565b604051610e1c91906143d2565b60405180910390f35b348015610e30575f80fd5b50610e39612a19565b604051610e4691906143d2565b60405180910390f35b348015610e5a575f80fd5b50610e63612a1f565b604051610e709190614475565b60405180910390f35b610e81612a44565b73ffffffffffffffffffffffffffffffffffffffff16610e9f611bf5565b73ffffffffffffffffffffffffffffffffffffffff1614610ef5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eec906146e4565b60405180910390fd5b5f600d5414610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f309061474c565b60405180910390fd5b43600d8190555042600e819055506001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b606060038054610f8e90614797565b80601f0160208091040260200160405190810160405280929190818152602001828054610fba90614797565b80156110055780601f10610fdc57610100808354040283529160200191611005565b820191905f5260205f20905b815481529060010190602001808311610fe857829003601f168201915b5050505050905090565b5f61102261101b612a44565b8484612a4b565b6001905092915050565b601c602052805f5260405f205f915054906101000a900460ff1681565b5f80823b90505f8111915050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b60165481565b601a5481565b60185481565b6110a1612a44565b73ffffffffffffffffffffffffffffffffffffffff166110bf611bf5565b73ffffffffffffffffffffffffffffffffffffffff1614611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110c906146e4565b60405180910390fd5b64e8d4a51000811161115c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115390614837565b60405180910390fd5b633b9aca008161116c9190614882565b60088190555050565b5f611181848484612c0e565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6111c8612a44565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123e90614933565b60405180910390fd5b61125b85611253612a44565b858403612a4b565b60019150509392505050565b61dead81565b5f611276612a44565b73ffffffffffffffffffffffffffffffffffffffff16611294611bf5565b73ffffffffffffffffffffffffffffffffffffffff16146112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e1906146e4565b60405180910390fd5b81831061132c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611323906149c1565b60405180910390fd5b8260098190555081600a819055506001905092915050565b61134c612a44565b73ffffffffffffffffffffffffffffffffffffffff1661136a611bf5565b73ffffffffffffffffffffffffffffffffffffffff16146113c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b7906146e4565b60405180910390fd5b6113c981611049565b15611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614a29565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fe1bb4a3e2b2b99353f84d73df9e136cfe17627ed07083a649101dfa6bde8459c60405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f6009905090565b5f61156c6114db612a44565b848460015f6114e8612a44565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546115679190614a47565b612a4b565b6001905092915050565b600f5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c5f9054906101000a900460ff1681565b5f601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61160c612a44565b73ffffffffffffffffffffffffffffffffffffffff1661162a611bf5565b73ffffffffffffffffffffffffffffffffffffffff1614611680576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611677906146e4565b60405180910390fd5b5f600d54116116c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bb90614ac4565b60405180910390fd5b5f600590505f600590505f600f905082601354116116e257816116f1565b826013546116f09190614ae2565b5b60138190555082601154116117065781611715565b826011546117149190614ae2565b5b601181905550826012541161172a5781611739565b826012546117389190614ae2565b5b601281905550826017541161174e578161175d565b8260175461175c9190614ae2565b5b60178190555082601554116117725781611781565b826015546117809190614ae2565b5b601581905550826016541161179657816117a5565b826016546117a49190614ae2565b5b6016819055506013546012546011546117be9190614a47565b6117c89190614a47565b6010819055506017546016546015546117e19190614a47565b6117eb9190614a47565b601481905550806010541015611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d90614b5f565b60405180910390fd5b80601454101561187b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187290614bc7565b60405180910390fd5b505050565b60145481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6118e6612a44565b73ffffffffffffffffffffffffffffffffffffffff16611904611bf5565b73ffffffffffffffffffffffffffffffffffffffff161461195a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611951906146e4565b60405180910390fd5b6119635f613799565b565b5f61196e612a44565b73ffffffffffffffffffffffffffffffffffffffff1661198c611bf5565b73ffffffffffffffffffffffffffffffffffffffff16146119e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d9906146e4565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055506001905090565b611a0a612a44565b73ffffffffffffffffffffffffffffffffffffffff16611a28611bf5565b73ffffffffffffffffffffffffffffffffffffffff1614611a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a75906146e4565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60115481565b611ae4612a44565b73ffffffffffffffffffffffffffffffffffffffff16611b02611bf5565b73ffffffffffffffffffffffffffffffffffffffff1614611b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4f906146e4565b60405180910390fd5b6019818385611b679190614a47565b611b719190614a47565b1115611bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba990614c55565b60405180910390fd5b826011819055508160128190555080601381905550601354601254601154611bda9190614a47565b611be49190614a47565b601081905550505050565b600a5481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60155481565b611c2b612a44565b73ffffffffffffffffffffffffffffffffffffffff16611c49611bf5565b73ffffffffffffffffffffffffffffffffffffffff1614611c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c96906146e4565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b606060048054611ccb90614797565b80601f0160208091040260200160405190810160405280929190818152602001828054611cf790614797565b8015611d425780601f10611d1957610100808354040283529160200191611d42565b820191905f5260205f20905b815481529060010190602001808311611d2557829003601f168201915b5050505050905090565b611d54612a44565b73ffffffffffffffffffffffffffffffffffffffff16611d72611bf5565b73ffffffffffffffffffffffffffffffffffffffff1614611dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbf906146e4565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90614ce3565b60405180910390fd5b611e60828261385c565b5050565b611e6c612a44565b73ffffffffffffffffffffffffffffffffffffffff16611e8a611bf5565b73ffffffffffffffffffffffffffffffffffffffff1614611ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed7906146e4565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4590614d4b565b60405180910390fd5b808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611f889190614475565b602060405180830381865afa158015611fa3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fc79190614d7d565b1015612008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fff90614df2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612043929190614e10565b6020604051808303815f875af115801561205f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120839190614e4b565b505050565b5f8060015f612095612a44565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561214f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214690614ee6565b60405180910390fd5b61216361215a612a44565b85858403612a4b565b600191505092915050565b5f61218161217a612a44565b8484612c0e565b6001905092915050565b60125481565b601e602052805f5260405f205f915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b600d5481565b6121cf612a44565b73ffffffffffffffffffffffffffffffffffffffff166121ed611bf5565b73ffffffffffffffffffffffffffffffffffffffff1614612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223a906146e4565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516122dd919061430b565b60405180910390a25050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612316612a44565b73ffffffffffffffffffffffffffffffffffffffff16612334611bf5565b73ffffffffffffffffffffffffffffffffffffffff161461238a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612381906146e4565b60405180910390fd5b60198183856123999190614a47565b6123a39190614a47565b11156123e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123db90614c55565b60405180910390fd5b82601581905550816016819055508060178190555060175460165460155461240c9190614a47565b6124169190614a47565b601481905550505050565b612429612a44565b73ffffffffffffffffffffffffffffffffffffffff16612447611bf5565b73ffffffffffffffffffffffffffffffffffffffff161461249d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612494906146e4565b60405180910390fd5b64e8d4a5100081116124e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124db90614837565b60405180910390fd5b633b9aca00816124f49190614882565b600b8190555050565b600e5481565b60085481565b612511612a44565b73ffffffffffffffffffffffffffffffffffffffff1661252f611bf5565b73ffffffffffffffffffffffffffffffffffffffff1614612585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257c906146e4565b60405180910390fd5b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60105481565b601d602052805f5260405f205f915054906101000a900460ff1681565b60095481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60195481565b612696612a44565b73ffffffffffffffffffffffffffffffffffffffff166126b4611bf5565b73ffffffffffffffffffffffffffffffffffffffff161461270a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612701906146e4565b60405180910390fd5b61271381611049565b15612753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274a90614a29565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b61281f612a44565b73ffffffffffffffffffffffffffffffffffffffff1661283d611bf5565b73ffffffffffffffffffffffffffffffffffffffff1614612893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288a906146e4565b60405180910390fd5b804710156128d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cd90614df2565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612919573d5f803e3d5ffd5b5050565b612925612a44565b73ffffffffffffffffffffffffffffffffffffffff16612943611bf5565b73ffffffffffffffffffffffffffffffffffffffff1614612999576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612990906146e4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe90614f74565b60405180910390fd5b612a1081613799565b50565b60175481565b600b5481565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab090615002565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1e90615090565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c0191906143d2565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c739061511e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce1906151ac565b60405180910390fd5b5f8103612d0157612cfc83835f6138fa565b613794565b600c5f9054906101000a900460ff16156132e057612d1d611bf5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d8b5750612d5b611bf5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dc357505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dfd575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e165750600560149054906101000a900460ff16155b156132df57600c60019054906101000a900460ff16612f0a57601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612eca5750601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0090615214565b60405180910390fd5b5b601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612fa75750601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612ffa5750601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156130a157600854811115613044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303b906152a2565b60405180910390fd5b600b5461305083611899565b8261305b9190614a47565b111561309c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130939061530a565b60405180910390fd5b6132de565b601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561313e5750601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156131915750601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156131e0576008548111156131db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d290615398565b60405180910390fd5b6132dd565b601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561327e5750601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156132dc57600b5461328f83611899565b8261329a9190614a47565b11156132db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d29061530a565b60405180910390fd5b5b5b5b5b5b5f6132ea30611899565b90505f600954821015905080801561330e5750600c60029054906101000a900460ff165b80156133275750600560149054906101000a900460ff16155b801561337a5750601e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156133cd5750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156134205750601b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613463576001600560146101000a81548160ff021916908315150217905550613448613b6f565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff16159050601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806135125750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561351b575f90505b5f811561378457601e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561357957505f601454115b15613643576135a6606461359860145488613e3d90919063ffffffff16565b613e5290919063ffffffff16565b9050601454601754826135b99190614882565b6135c391906153e3565b601a5f8282546135d39190614a47565b92505081905550601454601554826135eb9190614882565b6135f591906153e3565b60185f8282546136059190614a47565b925050819055506014546016548261361d9190614882565b61362791906153e3565b60195f8282546136379190614a47565b92505081905550613761565b601e5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561369a57505f601054115b15613760576136c760646136b960105488613e3d90919063ffffffff16565b613e5290919063ffffffff16565b9050601054601354826136da9190614882565b6136e491906153e3565b601a5f8282546136f49190614a47565b925050819055506010546011548261370c9190614882565b61371691906153e3565b60185f8282546137269190614a47565b925050819055506010546012548261373e9190614882565b61374891906153e3565b60195f8282546137589190614a47565b925050819055505b5b5f811115613775576137748730836138fa565b5b80856137819190614ae2565b94505b61378f8787876138fa565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161395f9061511e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036139d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139cd906151ac565b60405180910390fd5b6139e1838383613e67565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a5b90615483565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613af29190614a47565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613b5691906143d2565b60405180910390a3613b69848484613e6c565b50505050565b5f613b7930611899565b90505f601954601854601a54613b8f9190614a47565b613b999190614a47565b90505f80831480613ba957505f82145b15613bb657505050613e3b565b600a54831115613bca57600a549250613bdd565b600954831015613bdc57505050613e3b565b5b5f600283601a5486613bef9190614882565b613bf991906153e3565b613c0391906153e3565b90505f613c198286613e7190919063ffffffff16565b90505f479050613c2882613e86565b5f613c3c8247613e7190919063ffffffff16565b90505f613c6687613c5860185485613e3d90919063ffffffff16565b613e5290919063ffffffff16565b90505f613c9088613c8260195486613e3d90919063ffffffff16565b613e5290919063ffffffff16565b90505f818385613ca09190614ae2565b613caa9190614ae2565b90505f601a819055505f6018819055505f6019819055505f87118015613ccf57505f81115b15613d1c57613cde87826140b9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601a54604051613d13939291906154a1565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613d6190615503565b5f6040518083038185875af1925050503d805f8114613d9b576040519150601f19603f3d011682016040523d82523d5f602084013e613da0565b606091505b50508098505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613deb90615503565b5f6040518083038185875af1925050503d805f8114613e25576040519150601f19603f3d011682016040523d82523d5f602084013e613e2a565b606091505b505080985050505050505050505050505b565b5f8183613e4a9190614882565b905092915050565b5f8183613e5f91906153e3565b905092915050565b505050565b505050565b5f8183613e7e9190614ae2565b905092915050565b5f600267ffffffffffffffff811115613ea257613ea1615517565b5b604051908082528060200260200182016040528015613ed05781602001602082028036833780820191505090505b50905030815f81518110613ee757613ee6615544565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f8a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613fae9190615585565b81600181518110613fc257613fc1615544565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614027307f000000000000000000000000000000000000000000000000000000000000000084612a4b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016140889594939291906156a0565b5f604051808303815f87803b15801561409f575f80fd5b505af11580156140b1573d5f803e3d5ffd5b505050505050565b6140e4307f000000000000000000000000000000000000000000000000000000000000000084612a4b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8061dead426040518863ffffffff1660e01b815260040161414a969594939291906156f8565b60606040518083038185885af1158015614166573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061418b9190615757565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6141d482614192565b6141de818561419c565b93506141ee8185602086016141ac565b6141f7816141ba565b840191505092915050565b5f6020820190508181035f83015261421a81846141ca565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61424f82614226565b9050919050565b61425f81614245565b8114614269575f80fd5b50565b5f8135905061427a81614256565b92915050565b5f819050919050565b61429281614280565b811461429c575f80fd5b50565b5f813590506142ad81614289565b92915050565b5f80604083850312156142c9576142c8614222565b5b5f6142d68582860161426c565b92505060206142e78582860161429f565b9150509250929050565b5f8115159050919050565b614305816142f1565b82525050565b5f60208201905061431e5f8301846142fc565b92915050565b5f6020828403121561433957614338614222565b5b5f6143468482850161426c565b91505092915050565b5f819050919050565b5f61437261436d61436884614226565b61434f565b614226565b9050919050565b5f61438382614358565b9050919050565b5f61439482614379565b9050919050565b6143a48161438a565b82525050565b5f6020820190506143bd5f83018461439b565b92915050565b6143cc81614280565b82525050565b5f6020820190506143e55f8301846143c3565b92915050565b5f60208284031215614400576143ff614222565b5b5f61440d8482850161429f565b91505092915050565b5f805f6060848603121561442d5761442c614222565b5b5f61443a8682870161426c565b935050602061444b8682870161426c565b925050604061445c8682870161429f565b9150509250925092565b61446f81614245565b82525050565b5f6020820190506144885f830184614466565b92915050565b5f80604083850312156144a4576144a3614222565b5b5f6144b18582860161429f565b92505060206144c28582860161429f565b9150509250929050565b5f60ff82169050919050565b6144e1816144cc565b82525050565b5f6020820190506144fa5f8301846144d8565b92915050565b614509816142f1565b8114614513575f80fd5b50565b5f8135905061452481614500565b92915050565b5f80604083850312156145405761453f614222565b5b5f61454d8582860161426c565b925050602061455e85828601614516565b9150509250929050565b5f805f6060848603121561457f5761457e614222565b5b5f61458c8682870161429f565b935050602061459d8682870161429f565b92505060406145ae8682870161429f565b9150509250925092565b5f602082840312156145cd576145cc614222565b5b5f6145da84828501614516565b91505092915050565b5f6145ed82614245565b9050919050565b6145fd816145e3565b8114614607575f80fd5b50565b5f81359050614618816145f4565b92915050565b5f806040838503121561463457614633614222565b5b5f6146418582860161460a565b92505060206146528582860161429f565b9150509250929050565b5f806040838503121561467257614671614222565b5b5f61467f8582860161426c565b92505060206146908582860161426c565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6146ce60208361419c565b91506146d98261469a565b602082019050919050565b5f6020820190508181035f8301526146fb816146c2565b9050919050565b7f416c7265616479206c61756e63686564000000000000000000000000000000005f82015250565b5f61473660108361419c565b915061474182614702565b602082019050919050565b5f6020820190508181035f8301526147638161472a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806147ae57607f821691505b6020821081036147c1576147c061476a565b5b50919050565b7f4d696e20616d6f756e74206d7573742062652067726561746572207468616e205f8201527f3130303000000000000000000000000000000000000000000000000000000000602082015250565b5f61482160248361419c565b915061482c826147c7565b604082019050919050565b5f6020820190508181035f83015261484e81614815565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61488c82614280565b915061489783614280565b92508282026148a581614280565b915082820484148315176148bc576148bb614855565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f61491d60288361419c565b9150614928826148c3565b604082019050919050565b5f6020820190508181035f83015261494a81614911565b9050919050565b7f4d696e20616d6f756e74206d757374206265206c657373207468616e206d61785f8201527f20616d6f756e7400000000000000000000000000000000000000000000000000602082015250565b5f6149ab60278361419c565b91506149b682614951565b604082019050919050565b5f6020820190508181035f8301526149d88161499f565b9050919050565b7f43616e27742073657420636f6e74726163742061732077616c6c6574000000005f82015250565b5f614a13601c8361419c565b9150614a1e826149df565b602082019050919050565b5f6020820190508181035f830152614a4081614a07565b9050919050565b5f614a5182614280565b9150614a5c83614280565b9250828201905080821115614a7457614a73614855565b5b92915050565b7f4e6f74206c61756e6368656400000000000000000000000000000000000000005f82015250565b5f614aae600c8361419c565b9150614ab982614a7a565b602082019050919050565b5f6020820190508181035f830152614adb81614aa2565b9050919050565b5f614aec82614280565b9150614af783614280565b9250828203905081811115614b0f57614b0e614855565b5b92915050565b7f42757920746f74616c20666565732062656c6f77206d696e696d756d000000005f82015250565b5f614b49601c8361419c565b9150614b5482614b15565b602082019050919050565b5f6020820190508181035f830152614b7681614b3d565b9050919050565b7f53656c6c20746f74616c20666565732062656c6f77206d696e696d756d0000005f82015250565b5f614bb1601d8361419c565b9150614bbc82614b7d565b602082019050919050565b5f6020820190508181035f830152614bde81614ba5565b9050919050565b7f546f74616c2066656573206d757374206265206c657373207468616e203235205f8201527f6f7220657175616c20746f203235000000000000000000000000000000000000602082015250565b5f614c3f602e8361419c565b9150614c4a82614be5565b604082019050919050565b5f6020820190508181035f830152614c6c81614c33565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614ccd60398361419c565b9150614cd882614c73565b604082019050919050565b5f6020820190508181035f830152614cfa81614cc1565b9050919050565b7f43616e6e6f74207769746864726177205068656e5800000000000000000000005f82015250565b5f614d3560158361419c565b9150614d4082614d01565b602082019050919050565b5f6020820190508181035f830152614d6281614d29565b9050919050565b5f81519050614d7781614289565b92915050565b5f60208284031215614d9257614d91614222565b5b5f614d9f84828501614d69565b91505092915050565b7f496e76616c696420416d6f756e740000000000000000000000000000000000005f82015250565b5f614ddc600e8361419c565b9150614de782614da8565b602082019050919050565b5f6020820190508181035f830152614e0981614dd0565b9050919050565b5f604082019050614e235f830185614466565b614e3060208301846143c3565b9392505050565b5f81519050614e4581614500565b92915050565b5f60208284031215614e6057614e5f614222565b5b5f614e6d84828501614e37565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f614ed060258361419c565b9150614edb82614e76565b604082019050919050565b5f6020820190508181035f830152614efd81614ec4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614f5e60268361419c565b9150614f6982614f04565b604082019050919050565b5f6020820190508181035f830152614f8b81614f52565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614fec60248361419c565b9150614ff782614f92565b604082019050919050565b5f6020820190508181035f83015261501981614fe0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61507a60228361419c565b915061508582615020565b604082019050919050565b5f6020820190508181035f8301526150a78161506e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61510860258361419c565b9150615113826150ae565b604082019050919050565b5f6020820190508181035f830152615135816150fc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61519660238361419c565b91506151a18261513c565b604082019050919050565b5f6020820190508181035f8301526151c38161518a565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6151fe60168361419c565b9150615209826151ca565b602082019050919050565b5f6020820190508181035f83015261522b816151f2565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61528c60358361419c565b915061529782615232565b604082019050919050565b5f6020820190508181035f8301526152b981615280565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6152f460138361419c565b91506152ff826152c0565b602082019050919050565b5f6020820190508181035f830152615321816152e8565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61538260368361419c565b915061538d82615328565b604082019050919050565b5f6020820190508181035f8301526153af81615376565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6153ed82614280565b91506153f883614280565b925082615408576154076153b6565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61546d60268361419c565b915061547882615413565b604082019050919050565b5f6020820190508181035f83015261549a81615461565b9050919050565b5f6060820190506154b45f8301866143c3565b6154c160208301856143c3565b6154ce60408301846143c3565b949350505050565b5f81905092915050565b50565b5f6154ee5f836154d6565b91506154f9826154e0565b5f82019050919050565b5f61550d826154e3565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061557f81614256565b92915050565b5f6020828403121561559a57615599614222565b5b5f6155a784828501615571565b91505092915050565b5f819050919050565b5f6155d36155ce6155c9846155b0565b61434f565b614280565b9050919050565b6155e3816155b9565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61561b81614245565b82525050565b5f61562c8383615612565b60208301905092915050565b5f602082019050919050565b5f61564e826155e9565b61565881856155f3565b935061566383615603565b805f5b8381101561569357815161567a8882615621565b975061568583615638565b925050600181019050615666565b5085935050505092915050565b5f60a0820190506156b35f8301886143c3565b6156c060208301876155da565b81810360408301526156d28186615644565b90506156e16060830185614466565b6156ee60808301846143c3565b9695505050505050565b5f60c08201905061570b5f830189614466565b61571860208301886143c3565b61572560408301876155da565b61573260608301866155da565b61573f6080830185614466565b61574c60a08301846143c3565b979650505050505050565b5f805f6060848603121561576e5761576d614222565b5b5f61577b86828701614d69565b935050602061578c86828701614d69565b925050604061579d86828701614d69565b915050925092509256fea2646970667358221220e66a08293a6784efdfcd8080bc248812ff1445b6cd376268542a7f988560a62a64736f6c634300081a0033

Deployed Bytecode

0x6080604052600436106103b0575f3560e01c80638da5cb5b116101e6578063c18bc1951161010c578063ef8700e51161009f578063f2fde38b1161006e578063f2fde38b14610dd3578063f637434214610dfb578063f8b45b0514610e25578063fd72e22a14610e4f576103b7565b8063ef8700e514610d2f578063f023f57314610d59578063f11a24d314610d81578063f14210a614610dab576103b7565b8063d85ba063116100db578063d85ba06314610c63578063d9c81c5714610c8d578063db47268114610cc9578063dd62ed3e14610cf3576103b7565b8063c18bc19514610bbf578063c6d2577d14610be7578063c8c8ebe414610c11578063d2fcc00114610c3b576103b7565b8063a9059cbb11610184578063bf56b37111610153578063bf56b37114610b1b578063c024666814610b45578063c04a541414610b6d578063c17b5b8c14610b97576103b7565b8063a9059cbb14610a4f578063b204141114610a8b578063b62496f514610ab5578063bbc0c74214610af1576103b7565b806395d89b41116101c057806395d89b41146109995780639a7a23d6146109c35780639e281a98146109eb578063a457c2d714610a13576103b7565b80638da5cb5b1461091d5780639213691314610947578063924de9b714610971576103b7565b8063313ce567116102d65780636ddd1713116102695780637571336a116102385780637571336a146108795780637bce5a04146108a15780638095d564146108cb5780638c19b37b146108f3576103b7565b80636ddd1713146107d357806370a08231146107fd578063715018a614610839578063751039fc1461084f576103b7565b80634a62bb65116102a55780634a62bb651461072d5780634fbee193146107575780635e9620dd146107935780636a486a8e146107a9576103b7565b8063313ce56714610673578063395093511461069d5780633c8d355f146106d957806349bd5a5e14610703576103b7565b806318a94cf11161034e57806323b872dd1161031d57806323b872dd146105a957806327c8f835146105e55780632c0e22cc1461060f57806330d5d18d1461064b576103b7565b806318a94cf1146105035780631a8145bb1461052d5780631f3fed8f14610557578063203e727e14610581576103b7565b806310d5de531161038a57806310d5de531461043757806316279055146104735780631694505e146104af57806318160ddd146104d9576103b7565b806301339c21146103bb57806306fdde03146103d1578063095ea7b3146103fb576103b7565b366103b757005b5f80fd5b3480156103c6575f80fd5b506103cf610e79565b005b3480156103dc575f80fd5b506103e5610f7f565b6040516103f29190614202565b60405180910390f35b348015610406575f80fd5b50610421600480360381019061041c91906142b3565b61100f565b60405161042e919061430b565b60405180910390f35b348015610442575f80fd5b5061045d60048036038101906104589190614324565b61102c565b60405161046a919061430b565b60405180910390f35b34801561047e575f80fd5b5061049960048036038101906104949190614324565b611049565b6040516104a6919061430b565b60405180910390f35b3480156104ba575f80fd5b506104c361105a565b6040516104d091906143aa565b60405180910390f35b3480156104e4575f80fd5b506104ed61107e565b6040516104fa91906143d2565b60405180910390f35b34801561050e575f80fd5b50610517611087565b60405161052491906143d2565b60405180910390f35b348015610538575f80fd5b5061054161108d565b60405161054e91906143d2565b60405180910390f35b348015610562575f80fd5b5061056b611093565b60405161057891906143d2565b60405180910390f35b34801561058c575f80fd5b506105a760048036038101906105a291906143eb565b611099565b005b3480156105b4575f80fd5b506105cf60048036038101906105ca9190614416565b611175565b6040516105dc919061430b565b60405180910390f35b3480156105f0575f80fd5b506105f9611267565b6040516106069190614475565b60405180910390f35b34801561061a575f80fd5b506106356004803603810190610630919061448e565b61126d565b604051610642919061430b565b60405180910390f35b348015610656575f80fd5b50610671600480360381019061066c9190614324565b611344565b005b34801561067e575f80fd5b506106876114c7565b60405161069491906144e7565b60405180910390f35b3480156106a8575f80fd5b506106c360048036038101906106be91906142b3565b6114cf565b6040516106d0919061430b565b60405180910390f35b3480156106e4575f80fd5b506106ed611576565b6040516106fa91906143d2565b60405180910390f35b34801561070e575f80fd5b5061071761157c565b6040516107249190614475565b60405180910390f35b348015610738575f80fd5b506107416115a0565b60405161074e919061430b565b60405180910390f35b348015610762575f80fd5b5061077d60048036038101906107789190614324565b6115b2565b60405161078a919061430b565b60405180910390f35b34801561079e575f80fd5b506107a7611604565b005b3480156107b4575f80fd5b506107bd611880565b6040516107ca91906143d2565b60405180910390f35b3480156107de575f80fd5b506107e7611886565b6040516107f4919061430b565b60405180910390f35b348015610808575f80fd5b50610823600480360381019061081e9190614324565b611899565b60405161083091906143d2565b60405180910390f35b348015610844575f80fd5b5061084d6118de565b005b34801561085a575f80fd5b50610863611965565b604051610870919061430b565b60405180910390f35b348015610884575f80fd5b5061089f600480360381019061089a919061452a565b611a02565b005b3480156108ac575f80fd5b506108b5611ad6565b6040516108c291906143d2565b60405180910390f35b3480156108d6575f80fd5b506108f160048036038101906108ec9190614568565b611adc565b005b3480156108fe575f80fd5b50610907611bef565b60405161091491906143d2565b60405180910390f35b348015610928575f80fd5b50610931611bf5565b60405161093e9190614475565b60405180910390f35b348015610952575f80fd5b5061095b611c1d565b60405161096891906143d2565b60405180910390f35b34801561097c575f80fd5b50610997600480360381019061099291906145b8565b611c23565b005b3480156109a4575f80fd5b506109ad611cbc565b6040516109ba9190614202565b60405180910390f35b3480156109ce575f80fd5b506109e960048036038101906109e4919061452a565b611d4c565b005b3480156109f6575f80fd5b50610a116004803603810190610a0c919061461e565b611e64565b005b348015610a1e575f80fd5b50610a396004803603810190610a3491906142b3565b612088565b604051610a46919061430b565b60405180910390f35b348015610a5a575f80fd5b50610a756004803603810190610a7091906142b3565b61216e565b604051610a82919061430b565b60405180910390f35b348015610a96575f80fd5b50610a9f61218b565b604051610aac91906143d2565b60405180910390f35b348015610ac0575f80fd5b50610adb6004803603810190610ad69190614324565b612191565b604051610ae8919061430b565b60405180910390f35b348015610afc575f80fd5b50610b056121ae565b604051610b12919061430b565b60405180910390f35b348015610b26575f80fd5b50610b2f6121c1565b604051610b3c91906143d2565b60405180910390f35b348015610b50575f80fd5b50610b6b6004803603810190610b66919061452a565b6121c7565b005b348015610b78575f80fd5b50610b816122e9565b604051610b8e9190614475565b60405180910390f35b348015610ba2575f80fd5b50610bbd6004803603810190610bb89190614568565b61230e565b005b348015610bca575f80fd5b50610be56004803603810190610be091906143eb565b612421565b005b348015610bf2575f80fd5b50610bfb6124fd565b604051610c0891906143d2565b60405180910390f35b348015610c1c575f80fd5b50610c25612503565b604051610c3291906143d2565b60405180910390f35b348015610c46575f80fd5b50610c616004803603810190610c5c919061452a565b612509565b005b348015610c6e575f80fd5b50610c776125dd565b604051610c8491906143d2565b60405180910390f35b348015610c98575f80fd5b50610cb36004803603810190610cae9190614324565b6125e3565b604051610cc0919061430b565b60405180910390f35b348015610cd4575f80fd5b50610cdd612600565b604051610cea91906143d2565b60405180910390f35b348015610cfe575f80fd5b50610d196004803603810190610d14919061465c565b612606565b604051610d2691906143d2565b60405180910390f35b348015610d3a575f80fd5b50610d43612688565b604051610d5091906143d2565b60405180910390f35b348015610d64575f80fd5b50610d7f6004803603810190610d7a9190614324565b61268e565b005b348015610d8c575f80fd5b50610d95612811565b604051610da291906143d2565b60405180910390f35b348015610db6575f80fd5b50610dd16004803603810190610dcc91906143eb565b612817565b005b348015610dde575f80fd5b50610df96004803603810190610df49190614324565b61291d565b005b348015610e06575f80fd5b50610e0f612a13565b604051610e1c91906143d2565b60405180910390f35b348015610e30575f80fd5b50610e39612a19565b604051610e4691906143d2565b60405180910390f35b348015610e5a575f80fd5b50610e63612a1f565b604051610e709190614475565b60405180910390f35b610e81612a44565b73ffffffffffffffffffffffffffffffffffffffff16610e9f611bf5565b73ffffffffffffffffffffffffffffffffffffffff1614610ef5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eec906146e4565b60405180910390fd5b5f600d5414610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f309061474c565b60405180910390fd5b43600d8190555042600e819055506001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b606060038054610f8e90614797565b80601f0160208091040260200160405190810160405280929190818152602001828054610fba90614797565b80156110055780601f10610fdc57610100808354040283529160200191611005565b820191905f5260205f20905b815481529060010190602001808311610fe857829003601f168201915b5050505050905090565b5f61102261101b612a44565b8484612a4b565b6001905092915050565b601c602052805f5260405f205f915054906101000a900460ff1681565b5f80823b90505f8111915050919050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b60165481565b601a5481565b60185481565b6110a1612a44565b73ffffffffffffffffffffffffffffffffffffffff166110bf611bf5565b73ffffffffffffffffffffffffffffffffffffffff1614611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110c906146e4565b60405180910390fd5b64e8d4a51000811161115c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115390614837565b60405180910390fd5b633b9aca008161116c9190614882565b60088190555050565b5f611181848484612c0e565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6111c8612a44565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123e90614933565b60405180910390fd5b61125b85611253612a44565b858403612a4b565b60019150509392505050565b61dead81565b5f611276612a44565b73ffffffffffffffffffffffffffffffffffffffff16611294611bf5565b73ffffffffffffffffffffffffffffffffffffffff16146112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e1906146e4565b60405180910390fd5b81831061132c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611323906149c1565b60405180910390fd5b8260098190555081600a819055506001905092915050565b61134c612a44565b73ffffffffffffffffffffffffffffffffffffffff1661136a611bf5565b73ffffffffffffffffffffffffffffffffffffffff16146113c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b7906146e4565b60405180910390fd5b6113c981611049565b15611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614a29565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fe1bb4a3e2b2b99353f84d73df9e136cfe17627ed07083a649101dfa6bde8459c60405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f6009905090565b5f61156c6114db612a44565b848460015f6114e8612a44565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546115679190614a47565b612a4b565b6001905092915050565b600f5481565b7f00000000000000000000000038f0491215d57eb2a3baac4b553fce0816e93bb881565b600c5f9054906101000a900460ff1681565b5f601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61160c612a44565b73ffffffffffffffffffffffffffffffffffffffff1661162a611bf5565b73ffffffffffffffffffffffffffffffffffffffff1614611680576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611677906146e4565b60405180910390fd5b5f600d54116116c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bb90614ac4565b60405180910390fd5b5f600590505f600590505f600f905082601354116116e257816116f1565b826013546116f09190614ae2565b5b60138190555082601154116117065781611715565b826011546117149190614ae2565b5b601181905550826012541161172a5781611739565b826012546117389190614ae2565b5b601281905550826017541161174e578161175d565b8260175461175c9190614ae2565b5b60178190555082601554116117725781611781565b826015546117809190614ae2565b5b601581905550826016541161179657816117a5565b826016546117a49190614ae2565b5b6016819055506013546012546011546117be9190614a47565b6117c89190614a47565b6010819055506017546016546015546117e19190614a47565b6117eb9190614a47565b601481905550806010541015611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d90614b5f565b60405180910390fd5b80601454101561187b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187290614bc7565b60405180910390fd5b505050565b60145481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6118e6612a44565b73ffffffffffffffffffffffffffffffffffffffff16611904611bf5565b73ffffffffffffffffffffffffffffffffffffffff161461195a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611951906146e4565b60405180910390fd5b6119635f613799565b565b5f61196e612a44565b73ffffffffffffffffffffffffffffffffffffffff1661198c611bf5565b73ffffffffffffffffffffffffffffffffffffffff16146119e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d9906146e4565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055506001905090565b611a0a612a44565b73ffffffffffffffffffffffffffffffffffffffff16611a28611bf5565b73ffffffffffffffffffffffffffffffffffffffff1614611a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a75906146e4565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60115481565b611ae4612a44565b73ffffffffffffffffffffffffffffffffffffffff16611b02611bf5565b73ffffffffffffffffffffffffffffffffffffffff1614611b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4f906146e4565b60405180910390fd5b6019818385611b679190614a47565b611b719190614a47565b1115611bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba990614c55565b60405180910390fd5b826011819055508160128190555080601381905550601354601254601154611bda9190614a47565b611be49190614a47565b601081905550505050565b600a5481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60155481565b611c2b612a44565b73ffffffffffffffffffffffffffffffffffffffff16611c49611bf5565b73ffffffffffffffffffffffffffffffffffffffff1614611c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c96906146e4565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b606060048054611ccb90614797565b80601f0160208091040260200160405190810160405280929190818152602001828054611cf790614797565b8015611d425780601f10611d1957610100808354040283529160200191611d42565b820191905f5260205f20905b815481529060010190602001808311611d2557829003601f168201915b5050505050905090565b611d54612a44565b73ffffffffffffffffffffffffffffffffffffffff16611d72611bf5565b73ffffffffffffffffffffffffffffffffffffffff1614611dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbf906146e4565b60405180910390fd5b7f00000000000000000000000038f0491215d57eb2a3baac4b553fce0816e93bb873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90614ce3565b60405180910390fd5b611e60828261385c565b5050565b611e6c612a44565b73ffffffffffffffffffffffffffffffffffffffff16611e8a611bf5565b73ffffffffffffffffffffffffffffffffffffffff1614611ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed7906146e4565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4590614d4b565b60405180910390fd5b808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611f889190614475565b602060405180830381865afa158015611fa3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fc79190614d7d565b1015612008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fff90614df2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612043929190614e10565b6020604051808303815f875af115801561205f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120839190614e4b565b505050565b5f8060015f612095612a44565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561214f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214690614ee6565b60405180910390fd5b61216361215a612a44565b85858403612a4b565b600191505092915050565b5f61218161217a612a44565b8484612c0e565b6001905092915050565b60125481565b601e602052805f5260405f205f915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b600d5481565b6121cf612a44565b73ffffffffffffffffffffffffffffffffffffffff166121ed611bf5565b73ffffffffffffffffffffffffffffffffffffffff1614612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223a906146e4565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516122dd919061430b565b60405180910390a25050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612316612a44565b73ffffffffffffffffffffffffffffffffffffffff16612334611bf5565b73ffffffffffffffffffffffffffffffffffffffff161461238a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612381906146e4565b60405180910390fd5b60198183856123999190614a47565b6123a39190614a47565b11156123e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123db90614c55565b60405180910390fd5b82601581905550816016819055508060178190555060175460165460155461240c9190614a47565b6124169190614a47565b601481905550505050565b612429612a44565b73ffffffffffffffffffffffffffffffffffffffff16612447611bf5565b73ffffffffffffffffffffffffffffffffffffffff161461249d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612494906146e4565b60405180910390fd5b64e8d4a5100081116124e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124db90614837565b60405180910390fd5b633b9aca00816124f49190614882565b600b8190555050565b600e5481565b60085481565b612511612a44565b73ffffffffffffffffffffffffffffffffffffffff1661252f611bf5565b73ffffffffffffffffffffffffffffffffffffffff1614612585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257c906146e4565b60405180910390fd5b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60105481565b601d602052805f5260405f205f915054906101000a900460ff1681565b60095481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60195481565b612696612a44565b73ffffffffffffffffffffffffffffffffffffffff166126b4611bf5565b73ffffffffffffffffffffffffffffffffffffffff161461270a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612701906146e4565b60405180910390fd5b61271381611049565b15612753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274a90614a29565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b61281f612a44565b73ffffffffffffffffffffffffffffffffffffffff1661283d611bf5565b73ffffffffffffffffffffffffffffffffffffffff1614612893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288a906146e4565b60405180910390fd5b804710156128d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cd90614df2565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612919573d5f803e3d5ffd5b5050565b612925612a44565b73ffffffffffffffffffffffffffffffffffffffff16612943611bf5565b73ffffffffffffffffffffffffffffffffffffffff1614612999576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612990906146e4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe90614f74565b60405180910390fd5b612a1081613799565b50565b60175481565b600b5481565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab090615002565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1e90615090565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c0191906143d2565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c739061511e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce1906151ac565b60405180910390fd5b5f8103612d0157612cfc83835f6138fa565b613794565b600c5f9054906101000a900460ff16156132e057612d1d611bf5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d8b5750612d5b611bf5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dc357505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dfd575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e165750600560149054906101000a900460ff16155b156132df57600c60019054906101000a900460ff16612f0a57601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612eca5750601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0090615214565b60405180910390fd5b5b601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612fa75750601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612ffa5750601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156130a157600854811115613044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303b906152a2565b60405180910390fd5b600b5461305083611899565b8261305b9190614a47565b111561309c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130939061530a565b60405180910390fd5b6132de565b601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561313e5750601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156131915750601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156131e0576008548111156131db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d290615398565b60405180910390fd5b6132dd565b601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561327e5750601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156132dc57600b5461328f83611899565b8261329a9190614a47565b11156132db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d29061530a565b60405180910390fd5b5b5b5b5b5b5f6132ea30611899565b90505f600954821015905080801561330e5750600c60029054906101000a900460ff165b80156133275750600560149054906101000a900460ff16155b801561337a5750601e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156133cd5750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156134205750601b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613463576001600560146101000a81548160ff021916908315150217905550613448613b6f565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff16159050601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806135125750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561351b575f90505b5f811561378457601e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561357957505f601454115b15613643576135a6606461359860145488613e3d90919063ffffffff16565b613e5290919063ffffffff16565b9050601454601754826135b99190614882565b6135c391906153e3565b601a5f8282546135d39190614a47565b92505081905550601454601554826135eb9190614882565b6135f591906153e3565b60185f8282546136059190614a47565b925050819055506014546016548261361d9190614882565b61362791906153e3565b60195f8282546136379190614a47565b92505081905550613761565b601e5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561369a57505f601054115b15613760576136c760646136b960105488613e3d90919063ffffffff16565b613e5290919063ffffffff16565b9050601054601354826136da9190614882565b6136e491906153e3565b601a5f8282546136f49190614a47565b925050819055506010546011548261370c9190614882565b61371691906153e3565b60185f8282546137269190614a47565b925050819055506010546012548261373e9190614882565b61374891906153e3565b60195f8282546137589190614a47565b925050819055505b5b5f811115613775576137748730836138fa565b5b80856137819190614ae2565b94505b61378f8787876138fa565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161395f9061511e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036139d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139cd906151ac565b60405180910390fd5b6139e1838383613e67565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a5b90615483565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613af29190614a47565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613b5691906143d2565b60405180910390a3613b69848484613e6c565b50505050565b5f613b7930611899565b90505f601954601854601a54613b8f9190614a47565b613b999190614a47565b90505f80831480613ba957505f82145b15613bb657505050613e3b565b600a54831115613bca57600a549250613bdd565b600954831015613bdc57505050613e3b565b5b5f600283601a5486613bef9190614882565b613bf991906153e3565b613c0391906153e3565b90505f613c198286613e7190919063ffffffff16565b90505f479050613c2882613e86565b5f613c3c8247613e7190919063ffffffff16565b90505f613c6687613c5860185485613e3d90919063ffffffff16565b613e5290919063ffffffff16565b90505f613c9088613c8260195486613e3d90919063ffffffff16565b613e5290919063ffffffff16565b90505f818385613ca09190614ae2565b613caa9190614ae2565b90505f601a819055505f6018819055505f6019819055505f87118015613ccf57505f81115b15613d1c57613cde87826140b9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601a54604051613d13939291906154a1565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613d6190615503565b5f6040518083038185875af1925050503d805f8114613d9b576040519150601f19603f3d011682016040523d82523d5f602084013e613da0565b606091505b50508098505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613deb90615503565b5f6040518083038185875af1925050503d805f8114613e25576040519150601f19603f3d011682016040523d82523d5f602084013e613e2a565b606091505b505080985050505050505050505050505b565b5f8183613e4a9190614882565b905092915050565b5f8183613e5f91906153e3565b905092915050565b505050565b505050565b5f8183613e7e9190614ae2565b905092915050565b5f600267ffffffffffffffff811115613ea257613ea1615517565b5b604051908082528060200260200182016040528015613ed05781602001602082028036833780820191505090505b50905030815f81518110613ee757613ee6615544565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f8a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613fae9190615585565b81600181518110613fc257613fc1615544565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614027307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a4b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016140889594939291906156a0565b5f604051808303815f87803b15801561409f575f80fd5b505af11580156140b1573d5f803e3d5ffd5b505050505050565b6140e4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a4b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8061dead426040518863ffffffff1660e01b815260040161414a969594939291906156f8565b60606040518083038185885af1158015614166573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061418b9190615757565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6141d482614192565b6141de818561419c565b93506141ee8185602086016141ac565b6141f7816141ba565b840191505092915050565b5f6020820190508181035f83015261421a81846141ca565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61424f82614226565b9050919050565b61425f81614245565b8114614269575f80fd5b50565b5f8135905061427a81614256565b92915050565b5f819050919050565b61429281614280565b811461429c575f80fd5b50565b5f813590506142ad81614289565b92915050565b5f80604083850312156142c9576142c8614222565b5b5f6142d68582860161426c565b92505060206142e78582860161429f565b9150509250929050565b5f8115159050919050565b614305816142f1565b82525050565b5f60208201905061431e5f8301846142fc565b92915050565b5f6020828403121561433957614338614222565b5b5f6143468482850161426c565b91505092915050565b5f819050919050565b5f61437261436d61436884614226565b61434f565b614226565b9050919050565b5f61438382614358565b9050919050565b5f61439482614379565b9050919050565b6143a48161438a565b82525050565b5f6020820190506143bd5f83018461439b565b92915050565b6143cc81614280565b82525050565b5f6020820190506143e55f8301846143c3565b92915050565b5f60208284031215614400576143ff614222565b5b5f61440d8482850161429f565b91505092915050565b5f805f6060848603121561442d5761442c614222565b5b5f61443a8682870161426c565b935050602061444b8682870161426c565b925050604061445c8682870161429f565b9150509250925092565b61446f81614245565b82525050565b5f6020820190506144885f830184614466565b92915050565b5f80604083850312156144a4576144a3614222565b5b5f6144b18582860161429f565b92505060206144c28582860161429f565b9150509250929050565b5f60ff82169050919050565b6144e1816144cc565b82525050565b5f6020820190506144fa5f8301846144d8565b92915050565b614509816142f1565b8114614513575f80fd5b50565b5f8135905061452481614500565b92915050565b5f80604083850312156145405761453f614222565b5b5f61454d8582860161426c565b925050602061455e85828601614516565b9150509250929050565b5f805f6060848603121561457f5761457e614222565b5b5f61458c8682870161429f565b935050602061459d8682870161429f565b92505060406145ae8682870161429f565b9150509250925092565b5f602082840312156145cd576145cc614222565b5b5f6145da84828501614516565b91505092915050565b5f6145ed82614245565b9050919050565b6145fd816145e3565b8114614607575f80fd5b50565b5f81359050614618816145f4565b92915050565b5f806040838503121561463457614633614222565b5b5f6146418582860161460a565b92505060206146528582860161429f565b9150509250929050565b5f806040838503121561467257614671614222565b5b5f61467f8582860161426c565b92505060206146908582860161426c565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6146ce60208361419c565b91506146d98261469a565b602082019050919050565b5f6020820190508181035f8301526146fb816146c2565b9050919050565b7f416c7265616479206c61756e63686564000000000000000000000000000000005f82015250565b5f61473660108361419c565b915061474182614702565b602082019050919050565b5f6020820190508181035f8301526147638161472a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806147ae57607f821691505b6020821081036147c1576147c061476a565b5b50919050565b7f4d696e20616d6f756e74206d7573742062652067726561746572207468616e205f8201527f3130303000000000000000000000000000000000000000000000000000000000602082015250565b5f61482160248361419c565b915061482c826147c7565b604082019050919050565b5f6020820190508181035f83015261484e81614815565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61488c82614280565b915061489783614280565b92508282026148a581614280565b915082820484148315176148bc576148bb614855565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f61491d60288361419c565b9150614928826148c3565b604082019050919050565b5f6020820190508181035f83015261494a81614911565b9050919050565b7f4d696e20616d6f756e74206d757374206265206c657373207468616e206d61785f8201527f20616d6f756e7400000000000000000000000000000000000000000000000000602082015250565b5f6149ab60278361419c565b91506149b682614951565b604082019050919050565b5f6020820190508181035f8301526149d88161499f565b9050919050565b7f43616e27742073657420636f6e74726163742061732077616c6c6574000000005f82015250565b5f614a13601c8361419c565b9150614a1e826149df565b602082019050919050565b5f6020820190508181035f830152614a4081614a07565b9050919050565b5f614a5182614280565b9150614a5c83614280565b9250828201905080821115614a7457614a73614855565b5b92915050565b7f4e6f74206c61756e6368656400000000000000000000000000000000000000005f82015250565b5f614aae600c8361419c565b9150614ab982614a7a565b602082019050919050565b5f6020820190508181035f830152614adb81614aa2565b9050919050565b5f614aec82614280565b9150614af783614280565b9250828203905081811115614b0f57614b0e614855565b5b92915050565b7f42757920746f74616c20666565732062656c6f77206d696e696d756d000000005f82015250565b5f614b49601c8361419c565b9150614b5482614b15565b602082019050919050565b5f6020820190508181035f830152614b7681614b3d565b9050919050565b7f53656c6c20746f74616c20666565732062656c6f77206d696e696d756d0000005f82015250565b5f614bb1601d8361419c565b9150614bbc82614b7d565b602082019050919050565b5f6020820190508181035f830152614bde81614ba5565b9050919050565b7f546f74616c2066656573206d757374206265206c657373207468616e203235205f8201527f6f7220657175616c20746f203235000000000000000000000000000000000000602082015250565b5f614c3f602e8361419c565b9150614c4a82614be5565b604082019050919050565b5f6020820190508181035f830152614c6c81614c33565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614ccd60398361419c565b9150614cd882614c73565b604082019050919050565b5f6020820190508181035f830152614cfa81614cc1565b9050919050565b7f43616e6e6f74207769746864726177205068656e5800000000000000000000005f82015250565b5f614d3560158361419c565b9150614d4082614d01565b602082019050919050565b5f6020820190508181035f830152614d6281614d29565b9050919050565b5f81519050614d7781614289565b92915050565b5f60208284031215614d9257614d91614222565b5b5f614d9f84828501614d69565b91505092915050565b7f496e76616c696420416d6f756e740000000000000000000000000000000000005f82015250565b5f614ddc600e8361419c565b9150614de782614da8565b602082019050919050565b5f6020820190508181035f830152614e0981614dd0565b9050919050565b5f604082019050614e235f830185614466565b614e3060208301846143c3565b9392505050565b5f81519050614e4581614500565b92915050565b5f60208284031215614e6057614e5f614222565b5b5f614e6d84828501614e37565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f614ed060258361419c565b9150614edb82614e76565b604082019050919050565b5f6020820190508181035f830152614efd81614ec4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614f5e60268361419c565b9150614f6982614f04565b604082019050919050565b5f6020820190508181035f830152614f8b81614f52565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614fec60248361419c565b9150614ff782614f92565b604082019050919050565b5f6020820190508181035f83015261501981614fe0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61507a60228361419c565b915061508582615020565b604082019050919050565b5f6020820190508181035f8301526150a78161506e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61510860258361419c565b9150615113826150ae565b604082019050919050565b5f6020820190508181035f830152615135816150fc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61519660238361419c565b91506151a18261513c565b604082019050919050565b5f6020820190508181035f8301526151c38161518a565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6151fe60168361419c565b9150615209826151ca565b602082019050919050565b5f6020820190508181035f83015261522b816151f2565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61528c60358361419c565b915061529782615232565b604082019050919050565b5f6020820190508181035f8301526152b981615280565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6152f460138361419c565b91506152ff826152c0565b602082019050919050565b5f6020820190508181035f830152615321816152e8565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61538260368361419c565b915061538d82615328565b604082019050919050565b5f6020820190508181035f8301526153af81615376565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6153ed82614280565b91506153f883614280565b925082615408576154076153b6565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61546d60268361419c565b915061547882615413565b604082019050919050565b5f6020820190508181035f83015261549a81615461565b9050919050565b5f6060820190506154b45f8301866143c3565b6154c160208301856143c3565b6154ce60408301846143c3565b949350505050565b5f81905092915050565b50565b5f6154ee5f836154d6565b91506154f9826154e0565b5f82019050919050565b5f61550d826154e3565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061557f81614256565b92915050565b5f6020828403121561559a57615599614222565b5b5f6155a784828501615571565b91505092915050565b5f819050919050565b5f6155d36155ce6155c9846155b0565b61434f565b614280565b9050919050565b6155e3816155b9565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61561b81614245565b82525050565b5f61562c8383615612565b60208301905092915050565b5f602082019050919050565b5f61564e826155e9565b61565881856155f3565b935061566383615603565b805f5b8381101561569357815161567a8882615621565b975061568583615638565b925050600181019050615666565b5085935050505092915050565b5f60a0820190506156b35f8301886143c3565b6156c060208301876155da565b81810360408301526156d28186615644565b90506156e16060830185614466565b6156ee60808301846143c3565b9695505050505050565b5f60c08201905061570b5f830189614466565b61571860208301886143c3565b61572560408301876155da565b61573260608301866155da565b61573f6080830185614466565b61574c60a08301846143c3565b979650505050505050565b5f805f6060848603121561576e5761576d614222565b5b5f61577b86828701614d69565b935050602061578c86828701614d69565b925050604061579d86828701614d69565b915050925092509256fea2646970667358221220e66a08293a6784efdfcd8080bc248812ff1445b6cd376268542a7f988560a62a64736f6c634300081a0033

Deployed Bytecode Sourcemap

18676:19527:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36395:242;;;;;;;;;;;;;:::i;:::-;;4727:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6123:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20155:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26976:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18751:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5215:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19801:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19973:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19891;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23428:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6325:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18854:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23050:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26248:352;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5058:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6862:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19498:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18809:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19305:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27178:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36645:1426;;;;;;;;;;;;;:::i;:::-;;19718:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19385:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5386:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1159:103;;;;;;;;;;;;;:::i;:::-;;38079:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23924:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19588:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24433:526;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19229:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;851:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19758:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24325:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4946:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25738:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36102:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7160:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5537:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19630:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20488:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19345:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19425:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25548:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19056:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24967:573;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23679:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19457:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19144:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24101:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19549:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20225:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19186:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5800:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19931:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26608:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19674:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35911:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1417:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19846:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19272:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18946:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36395:242;1082:12;:10;:12::i;:::-;1071:23;;:7;:5;:7::i;:::-;:23;;;1063:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36463:1:::1;36449:10;;:15;36441:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;36509:12;36496:10;:25;;;;36554:15;36532:19;:37;;;;36596:4;36580:13;;:20;;;;;;;;;;;;;;;;;;36625:4;36611:11;;:18;;;;;;;;;;;;;;;;;;36395:242::o:0;4727:100::-;4781:13;4814:5;4807:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4727:100;:::o;6123:194::-;6231:4;6248:39;6257:12;:10;:12::i;:::-;6271:7;6280:6;6248:8;:39::i;:::-;6305:4;6298:11;;6123:194;;;;:::o;20155:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;26976:194::-;27034:4;27051:12;27118:7;27106:20;27098:28;;27161:1;27154:4;:8;27147:15;;;26976:194;;;:::o;18751:51::-;;;:::o;5215:108::-;5276:7;5303:12;;5296:19;;5215:108;:::o;19801:38::-;;;;:::o;19973:33::-;;;;:::o;19891:::-;;;;:::o;23428:243::-;1082:12;:10;:12::i;:::-;1071:23;;:7;:5;:7::i;:::-;:23;;;1063:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23533:14:::1;23524:6;:23;23502:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;23655:7;23645:6;:18;;;;:::i;:::-;23622:20;:41;;;;23428:243:::0;:::o;6325:529::-;6465:4;6482:36;6492:6;6500:9;6511:6;6482:9;:36::i;:::-;6531:24;6558:11;:19;6570:6;6558:19;;;;;;;;;;;;;;;:33;6578:12;:10;:12::i;:::-;6558:33;;;;;;;;;;;;;;;;6531:60;;6644:6;6624:16;:26;;6602:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;6754:57;6763:6;6771:12;:10;:12::i;:::-;6804:6;6785:16;:25;6754:8;:57::i;:::-;6842:4;6835:11;;;6325:529;;;;;:::o;18854:53::-;18900:6;18854:53;:::o;23050:370::-;23175:4;1082:12;:10;:12::i;:::-;1071:23;;:7;:5;:7::i;:::-;:23;;;1063:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23226:9:::1;23214;:21;23192:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;23337:9;23313:21;:33;;;;23381:9;23357:21;:33;;;;23408:4;23401:11;;23050:370:::0;;;;:::o;26248:352::-;1082:12;:10;:12::i;:::-;1071:23;;:7;:5;:7::i;:::-;:23;;;1063:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26378:31:::1;26389:19;26378:10;:31::i;:::-;26377:32;26355:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;26526:16;;;;;;;;;;;26481:62;;26505:19;26481:62;;;;;;;;;;;;26573:19;26554:16;;:38;;;;;;;;;;;;;;;;;;26248:352:::0;:::o;5058:92::-;5116:5;5141:1;5134:8;;5058:92;:::o;6862:290::-;6975:4;6992:130;7015:12;:10;:12::i;:::-;7042:7;7101:10;7064:11;:25;7076:12;:10;:12::i;:::-;7064:25;;;;;;;;;;;;;;;:34;7090:7;7064:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;6992:8;:130::i;:::-;7140:4;7133:11;;6862:290;;;;:::o;19498:42::-;;;;:::o;18809:38::-;;;:::o;19305:33::-;;;;;;;;;;;;;:::o;27178:126::-;27244:4;27268:19;:28;27288:7;27268:28;;;;;;;;;;;;;;;;;;;;;;;;;27261:35;;27178:126;;;:::o;36645:1426::-;1082:12;:10;:12::i;:::-;1071:23;;:7;:5;:7::i;:::-;:23;;;1063:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36723:1:::1;36710:10;;:14;36702:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;36754:17;36774:1;36754:21;;36786:18;36807:1;36786:22;;36819:23;36845:2;36819:28;;36896:9;36878:15;;:27;:96;;36964:10;36878:96;;;36939:9;36921:15;;:27;;;;:::i;:::-;36878:96;36860:15;:114;;;;37021:9;37003:15;;:27;:96;;37089:10;37003:96;;;37064:9;37046:15;;:27;;;;:::i;:::-;37003:96;36985:15;:114;;;;37150:9;37130:17;;:29;:100;;37220:10;37130:100;;;37195:9;37175:17;;:29;;;;:::i;:::-;37130:100;37110:17;:120;;;;37279:9;37260:16;;:28;:98;;37348:10;37260:98;;;37323:9;37304:16;;:28;;;;:::i;:::-;37260:98;37241:16;:117;;;;37407:9;37388:16;;:28;:98;;37476:10;37388:98;;;37451:9;37432:16;;:28;;;;:::i;:::-;37388:98;37369:16;:117;;;;37539:9;37518:18;;:30;:102;;37610:10;37518:102;;;37585:9;37564:18;;:30;;;;:::i;:::-;37518:102;37497:18;:123;;;;37684:15;;37664:17;;37646:15;;:35;;;;:::i;:::-;:53;;;;:::i;:::-;37631:12;:68;;;;37805:16;;37771:18;;37739:16;;:50;;;;:::i;:::-;:82;;;;:::i;:::-;37710:13;:111;;;;37870:15;37854:12;;:31;;37832:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;37991:15;37974:13;;:32;;37952:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;36691:1380;;;36645:1426::o:0;19718:33::-;;;;:::o;19385:31::-;;;;;;;;;;;;;:::o;5386:143::-;5476:7;5503:9;:18;5513:7;5503:18;;;;;;;;;;;;;;;;5496:25;;5386:143;;;:::o;1159:103::-;1082:12;:10;:12::i;:::-;1071:23;;:7;:5;:7::i;:::-;:23;;;1063:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1224:30:::1;1251:1;1224:18;:30::i;:::-;1159:103::o:0;38079:121::-;38131:4;1082:12;:10;:12::i;:::-;1071:23;;:7;:5;:7::i;:::-;:23;;;1063:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38165:5:::1;38148:14;;:22;;;;;;;;;;;;;;;;;;38188:4;38181:11;;38079:121:::0;:::o;23924:169::-;1082:12;:10;:12::i;:::-;1071:23;;:7;:5;:7::i;:::-;:23;;;1063:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24081:4:::1;24039:31;:39;24071:6;24039:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23924:169:::0;;:::o;19588:35::-;;;;:::o;24433:526::-;1082:12;:10;:12::i;:::-;1071:23;;:7;:5;:7::i;:::-;:23;;;1063:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24664:2:::1;24647:13;24629:15;24613:13;:31;;;;:::i;:::-;:47;;;;:::i;:::-;:53;;24591:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;24771:13;24753:15;:31;;;;24815:15;24795:17;:35;;;;24859:13;24841:15;:31;;;;24936:15;;24916:17;;24898:15;;:35;;;;:::i;:::-;:53;;;;:::i;:::-;24883:12;:68;;;;24433:526:::0;;;:::o;19229:36::-;;;;:::o;851:87::-;897:7;924:6;;;;;;;;;;;917:13;;851:87;:::o;19758:36::-;;;;:::o;24325:100::-;1082:12;:10;:12::i;:::-;1071:23;;:7;:5;:7::i;:::-;:23;;;1063:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24410:7:::1;24396:11;;:21;;;;;;;;;;;;;;;;;;24325:100:::0;:::o;4946:104::-;5002:13;5035:7;5028:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4946:104;:::o;25738:306::-;1082:12;:10;:12::i;:::-;1071:23;;:7;:5;:7::i;:::-;:23;;;1063:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25884:13:::1;25876:21;;:4;:21;;::::0;25854:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25995:41;26024:4;26030:5;25995:28;:41::i;:::-;25738:306:::0;;:::o;36102:285::-;1082:12;:10;:12::i;:::-;1071:23;;:7;:5;:7::i;:::-;:23;;;1063:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36220:4:::1;36195:31;;:6;:31;;::::0;36187:65:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36306:7;36271:6;:16;;;36296:4;36271:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;36263:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;36343:6;:15;;;36359:10;36371:7;36343:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36102:285:::0;;:::o;7160:475::-;7278:4;7295:24;7322:11;:25;7334:12;:10;:12::i;:::-;7322:25;;;;;;;;;;;;;;;:34;7348:7;7322:34;;;;;;;;;;;;;;;;7295:61;;7409:15;7389:16;:35;;7367:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;7525:67;7534:12;:10;:12::i;:::-;7548:7;7576:15;7557:16;:34;7525:8;:67::i;:::-;7623:4;7616:11;;;7160:475;;;;:::o;5537:200::-;5648:4;5665:42;5675:12;:10;:12::i;:::-;5689:9;5700:6;5665:9;:42::i;:::-;5725:4;5718:11;;5537:200;;;;:::o;19630:37::-;;;;:::o;20488:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;19345:33::-;;;;;;;;;;;;;:::o;19425:25::-;;;;:::o;25548:182::-;1082:12;:10;:12::i;:::-;1071:23;;:7;:5;:7::i;:::-;:23;;;1063:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25664:8:::1;25633:19;:28;25653:7;25633:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25704:7;25688:34;;;25713:8;25688:34;;;;;;:::i;:::-;;;;;;;;25548:182:::0;;:::o;19056:32::-;;;;;;;;;;;;;:::o;24967:573::-;1082:12;:10;:12::i;:::-;1071:23;;:7;:5;:7::i;:::-;:23;;;1063:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25199:2:::1;25182:13;25164:15;25148:13;:31;;;;:::i;:::-;:47;;;;:::i;:::-;:53;;25126:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;25307:13;25288:16;:32;;;;25352:15;25331:18;:36;;;;25397:13;25378:16;:32;;;;25516:16;;25482:18;;25450:16;;:50;;;;:::i;:::-;:82;;;;:::i;:::-;25421:13;:111;;;;24967:573:::0;;;:::o;23679:237::-;1082:12;:10;:12::i;:::-;1071:23;;:7;:5;:7::i;:::-;:23;;;1063:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23787:14:::1;23778:6;:23;23756:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;23900:7;23890:6;:18;;;;:::i;:::-;23878:9;:30;;;;23679:237:::0;:::o;19457:34::-;;;;:::o;19144:35::-;;;;:::o;24101:128::-;1082:12;:10;:12::i;:::-;1071:23;;:7;:5;:7::i;:::-;:23;;;1063:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24217:4:::1;24186:20;:28;24207:6;24186:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;24101:128:::0;;:::o;19549:32::-;;;;:::o;20225:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;19186:36::-;;;;:::o;5800:176::-;5914:7;5941:11;:18;5953:5;5941:18;;;;;;;;;;;;;;;:27;5960:7;5941:27;;;;;;;;;;;;;;;;5934:34;;5800:176;;;;:::o;19931:35::-;;;;:::o;26608:360::-;1082:12;:10;:12::i;:::-;1071:23;;:7;:5;:7::i;:::-;:23;;;1063:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26740:32:::1;26751:20;26740:10;:32::i;:::-;26739:33;26717:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26891:17;;;;;;;;;;;26844:65;;26869:20;26844:65;;;;;;;;;;;;26940:20;26920:17;;:40;;;;;;;;;;;;;;;;;;26608:360:::0;:::o;19674:35::-;;;;:::o;35911:183::-;1082:12;:10;:12::i;:::-;1071:23;;:7;:5;:7::i;:::-;:23;;;1063:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36012:7:::1;35987:21;:32;;35979:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;36057:10;36049:28;;:37;36078:7;36049:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;35911:183:::0;:::o;1417:238::-;1082:12;:10;:12::i;:::-;1071:23;;:7;:5;:7::i;:::-;:23;;;1063:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1540:1:::1;1520:22;;:8;:22;;::::0;1498:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1619:28;1638:8;1619:18;:28::i;:::-;1417:238:::0;:::o;19846:36::-;;;;:::o;19272:24::-;;;;:::o;18946:31::-;;;;;;;;;;;;;:::o;209:98::-;262:7;289:10;282:17;;209:98;:::o;9427:380::-;9580:1;9563:19;;:5;:19;;;9555:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9661:1;9642:21;;:7;:21;;;9634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9745:6;9715:11;:18;9727:5;9715:18;;;;;;;;;;;;;;;:27;9734:7;9715:27;;;;;;;;;;;;;;;:36;;;;9783:7;9767:32;;9776:5;9767:32;;;9792:6;9767:32;;;;;;:::i;:::-;;;;;;;;9427:380;;;:::o;28013:4797::-;28161:1;28145:18;;:4;:18;;;28137:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28238:1;28224:16;;:2;:16;;;28216:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28419:1;28409:6;:11;28405:93;;28437:28;28453:4;28459:2;28463:1;28437:15;:28::i;:::-;28480:7;;28405:93;28514:14;;;;;;;;;;;28510:2336;;;28575:7;:5;:7::i;:::-;28567:15;;:4;:15;;;;:49;;;;;28609:7;:5;:7::i;:::-;28603:13;;:2;:13;;;;28567:49;:86;;;;;28651:1;28637:16;;:2;:16;;;;28567:86;:128;;;;;28688:6;28674:21;;:2;:21;;;;28567:128;:158;;;;;28717:8;;;;;;;;;;;28716:9;28567:158;28545:2290;;;28765:13;;;;;;;;;;;28760:223;;28837:19;:25;28857:4;28837:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28866:19;:23;28886:2;28866:23;;;;;;;;;;;;;;;;;;;;;;;;;28837:52;28803:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;28760:223;29507:25;:31;29533:4;29507:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;29564:31;:35;29596:2;29564:35;;;;;;;;;;;;;;;;;;;;;;;;;29563:36;29507:92;:142;;;;;29625:20;:24;29646:2;29625:24;;;;;;;;;;;;;;;;;;;;;;;;;29624:25;29507:142;29481:1339;;;29736:20;;29726:6;:30;;29692:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;29944:9;;29927:13;29937:2;29927:9;:13::i;:::-;29918:6;:22;;;;:::i;:::-;:35;;29884:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;29481:1339;;;30122:25;:29;30148:2;30122:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;30177:31;:37;30209:4;30177:37;;;;;;;;;;;;;;;;;;;;;;;;;30176:38;30122:92;:144;;;;;30240:20;:26;30261:4;30240:26;;;;;;;;;;;;;;;;;;;;;;;;;30239:27;30122:144;30096:724;;;30353:20;;30343:6;:30;;30309:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;30096:724;;;30532:31;:35;30564:2;30532:35;;;;;;;;;;;;;;;;;;;;;;;;;30531:36;:86;;;;;30593:20;:24;30614:2;30593:24;;;;;;;;;;;;;;;;;;;;;;;;;30592:25;30531:86;30505:315;;;30720:9;;30703:13;30713:2;30703:9;:13::i;:::-;30694:6;:22;;;;:::i;:::-;:35;;30660:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;30505:315;30096:724;29481:1339;28545:2290;28510:2336;30858:28;30889:24;30907:4;30889:9;:24::i;:::-;30858:55;;30926:12;30965:21;;30941:20;:45;;30926:60;;31017:7;:35;;;;;31041:11;;;;;;;;;;;31017:35;:61;;;;;31070:8;;;;;;;;;;;31069:9;31017:61;:110;;;;;31096:25;:31;31122:4;31096:31;;;;;;;;;;;;;;;;;;;;;;;;;31095:32;31017:110;:153;;;;;31145:19;:25;31165:4;31145:25;;;;;;;;;;;;;;;;;;;;;;;;;31144:26;31017:153;:194;;;;;31188:19;:23;31208:2;31188:23;;;;;;;;;;;;;;;;;;;;;;;;;31187:24;31017:194;30999:326;;;31249:4;31238:8;;:15;;;;;;;;;;;;;;;;;;31270:10;:8;:10::i;:::-;31308:5;31297:8;;:16;;;;;;;;;;;;;;;;;;30999:326;31337:12;31353:8;;;;;;;;;;;31352:9;31337:24;;31463:19;:25;31483:4;31463:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;31492:19;:23;31512:2;31492:23;;;;;;;;;;;;;;;;;;;;;;;;;31463:52;31459:100;;;31542:5;31532:15;;31459:100;31571:12;31676:7;31672:1085;;;31728:25;:29;31754:2;31728:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;31777:1;31761:13;;:17;31728:50;31724:884;;;31806:34;31836:3;31806:25;31817:13;;31806:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;31799:41;;31909:13;;31889:16;;31882:4;:23;;;;:::i;:::-;31881:41;;;;:::i;:::-;31859:18;;:63;;;;;;;:::i;:::-;;;;;;;;31991:13;;31971:16;;31964:4;:23;;;;:::i;:::-;31963:41;;;;:::i;:::-;31941:18;;:63;;;;;;;:::i;:::-;;;;;;;;32119:13;;32076:18;;32069:4;:25;;;;:::i;:::-;32068:64;;;;:::i;:::-;32023:20;;:109;;;;;;;:::i;:::-;;;;;;;;31724:884;;;32194:25;:31;32220:4;32194:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;32244:1;32229:12;;:16;32194:51;32190:418;;;32273:33;32302:3;32273:24;32284:12;;32273:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;32266:40;;32374:12;;32355:15;;32348:4;:22;;;;:::i;:::-;32347:39;;;;:::i;:::-;32325:18;;:61;;;;;;;:::i;:::-;;;;;;;;32454:12;;32435:15;;32428:4;:22;;;;:::i;:::-;32427:39;;;;:::i;:::-;32405:18;;:61;;;;;;;:::i;:::-;;;;;;;;32580:12;;32538:17;;32531:4;:24;;;;:::i;:::-;32530:62;;;;:::i;:::-;32485:20;;:107;;;;;;;:::i;:::-;;;;;;;;32190:418;31724:884;32635:1;32628:4;:8;32624:91;;;32657:42;32673:4;32687;32694;32657:15;:42::i;:::-;32624:91;32741:4;32731:14;;;;;:::i;:::-;;;31672:1085;32769:33;32785:4;32791:2;32795:6;32769:15;:33::i;:::-;28126:4684;;;;28013:4797;;;;:::o;1815:191::-;1889:16;1908:6;;;;;;;;;;;1889:25;;1934:8;1925:6;;:17;;;;;;;;;;;;;;;;;;1989:8;1958:40;;1979:8;1958:40;;;;;;;;;;;;1878:128;1815:191;:::o;26052:188::-;26169:5;26135:25;:31;26161:4;26135:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26226:5;26192:40;;26220:4;26192:40;;;;;;;;;;;;26052:188;;:::o;7643:770::-;7801:1;7783:20;;:6;:20;;;7775:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7885:1;7864:23;;:9;:23;;;7856:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7940:47;7961:6;7969:9;7980:6;7940:20;:47::i;:::-;8000:21;8024:9;:17;8034:6;8024:17;;;;;;;;;;;;;;;;8000:41;;8091:6;8074:13;:23;;8052:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;8235:6;8219:13;:22;8199:9;:17;8209:6;8199:17;;;;;;;;;;;;;;;:42;;;;8287:6;8263:9;:20;8273:9;8263:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;8328:9;8311:35;;8320:6;8311:35;;;8339:6;8311:35;;;;;;:::i;:::-;;;;;;;;8359:46;8379:6;8387:9;8398:6;8359:19;:46::i;:::-;7764:649;7643:770;;;:::o;33940:1963::-;33979:23;34005:24;34023:4;34005:9;:24::i;:::-;33979:50;;34040:25;34136:20;;34102:18;;34068;;:52;;;;:::i;:::-;:88;;;;:::i;:::-;34040:116;;34167:12;34215:1;34196:15;:20;:46;;;;34241:1;34220:17;:22;34196:46;34192:85;;;34259:7;;;;;34192:85;34311:21;;34293:15;:39;34289:195;;;34367:21;;34349:39;;34289:195;;;34428:21;;34410:15;:39;34406:78;;;34466:7;;;;;34406:78;34289:195;34545:23;34658:1;34625:17;34590:18;;34572:15;:36;;;;:::i;:::-;34571:71;;;;:::i;:::-;:88;;;;:::i;:::-;34545:114;;34670:26;34699:36;34719:15;34699;:19;;:36;;;;:::i;:::-;34670:65;;34748:25;34776:21;34748:49;;34810:36;34827:18;34810:16;:36::i;:::-;34859:18;34880:44;34906:17;34880:21;:25;;:44;;;;:::i;:::-;34859:65;;34937:23;34963:81;35016:17;34963:34;34978:18;;34963:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;34937:107;;35057:25;35085:83;35140:17;35085:36;35100:20;;35085:10;:14;;:36;;;;:::i;:::-;:40;;:83;;;;:::i;:::-;35057:111;;35181:23;35264:17;35233:15;35207:10;:41;;;;:::i;:::-;:74;;;;:::i;:::-;35181:100;;35315:1;35294:18;:22;;;;35348:1;35327:18;:22;;;;35383:1;35360:20;:24;;;;35419:1;35401:15;:19;:42;;;;;35442:1;35424:15;:19;35401:42;35397:278;;;35460:46;35473:15;35490;35460:12;:46::i;:::-;35526:137;35559:18;35596:15;35630:18;;35526:137;;;;;;;;:::i;:::-;;;;;;;;35397:278;35709:16;;;;;;;;;;;35701:30;;35739:15;35701:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35687:96;;;;;35818:17;;;;;;;;;;;35810:31;;35849:17;35810:85;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35796:99;;;;;33968:1935;;;;;;;;;;33940:1963;:::o;12528:98::-;12586:7;12617:1;12613;:5;;;;:::i;:::-;12606:12;;12528:98;;;;:::o;12634:::-;12692:7;12723:1;12719;:5;;;;:::i;:::-;12712:12;;12634:98;;;;:::o;9815:125::-;;;;:::o;9948:124::-;;;;:::o;12422:98::-;12480:7;12511:1;12507;:5;;;;:::i;:::-;12500:12;;12422:98;;;;:::o;32818:589::-;32944:21;32982:1;32968:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32944:40;;33013:4;32995;33000:1;32995:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;33039:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33029:4;33034:1;33029:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;33074:62;33091:4;33106:15;33124:11;33074:8;:62::i;:::-;33175:15;:66;;;33256:11;33282:1;33326:4;33353;33373:15;33175:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32873:534;32818:589;:::o;33415:517::-;33563:62;33580:4;33595:15;33613:11;33563:8;:62::i;:::-;33668:15;:31;;;33707:9;33740:4;33760:11;33786:1;33829;18900:6;33898:15;33668:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33415:517;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:329::-;3398:6;3447:2;3435:9;3426:7;3422:23;3418:32;3415:119;;;3453:79;;:::i;:::-;3415:119;3573:1;3598:53;3643:7;3634:6;3623:9;3619:22;3598:53;:::i;:::-;3588:63;;3544:117;3339:329;;;;:::o;3674:60::-;3702:3;3723:5;3716:12;;3674:60;;;:::o;3740:142::-;3790:9;3823:53;3841:34;3850:24;3868:5;3850:24;:::i;:::-;3841:34;:::i;:::-;3823:53;:::i;:::-;3810:66;;3740:142;;;:::o;3888:126::-;3938:9;3971:37;4002:5;3971:37;:::i;:::-;3958:50;;3888:126;;;:::o;4020:153::-;4097:9;4130:37;4161:5;4130:37;:::i;:::-;4117:50;;4020:153;;;:::o;4179:185::-;4293:64;4351:5;4293:64;:::i;:::-;4288:3;4281:77;4179:185;;:::o;4370:276::-;4490:4;4528:2;4517:9;4513:18;4505:26;;4541:98;4636:1;4625:9;4621:17;4612:6;4541:98;:::i;:::-;4370:276;;;;:::o;4652:118::-;4739:24;4757:5;4739:24;:::i;:::-;4734:3;4727:37;4652:118;;:::o;4776:222::-;4869:4;4907:2;4896:9;4892:18;4884:26;;4920:71;4988:1;4977:9;4973:17;4964:6;4920:71;:::i;:::-;4776:222;;;;:::o;5004:329::-;5063:6;5112:2;5100:9;5091:7;5087:23;5083:32;5080:119;;;5118:79;;:::i;:::-;5080:119;5238:1;5263:53;5308:7;5299:6;5288:9;5284:22;5263:53;:::i;:::-;5253:63;;5209:117;5004:329;;;;:::o;5339:619::-;5416:6;5424;5432;5481:2;5469:9;5460:7;5456:23;5452:32;5449:119;;;5487:79;;:::i;:::-;5449:119;5607:1;5632:53;5677:7;5668:6;5657:9;5653:22;5632:53;:::i;:::-;5622:63;;5578:117;5734:2;5760:53;5805:7;5796:6;5785:9;5781:22;5760:53;:::i;:::-;5750:63;;5705:118;5862:2;5888:53;5933:7;5924:6;5913:9;5909:22;5888:53;:::i;:::-;5878:63;;5833:118;5339:619;;;;;:::o;5964:118::-;6051:24;6069:5;6051:24;:::i;:::-;6046:3;6039:37;5964:118;;:::o;6088:222::-;6181:4;6219:2;6208:9;6204:18;6196:26;;6232:71;6300:1;6289:9;6285:17;6276:6;6232:71;:::i;:::-;6088:222;;;;:::o;6316:474::-;6384:6;6392;6441:2;6429:9;6420:7;6416:23;6412:32;6409:119;;;6447:79;;:::i;:::-;6409:119;6567:1;6592:53;6637:7;6628:6;6617:9;6613:22;6592:53;:::i;:::-;6582:63;;6538:117;6694:2;6720:53;6765:7;6756:6;6745:9;6741:22;6720:53;:::i;:::-;6710:63;;6665:118;6316:474;;;;;:::o;6796:86::-;6831:7;6871:4;6864:5;6860:16;6849:27;;6796:86;;;:::o;6888:112::-;6971:22;6987:5;6971:22;:::i;:::-;6966:3;6959:35;6888:112;;:::o;7006:214::-;7095:4;7133:2;7122:9;7118:18;7110:26;;7146:67;7210:1;7199:9;7195:17;7186:6;7146:67;:::i;:::-;7006:214;;;;:::o;7226:116::-;7296:21;7311:5;7296:21;:::i;:::-;7289:5;7286:32;7276:60;;7332:1;7329;7322:12;7276:60;7226:116;:::o;7348:133::-;7391:5;7429:6;7416:20;7407:29;;7445:30;7469:5;7445:30;:::i;:::-;7348:133;;;;:::o;7487:468::-;7552:6;7560;7609:2;7597:9;7588:7;7584:23;7580:32;7577:119;;;7615:79;;:::i;:::-;7577:119;7735:1;7760:53;7805:7;7796:6;7785:9;7781:22;7760:53;:::i;:::-;7750:63;;7706:117;7862:2;7888:50;7930:7;7921:6;7910:9;7906:22;7888:50;:::i;:::-;7878:60;;7833:115;7487:468;;;;;:::o;7961:619::-;8038:6;8046;8054;8103:2;8091:9;8082:7;8078:23;8074:32;8071:119;;;8109:79;;:::i;:::-;8071:119;8229:1;8254:53;8299:7;8290:6;8279:9;8275:22;8254:53;:::i;:::-;8244:63;;8200:117;8356:2;8382:53;8427:7;8418:6;8407:9;8403:22;8382:53;:::i;:::-;8372:63;;8327:118;8484:2;8510:53;8555:7;8546:6;8535:9;8531:22;8510:53;:::i;:::-;8500:63;;8455:118;7961:619;;;;;:::o;8586:323::-;8642:6;8691:2;8679:9;8670:7;8666:23;8662:32;8659:119;;;8697:79;;:::i;:::-;8659:119;8817:1;8842:50;8884:7;8875:6;8864:9;8860:22;8842:50;:::i;:::-;8832:60;;8788:114;8586:323;;;;:::o;8915:110::-;8966:7;8995:24;9013:5;8995:24;:::i;:::-;8984:35;;8915:110;;;:::o;9031:150::-;9118:38;9150:5;9118:38;:::i;:::-;9111:5;9108:49;9098:77;;9171:1;9168;9161:12;9098:77;9031:150;:::o;9187:167::-;9247:5;9285:6;9272:20;9263:29;;9301:47;9342:5;9301:47;:::i;:::-;9187:167;;;;:::o;9360:502::-;9442:6;9450;9499:2;9487:9;9478:7;9474:23;9470:32;9467:119;;;9505:79;;:::i;:::-;9467:119;9625:1;9650:67;9709:7;9700:6;9689:9;9685:22;9650:67;:::i;:::-;9640:77;;9596:131;9766:2;9792:53;9837:7;9828:6;9817:9;9813:22;9792:53;:::i;:::-;9782:63;;9737:118;9360:502;;;;;:::o;9868:474::-;9936:6;9944;9993:2;9981:9;9972:7;9968:23;9964:32;9961:119;;;9999:79;;:::i;:::-;9961:119;10119:1;10144:53;10189:7;10180:6;10169:9;10165:22;10144:53;:::i;:::-;10134:63;;10090:117;10246:2;10272:53;10317:7;10308:6;10297:9;10293:22;10272:53;:::i;:::-;10262:63;;10217:118;9868:474;;;;;:::o;10348:182::-;10488:34;10484:1;10476:6;10472:14;10465:58;10348:182;:::o;10536:366::-;10678:3;10699:67;10763:2;10758:3;10699:67;:::i;:::-;10692:74;;10775:93;10864:3;10775:93;:::i;:::-;10893:2;10888:3;10884:12;10877:19;;10536:366;;;:::o;10908:419::-;11074:4;11112:2;11101:9;11097:18;11089:26;;11161:9;11155:4;11151:20;11147:1;11136:9;11132:17;11125:47;11189:131;11315:4;11189:131;:::i;:::-;11181:139;;10908:419;;;:::o;11333:166::-;11473:18;11469:1;11461:6;11457:14;11450:42;11333:166;:::o;11505:366::-;11647:3;11668:67;11732:2;11727:3;11668:67;:::i;:::-;11661:74;;11744:93;11833:3;11744:93;:::i;:::-;11862:2;11857:3;11853:12;11846:19;;11505:366;;;:::o;11877:419::-;12043:4;12081:2;12070:9;12066:18;12058:26;;12130:9;12124:4;12120:20;12116:1;12105:9;12101:17;12094:47;12158:131;12284:4;12158:131;:::i;:::-;12150:139;;11877:419;;;:::o;12302:180::-;12350:77;12347:1;12340:88;12447:4;12444:1;12437:15;12471:4;12468:1;12461:15;12488:320;12532:6;12569:1;12563:4;12559:12;12549:22;;12616:1;12610:4;12606:12;12637:18;12627:81;;12693:4;12685:6;12681:17;12671:27;;12627:81;12755:2;12747:6;12744:14;12724:18;12721:38;12718:84;;12774:18;;:::i;:::-;12718:84;12539:269;12488:320;;;:::o;12814:223::-;12954:34;12950:1;12942:6;12938:14;12931:58;13023:6;13018:2;13010:6;13006:15;12999:31;12814:223;:::o;13043:366::-;13185:3;13206:67;13270:2;13265:3;13206:67;:::i;:::-;13199:74;;13282:93;13371:3;13282:93;:::i;:::-;13400:2;13395:3;13391:12;13384:19;;13043:366;;;:::o;13415:419::-;13581:4;13619:2;13608:9;13604:18;13596:26;;13668:9;13662:4;13658:20;13654:1;13643:9;13639:17;13632:47;13696:131;13822:4;13696:131;:::i;:::-;13688:139;;13415:419;;;:::o;13840:180::-;13888:77;13885:1;13878:88;13985:4;13982:1;13975:15;14009:4;14006:1;13999:15;14026:410;14066:7;14089:20;14107:1;14089:20;:::i;:::-;14084:25;;14123:20;14141:1;14123:20;:::i;:::-;14118:25;;14178:1;14175;14171:9;14200:30;14218:11;14200:30;:::i;:::-;14189:41;;14379:1;14370:7;14366:15;14363:1;14360:22;14340:1;14333:9;14313:83;14290:139;;14409:18;;:::i;:::-;14290:139;14074:362;14026:410;;;;:::o;14442:227::-;14582:34;14578:1;14570:6;14566:14;14559:58;14651:10;14646:2;14638:6;14634:15;14627:35;14442:227;:::o;14675:366::-;14817:3;14838:67;14902:2;14897:3;14838:67;:::i;:::-;14831:74;;14914:93;15003:3;14914:93;:::i;:::-;15032:2;15027:3;15023:12;15016:19;;14675:366;;;:::o;15047:419::-;15213:4;15251:2;15240:9;15236:18;15228:26;;15300:9;15294:4;15290:20;15286:1;15275:9;15271:17;15264:47;15328:131;15454:4;15328:131;:::i;:::-;15320:139;;15047:419;;;:::o;15472:226::-;15612:34;15608:1;15600:6;15596:14;15589:58;15681:9;15676:2;15668:6;15664:15;15657:34;15472:226;:::o;15704:366::-;15846:3;15867:67;15931:2;15926:3;15867:67;:::i;:::-;15860:74;;15943:93;16032:3;15943:93;:::i;:::-;16061:2;16056:3;16052:12;16045:19;;15704:366;;;:::o;16076:419::-;16242:4;16280:2;16269:9;16265:18;16257:26;;16329:9;16323:4;16319:20;16315:1;16304:9;16300:17;16293:47;16357:131;16483:4;16357:131;:::i;:::-;16349:139;;16076:419;;;:::o;16501:178::-;16641:30;16637:1;16629:6;16625:14;16618:54;16501:178;:::o;16685:366::-;16827:3;16848:67;16912:2;16907:3;16848:67;:::i;:::-;16841:74;;16924:93;17013:3;16924:93;:::i;:::-;17042:2;17037:3;17033:12;17026:19;;16685:366;;;:::o;17057:419::-;17223:4;17261:2;17250:9;17246:18;17238:26;;17310:9;17304:4;17300:20;17296:1;17285:9;17281:17;17274:47;17338:131;17464:4;17338:131;:::i;:::-;17330:139;;17057:419;;;:::o;17482:191::-;17522:3;17541:20;17559:1;17541:20;:::i;:::-;17536:25;;17575:20;17593:1;17575:20;:::i;:::-;17570:25;;17618:1;17615;17611:9;17604:16;;17639:3;17636:1;17633:10;17630:36;;;17646:18;;:::i;:::-;17630:36;17482:191;;;;:::o;17679:162::-;17819:14;17815:1;17807:6;17803:14;17796:38;17679:162;:::o;17847:366::-;17989:3;18010:67;18074:2;18069:3;18010:67;:::i;:::-;18003:74;;18086:93;18175:3;18086:93;:::i;:::-;18204:2;18199:3;18195:12;18188:19;;17847:366;;;:::o;18219:419::-;18385:4;18423:2;18412:9;18408:18;18400:26;;18472:9;18466:4;18462:20;18458:1;18447:9;18443:17;18436:47;18500:131;18626:4;18500:131;:::i;:::-;18492:139;;18219:419;;;:::o;18644:194::-;18684:4;18704:20;18722:1;18704:20;:::i;:::-;18699:25;;18738:20;18756:1;18738:20;:::i;:::-;18733:25;;18782:1;18779;18775:9;18767:17;;18806:1;18800:4;18797:11;18794:37;;;18811:18;;:::i;:::-;18794:37;18644:194;;;;:::o;18844:178::-;18984:30;18980:1;18972:6;18968:14;18961:54;18844:178;:::o;19028:366::-;19170:3;19191:67;19255:2;19250:3;19191:67;:::i;:::-;19184:74;;19267:93;19356:3;19267:93;:::i;:::-;19385:2;19380:3;19376:12;19369:19;;19028:366;;;:::o;19400:419::-;19566:4;19604:2;19593:9;19589:18;19581:26;;19653:9;19647:4;19643:20;19639:1;19628:9;19624:17;19617:47;19681:131;19807:4;19681:131;:::i;:::-;19673:139;;19400:419;;;:::o;19825:179::-;19965:31;19961:1;19953:6;19949:14;19942:55;19825:179;:::o;20010:366::-;20152:3;20173:67;20237:2;20232:3;20173:67;:::i;:::-;20166:74;;20249:93;20338:3;20249:93;:::i;:::-;20367:2;20362:3;20358:12;20351:19;;20010:366;;;:::o;20382:419::-;20548:4;20586:2;20575:9;20571:18;20563:26;;20635:9;20629:4;20625:20;20621:1;20610:9;20606:17;20599:47;20663:131;20789:4;20663:131;:::i;:::-;20655:139;;20382:419;;;:::o;20807:233::-;20947:34;20943:1;20935:6;20931:14;20924:58;21016:16;21011:2;21003:6;20999:15;20992:41;20807:233;:::o;21046:366::-;21188:3;21209:67;21273:2;21268:3;21209:67;:::i;:::-;21202:74;;21285:93;21374:3;21285:93;:::i;:::-;21403:2;21398:3;21394:12;21387:19;;21046:366;;;:::o;21418:419::-;21584:4;21622:2;21611:9;21607:18;21599:26;;21671:9;21665:4;21661:20;21657:1;21646:9;21642:17;21635:47;21699:131;21825:4;21699:131;:::i;:::-;21691:139;;21418:419;;;:::o;21843:244::-;21983:34;21979:1;21971:6;21967:14;21960:58;22052:27;22047:2;22039:6;22035:15;22028:52;21843:244;:::o;22093:366::-;22235:3;22256:67;22320:2;22315:3;22256:67;:::i;:::-;22249:74;;22332:93;22421:3;22332:93;:::i;:::-;22450:2;22445:3;22441:12;22434:19;;22093:366;;;:::o;22465:419::-;22631:4;22669:2;22658:9;22654:18;22646:26;;22718:9;22712:4;22708:20;22704:1;22693:9;22689:17;22682:47;22746:131;22872:4;22746:131;:::i;:::-;22738:139;;22465:419;;;:::o;22890:171::-;23030:23;23026:1;23018:6;23014:14;23007:47;22890:171;:::o;23067:366::-;23209:3;23230:67;23294:2;23289:3;23230:67;:::i;:::-;23223:74;;23306:93;23395:3;23306:93;:::i;:::-;23424:2;23419:3;23415:12;23408:19;;23067:366;;;:::o;23439:419::-;23605:4;23643:2;23632:9;23628:18;23620:26;;23692:9;23686:4;23682:20;23678:1;23667:9;23663:17;23656:47;23720:131;23846:4;23720:131;:::i;:::-;23712:139;;23439:419;;;:::o;23864:143::-;23921:5;23952:6;23946:13;23937:22;;23968:33;23995:5;23968:33;:::i;:::-;23864:143;;;;:::o;24013:351::-;24083:6;24132:2;24120:9;24111:7;24107:23;24103:32;24100:119;;;24138:79;;:::i;:::-;24100:119;24258:1;24283:64;24339:7;24330:6;24319:9;24315:22;24283:64;:::i;:::-;24273:74;;24229:128;24013:351;;;;:::o;24370:164::-;24510:16;24506:1;24498:6;24494:14;24487:40;24370:164;:::o;24540:366::-;24682:3;24703:67;24767:2;24762:3;24703:67;:::i;:::-;24696:74;;24779:93;24868:3;24779:93;:::i;:::-;24897:2;24892:3;24888:12;24881:19;;24540:366;;;:::o;24912:419::-;25078:4;25116:2;25105:9;25101:18;25093:26;;25165:9;25159:4;25155:20;25151:1;25140:9;25136:17;25129:47;25193:131;25319:4;25193:131;:::i;:::-;25185:139;;24912:419;;;:::o;25337:332::-;25458:4;25496:2;25485:9;25481:18;25473:26;;25509:71;25577:1;25566:9;25562:17;25553:6;25509:71;:::i;:::-;25590:72;25658:2;25647:9;25643:18;25634:6;25590:72;:::i;:::-;25337:332;;;;;:::o;25675:137::-;25729:5;25760:6;25754:13;25745:22;;25776:30;25800:5;25776:30;:::i;:::-;25675:137;;;;:::o;25818:345::-;25885:6;25934:2;25922:9;25913:7;25909:23;25905:32;25902:119;;;25940:79;;:::i;:::-;25902:119;26060:1;26085:61;26138:7;26129:6;26118:9;26114:22;26085:61;:::i;:::-;26075:71;;26031:125;25818:345;;;;:::o;26169:224::-;26309:34;26305:1;26297:6;26293:14;26286:58;26378:7;26373:2;26365:6;26361:15;26354:32;26169:224;:::o;26399:366::-;26541:3;26562:67;26626:2;26621:3;26562:67;:::i;:::-;26555:74;;26638:93;26727:3;26638:93;:::i;:::-;26756:2;26751:3;26747:12;26740:19;;26399:366;;;:::o;26771:419::-;26937:4;26975:2;26964:9;26960:18;26952:26;;27024:9;27018:4;27014:20;27010:1;26999:9;26995:17;26988:47;27052:131;27178:4;27052:131;:::i;:::-;27044:139;;26771:419;;;:::o;27196:225::-;27336:34;27332:1;27324:6;27320:14;27313:58;27405:8;27400:2;27392:6;27388:15;27381:33;27196:225;:::o;27427:366::-;27569:3;27590:67;27654:2;27649:3;27590:67;:::i;:::-;27583:74;;27666:93;27755:3;27666:93;:::i;:::-;27784:2;27779:3;27775:12;27768:19;;27427:366;;;:::o;27799:419::-;27965:4;28003:2;27992:9;27988:18;27980:26;;28052:9;28046:4;28042:20;28038:1;28027:9;28023:17;28016:47;28080:131;28206:4;28080:131;:::i;:::-;28072:139;;27799:419;;;:::o;28224:223::-;28364:34;28360:1;28352:6;28348:14;28341:58;28433:6;28428:2;28420:6;28416:15;28409:31;28224:223;:::o;28453:366::-;28595:3;28616:67;28680:2;28675:3;28616:67;:::i;:::-;28609:74;;28692:93;28781:3;28692:93;:::i;:::-;28810:2;28805:3;28801:12;28794:19;;28453:366;;;:::o;28825:419::-;28991:4;29029:2;29018:9;29014:18;29006:26;;29078:9;29072:4;29068:20;29064:1;29053:9;29049:17;29042:47;29106:131;29232:4;29106:131;:::i;:::-;29098:139;;28825:419;;;:::o;29250:221::-;29390:34;29386:1;29378:6;29374:14;29367:58;29459:4;29454:2;29446:6;29442:15;29435:29;29250:221;:::o;29477:366::-;29619:3;29640:67;29704:2;29699:3;29640:67;:::i;:::-;29633:74;;29716:93;29805:3;29716:93;:::i;:::-;29834:2;29829:3;29825:12;29818:19;;29477:366;;;:::o;29849:419::-;30015:4;30053:2;30042:9;30038:18;30030:26;;30102:9;30096:4;30092:20;30088:1;30077:9;30073:17;30066:47;30130:131;30256:4;30130:131;:::i;:::-;30122:139;;29849:419;;;:::o;30274:224::-;30414:34;30410:1;30402:6;30398:14;30391:58;30483:7;30478:2;30470:6;30466:15;30459:32;30274:224;:::o;30504:366::-;30646:3;30667:67;30731:2;30726:3;30667:67;:::i;:::-;30660:74;;30743:93;30832:3;30743:93;:::i;:::-;30861:2;30856:3;30852:12;30845:19;;30504:366;;;:::o;30876:419::-;31042:4;31080:2;31069:9;31065:18;31057:26;;31129:9;31123:4;31119:20;31115:1;31104:9;31100:17;31093:47;31157:131;31283:4;31157:131;:::i;:::-;31149:139;;30876:419;;;:::o;31301:222::-;31441:34;31437:1;31429:6;31425:14;31418:58;31510:5;31505:2;31497:6;31493:15;31486:30;31301:222;:::o;31529:366::-;31671:3;31692:67;31756:2;31751:3;31692:67;:::i;:::-;31685:74;;31768:93;31857:3;31768:93;:::i;:::-;31886:2;31881:3;31877:12;31870:19;;31529:366;;;:::o;31901:419::-;32067:4;32105:2;32094:9;32090:18;32082:26;;32154:9;32148:4;32144:20;32140:1;32129:9;32125:17;32118:47;32182:131;32308:4;32182:131;:::i;:::-;32174:139;;31901:419;;;:::o;32326:172::-;32466:24;32462:1;32454:6;32450:14;32443:48;32326:172;:::o;32504:366::-;32646:3;32667:67;32731:2;32726:3;32667:67;:::i;:::-;32660:74;;32743:93;32832:3;32743:93;:::i;:::-;32861:2;32856:3;32852:12;32845:19;;32504:366;;;:::o;32876:419::-;33042:4;33080:2;33069:9;33065:18;33057:26;;33129:9;33123:4;33119:20;33115:1;33104:9;33100:17;33093:47;33157:131;33283:4;33157:131;:::i;:::-;33149:139;;32876:419;;;:::o;33301:240::-;33441:34;33437:1;33429:6;33425:14;33418:58;33510:23;33505:2;33497:6;33493:15;33486:48;33301:240;:::o;33547:366::-;33689:3;33710:67;33774:2;33769:3;33710:67;:::i;:::-;33703:74;;33786:93;33875:3;33786:93;:::i;:::-;33904:2;33899:3;33895:12;33888:19;;33547:366;;;:::o;33919:419::-;34085:4;34123:2;34112:9;34108:18;34100:26;;34172:9;34166:4;34162:20;34158:1;34147:9;34143:17;34136:47;34200:131;34326:4;34200:131;:::i;:::-;34192:139;;33919:419;;;:::o;34344:169::-;34484:21;34480:1;34472:6;34468:14;34461:45;34344:169;:::o;34519:366::-;34661:3;34682:67;34746:2;34741:3;34682:67;:::i;:::-;34675:74;;34758:93;34847:3;34758:93;:::i;:::-;34876:2;34871:3;34867:12;34860:19;;34519:366;;;:::o;34891:419::-;35057:4;35095:2;35084:9;35080:18;35072:26;;35144:9;35138:4;35134:20;35130:1;35119:9;35115:17;35108:47;35172:131;35298:4;35172:131;:::i;:::-;35164:139;;34891:419;;;:::o;35316:241::-;35456:34;35452:1;35444:6;35440:14;35433:58;35525:24;35520:2;35512:6;35508:15;35501:49;35316:241;:::o;35563:366::-;35705:3;35726:67;35790:2;35785:3;35726:67;:::i;:::-;35719:74;;35802:93;35891:3;35802:93;:::i;:::-;35920:2;35915:3;35911:12;35904:19;;35563:366;;;:::o;35935:419::-;36101:4;36139:2;36128:9;36124:18;36116:26;;36188:9;36182:4;36178:20;36174:1;36163:9;36159:17;36152:47;36216:131;36342:4;36216:131;:::i;:::-;36208:139;;35935:419;;;:::o;36360:180::-;36408:77;36405:1;36398:88;36505:4;36502:1;36495:15;36529:4;36526:1;36519:15;36546:185;36586:1;36603:20;36621:1;36603:20;:::i;:::-;36598:25;;36637:20;36655:1;36637:20;:::i;:::-;36632:25;;36676:1;36666:35;;36681:18;;:::i;:::-;36666:35;36723:1;36720;36716:9;36711:14;;36546:185;;;;:::o;36737:225::-;36877:34;36873:1;36865:6;36861:14;36854:58;36946:8;36941:2;36933:6;36929:15;36922:33;36737:225;:::o;36968:366::-;37110:3;37131:67;37195:2;37190:3;37131:67;:::i;:::-;37124:74;;37207:93;37296:3;37207:93;:::i;:::-;37325:2;37320:3;37316:12;37309:19;;36968:366;;;:::o;37340:419::-;37506:4;37544:2;37533:9;37529:18;37521:26;;37593:9;37587:4;37583:20;37579:1;37568:9;37564:17;37557:47;37621:131;37747:4;37621:131;:::i;:::-;37613:139;;37340:419;;;:::o;37765:442::-;37914:4;37952:2;37941:9;37937:18;37929:26;;37965:71;38033:1;38022:9;38018:17;38009:6;37965:71;:::i;:::-;38046:72;38114:2;38103:9;38099:18;38090:6;38046:72;:::i;:::-;38128;38196:2;38185:9;38181:18;38172:6;38128:72;:::i;:::-;37765:442;;;;;;:::o;38213:147::-;38314:11;38351:3;38336:18;;38213:147;;;;:::o;38366:114::-;;:::o;38486:398::-;38645:3;38666:83;38747:1;38742:3;38666:83;:::i;:::-;38659:90;;38758:93;38847:3;38758:93;:::i;:::-;38876:1;38871:3;38867:11;38860:18;;38486:398;;;:::o;38890:379::-;39074:3;39096:147;39239:3;39096:147;:::i;:::-;39089:154;;39260:3;39253:10;;38890:379;;;:::o;39275:180::-;39323:77;39320:1;39313:88;39420:4;39417:1;39410:15;39444:4;39441:1;39434:15;39461:180;39509:77;39506:1;39499:88;39606:4;39603:1;39596:15;39630:4;39627:1;39620:15;39647:143;39704:5;39735:6;39729:13;39720:22;;39751:33;39778:5;39751:33;:::i;:::-;39647:143;;;;:::o;39796:351::-;39866:6;39915:2;39903:9;39894:7;39890:23;39886:32;39883:119;;;39921:79;;:::i;:::-;39883:119;40041:1;40066:64;40122:7;40113:6;40102:9;40098:22;40066:64;:::i;:::-;40056:74;;40012:128;39796:351;;;;:::o;40153:85::-;40198:7;40227:5;40216:16;;40153:85;;;:::o;40244:158::-;40302:9;40335:61;40353:42;40362:32;40388:5;40362:32;:::i;:::-;40353:42;:::i;:::-;40335:61;:::i;:::-;40322:74;;40244:158;;;:::o;40408:147::-;40503:45;40542:5;40503:45;:::i;:::-;40498:3;40491:58;40408:147;;:::o;40561:114::-;40628:6;40662:5;40656:12;40646:22;;40561:114;;;:::o;40681:184::-;40780:11;40814:6;40809:3;40802:19;40854:4;40849:3;40845:14;40830:29;;40681:184;;;;:::o;40871:132::-;40938:4;40961:3;40953:11;;40991:4;40986:3;40982:14;40974:22;;40871:132;;;:::o;41009:108::-;41086:24;41104:5;41086:24;:::i;:::-;41081:3;41074:37;41009:108;;:::o;41123:179::-;41192:10;41213:46;41255:3;41247:6;41213:46;:::i;:::-;41291:4;41286:3;41282:14;41268:28;;41123:179;;;;:::o;41308:113::-;41378:4;41410;41405:3;41401:14;41393:22;;41308:113;;;:::o;41457:732::-;41576:3;41605:54;41653:5;41605:54;:::i;:::-;41675:86;41754:6;41749:3;41675:86;:::i;:::-;41668:93;;41785:56;41835:5;41785:56;:::i;:::-;41864:7;41895:1;41880:284;41905:6;41902:1;41899:13;41880:284;;;41981:6;41975:13;42008:63;42067:3;42052:13;42008:63;:::i;:::-;42001:70;;42094:60;42147:6;42094:60;:::i;:::-;42084:70;;41940:224;41927:1;41924;41920:9;41915:14;;41880:284;;;41884:14;42180:3;42173:10;;41581:608;;;41457:732;;;;:::o;42195:831::-;42458:4;42496:3;42485:9;42481:19;42473:27;;42510:71;42578:1;42567:9;42563:17;42554:6;42510:71;:::i;:::-;42591:80;42667:2;42656:9;42652:18;42643:6;42591:80;:::i;:::-;42718:9;42712:4;42708:20;42703:2;42692:9;42688:18;42681:48;42746:108;42849:4;42840:6;42746:108;:::i;:::-;42738:116;;42864:72;42932:2;42921:9;42917:18;42908:6;42864:72;:::i;:::-;42946:73;43014:3;43003:9;42999:19;42990:6;42946:73;:::i;:::-;42195:831;;;;;;;;:::o;43032:807::-;43281:4;43319:3;43308:9;43304:19;43296:27;;43333:71;43401:1;43390:9;43386:17;43377:6;43333:71;:::i;:::-;43414:72;43482:2;43471:9;43467:18;43458:6;43414:72;:::i;:::-;43496:80;43572:2;43561:9;43557:18;43548:6;43496:80;:::i;:::-;43586;43662:2;43651:9;43647:18;43638:6;43586:80;:::i;:::-;43676:73;43744:3;43733:9;43729:19;43720:6;43676:73;:::i;:::-;43759;43827:3;43816:9;43812:19;43803:6;43759:73;:::i;:::-;43032:807;;;;;;;;;:::o;43845:663::-;43933:6;43941;43949;43998:2;43986:9;43977:7;43973:23;43969:32;43966:119;;;44004:79;;:::i;:::-;43966:119;44124:1;44149:64;44205:7;44196:6;44185:9;44181:22;44149:64;:::i;:::-;44139:74;;44095:128;44262:2;44288:64;44344:7;44335:6;44324:9;44320:22;44288:64;:::i;:::-;44278:74;;44233:129;44401:2;44427:64;44483:7;44474:6;44463:9;44459:22;44427:64;:::i;:::-;44417:74;;44372:129;43845:663;;;;;:::o

Swarm Source

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