ETH Price: $3,452.57 (+1.11%)
Gas: 16 Gwei

Token

Pei Pei (PEIPEI)
 

Overview

Max Total Supply

420,690,000,000,000 PEIPEI

Holders

240

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
porkwhaleeth.eth
Balance
290,269,193,447.230236283039997194 PEIPEI

Value
$0.00
0x2FAdE86f04CF7bfFF11cFfEa7d28305AbAc8BE39
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
PeiPei

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
 * SPDX-License-Identifier: MIT
 * https://twitter.com/PeiPei_Eth
 * https://t.me/PeiPei_Eth
 * https://peipei.meme/
*/

pragma solidity 0.8.19;

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

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    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);
}

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @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;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @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];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    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;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the upd allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    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;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the upd allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the upd allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    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;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    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);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    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);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    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);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    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);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @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");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to 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 IDexFactory {
    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 IDexRouter {
    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 PeiPei is Context, ERC20, Ownable {
    using SafeMath for uint256;
    mapping(address => bool) private _isExcludedFromFee;
    address payable private _taxWallet;
    uint256 firstBlock;

    uint64 private lastLiquifyTime;

    uint256 private _taxOnBuys = 25;
    uint256 private _taxOnSells = 25;
    uint256 private _preventSwapBefore = 1;
    uint256 private _buyCount = 0;

    uint256 private _txAmountLimit;
    uint256 private _walletAmountLimit;
    uint256 private _swapbackMin;
    uint256 private _swapbackMax;

    IDexRouter private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = false;
    bool private launchmode = true;
    mapping(address => bool) private _canTx;

    event MaxTxAmountUpdated(uint _txAmountLimit);
    event MaxWalletAmountUpdated(uint _walletAmountLimit);
    event FeesUpdated(uint _taxOnBuys, uint _taxOnSells);
    event SwapbackUpdated(uint _swapbackMin, uint _swapbackMax);
    event FeeReceiverUpdated(address _taxWallet);
    event ExcludedFromFee(address account, bool status);
    event LimitsRemoved();
    event TradingOpened();

    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor() ERC20("Pei Pei", "PEIPEI") {
        uint256 _totalSupply = 420_690_000_000_000 * 10 ** 18;

        _txAmountLimit = (_totalSupply * 10) / 1000;
        _walletAmountLimit = (_totalSupply * 10) / 1000;
        _swapbackMin = (_totalSupply * 5) / 10000;
        _swapbackMax = (_totalSupply * 400) / 10000;
        _canTx [address(this)] = true;
        _taxWallet = payable(0xc56609AFB7104f1926719086DF1FDC7b234dC8A4);
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_taxWallet] = true;

        _mint(_msgSender(), _totalSupply);
    }


    receive() external payable {}

    function startTrading() external onlyOwner {
        require(!tradingOpen, "trading is already open");
        uniswapV2Router = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        _approve(address(this), address(uniswapV2Router), totalSupply());
        uniswapV2Pair = IDexFactory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        swapEnabled = true;
        tradingOpen = true;
        firstBlock = block.number;
        lastLiquifyTime = uint64(block.number);
        _isExcludedFromFee[address(this)] = true;

        emit TradingOpened();
    }

    function setTaxWallet(address payable taxWallet1) external onlyOwner {
        _taxWallet = taxWallet1;

        emit FeeReceiverUpdated(taxWallet1);
    }

    function changeMaxTx(uint256 newValue) external onlyOwner {
        require(newValue >= 1, "Max tx cant be lower than 0.1%");
        _txAmountLimit = (totalSupply() * newValue) / 1000;
        emit MaxTxAmountUpdated(_txAmountLimit);
    }

    function changeMaxWallet(uint256 newValue) external onlyOwner {
        require(newValue >= 1, "Max wallet cant be lower than 0.1%");
        _walletAmountLimit = (totalSupply() * newValue) / 1000;
        emit MaxWalletAmountUpdated(_walletAmountLimit);
    }

    function changeSwapbackSettings(
        uint256 taxSwapThreshold,
        uint256 maxTaxSwap
    ) external onlyOwner {
        _swapbackMin = (totalSupply() * taxSwapThreshold) / 10000;
        _swapbackMax = (totalSupply() * maxTaxSwap) / 10000;
        emit SwapbackUpdated(taxSwapThreshold, maxTaxSwap);
    }

    function changemode() external onlyOwner {
        require(launchmode, "Launch mode is already disabled");
        _taxOnBuys = 25;
        _taxOnSells = 25;
        launchmode = false;
    }

    function removeLimits() external onlyOwner {
        _txAmountLimit = totalSupply();
        _walletAmountLimit = totalSupply();
        emit MaxTxAmountUpdated(totalSupply());
        emit MaxWalletAmountUpdated(totalSupply());
    }

    function setTaxes(uint256 buyTax, uint256 sellTax) external onlyOwner {
        require(buyTax <= 99, "Invalid buy tax value");
        require(sellTax <= 99, "Invalid sell tax value");
        _taxOnBuys = buyTax;
        _taxOnSells = sellTax;
        emit FeesUpdated(buyTax, sellTax);
    }

    function removeStuckETH() external {
        require(msg.sender == _taxWallet, "Only fee receiver can trigger");
        _taxWallet.transfer(address(this).balance);
    }

    function setList(address[] calldata cute, bool status)
        external
        onlyOwner
    {
        for (uint256 i = 0; i < cute.length; i++) {
            _canTx[cute[i]] = status;
        }
    }

    function exemptFromFee(address account, bool status) external onlyOwner {
        _isExcludedFromFee[account] = status;
        emit ExcludedFromFee(account, status);
    }

    function viewInfo()
        external
        view
        returns (
            uint256 buyFee,
            uint256 sellFee,
            uint256 maxTxAmount,
            uint256 maxWalletSize,
            uint256 taxSwapThreshold,
            uint256 maxTaxSwap
        )
    {
        return (
            _taxOnBuys,
            _taxOnSells,
            _txAmountLimit,
            _walletAmountLimit,
            _swapbackMin,
            _swapbackMax
        );
    }

    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(amount > 0, "Transfer amount must be greater than zero");
        uint256 taxAmount = 0;
        if (from != owner() && to != owner() && !inSwap) {
            if (launchmode){
                require(_canTx[from] || _canTx[to], "");
            }

            taxAmount = amount.mul(_taxOnBuys).div(100);

            if (
                from == uniswapV2Pair &&
                to != address(uniswapV2Router) &&
                !_isExcludedFromFee[to]
            ) {
                require(amount <= _txAmountLimit, "Exceeds the _txAmountLimit.");
                require(
                    balanceOf(to) + amount <= _walletAmountLimit,
                    "Exceeds the maxWalletSize."
                );

                if (firstBlock + 3 > block.number) {
                    require(!isContract(to));
                }
                _buyCount++;
            }

            if (to != uniswapV2Pair && !_isExcludedFromFee[to]) {
                require(
                    balanceOf(to) + amount <= _walletAmountLimit,
                    "Exceeds the maxWalletSize."
                );
            }

            if (to == uniswapV2Pair && from != address(this)) {
                taxAmount = amount.mul(_taxOnSells).div(100);
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            if (
                !inSwap &&
                to == uniswapV2Pair &&
                swapEnabled &&
                contractTokenBalance > _swapbackMin &&
                _buyCount > _preventSwapBefore &&
                lastLiquifyTime != uint64(block.number)
            ) {
                swapTokensForEth(min(contractTokenBalance, _swapbackMax));
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee();
                }
            }
        }

        if (taxAmount > 0) {
            super._transfer(from, address(this), taxAmount);
        }
        super._transfer(from, to, amount.sub(taxAmount));
    }

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

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

    function triggerSwap() external {
        require(
            msg.sender == _taxWallet || msg.sender == owner(),
            "Only fee receiver can trigger"
        );
        uint256 contractTokenBalance = balanceOf(address(this));

        swapTokensForEth(contractTokenBalance);
        uint256 contractETHBalance = address(this).balance;
        if (contractETHBalance > 0) {
            sendETHToFee();
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        lastLiquifyTime = uint64(block.number);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function sendETHToFee() private {
        bool success;
        (success, ) = address(_taxWallet).call{value: address(this).balance}(
            ""
        );
    }
}

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":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ExcludedFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_taxWallet","type":"address"}],"name":"FeeReceiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_taxOnBuys","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_taxOnSells","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_txAmountLimit","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_walletAmountLimit","type":"uint256"}],"name":"MaxWalletAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_swapbackMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_swapbackMax","type":"uint256"}],"name":"SwapbackUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingOpened","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"changeMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"changeMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"name":"changeSwapbackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"changemode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"exemptFromFee","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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"cute","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"taxWallet1","type":"address"}],"name":"setTaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"triggerSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"viewInfo","outputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"internalType":"uint256","name":"maxWalletSize","type":"uint256"},{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526019600a556019600b556001600c556000600d556000601360156101000a81548160ff0219169083151502179055506000601360166101000a81548160ff0219169083151502179055506001601360176101000a81548160ff0219169083151502179055503480156200007657600080fd5b506040518060400160405280600781526020017f50656920506569000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f50454950454900000000000000000000000000000000000000000000000000008152508160039081620000f49190620008cf565b508060049081620001069190620008cf565b505050620001296200011d620003db60201b60201c565b620003e360201b60201c565b60006d14bddab3e51a57cff87a5000000090506103e8600a826200014e9190620009e5565b6200015a919062000a5f565b600e819055506103e8600a82620001729190620009e5565b6200017e919062000a5f565b600f81905550612710600582620001969190620009e5565b620001a2919062000a5f565b60108190555061271061019082620001bb9190620009e5565b620001c7919062000a5f565b6011819055506001601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555073c56609afb7104f1926719086df1fdc7b234dc8a4600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016006600062000290620004a960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620003d4620003c7620003db60201b60201c565b82620004d360201b60201c565b5062000b83565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000545576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200053c9062000af8565b60405180910390fd5b62000559600083836200064b60201b60201c565b80600260008282546200056d919062000b1a565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620005c4919062000b1a565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200062b919062000b66565b60405180910390a362000647600083836200065060201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006d757607f821691505b602082108103620006ed57620006ec6200068f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000718565b62000763868362000718565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620007b0620007aa620007a4846200077b565b62000785565b6200077b565b9050919050565b6000819050919050565b620007cc836200078f565b620007e4620007db82620007b7565b84845462000725565b825550505050565b600090565b620007fb620007ec565b62000808818484620007c1565b505050565b5b81811015620008305762000824600082620007f1565b6001810190506200080e565b5050565b601f8211156200087f576200084981620006f3565b620008548462000708565b8101602085101562000864578190505b6200087c620008738562000708565b8301826200080d565b50505b505050565b600082821c905092915050565b6000620008a46000198460080262000884565b1980831691505092915050565b6000620008bf838362000891565b9150826002028217905092915050565b620008da8262000655565b67ffffffffffffffff811115620008f657620008f562000660565b5b620009028254620006be565b6200090f82828562000834565b600060209050601f83116001811462000947576000841562000932578287015190505b6200093e8582620008b1565b865550620009ae565b601f1984166200095786620006f3565b60005b8281101562000981578489015182556001820191506020850194506020810190506200095a565b86831015620009a157848901516200099d601f89168262000891565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620009f2826200077b565b9150620009ff836200077b565b925082820262000a0f816200077b565b9150828204841483151762000a295762000a28620009b6565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000a6c826200077b565b915062000a79836200077b565b92508262000a8c5762000a8b62000a30565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ae0601f8362000a97565b915062000aed8262000aa8565b602082019050919050565b6000602082019050818103600083015262000b138162000ad1565b9050919050565b600062000b27826200077b565b915062000b34836200077b565b925082820190508082111562000b4f5762000b4e620009b6565b5b92915050565b62000b60816200077b565b82525050565b600060208201905062000b7d600083018462000b55565b92915050565b6144a18062000b936000396000f3fe6080604052600436106101a05760003560e01c80638da5cb5b116100ec578063ae6014801161008a578063cb3cff5011610064578063cb3cff5014610578578063dd62ed3e146105a1578063ea414b28146105de578063f2fde38b14610607576101a7565b8063ae60148014610508578063c2d4c5b114610538578063c647b20e1461054f576101a7565b806395d89b41116100c657806395d89b411461043a578063a457c2d714610465578063a8a59e55146104a2578063a9059cbb146104cb576101a7565b80638da5cb5b146103cf5780638e090333146103fa5780638f937cc414610423576101a7565b8063293230b81161015957806370a082311161013357806370a082311461033b578063715018a614610378578063751039fc1461038f578063778c6152146103a6576101a7565b8063293230b8146102bc578063313ce567146102d357806339509351146102fe576101a7565b806306fdde03146101ac578063095ea7b3146101d75780630b006d60146102145780630f299cf11461023d57806318160ddd1461025457806323b872dd1461027f576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101c1610630565b6040516101ce9190612f7a565b60405180910390f35b3480156101e357600080fd5b506101fe60048036038101906101f9919061303a565b6106c2565b60405161020b9190613095565b60405180910390f35b34801561022057600080fd5b5061023b600480360381019061023691906130b0565b6106e0565b005b34801561024957600080fd5b50610252610802565b005b34801561026057600080fd5b506102696108fd565b60405161027691906130ec565b60405180910390f35b34801561028b57600080fd5b506102a660048036038101906102a19190613107565b610907565b6040516102b39190613095565b60405180910390f35b3480156102c857600080fd5b506102d16109ff565b005b3480156102df57600080fd5b506102e8610fbd565b6040516102f59190613176565b60405180910390f35b34801561030a57600080fd5b506103256004803603810190610320919061303a565b610fc6565b6040516103329190613095565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d9190613191565b611072565b60405161036f91906130ec565b60405180910390f35b34801561038457600080fd5b5061038d6110ba565b005b34801561039b57600080fd5b506103a4611142565b005b3480156103b257600080fd5b506103cd60048036038101906103c891906130b0565b611258565b005b3480156103db57600080fd5b506103e461137a565b6040516103f191906131cd565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c9190613214565b6113a4565b005b34801561042f57600080fd5b506104386114b4565b005b34801561044657600080fd5b5061044f6115b2565b60405161045c9190612f7a565b60405180910390f35b34801561047157600080fd5b5061048c6004803603810190610487919061303a565b611644565b6040516104999190613095565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c49190613254565b61172f565b005b3480156104d757600080fd5b506104f260048036038101906104ed919061303a565b611834565b6040516104ff9190613095565b60405180910390f35b34801561051457600080fd5b5061051d611852565b60405161052f96959493929190613294565b60405180910390f35b34801561054457600080fd5b5061054d611881565b005b34801561055b57600080fd5b5061057660048036038101906105719190613254565b611979565b005b34801561058457600080fd5b5061059f600480360381019061059a919061335a565b611ac8565b005b3480156105ad57600080fd5b506105c860048036038101906105c391906133ba565b611be9565b6040516105d591906130ec565b60405180910390f35b3480156105ea57600080fd5b5061060560048036038101906106009190613438565b611c70565b005b34801561061357600080fd5b5061062e60048036038101906106299190613191565b611d67565b005b60606003805461063f90613494565b80601f016020809104026020016040519081016040528092919081815260200182805461066b90613494565b80156106b85780601f1061068d576101008083540402835291602001916106b8565b820191906000526020600020905b81548152906001019060200180831161069b57829003601f168201915b5050505050905090565b60006106d66106cf611e5e565b8484611e66565b6001905092915050565b6106e8611e5e565b73ffffffffffffffffffffffffffffffffffffffff1661070661137a565b73ffffffffffffffffffffffffffffffffffffffff161461075c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075390613511565b60405180910390fd5b60018110156107a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610797906135a3565b60405180910390fd5b6103e8816107ac6108fd565b6107b691906135f2565b6107c09190613663565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f546040516107f791906130ec565b60405180910390a150565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610889906136e0565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156108fa573d6000803e3d6000fd5b50565b6000600254905090565b600061091484848461202f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061095f611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156109df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d690613772565b60405180910390fd5b6109f3856109eb611e5e565b858403611e66565b60019150509392505050565b610a07611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610a2561137a565b73ffffffffffffffffffffffffffffffffffffffff1614610a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7290613511565b60405180910390fd5b601360149054906101000a900460ff1615610acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac2906137de565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610b5430601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610b4f6108fd565b611e66565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be59190613813565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c929190613813565b6040518363ffffffff1660e01b8152600401610caf929190613840565b6020604051808303816000875af1158015610cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf29190613813565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610d7b30611072565b600080610d8661137a565b426040518863ffffffff1660e01b8152600401610da8969594939291906138ae565b60606040518083038185885af1158015610dc6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610deb9190613924565b505050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610e8d929190613977565b6020604051808303816000875af1158015610eac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed091906139b5565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff0219169083151502179055504360088190555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b60006012905090565b6000611068610fd3611e5e565b848460016000610fe1611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461106391906139e2565b611e66565b6001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110c2611e5e565b73ffffffffffffffffffffffffffffffffffffffff166110e061137a565b73ffffffffffffffffffffffffffffffffffffffff1614611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d90613511565b60405180910390fd5b61114060006127f8565b565b61114a611e5e565b73ffffffffffffffffffffffffffffffffffffffff1661116861137a565b73ffffffffffffffffffffffffffffffffffffffff16146111be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b590613511565b60405180910390fd5b6111c66108fd565b600e819055506111d46108fd565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6112036108fd565b60405161121091906130ec565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e0016112416108fd565b60405161124e91906130ec565b60405180910390a1565b611260611e5e565b73ffffffffffffffffffffffffffffffffffffffff1661127e61137a565b73ffffffffffffffffffffffffffffffffffffffff16146112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb90613511565b60405180910390fd5b6001811015611318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130f90613a62565b60405180910390fd5b6103e8816113246108fd565b61132e91906135f2565b6113389190613663565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e5460405161136f91906130ec565b60405180910390a150565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113ac611e5e565b73ffffffffffffffffffffffffffffffffffffffff166113ca61137a565b73ffffffffffffffffffffffffffffffffffffffff1614611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790613511565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa982826040516114a8929190613a82565b60405180910390a15050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611542575061151361137a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611581576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611578906136e0565b60405180910390fd5b600061158c30611072565b9050611597816128be565b600047905060008111156115ae576115ad612b60565b5b5050565b6060600480546115c190613494565b80601f01602080910402602001604051908101604052809291908181526020018280546115ed90613494565b801561163a5780601f1061160f5761010080835404028352916020019161163a565b820191906000526020600020905b81548152906001019060200180831161161d57829003601f168201915b5050505050905090565b60008060016000611653611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170790613b1d565b60405180910390fd5b61172461171b611e5e565b85858403611e66565b600191505092915050565b611737611e5e565b73ffffffffffffffffffffffffffffffffffffffff1661175561137a565b73ffffffffffffffffffffffffffffffffffffffff16146117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a290613511565b60405180910390fd5b612710826117b76108fd565b6117c191906135f2565b6117cb9190613663565b601081905550612710816117dd6108fd565b6117e791906135f2565b6117f19190613663565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb18282604051611828929190613b3d565b60405180910390a15050565b6000611848611841611e5e565b848461202f565b6001905092915050565b600080600080600080600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b611889611e5e565b73ffffffffffffffffffffffffffffffffffffffff166118a761137a565b73ffffffffffffffffffffffffffffffffffffffff16146118fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f490613511565b60405180910390fd5b601360179054906101000a900460ff1661194c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194390613bb2565b60405180910390fd5b6019600a819055506019600b819055506000601360176101000a81548160ff021916908315150217905550565b611981611e5e565b73ffffffffffffffffffffffffffffffffffffffff1661199f61137a565b73ffffffffffffffffffffffffffffffffffffffff16146119f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ec90613511565b60405180910390fd5b6063821115611a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3090613c1e565b60405180910390fd5b6063811115611a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7490613c8a565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a18282604051611abc929190613b3d565b60405180910390a15050565b611ad0611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611aee61137a565b73ffffffffffffffffffffffffffffffffffffffff1614611b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3b90613511565b60405180910390fd5b60005b83839050811015611be3578160146000868685818110611b6a57611b69613caa565b5b9050602002016020810190611b7f9190613191565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611bdb90613cd9565b915050611b47565b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c78611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611c9661137a565b73ffffffffffffffffffffffffffffffffffffffff1614611cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce390613511565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee81604051611d5c9190613d76565b60405180910390a150565b611d6f611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611d8d61137a565b73ffffffffffffffffffffffffffffffffffffffff1614611de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dda90613511565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4990613e03565b60405180910390fd5b611e5b816127f8565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc90613e95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b90613f27565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161202291906130ec565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361209e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209590613fb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361210d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121049061404b565b60405180910390fd5b60008111612150576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612147906140dd565b60405180910390fd5b600061215a61137a565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156121c8575061219861137a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156121e15750601360159054906101000a900460ff16155b156127c057601360179054906101000a900460ff16156122dc57601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061229c5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6122db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d290614123565b60405180910390fd5b5b61230460646122f6600a5485612bf390919063ffffffff16565b612c0990919063ffffffff16565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156123b15750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156124075750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124ec57600e54821115612451576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124489061418f565b60405180910390fd5b600f548261245e85611072565b61246891906139e2565b11156124a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a0906141fb565b60405180910390fd5b4360036008546124b991906139e2565b11156124d3576124c883612c1f565b156124d257600080fd5b5b600d60008154809291906124e690613cd9565b91905055505b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125945750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125f257600f54826125a685611072565b6125b091906139e2565b11156125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e8906141fb565b60405180910390fd5b5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561267b57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156126ab576126a8606461269a600b5485612bf390919063ffffffff16565b612c0990919063ffffffff16565b90505b60006126b630611072565b9050601360159054906101000a900460ff161580156127225750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b801561273a5750601360169054906101000a900460ff165b8015612747575060105481115b80156127565750600c54600d54115b801561278c57504367ffffffffffffffff16600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b156127be576127a56127a082601154612c32565b6128be565b600047905060008111156127bc576127bb612b60565b5b505b505b60008111156127d5576127d4843083612c4b565b5b6127f284846127ed8486612eca90919063ffffffff16565b612c4b565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff02191690831515021790555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600267ffffffffffffffff81111561291f5761291e61421b565b5b60405190808252806020026020018201604052801561294d5781602001602082028036833780820191505090505b509050308160008151811061296557612964613caa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a309190613813565b81600181518110612a4457612a43613caa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612aab30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611e66565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612b0f959493929190614308565b600060405180830381600087803b158015612b2957600080fd5b505af1158015612b3d573d6000803e3d6000fd5b50505050506000601360156101000a81548160ff02191690831515021790555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ba890614390565b60006040518083038185875af1925050503d8060008114612be5576040519150601f19603f3d011682016040523d82523d6000602084013e612bea565b606091505b50508091505050565b60008183612c0191906135f2565b905092915050565b60008183612c179190613663565b905092915050565b600080823b905060008111915050919050565b6000818311612c415782612c43565b815b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb190613fb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d209061404b565b60405180910390fd5b612d34838383612ee0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db190614417565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e4d91906139e2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612eb191906130ec565b60405180910390a3612ec4848484612ee5565b50505050565b60008183612ed89190614437565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f24578082015181840152602081019050612f09565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f4c82612eea565b612f568185612ef5565b9350612f66818560208601612f06565b612f6f81612f30565b840191505092915050565b60006020820190508181036000830152612f948184612f41565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fd182612fa6565b9050919050565b612fe181612fc6565b8114612fec57600080fd5b50565b600081359050612ffe81612fd8565b92915050565b6000819050919050565b61301781613004565b811461302257600080fd5b50565b6000813590506130348161300e565b92915050565b6000806040838503121561305157613050612f9c565b5b600061305f85828601612fef565b925050602061307085828601613025565b9150509250929050565b60008115159050919050565b61308f8161307a565b82525050565b60006020820190506130aa6000830184613086565b92915050565b6000602082840312156130c6576130c5612f9c565b5b60006130d484828501613025565b91505092915050565b6130e681613004565b82525050565b600060208201905061310160008301846130dd565b92915050565b6000806000606084860312156131205761311f612f9c565b5b600061312e86828701612fef565b935050602061313f86828701612fef565b925050604061315086828701613025565b9150509250925092565b600060ff82169050919050565b6131708161315a565b82525050565b600060208201905061318b6000830184613167565b92915050565b6000602082840312156131a7576131a6612f9c565b5b60006131b584828501612fef565b91505092915050565b6131c781612fc6565b82525050565b60006020820190506131e260008301846131be565b92915050565b6131f18161307a565b81146131fc57600080fd5b50565b60008135905061320e816131e8565b92915050565b6000806040838503121561322b5761322a612f9c565b5b600061323985828601612fef565b925050602061324a858286016131ff565b9150509250929050565b6000806040838503121561326b5761326a612f9c565b5b600061327985828601613025565b925050602061328a85828601613025565b9150509250929050565b600060c0820190506132a960008301896130dd565b6132b660208301886130dd565b6132c360408301876130dd565b6132d060608301866130dd565b6132dd60808301856130dd565b6132ea60a08301846130dd565b979650505050505050565b600080fd5b600080fd5b600080fd5b60008083601f84011261331a576133196132f5565b5b8235905067ffffffffffffffff811115613337576133366132fa565b5b602083019150836020820283011115613353576133526132ff565b5b9250929050565b60008060006040848603121561337357613372612f9c565b5b600084013567ffffffffffffffff81111561339157613390612fa1565b5b61339d86828701613304565b935093505060206133b0868287016131ff565b9150509250925092565b600080604083850312156133d1576133d0612f9c565b5b60006133df85828601612fef565b92505060206133f085828601612fef565b9150509250929050565b600061340582612fa6565b9050919050565b613415816133fa565b811461342057600080fd5b50565b6000813590506134328161340c565b92915050565b60006020828403121561344e5761344d612f9c565b5b600061345c84828501613423565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806134ac57607f821691505b6020821081036134bf576134be613465565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006134fb602083612ef5565b9150613506826134c5565b602082019050919050565b6000602082019050818103600083015261352a816134ee565b9050919050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e60008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b600061358d602283612ef5565b915061359882613531565b604082019050919050565b600060208201905081810360008301526135bc81613580565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006135fd82613004565b915061360883613004565b925082820261361681613004565b9150828204841483151761362d5761362c6135c3565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061366e82613004565b915061367983613004565b92508261368957613688613634565b5b828204905092915050565b7f4f6e6c79206665652072656365697665722063616e2074726967676572000000600082015250565b60006136ca601d83612ef5565b91506136d582613694565b602082019050919050565b600060208201905081810360008301526136f9816136bd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061375c602883612ef5565b915061376782613700565b604082019050919050565b6000602082019050818103600083015261378b8161374f565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b60006137c8601783612ef5565b91506137d382613792565b602082019050919050565b600060208201905081810360008301526137f7816137bb565b9050919050565b60008151905061380d81612fd8565b92915050565b60006020828403121561382957613828612f9c565b5b6000613837848285016137fe565b91505092915050565b600060408201905061385560008301856131be565b61386260208301846131be565b9392505050565b6000819050919050565b6000819050919050565b600061389861389361388e84613869565b613873565b613004565b9050919050565b6138a88161387d565b82525050565b600060c0820190506138c360008301896131be565b6138d060208301886130dd565b6138dd604083018761389f565b6138ea606083018661389f565b6138f760808301856131be565b61390460a08301846130dd565b979650505050505050565b60008151905061391e8161300e565b92915050565b60008060006060848603121561393d5761393c612f9c565b5b600061394b8682870161390f565b935050602061395c8682870161390f565b925050604061396d8682870161390f565b9150509250925092565b600060408201905061398c60008301856131be565b61399960208301846130dd565b9392505050565b6000815190506139af816131e8565b92915050565b6000602082840312156139cb576139ca612f9c565b5b60006139d9848285016139a0565b91505092915050565b60006139ed82613004565b91506139f883613004565b9250828201905080821115613a1057613a0f6135c3565b5b92915050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e31250000600082015250565b6000613a4c601e83612ef5565b9150613a5782613a16565b602082019050919050565b60006020820190508181036000830152613a7b81613a3f565b9050919050565b6000604082019050613a9760008301856131be565b613aa46020830184613086565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613b07602583612ef5565b9150613b1282613aab565b604082019050919050565b60006020820190508181036000830152613b3681613afa565b9050919050565b6000604082019050613b5260008301856130dd565b613b5f60208301846130dd565b9392505050565b7f4c61756e6368206d6f646520697320616c72656164792064697361626c656400600082015250565b6000613b9c601f83612ef5565b9150613ba782613b66565b602082019050919050565b60006020820190508181036000830152613bcb81613b8f565b9050919050565b7f496e76616c696420627579207461782076616c75650000000000000000000000600082015250565b6000613c08601583612ef5565b9150613c1382613bd2565b602082019050919050565b60006020820190508181036000830152613c3781613bfb565b9050919050565b7f496e76616c69642073656c6c207461782076616c756500000000000000000000600082015250565b6000613c74601683612ef5565b9150613c7f82613c3e565b602082019050919050565b60006020820190508181036000830152613ca381613c67565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613ce482613004565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d1657613d156135c3565b5b600182019050919050565b6000613d3c613d37613d3284612fa6565b613873565b612fa6565b9050919050565b6000613d4e82613d21565b9050919050565b6000613d6082613d43565b9050919050565b613d7081613d55565b82525050565b6000602082019050613d8b6000830184613d67565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ded602683612ef5565b9150613df882613d91565b604082019050919050565b60006020820190508181036000830152613e1c81613de0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e7f602483612ef5565b9150613e8a82613e23565b604082019050919050565b60006020820190508181036000830152613eae81613e72565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f11602283612ef5565b9150613f1c82613eb5565b604082019050919050565b60006020820190508181036000830152613f4081613f04565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613fa3602583612ef5565b9150613fae82613f47565b604082019050919050565b60006020820190508181036000830152613fd281613f96565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614035602383612ef5565b915061404082613fd9565b604082019050919050565b6000602082019050818103600083015261406481614028565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006140c7602983612ef5565b91506140d28261406b565b604082019050919050565b600060208201905081810360008301526140f6816140ba565b9050919050565b50565b600061410d600083612ef5565b9150614118826140fd565b600082019050919050565b6000602082019050818103600083015261413c81614100565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e0000000000600082015250565b6000614179601b83612ef5565b915061418482614143565b602082019050919050565b600060208201905081810360008301526141a88161416c565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b60006141e5601a83612ef5565b91506141f0826141af565b602082019050919050565b60006020820190508181036000830152614214816141d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61427f81612fc6565b82525050565b60006142918383614276565b60208301905092915050565b6000602082019050919050565b60006142b58261424a565b6142bf8185614255565b93506142ca83614266565b8060005b838110156142fb5781516142e28882614285565b97506142ed8361429d565b9250506001810190506142ce565b5085935050505092915050565b600060a08201905061431d60008301886130dd565b61432a602083018761389f565b818103604083015261433c81866142aa565b905061434b60608301856131be565b61435860808301846130dd565b9695505050505050565b600081905092915050565b600061437a600083614362565b9150614385826140fd565b600082019050919050565b600061439b8261436d565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614401602683612ef5565b915061440c826143a5565b604082019050919050565b60006020820190508181036000830152614430816143f4565b9050919050565b600061444282613004565b915061444d83613004565b9250828203905081811115614465576144646135c3565b5b9291505056fea2646970667358221220f7e081823c94501784ae9709900e037d62f9089e339062d75115d592e8792e0264736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101a05760003560e01c80638da5cb5b116100ec578063ae6014801161008a578063cb3cff5011610064578063cb3cff5014610578578063dd62ed3e146105a1578063ea414b28146105de578063f2fde38b14610607576101a7565b8063ae60148014610508578063c2d4c5b114610538578063c647b20e1461054f576101a7565b806395d89b41116100c657806395d89b411461043a578063a457c2d714610465578063a8a59e55146104a2578063a9059cbb146104cb576101a7565b80638da5cb5b146103cf5780638e090333146103fa5780638f937cc414610423576101a7565b8063293230b81161015957806370a082311161013357806370a082311461033b578063715018a614610378578063751039fc1461038f578063778c6152146103a6576101a7565b8063293230b8146102bc578063313ce567146102d357806339509351146102fe576101a7565b806306fdde03146101ac578063095ea7b3146101d75780630b006d60146102145780630f299cf11461023d57806318160ddd1461025457806323b872dd1461027f576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101c1610630565b6040516101ce9190612f7a565b60405180910390f35b3480156101e357600080fd5b506101fe60048036038101906101f9919061303a565b6106c2565b60405161020b9190613095565b60405180910390f35b34801561022057600080fd5b5061023b600480360381019061023691906130b0565b6106e0565b005b34801561024957600080fd5b50610252610802565b005b34801561026057600080fd5b506102696108fd565b60405161027691906130ec565b60405180910390f35b34801561028b57600080fd5b506102a660048036038101906102a19190613107565b610907565b6040516102b39190613095565b60405180910390f35b3480156102c857600080fd5b506102d16109ff565b005b3480156102df57600080fd5b506102e8610fbd565b6040516102f59190613176565b60405180910390f35b34801561030a57600080fd5b506103256004803603810190610320919061303a565b610fc6565b6040516103329190613095565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d9190613191565b611072565b60405161036f91906130ec565b60405180910390f35b34801561038457600080fd5b5061038d6110ba565b005b34801561039b57600080fd5b506103a4611142565b005b3480156103b257600080fd5b506103cd60048036038101906103c891906130b0565b611258565b005b3480156103db57600080fd5b506103e461137a565b6040516103f191906131cd565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c9190613214565b6113a4565b005b34801561042f57600080fd5b506104386114b4565b005b34801561044657600080fd5b5061044f6115b2565b60405161045c9190612f7a565b60405180910390f35b34801561047157600080fd5b5061048c6004803603810190610487919061303a565b611644565b6040516104999190613095565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c49190613254565b61172f565b005b3480156104d757600080fd5b506104f260048036038101906104ed919061303a565b611834565b6040516104ff9190613095565b60405180910390f35b34801561051457600080fd5b5061051d611852565b60405161052f96959493929190613294565b60405180910390f35b34801561054457600080fd5b5061054d611881565b005b34801561055b57600080fd5b5061057660048036038101906105719190613254565b611979565b005b34801561058457600080fd5b5061059f600480360381019061059a919061335a565b611ac8565b005b3480156105ad57600080fd5b506105c860048036038101906105c391906133ba565b611be9565b6040516105d591906130ec565b60405180910390f35b3480156105ea57600080fd5b5061060560048036038101906106009190613438565b611c70565b005b34801561061357600080fd5b5061062e60048036038101906106299190613191565b611d67565b005b60606003805461063f90613494565b80601f016020809104026020016040519081016040528092919081815260200182805461066b90613494565b80156106b85780601f1061068d576101008083540402835291602001916106b8565b820191906000526020600020905b81548152906001019060200180831161069b57829003601f168201915b5050505050905090565b60006106d66106cf611e5e565b8484611e66565b6001905092915050565b6106e8611e5e565b73ffffffffffffffffffffffffffffffffffffffff1661070661137a565b73ffffffffffffffffffffffffffffffffffffffff161461075c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075390613511565b60405180910390fd5b60018110156107a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610797906135a3565b60405180910390fd5b6103e8816107ac6108fd565b6107b691906135f2565b6107c09190613663565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f546040516107f791906130ec565b60405180910390a150565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610889906136e0565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156108fa573d6000803e3d6000fd5b50565b6000600254905090565b600061091484848461202f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061095f611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156109df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d690613772565b60405180910390fd5b6109f3856109eb611e5e565b858403611e66565b60019150509392505050565b610a07611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610a2561137a565b73ffffffffffffffffffffffffffffffffffffffff1614610a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7290613511565b60405180910390fd5b601360149054906101000a900460ff1615610acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac2906137de565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610b5430601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610b4f6108fd565b611e66565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be59190613813565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c929190613813565b6040518363ffffffff1660e01b8152600401610caf929190613840565b6020604051808303816000875af1158015610cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf29190613813565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610d7b30611072565b600080610d8661137a565b426040518863ffffffff1660e01b8152600401610da8969594939291906138ae565b60606040518083038185885af1158015610dc6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610deb9190613924565b505050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610e8d929190613977565b6020604051808303816000875af1158015610eac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed091906139b5565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff0219169083151502179055504360088190555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b60006012905090565b6000611068610fd3611e5e565b848460016000610fe1611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461106391906139e2565b611e66565b6001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110c2611e5e565b73ffffffffffffffffffffffffffffffffffffffff166110e061137a565b73ffffffffffffffffffffffffffffffffffffffff1614611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d90613511565b60405180910390fd5b61114060006127f8565b565b61114a611e5e565b73ffffffffffffffffffffffffffffffffffffffff1661116861137a565b73ffffffffffffffffffffffffffffffffffffffff16146111be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b590613511565b60405180910390fd5b6111c66108fd565b600e819055506111d46108fd565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6112036108fd565b60405161121091906130ec565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e0016112416108fd565b60405161124e91906130ec565b60405180910390a1565b611260611e5e565b73ffffffffffffffffffffffffffffffffffffffff1661127e61137a565b73ffffffffffffffffffffffffffffffffffffffff16146112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb90613511565b60405180910390fd5b6001811015611318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130f90613a62565b60405180910390fd5b6103e8816113246108fd565b61132e91906135f2565b6113389190613663565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e5460405161136f91906130ec565b60405180910390a150565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113ac611e5e565b73ffffffffffffffffffffffffffffffffffffffff166113ca61137a565b73ffffffffffffffffffffffffffffffffffffffff1614611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790613511565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa982826040516114a8929190613a82565b60405180910390a15050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611542575061151361137a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611581576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611578906136e0565b60405180910390fd5b600061158c30611072565b9050611597816128be565b600047905060008111156115ae576115ad612b60565b5b5050565b6060600480546115c190613494565b80601f01602080910402602001604051908101604052809291908181526020018280546115ed90613494565b801561163a5780601f1061160f5761010080835404028352916020019161163a565b820191906000526020600020905b81548152906001019060200180831161161d57829003601f168201915b5050505050905090565b60008060016000611653611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170790613b1d565b60405180910390fd5b61172461171b611e5e565b85858403611e66565b600191505092915050565b611737611e5e565b73ffffffffffffffffffffffffffffffffffffffff1661175561137a565b73ffffffffffffffffffffffffffffffffffffffff16146117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a290613511565b60405180910390fd5b612710826117b76108fd565b6117c191906135f2565b6117cb9190613663565b601081905550612710816117dd6108fd565b6117e791906135f2565b6117f19190613663565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb18282604051611828929190613b3d565b60405180910390a15050565b6000611848611841611e5e565b848461202f565b6001905092915050565b600080600080600080600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b611889611e5e565b73ffffffffffffffffffffffffffffffffffffffff166118a761137a565b73ffffffffffffffffffffffffffffffffffffffff16146118fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f490613511565b60405180910390fd5b601360179054906101000a900460ff1661194c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194390613bb2565b60405180910390fd5b6019600a819055506019600b819055506000601360176101000a81548160ff021916908315150217905550565b611981611e5e565b73ffffffffffffffffffffffffffffffffffffffff1661199f61137a565b73ffffffffffffffffffffffffffffffffffffffff16146119f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ec90613511565b60405180910390fd5b6063821115611a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3090613c1e565b60405180910390fd5b6063811115611a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7490613c8a565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a18282604051611abc929190613b3d565b60405180910390a15050565b611ad0611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611aee61137a565b73ffffffffffffffffffffffffffffffffffffffff1614611b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3b90613511565b60405180910390fd5b60005b83839050811015611be3578160146000868685818110611b6a57611b69613caa565b5b9050602002016020810190611b7f9190613191565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611bdb90613cd9565b915050611b47565b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c78611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611c9661137a565b73ffffffffffffffffffffffffffffffffffffffff1614611cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce390613511565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee81604051611d5c9190613d76565b60405180910390a150565b611d6f611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611d8d61137a565b73ffffffffffffffffffffffffffffffffffffffff1614611de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dda90613511565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4990613e03565b60405180910390fd5b611e5b816127f8565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc90613e95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b90613f27565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161202291906130ec565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361209e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209590613fb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361210d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121049061404b565b60405180910390fd5b60008111612150576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612147906140dd565b60405180910390fd5b600061215a61137a565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156121c8575061219861137a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156121e15750601360159054906101000a900460ff16155b156127c057601360179054906101000a900460ff16156122dc57601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061229c5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6122db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d290614123565b60405180910390fd5b5b61230460646122f6600a5485612bf390919063ffffffff16565b612c0990919063ffffffff16565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156123b15750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156124075750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124ec57600e54821115612451576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124489061418f565b60405180910390fd5b600f548261245e85611072565b61246891906139e2565b11156124a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a0906141fb565b60405180910390fd5b4360036008546124b991906139e2565b11156124d3576124c883612c1f565b156124d257600080fd5b5b600d60008154809291906124e690613cd9565b91905055505b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125945750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125f257600f54826125a685611072565b6125b091906139e2565b11156125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e8906141fb565b60405180910390fd5b5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561267b57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156126ab576126a8606461269a600b5485612bf390919063ffffffff16565b612c0990919063ffffffff16565b90505b60006126b630611072565b9050601360159054906101000a900460ff161580156127225750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b801561273a5750601360169054906101000a900460ff165b8015612747575060105481115b80156127565750600c54600d54115b801561278c57504367ffffffffffffffff16600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b156127be576127a56127a082601154612c32565b6128be565b600047905060008111156127bc576127bb612b60565b5b505b505b60008111156127d5576127d4843083612c4b565b5b6127f284846127ed8486612eca90919063ffffffff16565b612c4b565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff02191690831515021790555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600267ffffffffffffffff81111561291f5761291e61421b565b5b60405190808252806020026020018201604052801561294d5781602001602082028036833780820191505090505b509050308160008151811061296557612964613caa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a309190613813565b81600181518110612a4457612a43613caa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612aab30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611e66565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612b0f959493929190614308565b600060405180830381600087803b158015612b2957600080fd5b505af1158015612b3d573d6000803e3d6000fd5b50505050506000601360156101000a81548160ff02191690831515021790555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ba890614390565b60006040518083038185875af1925050503d8060008114612be5576040519150601f19603f3d011682016040523d82523d6000602084013e612bea565b606091505b50508091505050565b60008183612c0191906135f2565b905092915050565b60008183612c179190613663565b905092915050565b600080823b905060008111915050919050565b6000818311612c415782612c43565b815b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb190613fb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d209061404b565b60405180910390fd5b612d34838383612ee0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db190614417565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e4d91906139e2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612eb191906130ec565b60405180910390a3612ec4848484612ee5565b50505050565b60008183612ed89190614437565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f24578082015181840152602081019050612f09565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f4c82612eea565b612f568185612ef5565b9350612f66818560208601612f06565b612f6f81612f30565b840191505092915050565b60006020820190508181036000830152612f948184612f41565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fd182612fa6565b9050919050565b612fe181612fc6565b8114612fec57600080fd5b50565b600081359050612ffe81612fd8565b92915050565b6000819050919050565b61301781613004565b811461302257600080fd5b50565b6000813590506130348161300e565b92915050565b6000806040838503121561305157613050612f9c565b5b600061305f85828601612fef565b925050602061307085828601613025565b9150509250929050565b60008115159050919050565b61308f8161307a565b82525050565b60006020820190506130aa6000830184613086565b92915050565b6000602082840312156130c6576130c5612f9c565b5b60006130d484828501613025565b91505092915050565b6130e681613004565b82525050565b600060208201905061310160008301846130dd565b92915050565b6000806000606084860312156131205761311f612f9c565b5b600061312e86828701612fef565b935050602061313f86828701612fef565b925050604061315086828701613025565b9150509250925092565b600060ff82169050919050565b6131708161315a565b82525050565b600060208201905061318b6000830184613167565b92915050565b6000602082840312156131a7576131a6612f9c565b5b60006131b584828501612fef565b91505092915050565b6131c781612fc6565b82525050565b60006020820190506131e260008301846131be565b92915050565b6131f18161307a565b81146131fc57600080fd5b50565b60008135905061320e816131e8565b92915050565b6000806040838503121561322b5761322a612f9c565b5b600061323985828601612fef565b925050602061324a858286016131ff565b9150509250929050565b6000806040838503121561326b5761326a612f9c565b5b600061327985828601613025565b925050602061328a85828601613025565b9150509250929050565b600060c0820190506132a960008301896130dd565b6132b660208301886130dd565b6132c360408301876130dd565b6132d060608301866130dd565b6132dd60808301856130dd565b6132ea60a08301846130dd565b979650505050505050565b600080fd5b600080fd5b600080fd5b60008083601f84011261331a576133196132f5565b5b8235905067ffffffffffffffff811115613337576133366132fa565b5b602083019150836020820283011115613353576133526132ff565b5b9250929050565b60008060006040848603121561337357613372612f9c565b5b600084013567ffffffffffffffff81111561339157613390612fa1565b5b61339d86828701613304565b935093505060206133b0868287016131ff565b9150509250925092565b600080604083850312156133d1576133d0612f9c565b5b60006133df85828601612fef565b92505060206133f085828601612fef565b9150509250929050565b600061340582612fa6565b9050919050565b613415816133fa565b811461342057600080fd5b50565b6000813590506134328161340c565b92915050565b60006020828403121561344e5761344d612f9c565b5b600061345c84828501613423565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806134ac57607f821691505b6020821081036134bf576134be613465565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006134fb602083612ef5565b9150613506826134c5565b602082019050919050565b6000602082019050818103600083015261352a816134ee565b9050919050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e60008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b600061358d602283612ef5565b915061359882613531565b604082019050919050565b600060208201905081810360008301526135bc81613580565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006135fd82613004565b915061360883613004565b925082820261361681613004565b9150828204841483151761362d5761362c6135c3565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061366e82613004565b915061367983613004565b92508261368957613688613634565b5b828204905092915050565b7f4f6e6c79206665652072656365697665722063616e2074726967676572000000600082015250565b60006136ca601d83612ef5565b91506136d582613694565b602082019050919050565b600060208201905081810360008301526136f9816136bd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061375c602883612ef5565b915061376782613700565b604082019050919050565b6000602082019050818103600083015261378b8161374f565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b60006137c8601783612ef5565b91506137d382613792565b602082019050919050565b600060208201905081810360008301526137f7816137bb565b9050919050565b60008151905061380d81612fd8565b92915050565b60006020828403121561382957613828612f9c565b5b6000613837848285016137fe565b91505092915050565b600060408201905061385560008301856131be565b61386260208301846131be565b9392505050565b6000819050919050565b6000819050919050565b600061389861389361388e84613869565b613873565b613004565b9050919050565b6138a88161387d565b82525050565b600060c0820190506138c360008301896131be565b6138d060208301886130dd565b6138dd604083018761389f565b6138ea606083018661389f565b6138f760808301856131be565b61390460a08301846130dd565b979650505050505050565b60008151905061391e8161300e565b92915050565b60008060006060848603121561393d5761393c612f9c565b5b600061394b8682870161390f565b935050602061395c8682870161390f565b925050604061396d8682870161390f565b9150509250925092565b600060408201905061398c60008301856131be565b61399960208301846130dd565b9392505050565b6000815190506139af816131e8565b92915050565b6000602082840312156139cb576139ca612f9c565b5b60006139d9848285016139a0565b91505092915050565b60006139ed82613004565b91506139f883613004565b9250828201905080821115613a1057613a0f6135c3565b5b92915050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e31250000600082015250565b6000613a4c601e83612ef5565b9150613a5782613a16565b602082019050919050565b60006020820190508181036000830152613a7b81613a3f565b9050919050565b6000604082019050613a9760008301856131be565b613aa46020830184613086565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613b07602583612ef5565b9150613b1282613aab565b604082019050919050565b60006020820190508181036000830152613b3681613afa565b9050919050565b6000604082019050613b5260008301856130dd565b613b5f60208301846130dd565b9392505050565b7f4c61756e6368206d6f646520697320616c72656164792064697361626c656400600082015250565b6000613b9c601f83612ef5565b9150613ba782613b66565b602082019050919050565b60006020820190508181036000830152613bcb81613b8f565b9050919050565b7f496e76616c696420627579207461782076616c75650000000000000000000000600082015250565b6000613c08601583612ef5565b9150613c1382613bd2565b602082019050919050565b60006020820190508181036000830152613c3781613bfb565b9050919050565b7f496e76616c69642073656c6c207461782076616c756500000000000000000000600082015250565b6000613c74601683612ef5565b9150613c7f82613c3e565b602082019050919050565b60006020820190508181036000830152613ca381613c67565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613ce482613004565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d1657613d156135c3565b5b600182019050919050565b6000613d3c613d37613d3284612fa6565b613873565b612fa6565b9050919050565b6000613d4e82613d21565b9050919050565b6000613d6082613d43565b9050919050565b613d7081613d55565b82525050565b6000602082019050613d8b6000830184613d67565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ded602683612ef5565b9150613df882613d91565b604082019050919050565b60006020820190508181036000830152613e1c81613de0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e7f602483612ef5565b9150613e8a82613e23565b604082019050919050565b60006020820190508181036000830152613eae81613e72565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f11602283612ef5565b9150613f1c82613eb5565b604082019050919050565b60006020820190508181036000830152613f4081613f04565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613fa3602583612ef5565b9150613fae82613f47565b604082019050919050565b60006020820190508181036000830152613fd281613f96565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614035602383612ef5565b915061404082613fd9565b604082019050919050565b6000602082019050818103600083015261406481614028565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006140c7602983612ef5565b91506140d28261406b565b604082019050919050565b600060208201905081810360008301526140f6816140ba565b9050919050565b50565b600061410d600083612ef5565b9150614118826140fd565b600082019050919050565b6000602082019050818103600083015261413c81614100565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e0000000000600082015250565b6000614179601b83612ef5565b915061418482614143565b602082019050919050565b600060208201905081810360008301526141a88161416c565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b60006141e5601a83612ef5565b91506141f0826141af565b602082019050919050565b60006020820190508181036000830152614214816141d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61427f81612fc6565b82525050565b60006142918383614276565b60208301905092915050565b6000602082019050919050565b60006142b58261424a565b6142bf8185614255565b93506142ca83614266565b8060005b838110156142fb5781516142e28882614285565b97506142ed8361429d565b9250506001810190506142ce565b5085935050505092915050565b600060a08201905061431d60008301886130dd565b61432a602083018761389f565b818103604083015261433c81866142aa565b905061434b60608301856131be565b61435860808301846130dd565b9695505050505050565b600081905092915050565b600061437a600083614362565b9150614385826140fd565b600082019050919050565b600061439b8261436d565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614401602683612ef5565b915061440c826143a5565b604082019050919050565b60006020820190508181036000830152614430816143f4565b9050919050565b600061444282613004565b915061444d83613004565b9250828203905081811115614465576144646135c3565b5b9291505056fea2646970667358221220f7e081823c94501784ae9709900e037d62f9089e339062d75115d592e8792e0264736f6c63430008130033

Deployed Bytecode Sourcemap

25409:9739:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11007:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13240:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28836:264;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30196:173;;;;;;;;;;;;;:::i;:::-;;12127:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13912:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27422:987;;;;;;;;;;;;;:::i;:::-;;11969:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14846:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12298:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22346:103;;;;;;;;;;;;;:::i;:::-;;29641:239;;;;;;;;;;;;;:::i;:::-;;28584:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21695:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30593:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33991:436;;;;;;;;;;;;;:::i;:::-;;11226:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15635:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29108:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12654:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30776:491;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;29437:196;;;;;;;;;;;;;:::i;:::-;;29888:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30377:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12917:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28417:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22604:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11007:100;11061:13;11094:5;11087:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11007:100;:::o;13240:194::-;13348:4;13365:39;13374:12;:10;:12::i;:::-;13388:7;13397:6;13365:8;:39::i;:::-;13422:4;13415:11;;13240:194;;;;:::o;28836:264::-;21926:12;:10;:12::i;:::-;21915:23;;:7;:5;:7::i;:::-;:23;;;21907:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28929:1:::1;28917:8;:13;;28909:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;29030:4;29018:8;29002:13;:11;:13::i;:::-;:24;;;;:::i;:::-;29001:33;;;;:::i;:::-;28980:18;:54;;;;29050:42;29073:18;;29050:42;;;;;;:::i;:::-;;;;;;;;28836:264:::0;:::o;30196:173::-;30264:10;;;;;;;;;;;30250:24;;:10;:24;;;30242:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30319:10;;;;;;;;;;;:19;;:42;30339:21;30319:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30196:173::o;12127:108::-;12188:7;12215:12;;12208:19;;12127:108;:::o;13912:529::-;14052:4;14069:36;14079:6;14087:9;14098:6;14069:9;:36::i;:::-;14118:24;14145:11;:19;14157:6;14145:19;;;;;;;;;;;;;;;:33;14165:12;:10;:12::i;:::-;14145:33;;;;;;;;;;;;;;;;14118:60;;14231:6;14211:16;:26;;14189:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14341:57;14350:6;14358:12;:10;:12::i;:::-;14391:6;14372:16;:25;14341:8;:57::i;:::-;14429:4;14422:11;;;13912:529;;;;;:::o;27422:987::-;21926:12;:10;:12::i;:::-;21915:23;;:7;:5;:7::i;:::-;:23;;;21907:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27485:11:::1;;;;;;;;;;;27484:12;27476:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27578:42;27535:15;;:96;;;;;;;;;;;;;;;;;;27642:64;27659:4;27674:15;;;;;;;;;;;27692:13;:11;:13::i;:::-;27642:8;:64::i;:::-;27745:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27733:49;;;27805:4;27825:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27733:125;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27717:13;;:141;;;;;;;;;;;;;;;;;;27869:15;;;;;;;;;;;:31;;;27908:21;27953:4;27973:24;27991:4;27973:9;:24::i;:::-;28012:1;28028::::0;28044:7:::1;:5;:7::i;:::-;28066:15;27869:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28110:13;;;;;;;;;;;28103:29;;;28141:15;;;;;;;;;;;28159:14;28103:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28199:4;28185:11;;:18;;;;;;;;;;;;;;;;;;28228:4;28214:11;;:18;;;;;;;;;;;;;;;;;;28256:12;28243:10;:25;;;;28304:12;28279:15;;:38;;;;;;;;;;;;;;;;;;28364:4;28328:18;:33;28355:4;28328:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;28386:15;;;;;;;;;;27422:987::o:0;11969:93::-;12027:5;12052:2;12045:9;;11969:93;:::o;14846:290::-;14959:4;14976:130;14999:12;:10;:12::i;:::-;15026:7;15085:10;15048:11;:25;15060:12;:10;:12::i;:::-;15048:25;;;;;;;;;;;;;;;:34;15074:7;15048:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14976:8;:130::i;:::-;15124:4;15117:11;;14846:290;;;;:::o;12298:143::-;12388:7;12415:9;:18;12425:7;12415:18;;;;;;;;;;;;;;;;12408:25;;12298:143;;;:::o;22346:103::-;21926:12;:10;:12::i;:::-;21915:23;;:7;:5;:7::i;:::-;:23;;;21907:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22411:30:::1;22438:1;22411:18;:30::i;:::-;22346:103::o:0;29641:239::-;21926:12;:10;:12::i;:::-;21915:23;;:7;:5;:7::i;:::-;:23;;;21907:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29712:13:::1;:11;:13::i;:::-;29695:14;:30;;;;29757:13;:11;:13::i;:::-;29736:18;:34;;;;29786:33;29805:13;:11;:13::i;:::-;29786:33;;;;;;:::i;:::-;;;;;;;;29835:37;29858:13;:11;:13::i;:::-;29835:37;;;;;;:::i;:::-;;;;;;;;29641:239::o:0;28584:244::-;21926:12;:10;:12::i;:::-;21915:23;;:7;:5;:7::i;:::-;:23;;;21907:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28673:1:::1;28661:8;:13;;28653:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28766:4;28754:8;28738:13;:11;:13::i;:::-;:24;;;;:::i;:::-;28737:33;;;;:::i;:::-;28720:14;:50;;;;28786:34;28805:14;;28786:34;;;;;;:::i;:::-;;;;;;;;28584:244:::0;:::o;21695:87::-;21741:7;21768:6;;;;;;;;;;;21761:13;;21695:87;:::o;30593:175::-;21926:12;:10;:12::i;:::-;21915:23;;:7;:5;:7::i;:::-;:23;;;21907:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30706:6:::1;30676:18;:27;30695:7;30676:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;30728:32;30744:7;30753:6;30728:32;;;;;;;:::i;:::-;;;;;;;;30593:175:::0;;:::o;33991:436::-;34070:10;;;;;;;;;;;34056:24;;:10;:24;;;:49;;;;34098:7;:5;:7::i;:::-;34084:21;;:10;:21;;;34056:49;34034:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;34173:28;34204:24;34222:4;34204:9;:24::i;:::-;34173:55;;34241:38;34258:20;34241:16;:38::i;:::-;34290:26;34319:21;34290:50;;34376:1;34355:18;:22;34351:69;;;34394:14;:12;:14::i;:::-;34351:69;34023:404;;33991:436::o;11226:104::-;11282:13;11315:7;11308:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11226:104;:::o;15635:475::-;15753:4;15770:24;15797:11;:25;15809:12;:10;:12::i;:::-;15797:25;;;;;;;;;;;;;;;:34;15823:7;15797:34;;;;;;;;;;;;;;;;15770:61;;15884:15;15864:16;:35;;15842:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;16000:67;16009:12;:10;:12::i;:::-;16023:7;16051:15;16032:16;:34;16000:8;:67::i;:::-;16098:4;16091:11;;;15635:475;;;;:::o;29108:321::-;21926:12;:10;:12::i;:::-;21915:23;;:7;:5;:7::i;:::-;:23;;;21907:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29293:5:::1;29273:16;29257:13;:11;:13::i;:::-;:32;;;;:::i;:::-;29256:42;;;;:::i;:::-;29241:12;:57;;;;29355:5;29341:10;29325:13;:11;:13::i;:::-;:26;;;;:::i;:::-;29324:36;;;;:::i;:::-;29309:12;:51;;;;29376:45;29392:16;29410:10;29376:45;;;;;;;:::i;:::-;;;;;;;;29108:321:::0;;:::o;12654:200::-;12765:4;12782:42;12792:12;:10;:12::i;:::-;12806:9;12817:6;12782:9;:42::i;:::-;12842:4;12835:11;;12654:200;;;;:::o;30776:491::-;30860:14;30889:15;30919:19;30953:21;30989:24;31028:18;31096:10;;31121:11;;31147:14;;31176:18;;31209:12;;31236;;31074:185;;;;;;;;;;;;30776:491;;;;;;:::o;29437:196::-;21926:12;:10;:12::i;:::-;21915:23;;:7;:5;:7::i;:::-;:23;;;21907:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29497:10:::1;;;;;;;;;;;29489:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;29567:2;29554:10;:15;;;;29594:2;29580:11;:16;;;;29620:5;29607:10;;:18;;;;;;;;;;;;;;;;;;29437:196::o:0;29888:300::-;21926:12;:10;:12::i;:::-;21915:23;;:7;:5;:7::i;:::-;:23;;;21907:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29987:2:::1;29977:6;:12;;29969:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;30045:2;30034:7;:13;;30026:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;30098:6;30085:10;:19;;;;30129:7;30115:11;:21;;;;30152:28;30164:6;30172:7;30152:28;;;;;;;:::i;:::-;;;;;;;;29888:300:::0;;:::o;30377:208::-;21926:12;:10;:12::i;:::-;21915:23;;:7;:5;:7::i;:::-;:23;;;21907:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30490:9:::1;30485:93;30509:4;;:11;;30505:1;:15;30485:93;;;30560:6;30542;:15;30549:4;;30554:1;30549:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30542:15;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;30522:3;;;;;:::i;:::-;;;;30485:93;;;;30377:208:::0;;;:::o;12917:176::-;13031:7;13058:11;:18;13070:5;13058:18;;;;;;;;;;;;;;;:27;13077:7;13058:27;;;;;;;;;;;;;;;;13051:34;;12917:176;;;;:::o;28417:159::-;21926:12;:10;:12::i;:::-;21915:23;;:7;:5;:7::i;:::-;:23;;;21907:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28510:10:::1;28497;;:23;;;;;;;;;;;;;;;;;;28538:30;28557:10;28538:30;;;;;;:::i;:::-;;;;;;;;28417:159:::0;:::o;22604:238::-;21926:12;:10;:12::i;:::-;21915:23;;:7;:5;:7::i;:::-;:23;;;21907:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22727:1:::1;22707:22;;:8;:22;;::::0;22685:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22806:28;22825:8;22806:18;:28::i;:::-;22604:238:::0;:::o;10013:98::-;10066:7;10093:10;10086:17;;10013:98;:::o;19418:380::-;19571:1;19554:19;;:5;:19;;;19546:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19652:1;19633:21;;:7;:21;;;19625:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19736:6;19706:11;:18;19718:5;19706:18;;;;;;;;;;;;;;;:27;19725:7;19706:27;;;;;;;;;;;;;;;:36;;;;19774:7;19758:32;;19767:5;19758:32;;;19783:6;19758:32;;;;;;:::i;:::-;;;;;;;;19418:380;;;:::o;31275:2390::-;31423:1;31407:18;;:4;:18;;;31399:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31500:1;31486:16;;:2;:16;;;31478:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31570:1;31561:6;:10;31553:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31628:17;31672:7;:5;:7::i;:::-;31664:15;;:4;:15;;;;:32;;;;;31689:7;:5;:7::i;:::-;31683:13;;:2;:13;;;;31664:32;:43;;;;;31701:6;;;;;;;;;;;31700:7;31664:43;31660:1834;;;31728:10;;;;;;;;;;;31724:89;;;31766:6;:12;31773:4;31766:12;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;;31782:6;:10;31789:2;31782:10;;;;;;;;;;;;;;;;;;;;;;;;;31766:26;31758:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;31724:89;31841:31;31868:3;31841:22;31852:10;;31841:6;:10;;:22;;;;:::i;:::-;:26;;:31;;;;:::i;:::-;31829:43;;31919:13;;;;;;;;;;;31911:21;;:4;:21;;;:72;;;;;31967:15;;;;;;;;;;;31953:30;;:2;:30;;;;31911:72;:116;;;;;32005:18;:22;32024:2;32005:22;;;;;;;;;;;;;;;;;;;;;;;;;32004:23;31911:116;31889:568;;;32080:14;;32070:6;:24;;32062:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32201:18;;32191:6;32175:13;32185:2;32175:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;32145:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32331:12;32327:1;32314:10;;:14;;;;:::i;:::-;:29;32310:102;;;32377:14;32388:2;32377:10;:14::i;:::-;32376:15;32368:24;;;;;;32310:102;32430:9;;:11;;;;;;;;;:::i;:::-;;;;;;31889:568;32483:13;;;;;;;;;;;32477:19;;:2;:19;;;;:46;;;;;32501:18;:22;32520:2;32501:22;;;;;;;;;;;;;;;;;;;;;;;;;32500:23;32477:46;32473:231;;;32600:18;;32590:6;32574:13;32584:2;32574:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;32544:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32473:231;32730:13;;;;;;;;;;;32724:19;;:2;:19;;;:44;;;;;32763:4;32747:21;;:4;:21;;;;32724:44;32720:129;;;32801:32;32829:3;32801:23;32812:11;;32801:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;32789:44;;32720:129;32865:28;32896:24;32914:4;32896:9;:24::i;:::-;32865:55;;32958:6;;;;;;;;;;;32957:7;:47;;;;;32991:13;;;;;;;;;;;32985:19;;:2;:19;;;32957:47;:79;;;;;33025:11;;;;;;;;;;;32957:79;:135;;;;;33080:12;;33057:20;:35;32957:135;:186;;;;;33125:18;;33113:9;;:30;32957:186;:246;;;;;33190:12;33164:39;;:15;;;;;;;;;;;:39;;;;32957:246;32935:548;;;33238:57;33255:39;33259:20;33281:12;;33255:3;:39::i;:::-;33238:16;:57::i;:::-;33314:26;33343:21;33314:50;;33408:1;33387:18;:22;33383:85;;;33434:14;:12;:14::i;:::-;33383:85;33219:264;32935:548;31709:1785;31660:1834;33522:1;33510:9;:13;33506:93;;;33540:47;33556:4;33570;33577:9;33540:15;:47::i;:::-;33506:93;33609:48;33625:4;33631:2;33635:21;33646:9;33635:6;:10;;:21;;;;:::i;:::-;33609:15;:48::i;:::-;31388:2277;31275:2390;;;:::o;23002:191::-;23076:16;23095:6;;;;;;;;;;;23076:25;;23121:8;23112:6;;:17;;;;;;;;;;;;;;;;;;23176:8;23145:40;;23166:8;23145:40;;;;;;;;;;;;23065:128;23002:191;:::o;34435:532::-;26680:4;26671:6;;:13;;;;;;;;;;;;;;;;;;34538:12:::1;34513:15;;:38;;;;;;;;;;;;;;;;;;34562:21;34600:1;34586:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34562:40;;34631:4;34613;34618:1;34613:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;34657:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34647:4;34652:1;34647:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;34690:62;34707:4;34722:15;;;;;;;;;;;34740:11;34690:8;:62::i;:::-;34763:15;;;;;;;;;;;:66;;;34844:11;34870:1;34886:4;34913;34933:15;34763:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34502:465;26716:5:::0;26707:6;;:14;;;;;;;;;;;;;;;;;;34435:532;:::o;34975:170::-;35018:12;35063:10;;;;;;;;;;;35055:24;;35087:21;35055:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35041:96;;;;;35007:138;34975:170::o;3372:98::-;3430:7;3461:1;3457;:5;;;;:::i;:::-;3450:12;;3372:98;;;;:::o;3771:::-;3829:7;3860:1;3856;:5;;;;:::i;:::-;3849:12;;3771:98;;;;:::o;33788:195::-;33847:4;33864:12;33931:7;33919:20;33911:28;;33974:1;33967:4;:8;33960:15;;;33788:195;;;:::o;33673:107::-;33730:7;33762:1;33758;:5;33757:15;;33771:1;33757:15;;;33767:1;33757:15;33750:22;;33673:107;;;;:::o;16600:770::-;16758:1;16740:20;;:6;:20;;;16732:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16842:1;16821:23;;:9;:23;;;16813:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16897:47;16918:6;16926:9;16937:6;16897:20;:47::i;:::-;16957:21;16981:9;:17;16991:6;16981:17;;;;;;;;;;;;;;;;16957:41;;17048:6;17031:13;:23;;17009:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17192:6;17176:13;:22;17156:9;:17;17166:6;17156:17;;;;;;;;;;;;;;;:42;;;;17244:6;17220:9;:20;17230:9;17220:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17285:9;17268:35;;17277:6;17268:35;;;17296:6;17268:35;;;;;;:::i;:::-;;;;;;;;17316:46;17336:6;17344:9;17355:6;17316:19;:46::i;:::-;16721:649;16600:770;;;:::o;3015:98::-;3073:7;3104:1;3100;:5;;;;:::i;:::-;3093:12;;3015:98;;;;:::o;20398:125::-;;;;:::o;21127:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:86::-;4793:7;4833:4;4826:5;4822:16;4811:27;;4758:86;;;:::o;4850:112::-;4933:22;4949:5;4933:22;:::i;:::-;4928:3;4921:35;4850:112;;:::o;4968:214::-;5057:4;5095:2;5084:9;5080:18;5072:26;;5108:67;5172:1;5161:9;5157:17;5148:6;5108:67;:::i;:::-;4968:214;;;;:::o;5188:329::-;5247:6;5296:2;5284:9;5275:7;5271:23;5267:32;5264:119;;;5302:79;;:::i;:::-;5264:119;5422:1;5447:53;5492:7;5483:6;5472:9;5468:22;5447:53;:::i;:::-;5437:63;;5393:117;5188:329;;;;:::o;5523:118::-;5610:24;5628:5;5610:24;:::i;:::-;5605:3;5598:37;5523:118;;:::o;5647:222::-;5740:4;5778:2;5767:9;5763:18;5755:26;;5791:71;5859:1;5848:9;5844:17;5835:6;5791:71;:::i;:::-;5647:222;;;;:::o;5875:116::-;5945:21;5960:5;5945:21;:::i;:::-;5938:5;5935:32;5925:60;;5981:1;5978;5971:12;5925:60;5875:116;:::o;5997:133::-;6040:5;6078:6;6065:20;6056:29;;6094:30;6118:5;6094:30;:::i;:::-;5997:133;;;;:::o;6136:468::-;6201:6;6209;6258:2;6246:9;6237:7;6233:23;6229:32;6226:119;;;6264:79;;:::i;:::-;6226:119;6384:1;6409:53;6454:7;6445:6;6434:9;6430:22;6409:53;:::i;:::-;6399:63;;6355:117;6511:2;6537:50;6579:7;6570:6;6559:9;6555:22;6537:50;:::i;:::-;6527:60;;6482:115;6136:468;;;;;:::o;6610:474::-;6678:6;6686;6735:2;6723:9;6714:7;6710:23;6706:32;6703:119;;;6741:79;;:::i;:::-;6703:119;6861:1;6886:53;6931:7;6922:6;6911:9;6907:22;6886:53;:::i;:::-;6876:63;;6832:117;6988:2;7014:53;7059:7;7050:6;7039:9;7035:22;7014:53;:::i;:::-;7004:63;;6959:118;6610:474;;;;;:::o;7090:775::-;7323:4;7361:3;7350:9;7346:19;7338:27;;7375:71;7443:1;7432:9;7428:17;7419:6;7375:71;:::i;:::-;7456:72;7524:2;7513:9;7509:18;7500:6;7456:72;:::i;:::-;7538;7606:2;7595:9;7591:18;7582:6;7538:72;:::i;:::-;7620;7688:2;7677:9;7673:18;7664:6;7620:72;:::i;:::-;7702:73;7770:3;7759:9;7755:19;7746:6;7702:73;:::i;:::-;7785;7853:3;7842:9;7838:19;7829:6;7785:73;:::i;:::-;7090:775;;;;;;;;;:::o;7871:117::-;7980:1;7977;7970:12;7994:117;8103:1;8100;8093:12;8117:117;8226:1;8223;8216:12;8257:568;8330:8;8340:6;8390:3;8383:4;8375:6;8371:17;8367:27;8357:122;;8398:79;;:::i;:::-;8357:122;8511:6;8498:20;8488:30;;8541:18;8533:6;8530:30;8527:117;;;8563:79;;:::i;:::-;8527:117;8677:4;8669:6;8665:17;8653:29;;8731:3;8723:4;8715:6;8711:17;8701:8;8697:32;8694:41;8691:128;;;8738:79;;:::i;:::-;8691:128;8257:568;;;;;:::o;8831:698::-;8923:6;8931;8939;8988:2;8976:9;8967:7;8963:23;8959:32;8956:119;;;8994:79;;:::i;:::-;8956:119;9142:1;9131:9;9127:17;9114:31;9172:18;9164:6;9161:30;9158:117;;;9194:79;;:::i;:::-;9158:117;9307:80;9379:7;9370:6;9359:9;9355:22;9307:80;:::i;:::-;9289:98;;;;9085:312;9436:2;9462:50;9504:7;9495:6;9484:9;9480:22;9462:50;:::i;:::-;9452:60;;9407:115;8831:698;;;;;:::o;9535:474::-;9603:6;9611;9660:2;9648:9;9639:7;9635:23;9631:32;9628:119;;;9666:79;;:::i;:::-;9628:119;9786:1;9811:53;9856:7;9847:6;9836:9;9832:22;9811:53;:::i;:::-;9801:63;;9757:117;9913:2;9939:53;9984:7;9975:6;9964:9;9960:22;9939:53;:::i;:::-;9929:63;;9884:118;9535:474;;;;;:::o;10015:104::-;10060:7;10089:24;10107:5;10089:24;:::i;:::-;10078:35;;10015:104;;;:::o;10125:138::-;10206:32;10232:5;10206:32;:::i;:::-;10199:5;10196:43;10186:71;;10253:1;10250;10243:12;10186:71;10125:138;:::o;10269:155::-;10323:5;10361:6;10348:20;10339:29;;10377:41;10412:5;10377:41;:::i;:::-;10269:155;;;;:::o;10430:345::-;10497:6;10546:2;10534:9;10525:7;10521:23;10517:32;10514:119;;;10552:79;;:::i;:::-;10514:119;10672:1;10697:61;10750:7;10741:6;10730:9;10726:22;10697:61;:::i;:::-;10687:71;;10643:125;10430:345;;;;:::o;10781:180::-;10829:77;10826:1;10819:88;10926:4;10923:1;10916:15;10950:4;10947:1;10940:15;10967:320;11011:6;11048:1;11042:4;11038:12;11028:22;;11095:1;11089:4;11085:12;11116:18;11106:81;;11172:4;11164:6;11160:17;11150:27;;11106:81;11234:2;11226:6;11223:14;11203:18;11200:38;11197:84;;11253:18;;:::i;:::-;11197:84;11018:269;10967:320;;;:::o;11293:182::-;11433:34;11429:1;11421:6;11417:14;11410:58;11293:182;:::o;11481:366::-;11623:3;11644:67;11708:2;11703:3;11644:67;:::i;:::-;11637:74;;11720:93;11809:3;11720:93;:::i;:::-;11838:2;11833:3;11829:12;11822:19;;11481:366;;;:::o;11853:419::-;12019:4;12057:2;12046:9;12042:18;12034:26;;12106:9;12100:4;12096:20;12092:1;12081:9;12077:17;12070:47;12134:131;12260:4;12134:131;:::i;:::-;12126:139;;11853:419;;;:::o;12278:221::-;12418:34;12414:1;12406:6;12402:14;12395:58;12487:4;12482:2;12474:6;12470:15;12463:29;12278:221;:::o;12505:366::-;12647:3;12668:67;12732:2;12727:3;12668:67;:::i;:::-;12661:74;;12744:93;12833:3;12744:93;:::i;:::-;12862:2;12857:3;12853:12;12846:19;;12505:366;;;:::o;12877:419::-;13043:4;13081:2;13070:9;13066:18;13058:26;;13130:9;13124:4;13120:20;13116:1;13105:9;13101:17;13094:47;13158:131;13284:4;13158:131;:::i;:::-;13150:139;;12877:419;;;:::o;13302:180::-;13350:77;13347:1;13340:88;13447:4;13444:1;13437:15;13471:4;13468:1;13461:15;13488:410;13528:7;13551:20;13569:1;13551:20;:::i;:::-;13546:25;;13585:20;13603:1;13585:20;:::i;:::-;13580:25;;13640:1;13637;13633:9;13662:30;13680:11;13662:30;:::i;:::-;13651:41;;13841:1;13832:7;13828:15;13825:1;13822:22;13802:1;13795:9;13775:83;13752:139;;13871:18;;:::i;:::-;13752:139;13536:362;13488:410;;;;:::o;13904:180::-;13952:77;13949:1;13942:88;14049:4;14046:1;14039:15;14073:4;14070:1;14063:15;14090:185;14130:1;14147:20;14165:1;14147:20;:::i;:::-;14142:25;;14181:20;14199:1;14181:20;:::i;:::-;14176:25;;14220:1;14210:35;;14225:18;;:::i;:::-;14210:35;14267:1;14264;14260:9;14255:14;;14090:185;;;;:::o;14281:179::-;14421:31;14417:1;14409:6;14405:14;14398:55;14281:179;:::o;14466:366::-;14608:3;14629:67;14693:2;14688:3;14629:67;:::i;:::-;14622:74;;14705:93;14794:3;14705:93;:::i;:::-;14823:2;14818:3;14814:12;14807:19;;14466:366;;;:::o;14838:419::-;15004:4;15042:2;15031:9;15027:18;15019:26;;15091:9;15085:4;15081:20;15077:1;15066:9;15062:17;15055:47;15119:131;15245:4;15119:131;:::i;:::-;15111:139;;14838:419;;;:::o;15263:227::-;15403:34;15399:1;15391:6;15387:14;15380:58;15472:10;15467:2;15459:6;15455:15;15448:35;15263:227;:::o;15496:366::-;15638:3;15659:67;15723:2;15718:3;15659:67;:::i;:::-;15652:74;;15735:93;15824:3;15735:93;:::i;:::-;15853:2;15848:3;15844:12;15837:19;;15496:366;;;:::o;15868:419::-;16034:4;16072:2;16061:9;16057:18;16049:26;;16121:9;16115:4;16111:20;16107:1;16096:9;16092:17;16085:47;16149:131;16275:4;16149:131;:::i;:::-;16141:139;;15868:419;;;:::o;16293:173::-;16433:25;16429:1;16421:6;16417:14;16410:49;16293:173;:::o;16472:366::-;16614:3;16635:67;16699:2;16694:3;16635:67;:::i;:::-;16628:74;;16711:93;16800:3;16711:93;:::i;:::-;16829:2;16824:3;16820:12;16813:19;;16472:366;;;:::o;16844:419::-;17010:4;17048:2;17037:9;17033:18;17025:26;;17097:9;17091:4;17087:20;17083:1;17072:9;17068:17;17061:47;17125:131;17251:4;17125:131;:::i;:::-;17117:139;;16844:419;;;:::o;17269:143::-;17326:5;17357:6;17351:13;17342:22;;17373:33;17400:5;17373:33;:::i;:::-;17269:143;;;;:::o;17418:351::-;17488:6;17537:2;17525:9;17516:7;17512:23;17508:32;17505:119;;;17543:79;;:::i;:::-;17505:119;17663:1;17688:64;17744:7;17735:6;17724:9;17720:22;17688:64;:::i;:::-;17678:74;;17634:128;17418:351;;;;:::o;17775:332::-;17896:4;17934:2;17923:9;17919:18;17911:26;;17947:71;18015:1;18004:9;18000:17;17991:6;17947:71;:::i;:::-;18028:72;18096:2;18085:9;18081:18;18072:6;18028:72;:::i;:::-;17775:332;;;;;:::o;18113:85::-;18158:7;18187:5;18176:16;;18113:85;;;:::o;18204:60::-;18232:3;18253:5;18246:12;;18204:60;;;:::o;18270:158::-;18328:9;18361:61;18379:42;18388:32;18414:5;18388:32;:::i;:::-;18379:42;:::i;:::-;18361:61;:::i;:::-;18348:74;;18270:158;;;:::o;18434:147::-;18529:45;18568:5;18529:45;:::i;:::-;18524:3;18517:58;18434:147;;:::o;18587:807::-;18836:4;18874:3;18863:9;18859:19;18851:27;;18888:71;18956:1;18945:9;18941:17;18932:6;18888:71;:::i;:::-;18969:72;19037:2;19026:9;19022:18;19013:6;18969:72;:::i;:::-;19051:80;19127:2;19116:9;19112:18;19103:6;19051:80;:::i;:::-;19141;19217:2;19206:9;19202:18;19193:6;19141:80;:::i;:::-;19231:73;19299:3;19288:9;19284:19;19275:6;19231:73;:::i;:::-;19314;19382:3;19371:9;19367:19;19358:6;19314:73;:::i;:::-;18587:807;;;;;;;;;:::o;19400:143::-;19457:5;19488:6;19482:13;19473:22;;19504:33;19531:5;19504:33;:::i;:::-;19400:143;;;;:::o;19549:663::-;19637:6;19645;19653;19702:2;19690:9;19681:7;19677:23;19673:32;19670:119;;;19708:79;;:::i;:::-;19670:119;19828:1;19853:64;19909:7;19900:6;19889:9;19885:22;19853:64;:::i;:::-;19843:74;;19799:128;19966:2;19992:64;20048:7;20039:6;20028:9;20024:22;19992:64;:::i;:::-;19982:74;;19937:129;20105:2;20131:64;20187:7;20178:6;20167:9;20163:22;20131:64;:::i;:::-;20121:74;;20076:129;19549:663;;;;;:::o;20218:332::-;20339:4;20377:2;20366:9;20362:18;20354:26;;20390:71;20458:1;20447:9;20443:17;20434:6;20390:71;:::i;:::-;20471:72;20539:2;20528:9;20524:18;20515:6;20471:72;:::i;:::-;20218:332;;;;;:::o;20556:137::-;20610:5;20641:6;20635:13;20626:22;;20657:30;20681:5;20657:30;:::i;:::-;20556:137;;;;:::o;20699:345::-;20766:6;20815:2;20803:9;20794:7;20790:23;20786:32;20783:119;;;20821:79;;:::i;:::-;20783:119;20941:1;20966:61;21019:7;21010:6;20999:9;20995:22;20966:61;:::i;:::-;20956:71;;20912:125;20699:345;;;;:::o;21050:191::-;21090:3;21109:20;21127:1;21109:20;:::i;:::-;21104:25;;21143:20;21161:1;21143:20;:::i;:::-;21138:25;;21186:1;21183;21179:9;21172:16;;21207:3;21204:1;21201:10;21198:36;;;21214:18;;:::i;:::-;21198:36;21050:191;;;;:::o;21247:180::-;21387:32;21383:1;21375:6;21371:14;21364:56;21247:180;:::o;21433:366::-;21575:3;21596:67;21660:2;21655:3;21596:67;:::i;:::-;21589:74;;21672:93;21761:3;21672:93;:::i;:::-;21790:2;21785:3;21781:12;21774:19;;21433:366;;;:::o;21805:419::-;21971:4;22009:2;21998:9;21994:18;21986:26;;22058:9;22052:4;22048:20;22044:1;22033:9;22029:17;22022:47;22086:131;22212:4;22086:131;:::i;:::-;22078:139;;21805:419;;;:::o;22230:320::-;22345:4;22383:2;22372:9;22368:18;22360:26;;22396:71;22464:1;22453:9;22449:17;22440:6;22396:71;:::i;:::-;22477:66;22539:2;22528:9;22524:18;22515:6;22477:66;:::i;:::-;22230:320;;;;;:::o;22556:224::-;22696:34;22692:1;22684:6;22680:14;22673:58;22765:7;22760:2;22752:6;22748:15;22741:32;22556:224;:::o;22786:366::-;22928:3;22949:67;23013:2;23008:3;22949:67;:::i;:::-;22942:74;;23025:93;23114:3;23025:93;:::i;:::-;23143:2;23138:3;23134:12;23127:19;;22786:366;;;:::o;23158:419::-;23324:4;23362:2;23351:9;23347:18;23339:26;;23411:9;23405:4;23401:20;23397:1;23386:9;23382:17;23375:47;23439:131;23565:4;23439:131;:::i;:::-;23431:139;;23158:419;;;:::o;23583:332::-;23704:4;23742:2;23731:9;23727:18;23719:26;;23755:71;23823:1;23812:9;23808:17;23799:6;23755:71;:::i;:::-;23836:72;23904:2;23893:9;23889:18;23880:6;23836:72;:::i;:::-;23583:332;;;;;:::o;23921:181::-;24061:33;24057:1;24049:6;24045:14;24038:57;23921:181;:::o;24108:366::-;24250:3;24271:67;24335:2;24330:3;24271:67;:::i;:::-;24264:74;;24347:93;24436:3;24347:93;:::i;:::-;24465:2;24460:3;24456:12;24449:19;;24108:366;;;:::o;24480:419::-;24646:4;24684:2;24673:9;24669:18;24661:26;;24733:9;24727:4;24723:20;24719:1;24708:9;24704:17;24697:47;24761:131;24887:4;24761:131;:::i;:::-;24753:139;;24480:419;;;:::o;24905:171::-;25045:23;25041:1;25033:6;25029:14;25022:47;24905:171;:::o;25082:366::-;25224:3;25245:67;25309:2;25304:3;25245:67;:::i;:::-;25238:74;;25321:93;25410:3;25321:93;:::i;:::-;25439:2;25434:3;25430:12;25423:19;;25082:366;;;:::o;25454:419::-;25620:4;25658:2;25647:9;25643:18;25635:26;;25707:9;25701:4;25697:20;25693:1;25682:9;25678:17;25671:47;25735:131;25861:4;25735:131;:::i;:::-;25727:139;;25454:419;;;:::o;25879:172::-;26019:24;26015:1;26007:6;26003:14;25996:48;25879:172;:::o;26057:366::-;26199:3;26220:67;26284:2;26279:3;26220:67;:::i;:::-;26213:74;;26296:93;26385:3;26296:93;:::i;:::-;26414:2;26409:3;26405:12;26398:19;;26057:366;;;:::o;26429:419::-;26595:4;26633:2;26622:9;26618:18;26610:26;;26682:9;26676:4;26672:20;26668:1;26657:9;26653:17;26646:47;26710:131;26836:4;26710:131;:::i;:::-;26702:139;;26429:419;;;:::o;26854:180::-;26902:77;26899:1;26892:88;26999:4;26996:1;26989:15;27023:4;27020:1;27013:15;27040:233;27079:3;27102:24;27120:5;27102:24;:::i;:::-;27093:33;;27148:66;27141:5;27138:77;27135:103;;27218:18;;:::i;:::-;27135:103;27265:1;27258:5;27254:13;27247:20;;27040:233;;;:::o;27279:142::-;27329:9;27362:53;27380:34;27389:24;27407:5;27389:24;:::i;:::-;27380:34;:::i;:::-;27362:53;:::i;:::-;27349:66;;27279:142;;;:::o;27427:126::-;27477:9;27510:37;27541:5;27510:37;:::i;:::-;27497:50;;27427:126;;;:::o;27559:134::-;27617:9;27650:37;27681:5;27650:37;:::i;:::-;27637:50;;27559:134;;;:::o;27699:147::-;27794:45;27833:5;27794:45;:::i;:::-;27789:3;27782:58;27699:147;;:::o;27852:238::-;27953:4;27991:2;27980:9;27976:18;27968:26;;28004:79;28080:1;28069:9;28065:17;28056:6;28004:79;:::i;:::-;27852:238;;;;:::o;28096:225::-;28236:34;28232:1;28224:6;28220:14;28213:58;28305:8;28300:2;28292:6;28288:15;28281:33;28096:225;:::o;28327:366::-;28469:3;28490:67;28554:2;28549:3;28490:67;:::i;:::-;28483:74;;28566:93;28655:3;28566:93;:::i;:::-;28684:2;28679:3;28675:12;28668:19;;28327:366;;;:::o;28699:419::-;28865:4;28903:2;28892:9;28888:18;28880:26;;28952:9;28946:4;28942:20;28938:1;28927:9;28923:17;28916:47;28980:131;29106:4;28980:131;:::i;:::-;28972:139;;28699:419;;;:::o;29124:223::-;29264:34;29260:1;29252:6;29248:14;29241:58;29333:6;29328:2;29320:6;29316:15;29309:31;29124:223;:::o;29353:366::-;29495:3;29516:67;29580:2;29575:3;29516:67;:::i;:::-;29509:74;;29592:93;29681:3;29592:93;:::i;:::-;29710:2;29705:3;29701:12;29694:19;;29353:366;;;:::o;29725:419::-;29891:4;29929:2;29918:9;29914:18;29906:26;;29978:9;29972:4;29968:20;29964:1;29953:9;29949:17;29942:47;30006:131;30132:4;30006:131;:::i;:::-;29998:139;;29725:419;;;:::o;30150:221::-;30290:34;30286:1;30278:6;30274:14;30267:58;30359:4;30354:2;30346:6;30342:15;30335:29;30150:221;:::o;30377:366::-;30519:3;30540:67;30604:2;30599:3;30540:67;:::i;:::-;30533:74;;30616:93;30705:3;30616:93;:::i;:::-;30734:2;30729:3;30725:12;30718:19;;30377:366;;;:::o;30749:419::-;30915:4;30953:2;30942:9;30938:18;30930:26;;31002:9;30996:4;30992:20;30988:1;30977:9;30973:17;30966:47;31030:131;31156:4;31030:131;:::i;:::-;31022:139;;30749:419;;;:::o;31174:224::-;31314:34;31310:1;31302:6;31298:14;31291:58;31383:7;31378:2;31370:6;31366:15;31359:32;31174:224;:::o;31404:366::-;31546:3;31567:67;31631:2;31626:3;31567:67;:::i;:::-;31560:74;;31643:93;31732:3;31643:93;:::i;:::-;31761:2;31756:3;31752:12;31745:19;;31404:366;;;:::o;31776:419::-;31942:4;31980:2;31969:9;31965:18;31957:26;;32029:9;32023:4;32019:20;32015:1;32004:9;32000:17;31993:47;32057:131;32183:4;32057:131;:::i;:::-;32049:139;;31776:419;;;:::o;32201:222::-;32341:34;32337:1;32329:6;32325:14;32318:58;32410:5;32405:2;32397:6;32393:15;32386:30;32201:222;:::o;32429:366::-;32571:3;32592:67;32656:2;32651:3;32592:67;:::i;:::-;32585:74;;32668:93;32757:3;32668:93;:::i;:::-;32786:2;32781:3;32777:12;32770:19;;32429:366;;;:::o;32801:419::-;32967:4;33005:2;32994:9;32990:18;32982:26;;33054:9;33048:4;33044:20;33040:1;33029:9;33025:17;33018:47;33082:131;33208:4;33082:131;:::i;:::-;33074:139;;32801:419;;;:::o;33226:228::-;33366:34;33362:1;33354:6;33350:14;33343:58;33435:11;33430:2;33422:6;33418:15;33411:36;33226:228;:::o;33460:366::-;33602:3;33623:67;33687:2;33682:3;33623:67;:::i;:::-;33616:74;;33699:93;33788:3;33699:93;:::i;:::-;33817:2;33812:3;33808:12;33801:19;;33460:366;;;:::o;33832:419::-;33998:4;34036:2;34025:9;34021:18;34013:26;;34085:9;34079:4;34075:20;34071:1;34060:9;34056:17;34049:47;34113:131;34239:4;34113:131;:::i;:::-;34105:139;;33832:419;;;:::o;34257:114::-;;:::o;34377:364::-;34519:3;34540:66;34604:1;34599:3;34540:66;:::i;:::-;34533:73;;34615:93;34704:3;34615:93;:::i;:::-;34733:1;34728:3;34724:11;34717:18;;34377:364;;;:::o;34747:419::-;34913:4;34951:2;34940:9;34936:18;34928:26;;35000:9;34994:4;34990:20;34986:1;34975:9;34971:17;34964:47;35028:131;35154:4;35028:131;:::i;:::-;35020:139;;34747:419;;;:::o;35172:177::-;35312:29;35308:1;35300:6;35296:14;35289:53;35172:177;:::o;35355:366::-;35497:3;35518:67;35582:2;35577:3;35518:67;:::i;:::-;35511:74;;35594:93;35683:3;35594:93;:::i;:::-;35712:2;35707:3;35703:12;35696:19;;35355:366;;;:::o;35727:419::-;35893:4;35931:2;35920:9;35916:18;35908:26;;35980:9;35974:4;35970:20;35966:1;35955:9;35951:17;35944:47;36008:131;36134:4;36008:131;:::i;:::-;36000:139;;35727:419;;;:::o;36152:176::-;36292:28;36288:1;36280:6;36276:14;36269:52;36152:176;:::o;36334:366::-;36476:3;36497:67;36561:2;36556:3;36497:67;:::i;:::-;36490:74;;36573:93;36662:3;36573:93;:::i;:::-;36691:2;36686:3;36682:12;36675:19;;36334:366;;;:::o;36706:419::-;36872:4;36910:2;36899:9;36895:18;36887:26;;36959:9;36953:4;36949:20;36945:1;36934:9;36930:17;36923:47;36987:131;37113:4;36987:131;:::i;:::-;36979:139;;36706:419;;;:::o;37131:180::-;37179:77;37176:1;37169:88;37276:4;37273:1;37266:15;37300:4;37297:1;37290:15;37317:114;37384:6;37418:5;37412:12;37402:22;;37317:114;;;:::o;37437:184::-;37536:11;37570:6;37565:3;37558:19;37610:4;37605:3;37601:14;37586:29;;37437:184;;;;:::o;37627:132::-;37694:4;37717:3;37709:11;;37747:4;37742:3;37738:14;37730:22;;37627:132;;;:::o;37765:108::-;37842:24;37860:5;37842:24;:::i;:::-;37837:3;37830:37;37765:108;;:::o;37879:179::-;37948:10;37969:46;38011:3;38003:6;37969:46;:::i;:::-;38047:4;38042:3;38038:14;38024:28;;37879:179;;;;:::o;38064:113::-;38134:4;38166;38161:3;38157:14;38149:22;;38064:113;;;:::o;38213:732::-;38332:3;38361:54;38409:5;38361:54;:::i;:::-;38431:86;38510:6;38505:3;38431:86;:::i;:::-;38424:93;;38541:56;38591:5;38541:56;:::i;:::-;38620:7;38651:1;38636:284;38661:6;38658:1;38655:13;38636:284;;;38737:6;38731:13;38764:63;38823:3;38808:13;38764:63;:::i;:::-;38757:70;;38850:60;38903:6;38850:60;:::i;:::-;38840:70;;38696:224;38683:1;38680;38676:9;38671:14;;38636:284;;;38640:14;38936:3;38929:10;;38337:608;;;38213:732;;;;:::o;38951:831::-;39214:4;39252:3;39241:9;39237:19;39229:27;;39266:71;39334:1;39323:9;39319:17;39310:6;39266:71;:::i;:::-;39347:80;39423:2;39412:9;39408:18;39399:6;39347:80;:::i;:::-;39474:9;39468:4;39464:20;39459:2;39448:9;39444:18;39437:48;39502:108;39605:4;39596:6;39502:108;:::i;:::-;39494:116;;39620:72;39688:2;39677:9;39673:18;39664:6;39620:72;:::i;:::-;39702:73;39770:3;39759:9;39755:19;39746:6;39702:73;:::i;:::-;38951:831;;;;;;;;:::o;39788:147::-;39889:11;39926:3;39911:18;;39788:147;;;;:::o;39941:398::-;40100:3;40121:83;40202:1;40197:3;40121:83;:::i;:::-;40114:90;;40213:93;40302:3;40213:93;:::i;:::-;40331:1;40326:3;40322:11;40315:18;;39941:398;;;:::o;40345:379::-;40529:3;40551:147;40694:3;40551:147;:::i;:::-;40544:154;;40715:3;40708:10;;40345:379;;;:::o;40730:225::-;40870:34;40866:1;40858:6;40854:14;40847:58;40939:8;40934:2;40926:6;40922:15;40915:33;40730:225;:::o;40961:366::-;41103:3;41124:67;41188:2;41183:3;41124:67;:::i;:::-;41117:74;;41200:93;41289:3;41200:93;:::i;:::-;41318:2;41313:3;41309:12;41302:19;;40961:366;;;:::o;41333:419::-;41499:4;41537:2;41526:9;41522:18;41514:26;;41586:9;41580:4;41576:20;41572:1;41561:9;41557:17;41550:47;41614:131;41740:4;41614:131;:::i;:::-;41606:139;;41333:419;;;:::o;41758:194::-;41798:4;41818:20;41836:1;41818:20;:::i;:::-;41813:25;;41852:20;41870:1;41852:20;:::i;:::-;41847:25;;41896:1;41893;41889:9;41881:17;;41920:1;41914:4;41911:11;41908:37;;;41925:18;;:::i;:::-;41908:37;41758:194;;;;:::o

Swarm Source

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