ETH Price: $2,418.69 (-1.21%)

Token

Prawn Inu (Prawn)
 

Overview

Max Total Supply

1,000,000,000 Prawn

Holders

10

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
15,847,018.379848169329494106 Prawn

Value
$0.00
0x567cf7713D04f8F3671450145C5a25BBd319361D
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:
PrawnInu

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-06
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.15;

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

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

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

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

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

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

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

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

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 Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. 
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of 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 Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

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

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the 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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _createSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

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

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

/**
 * @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() {
        _setOwner(_msgSender());
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SignedSafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SignedSafeMath {
    /**
     * @dev Returns the multiplication of two signed integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        return a * b;
    }

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

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

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

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow
 * checks.
 *
 * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can
 * easily result in undesired exploitation or bugs, since developers usually
 * assume that overflows raise errors. `SafeCast` restores this intuition by
 * reverting the transaction when such an operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 *
 * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing
 * all math on `uint256` and `int256` and then downcasting.
 */
library SafeCast {
    /**
     * @dev Returns the downcasted uint224 from uint256, reverting on
     * overflow (when the input is greater than largest uint224).
     *
     * Counterpart to Solidity's `uint224` operator.
     *
     * Requirements:
     *
     * - input must fit into 224 bits
     */
    function toUint224(uint256 value) internal pure returns (uint224) {
        require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits");
        return uint224(value);
    }

    /**
     * @dev Returns the downcasted uint128 from uint256, reverting on
     * overflow (when the input is greater than largest uint128).
     *
     * Counterpart to Solidity's `uint128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     */
    function toUint128(uint256 value) internal pure returns (uint128) {
        require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits");
        return uint128(value);
    }

    /**
     * @dev Returns the downcasted uint96 from uint256, reverting on
     * overflow (when the input is greater than largest uint96).
     *
     * Counterpart to Solidity's `uint96` operator.
     *
     * Requirements:
     *
     * - input must fit into 96 bits
     */
    function toUint96(uint256 value) internal pure returns (uint96) {
        require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits");
        return uint96(value);
    }

    /**
     * @dev Returns the downcasted uint64 from uint256, reverting on
     * overflow (when the input is greater than largest uint64).
     *
     * Counterpart to Solidity's `uint64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     */
    function toUint64(uint256 value) internal pure returns (uint64) {
        require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits");
        return uint64(value);
    }

    /**
     * @dev Returns the downcasted uint32 from uint256, reverting on
     * overflow (when the input is greater than largest uint32).
     *
     * Counterpart to Solidity's `uint32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     */
    function toUint32(uint256 value) internal pure returns (uint32) {
        require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits");
        return uint32(value);
    }

    /**
     * @dev Returns the downcasted uint16 from uint256, reverting on
     * overflow (when the input is greater than largest uint16).
     *
     * Counterpart to Solidity's `uint16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     */
    function toUint16(uint256 value) internal pure returns (uint16) {
        require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits");
        return uint16(value);
    }

    /**
     * @dev Returns the downcasted uint8 from uint256, reverting on
     * overflow (when the input is greater than largest uint8).
     *
     * Counterpart to Solidity's `uint8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits.
     */
    function toUint8(uint256 value) internal pure returns (uint8) {
        require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits");
        return uint8(value);
    }

    /**
     * @dev Converts a signed int256 into an unsigned uint256.
     *
     * Requirements:
     *
     * - input must be greater than or equal to 0.
     */
    function toUint256(int256 value) internal pure returns (uint256) {
        require(value >= 0, "SafeCast: value must be positive");
        return uint256(value);
    }

    /**
     * @dev Returns the downcasted int128 from int256, reverting on
     * overflow (when the input is less than smallest int128 or
     * greater than largest int128).
     *
     * Counterpart to Solidity's `int128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     *
     * _Available since v3.1._
     */
    function toInt128(int256 value) internal pure returns (int128) {
        require(value >= type(int128).min && value <= type(int128).max, "SafeCast: value doesn't fit in 128 bits");
        return int128(value);
    }

    /**
     * @dev Returns the downcasted int64 from int256, reverting on
     * overflow (when the input is less than smallest int64 or
     * greater than largest int64).
     *
     * Counterpart to Solidity's `int64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     *
     * _Available since v3.1._
     */
    function toInt64(int256 value) internal pure returns (int64) {
        require(value >= type(int64).min && value <= type(int64).max, "SafeCast: value doesn't fit in 64 bits");
        return int64(value);
    }

    /**
     * @dev Returns the downcasted int32 from int256, reverting on
     * overflow (when the input is less than smallest int32 or
     * greater than largest int32).
     *
     * Counterpart to Solidity's `int32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     *
     * _Available since v3.1._
     */
    function toInt32(int256 value) internal pure returns (int32) {
        require(value >= type(int32).min && value <= type(int32).max, "SafeCast: value doesn't fit in 32 bits");
        return int32(value);
    }

    /**
     * @dev Returns the downcasted int16 from int256, reverting on
     * overflow (when the input is less than smallest int16 or
     * greater than largest int16).
     *
     * Counterpart to Solidity's `int16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     *
     * _Available since v3.1._
     */
    function toInt16(int256 value) internal pure returns (int16) {
        require(value >= type(int16).min && value <= type(int16).max, "SafeCast: value doesn't fit in 16 bits");
        return int16(value);
    }

    /**
     * @dev Returns the downcasted int8 from int256, reverting on
     * overflow (when the input is less than smallest int8 or
     * greater than largest int8).
     *
     * Counterpart to Solidity's `int8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits.
     *
     * _Available since v3.1._
     */
    function toInt8(int256 value) internal pure returns (int8) {
        require(value >= type(int8).min && value <= type(int8).max, "SafeCast: value doesn't fit in 8 bits");
        return int8(value);
    }

    /**
     * @dev Converts an unsigned uint256 into a signed int256.
     *
     * Requirements:
     *
     * - input must be less than or equal to maxInt256.
     */
    function toInt256(uint256 value) internal pure returns (int256) {
        // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive
        require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256");
        return int256(value);
    }
}

contract PrawnInu is ERC20, Ownable {

    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 public maxTransactionAmount = 1000000000 * (10**18);
    uint256 public swapTokensAtAmount = 300000 * (10**18);

    uint256 public liquidityFee = 2;
    uint256 public marketingFee = 1;
    address payable public  marketingWallet = payable(0x310cfAb2EeB91E7df2D8742699641f16D44F999A);

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
   
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event GasForProcessingUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event SwapAndLiquifyEnabledUpdated(bool enabled);

    event SwapAndLiquify(
        uint256 tokensIntoLiqudity,
        uint256 ethReceived
    );

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor(address _owner) ERC20("Prawn Inu", "Prawn") {
    	IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        // exclude from paying fees or having max transaction amount
        excludeFromFees(_owner, true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(address(this), true);
        
        /*
            an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _createSupply(_owner, 1000000000 * (10**18));
    }

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

        if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
            require(amount <= maxTransactionAmount, "amount exceeds the maxTransactionAmount.");
        }

    	uint256 contractTokenBalance = balanceOf(address(this));
        
        bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount;
       
        if(
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            to == uniswapV2Pair && 
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = swapTokensAtAmount;
            swapAndLiquify(contractTokenBalance);
        }

         // if any account belongs to _isExcludedFromFee account then remove the fee
        if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
        	uint256 fees = amount.mul(liquidityFee.add(marketingFee)).div(100);
        	amount = amount.sub(fees);

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

        super._transfer(from, to, amount);

    }

     function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 tokensForLiquidity = contractTokenBalance.mul(liquidityFee).div(liquidityFee.add(marketingFee));
    
        // split the Liquidity token balance into halves
        uint256 half = tokensForLiquidity.div(2);
        uint256 otherHalf = tokensForLiquidity.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        // swap and Send to Marketing address
        swapTokensForEth(contractTokenBalance.sub(tokensForLiquidity));
        marketingWallet.transfer(address(this).balance);

        emit SwapAndLiquify(half, newBalance);
    }

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

        if(allowance(address(this), address(uniswapV2Router)) < tokenAmount) {
          _approve(address(this), address(uniswapV2Router), ~uint256(0));
        }

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

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

    function setFee(uint256 _liquidityFee, uint256 _marketingFee) public onlyOwner {
        require(_liquidityFee.add(_marketingFee) <= 10, "tax too high");
        liquidityFee = _liquidityFee;
        marketingFee = _marketingFee; 
    }

    function setMaxTransaction(uint256 _maxTxAmount) public onlyOwner {
        maxTransactionAmount = _maxTxAmount;
        require(maxTransactionAmount >= totalSupply().div(300), "value too high");
    }

     function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }
    
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    receive() external payable {

  	}
  
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"setMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526001600660156101000a81548160ff0219169083151502179055506b033b2e3c9fd0803ce8000000600755693f870857a3e0e380000060085560026009556001600a5573310cfab2eeb91e7df2d8742699641f16d44f999a600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000a957600080fd5b5060405162004041380380620040418339818101604052810190620000cf9190620008ad565b6040518060400160405280600981526020017f507261776e20496e7500000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f507261776e00000000000000000000000000000000000000000000000000000081525081600390816200014c919062000b59565b5080600490816200015e919062000b59565b5050506200018162000175620003fa60201b60201c565b6200040260201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020e9190620008ad565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000276573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029c9190620008ad565b6040518363ffffffff1660e01b8152600401620002bb92919062000c51565b6020604051808303816000875af1158015620002db573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003019190620008ad565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506200038b836001620004c860201b60201c565b620003c0600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620004c860201b60201c565b620003d3306001620004c860201b60201c565b620003f1836b033b2e3c9fd0803ce80000006200069760201b60201c565b50505062000eff565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620004d8620003fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004fe6200080f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000557576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200054e9062000cdf565b60405180910390fd5b801515600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503620005ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005e39062000d77565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200068b919062000db6565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000709576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007009062000e23565b60405180910390fd5b6200071d600083836200083960201b60201c565b806002600082825462000731919062000e74565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000788919062000e74565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620007ef919062000ee2565b60405180910390a36200080b600083836200083e60201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620008758262000848565b9050919050565b620008878162000868565b81146200089357600080fd5b50565b600081519050620008a7816200087c565b92915050565b600060208284031215620008c657620008c562000843565b5b6000620008d68482850162000896565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200096157607f821691505b60208210810362000977576200097662000919565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009e17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009a2565b620009ed8683620009a2565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a3a62000a3462000a2e8462000a05565b62000a0f565b62000a05565b9050919050565b6000819050919050565b62000a568362000a19565b62000a6e62000a658262000a41565b848454620009af565b825550505050565b600090565b62000a8562000a76565b62000a9281848462000a4b565b505050565b5b8181101562000aba5762000aae60008262000a7b565b60018101905062000a98565b5050565b601f82111562000b095762000ad3816200097d565b62000ade8462000992565b8101602085101562000aee578190505b62000b0662000afd8562000992565b83018262000a97565b50505b505050565b600082821c905092915050565b600062000b2e6000198460080262000b0e565b1980831691505092915050565b600062000b49838362000b1b565b9150826002028217905092915050565b62000b6482620008df565b67ffffffffffffffff81111562000b805762000b7f620008ea565b5b62000b8c825462000948565b62000b9982828562000abe565b600060209050601f83116001811462000bd1576000841562000bbc578287015190505b62000bc8858262000b3b565b86555062000c38565b601f19841662000be1866200097d565b60005b8281101562000c0b5784890151825560018201915060208501945060208101905062000be4565b8683101562000c2b578489015162000c27601f89168262000b1b565b8355505b6001600288020188555050505b505050505050565b62000c4b8162000868565b82525050565b600060408201905062000c68600083018562000c40565b62000c77602083018462000c40565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000cc760208362000c7e565b915062000cd48262000c8f565b602082019050919050565b6000602082019050818103600083015262000cfa8162000cb8565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b600062000d5f602a8362000c7e565b915062000d6c8262000d01565b604082019050919050565b6000602082019050818103600083015262000d928162000d50565b9050919050565b60008115159050919050565b62000db08162000d99565b82525050565b600060208201905062000dcd600083018462000da5565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e0b601f8362000c7e565b915062000e188262000dd3565b602082019050919050565b6000602082019050818103600083015262000e3e8162000dfc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e818262000a05565b915062000e8e8362000a05565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ec65762000ec562000e45565b5b828201905092915050565b62000edc8162000a05565b82525050565b600060208201905062000ef9600083018462000ed1565b92915050565b60805161311f62000f22600039600081816109360152611654015261311f6000f3fe6080604052600436106101a05760003560e01c8063715018a6116100ec578063ab5a18871161008a578063c8c8ebe411610064578063c8c8ebe4146105eb578063dd62ed3e14610616578063e2f4560514610653578063f2fde38b1461067e576101a7565b8063ab5a188714610570578063c024666814610599578063c49b9a80146105c2576101a7565b806395d89b41116100c657806395d89b41146104a057806398118cb4146104cb578063a457c2d7146104f6578063a9059cbb14610533576101a7565b8063715018a61461043357806375f0a8741461044a5780638da5cb5b14610475576101a7565b806339509351116101595780634fbee193116101335780634fbee1931461036557806352f7c988146103a25780636b67c4df146103cb57806370a08231146103f6576101a7565b806339509351146102d257806349bd5a5e1461030f5780634a74bb021461033a576101a7565b806306fdde03146101ac578063095ea7b3146101d75780631694505e1461021457806318160ddd1461023f57806323b872dd1461026a578063313ce567146102a7576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101c16106a7565b6040516101ce9190612101565b60405180910390f35b3480156101e357600080fd5b506101fe60048036038101906101f991906121bc565b610739565b60405161020b9190612217565b60405180910390f35b34801561022057600080fd5b50610229610757565b6040516102369190612291565b60405180910390f35b34801561024b57600080fd5b5061025461077d565b60405161026191906122bb565b60405180910390f35b34801561027657600080fd5b50610291600480360381019061028c91906122d6565b610787565b60405161029e9190612217565b60405180910390f35b3480156102b357600080fd5b506102bc61087f565b6040516102c99190612345565b60405180910390f35b3480156102de57600080fd5b506102f960048036038101906102f491906121bc565b610888565b6040516103069190612217565b60405180910390f35b34801561031b57600080fd5b50610324610934565b604051610331919061236f565b60405180910390f35b34801561034657600080fd5b5061034f610958565b60405161035c9190612217565b60405180910390f35b34801561037157600080fd5b5061038c6004803603810190610387919061238a565b61096b565b6040516103999190612217565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c491906123b7565b6109c1565b005b3480156103d757600080fd5b506103e0610aa5565b6040516103ed91906122bb565b60405180910390f35b34801561040257600080fd5b5061041d6004803603810190610418919061238a565b610aab565b60405161042a91906122bb565b60405180910390f35b34801561043f57600080fd5b50610448610af3565b005b34801561045657600080fd5b5061045f610b7b565b60405161046c9190612418565b60405180910390f35b34801561048157600080fd5b5061048a610ba1565b604051610497919061236f565b60405180910390f35b3480156104ac57600080fd5b506104b5610bcb565b6040516104c29190612101565b60405180910390f35b3480156104d757600080fd5b506104e0610c5d565b6040516104ed91906122bb565b60405180910390f35b34801561050257600080fd5b5061051d600480360381019061051891906121bc565b610c63565b60405161052a9190612217565b60405180910390f35b34801561053f57600080fd5b5061055a600480360381019061055591906121bc565b610d4e565b6040516105679190612217565b60405180910390f35b34801561057c57600080fd5b5061059760048036038101906105929190612433565b610d6c565b005b3480156105a557600080fd5b506105c060048036038101906105bb919061248c565b610e52565b005b3480156105ce57600080fd5b506105e960048036038101906105e491906124cc565b611009565b005b3480156105f757600080fd5b506106006110d9565b60405161060d91906122bb565b60405180910390f35b34801561062257600080fd5b5061063d600480360381019061063891906124f9565b6110df565b60405161064a91906122bb565b60405180910390f35b34801561065f57600080fd5b50610668611166565b60405161067591906122bb565b60405180910390f35b34801561068a57600080fd5b506106a560048036038101906106a0919061238a565b61116c565b005b6060600380546106b690612568565b80601f01602080910402602001604051908101604052809291908181526020018280546106e290612568565b801561072f5780601f106107045761010080835404028352916020019161072f565b820191906000526020600020905b81548152906001019060200180831161071257829003601f168201915b5050505050905090565b600061074d610746611263565b848461126b565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000610794848484611434565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107df611263565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561085f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108569061260b565b60405180910390fd5b6108738561086b611263565b85840361126b565b60019150509392505050565b60006012905090565b600061092a610895611263565b8484600160006108a3611263565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610925919061265a565b61126b565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600660159054906101000a900460ff1681565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6109c9611263565b73ffffffffffffffffffffffffffffffffffffffff166109e7610ba1565b73ffffffffffffffffffffffffffffffffffffffff1614610a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a34906126fc565b60405180910390fd5b600a610a5282846117f690919063ffffffff16565b1115610a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8a90612768565b60405180910390fd5b8160098190555080600a819055505050565b600a5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610afb611263565b73ffffffffffffffffffffffffffffffffffffffff16610b19610ba1565b73ffffffffffffffffffffffffffffffffffffffff1614610b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b66906126fc565b60405180910390fd5b610b79600061180c565b565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610bda90612568565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0690612568565b8015610c535780601f10610c2857610100808354040283529160200191610c53565b820191906000526020600020905b815481529060010190602001808311610c3657829003601f168201915b5050505050905090565b60095481565b60008060016000610c72611263565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d26906127fa565b60405180910390fd5b610d43610d3a611263565b8585840361126b565b600191505092915050565b6000610d62610d5b611263565b8484611434565b6001905092915050565b610d74611263565b73ffffffffffffffffffffffffffffffffffffffff16610d92610ba1565b73ffffffffffffffffffffffffffffffffffffffff1614610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf906126fc565b60405180910390fd5b80600781905550610e0b61012c610dfd61077d565b6118d290919063ffffffff16565b6007541015610e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4690612866565b60405180910390fd5b50565b610e5a611263565b73ffffffffffffffffffffffffffffffffffffffff16610e78610ba1565b73ffffffffffffffffffffffffffffffffffffffff1614610ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec5906126fc565b60405180910390fd5b801515600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f57906128f8565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610ffd9190612217565b60405180910390a25050565b611011611263565b73ffffffffffffffffffffffffffffffffffffffff1661102f610ba1565b73ffffffffffffffffffffffffffffffffffffffff1614611085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107c906126fc565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516110ce9190612217565b60405180910390a150565b60075481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b611174611263565b73ffffffffffffffffffffffffffffffffffffffff16611192610ba1565b73ffffffffffffffffffffffffffffffffffffffff16146111e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111df906126fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124e9061298a565b60405180910390fd5b6112608161180c565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d190612a1c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134090612aae565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161142791906122bb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149a90612b40565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150990612bd2565b60405180910390fd5b6000810361152b57611526838360006118e8565b6117f1565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156115cf5750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561161a57600754811115611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161090612c64565b60405180910390fd5b5b600061162530610aab565b90506000600854821015905080801561164b5750600660149054906101000a900460ff16155b80156116a257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156116ba5750600660159054906101000a900460ff165b156116ce5760085491506116cd82611b67565b5b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156117725750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156117e35760006117b560646117a7611798600a546009546117f690919063ffffffff16565b87611d0190919063ffffffff16565b6118d290919063ffffffff16565b90506117ca8185611d1790919063ffffffff16565b935060008111156117e1576117e08630836118e8565b5b505b6117ee8585856118e8565b50505b505050565b60008183611804919061265a565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836118e09190612cb3565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e90612b40565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bd90612bd2565b60405180910390fd5b6119d1838383611d2d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4e90612d56565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611aea919061265a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b4e91906122bb565b60405180910390a3611b61848484611d32565b50505050565b6001600660146101000a81548160ff0219169083151502179055506000611bc1611b9e600a546009546117f690919063ffffffff16565b611bb360095485611d0190919063ffffffff16565b6118d290919063ffffffff16565b90506000611bd96002836118d290919063ffffffff16565b90506000611bf08284611d1790919063ffffffff16565b90506000479050611c0083611d37565b6000611c158247611d1790919063ffffffff16565b9050611c218382611fb0565b611c3c611c378688611d1790919063ffffffff16565b611d37565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611ca4573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868482604051611cd6929190612d76565b60405180910390a150505050506000600660146101000a81548160ff02191690831515021790555050565b60008183611d0f9190612d9f565b905092915050565b60008183611d259190612df9565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115611d5457611d53612e2d565b5b604051908082528060200260200182016040528015611d825781602001602082028036833780820191505090505b5090503081600081518110611d9a57611d99612e5c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e659190612ea0565b81600181518110611e7957611e78612e5c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081611ee030600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166110df565b1015611f1657611f1530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660001961126b565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611f7a959493929190612fc6565b600060405180830381600087803b158015611f9457600080fd5b505af1158015611fa8573d6000803e3d6000fd5b505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080611ffc610ba1565b426040518863ffffffff1660e01b815260040161201e96959493929190613020565b60606040518083038185885af115801561203c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120619190613096565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156120a2578082015181840152602081019050612087565b838111156120b1576000848401525b50505050565b6000601f19601f8301169050919050565b60006120d382612068565b6120dd8185612073565b93506120ed818560208601612084565b6120f6816120b7565b840191505092915050565b6000602082019050818103600083015261211b81846120c8565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061215382612128565b9050919050565b61216381612148565b811461216e57600080fd5b50565b6000813590506121808161215a565b92915050565b6000819050919050565b61219981612186565b81146121a457600080fd5b50565b6000813590506121b681612190565b92915050565b600080604083850312156121d3576121d2612123565b5b60006121e185828601612171565b92505060206121f2858286016121a7565b9150509250929050565b60008115159050919050565b612211816121fc565b82525050565b600060208201905061222c6000830184612208565b92915050565b6000819050919050565b600061225761225261224d84612128565b612232565b612128565b9050919050565b60006122698261223c565b9050919050565b600061227b8261225e565b9050919050565b61228b81612270565b82525050565b60006020820190506122a66000830184612282565b92915050565b6122b581612186565b82525050565b60006020820190506122d060008301846122ac565b92915050565b6000806000606084860312156122ef576122ee612123565b5b60006122fd86828701612171565b935050602061230e86828701612171565b925050604061231f868287016121a7565b9150509250925092565b600060ff82169050919050565b61233f81612329565b82525050565b600060208201905061235a6000830184612336565b92915050565b61236981612148565b82525050565b60006020820190506123846000830184612360565b92915050565b6000602082840312156123a05761239f612123565b5b60006123ae84828501612171565b91505092915050565b600080604083850312156123ce576123cd612123565b5b60006123dc858286016121a7565b92505060206123ed858286016121a7565b9150509250929050565b600061240282612128565b9050919050565b612412816123f7565b82525050565b600060208201905061242d6000830184612409565b92915050565b60006020828403121561244957612448612123565b5b6000612457848285016121a7565b91505092915050565b612469816121fc565b811461247457600080fd5b50565b60008135905061248681612460565b92915050565b600080604083850312156124a3576124a2612123565b5b60006124b185828601612171565b92505060206124c285828601612477565b9150509250929050565b6000602082840312156124e2576124e1612123565b5b60006124f084828501612477565b91505092915050565b600080604083850312156125105761250f612123565b5b600061251e85828601612171565b925050602061252f85828601612171565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061258057607f821691505b60208210810361259357612592612539565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006125f5602883612073565b915061260082612599565b604082019050919050565b60006020820190508181036000830152612624816125e8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061266582612186565b915061267083612186565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156126a5576126a461262b565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006126e6602083612073565b91506126f1826126b0565b602082019050919050565b60006020820190508181036000830152612715816126d9565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000612752600c83612073565b915061275d8261271c565b602082019050919050565b6000602082019050818103600083015261278181612745565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006127e4602583612073565b91506127ef82612788565b604082019050919050565b60006020820190508181036000830152612813816127d7565b9050919050565b7f76616c756520746f6f2068696768000000000000000000000000000000000000600082015250565b6000612850600e83612073565b915061285b8261281a565b602082019050919050565b6000602082019050818103600083015261287f81612843565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006128e2602a83612073565b91506128ed82612886565b604082019050919050565b60006020820190508181036000830152612911816128d5565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612974602683612073565b915061297f82612918565b604082019050919050565b600060208201905081810360008301526129a381612967565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612a06602483612073565b9150612a11826129aa565b604082019050919050565b60006020820190508181036000830152612a35816129f9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612a98602283612073565b9150612aa382612a3c565b604082019050919050565b60006020820190508181036000830152612ac781612a8b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612b2a602583612073565b9150612b3582612ace565b604082019050919050565b60006020820190508181036000830152612b5981612b1d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612bbc602383612073565b9150612bc782612b60565b604082019050919050565b60006020820190508181036000830152612beb81612baf565b9050919050565b7f616d6f756e74206578636565647320746865206d61785472616e73616374696f60008201527f6e416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000612c4e602883612073565b9150612c5982612bf2565b604082019050919050565b60006020820190508181036000830152612c7d81612c41565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612cbe82612186565b9150612cc983612186565b925082612cd957612cd8612c84565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612d40602683612073565b9150612d4b82612ce4565b604082019050919050565b60006020820190508181036000830152612d6f81612d33565b9050919050565b6000604082019050612d8b60008301856122ac565b612d9860208301846122ac565b9392505050565b6000612daa82612186565b9150612db583612186565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612dee57612ded61262b565b5b828202905092915050565b6000612e0482612186565b9150612e0f83612186565b925082821015612e2257612e2161262b565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050612e9a8161215a565b92915050565b600060208284031215612eb657612eb5612123565b5b6000612ec484828501612e8b565b91505092915050565b6000819050919050565b6000612ef2612eed612ee884612ecd565b612232565b612186565b9050919050565b612f0281612ed7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612f3d81612148565b82525050565b6000612f4f8383612f34565b60208301905092915050565b6000602082019050919050565b6000612f7382612f08565b612f7d8185612f13565b9350612f8883612f24565b8060005b83811015612fb9578151612fa08882612f43565b9750612fab83612f5b565b925050600181019050612f8c565b5085935050505092915050565b600060a082019050612fdb60008301886122ac565b612fe86020830187612ef9565b8181036040830152612ffa8186612f68565b90506130096060830185612360565b61301660808301846122ac565b9695505050505050565b600060c0820190506130356000830189612360565b61304260208301886122ac565b61304f6040830187612ef9565b61305c6060830186612ef9565b6130696080830185612360565b61307660a08301846122ac565b979650505050505050565b60008151905061309081612190565b92915050565b6000806000606084860312156130af576130ae612123565b5b60006130bd86828701613081565b93505060206130ce86828701613081565b92505060406130df86828701613081565b915050925092509256fea26469706673582212208ec608b33552a0409611591345f9ba9116c0e82b5d72e5daa1ac1187780f7ca564736f6c634300080f0033000000000000000000000000f6bf0358b2d4cb39a58209e455fdca749106bca8

Deployed Bytecode

0x6080604052600436106101a05760003560e01c8063715018a6116100ec578063ab5a18871161008a578063c8c8ebe411610064578063c8c8ebe4146105eb578063dd62ed3e14610616578063e2f4560514610653578063f2fde38b1461067e576101a7565b8063ab5a188714610570578063c024666814610599578063c49b9a80146105c2576101a7565b806395d89b41116100c657806395d89b41146104a057806398118cb4146104cb578063a457c2d7146104f6578063a9059cbb14610533576101a7565b8063715018a61461043357806375f0a8741461044a5780638da5cb5b14610475576101a7565b806339509351116101595780634fbee193116101335780634fbee1931461036557806352f7c988146103a25780636b67c4df146103cb57806370a08231146103f6576101a7565b806339509351146102d257806349bd5a5e1461030f5780634a74bb021461033a576101a7565b806306fdde03146101ac578063095ea7b3146101d75780631694505e1461021457806318160ddd1461023f57806323b872dd1461026a578063313ce567146102a7576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101c16106a7565b6040516101ce9190612101565b60405180910390f35b3480156101e357600080fd5b506101fe60048036038101906101f991906121bc565b610739565b60405161020b9190612217565b60405180910390f35b34801561022057600080fd5b50610229610757565b6040516102369190612291565b60405180910390f35b34801561024b57600080fd5b5061025461077d565b60405161026191906122bb565b60405180910390f35b34801561027657600080fd5b50610291600480360381019061028c91906122d6565b610787565b60405161029e9190612217565b60405180910390f35b3480156102b357600080fd5b506102bc61087f565b6040516102c99190612345565b60405180910390f35b3480156102de57600080fd5b506102f960048036038101906102f491906121bc565b610888565b6040516103069190612217565b60405180910390f35b34801561031b57600080fd5b50610324610934565b604051610331919061236f565b60405180910390f35b34801561034657600080fd5b5061034f610958565b60405161035c9190612217565b60405180910390f35b34801561037157600080fd5b5061038c6004803603810190610387919061238a565b61096b565b6040516103999190612217565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c491906123b7565b6109c1565b005b3480156103d757600080fd5b506103e0610aa5565b6040516103ed91906122bb565b60405180910390f35b34801561040257600080fd5b5061041d6004803603810190610418919061238a565b610aab565b60405161042a91906122bb565b60405180910390f35b34801561043f57600080fd5b50610448610af3565b005b34801561045657600080fd5b5061045f610b7b565b60405161046c9190612418565b60405180910390f35b34801561048157600080fd5b5061048a610ba1565b604051610497919061236f565b60405180910390f35b3480156104ac57600080fd5b506104b5610bcb565b6040516104c29190612101565b60405180910390f35b3480156104d757600080fd5b506104e0610c5d565b6040516104ed91906122bb565b60405180910390f35b34801561050257600080fd5b5061051d600480360381019061051891906121bc565b610c63565b60405161052a9190612217565b60405180910390f35b34801561053f57600080fd5b5061055a600480360381019061055591906121bc565b610d4e565b6040516105679190612217565b60405180910390f35b34801561057c57600080fd5b5061059760048036038101906105929190612433565b610d6c565b005b3480156105a557600080fd5b506105c060048036038101906105bb919061248c565b610e52565b005b3480156105ce57600080fd5b506105e960048036038101906105e491906124cc565b611009565b005b3480156105f757600080fd5b506106006110d9565b60405161060d91906122bb565b60405180910390f35b34801561062257600080fd5b5061063d600480360381019061063891906124f9565b6110df565b60405161064a91906122bb565b60405180910390f35b34801561065f57600080fd5b50610668611166565b60405161067591906122bb565b60405180910390f35b34801561068a57600080fd5b506106a560048036038101906106a0919061238a565b61116c565b005b6060600380546106b690612568565b80601f01602080910402602001604051908101604052809291908181526020018280546106e290612568565b801561072f5780601f106107045761010080835404028352916020019161072f565b820191906000526020600020905b81548152906001019060200180831161071257829003601f168201915b5050505050905090565b600061074d610746611263565b848461126b565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000610794848484611434565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107df611263565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561085f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108569061260b565b60405180910390fd5b6108738561086b611263565b85840361126b565b60019150509392505050565b60006012905090565b600061092a610895611263565b8484600160006108a3611263565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610925919061265a565b61126b565b6001905092915050565b7f0000000000000000000000007c7abeab241ef546aa25f5868c0830f4d06e934481565b600660159054906101000a900460ff1681565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6109c9611263565b73ffffffffffffffffffffffffffffffffffffffff166109e7610ba1565b73ffffffffffffffffffffffffffffffffffffffff1614610a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a34906126fc565b60405180910390fd5b600a610a5282846117f690919063ffffffff16565b1115610a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8a90612768565b60405180910390fd5b8160098190555080600a819055505050565b600a5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610afb611263565b73ffffffffffffffffffffffffffffffffffffffff16610b19610ba1565b73ffffffffffffffffffffffffffffffffffffffff1614610b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b66906126fc565b60405180910390fd5b610b79600061180c565b565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610bda90612568565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0690612568565b8015610c535780601f10610c2857610100808354040283529160200191610c53565b820191906000526020600020905b815481529060010190602001808311610c3657829003601f168201915b5050505050905090565b60095481565b60008060016000610c72611263565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d26906127fa565b60405180910390fd5b610d43610d3a611263565b8585840361126b565b600191505092915050565b6000610d62610d5b611263565b8484611434565b6001905092915050565b610d74611263565b73ffffffffffffffffffffffffffffffffffffffff16610d92610ba1565b73ffffffffffffffffffffffffffffffffffffffff1614610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf906126fc565b60405180910390fd5b80600781905550610e0b61012c610dfd61077d565b6118d290919063ffffffff16565b6007541015610e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4690612866565b60405180910390fd5b50565b610e5a611263565b73ffffffffffffffffffffffffffffffffffffffff16610e78610ba1565b73ffffffffffffffffffffffffffffffffffffffff1614610ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec5906126fc565b60405180910390fd5b801515600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f57906128f8565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610ffd9190612217565b60405180910390a25050565b611011611263565b73ffffffffffffffffffffffffffffffffffffffff1661102f610ba1565b73ffffffffffffffffffffffffffffffffffffffff1614611085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107c906126fc565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516110ce9190612217565b60405180910390a150565b60075481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b611174611263565b73ffffffffffffffffffffffffffffffffffffffff16611192610ba1565b73ffffffffffffffffffffffffffffffffffffffff16146111e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111df906126fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124e9061298a565b60405180910390fd5b6112608161180c565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d190612a1c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134090612aae565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161142791906122bb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149a90612b40565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150990612bd2565b60405180910390fd5b6000810361152b57611526838360006118e8565b6117f1565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156115cf5750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561161a57600754811115611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161090612c64565b60405180910390fd5b5b600061162530610aab565b90506000600854821015905080801561164b5750600660149054906101000a900460ff16155b80156116a257507f0000000000000000000000007c7abeab241ef546aa25f5868c0830f4d06e934473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156116ba5750600660159054906101000a900460ff165b156116ce5760085491506116cd82611b67565b5b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156117725750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156117e35760006117b560646117a7611798600a546009546117f690919063ffffffff16565b87611d0190919063ffffffff16565b6118d290919063ffffffff16565b90506117ca8185611d1790919063ffffffff16565b935060008111156117e1576117e08630836118e8565b5b505b6117ee8585856118e8565b50505b505050565b60008183611804919061265a565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836118e09190612cb3565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e90612b40565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bd90612bd2565b60405180910390fd5b6119d1838383611d2d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4e90612d56565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611aea919061265a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b4e91906122bb565b60405180910390a3611b61848484611d32565b50505050565b6001600660146101000a81548160ff0219169083151502179055506000611bc1611b9e600a546009546117f690919063ffffffff16565b611bb360095485611d0190919063ffffffff16565b6118d290919063ffffffff16565b90506000611bd96002836118d290919063ffffffff16565b90506000611bf08284611d1790919063ffffffff16565b90506000479050611c0083611d37565b6000611c158247611d1790919063ffffffff16565b9050611c218382611fb0565b611c3c611c378688611d1790919063ffffffff16565b611d37565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611ca4573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868482604051611cd6929190612d76565b60405180910390a150505050506000600660146101000a81548160ff02191690831515021790555050565b60008183611d0f9190612d9f565b905092915050565b60008183611d259190612df9565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115611d5457611d53612e2d565b5b604051908082528060200260200182016040528015611d825781602001602082028036833780820191505090505b5090503081600081518110611d9a57611d99612e5c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e659190612ea0565b81600181518110611e7957611e78612e5c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081611ee030600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166110df565b1015611f1657611f1530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660001961126b565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611f7a959493929190612fc6565b600060405180830381600087803b158015611f9457600080fd5b505af1158015611fa8573d6000803e3d6000fd5b505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080611ffc610ba1565b426040518863ffffffff1660e01b815260040161201e96959493929190613020565b60606040518083038185885af115801561203c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120619190613096565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156120a2578082015181840152602081019050612087565b838111156120b1576000848401525b50505050565b6000601f19601f8301169050919050565b60006120d382612068565b6120dd8185612073565b93506120ed818560208601612084565b6120f6816120b7565b840191505092915050565b6000602082019050818103600083015261211b81846120c8565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061215382612128565b9050919050565b61216381612148565b811461216e57600080fd5b50565b6000813590506121808161215a565b92915050565b6000819050919050565b61219981612186565b81146121a457600080fd5b50565b6000813590506121b681612190565b92915050565b600080604083850312156121d3576121d2612123565b5b60006121e185828601612171565b92505060206121f2858286016121a7565b9150509250929050565b60008115159050919050565b612211816121fc565b82525050565b600060208201905061222c6000830184612208565b92915050565b6000819050919050565b600061225761225261224d84612128565b612232565b612128565b9050919050565b60006122698261223c565b9050919050565b600061227b8261225e565b9050919050565b61228b81612270565b82525050565b60006020820190506122a66000830184612282565b92915050565b6122b581612186565b82525050565b60006020820190506122d060008301846122ac565b92915050565b6000806000606084860312156122ef576122ee612123565b5b60006122fd86828701612171565b935050602061230e86828701612171565b925050604061231f868287016121a7565b9150509250925092565b600060ff82169050919050565b61233f81612329565b82525050565b600060208201905061235a6000830184612336565b92915050565b61236981612148565b82525050565b60006020820190506123846000830184612360565b92915050565b6000602082840312156123a05761239f612123565b5b60006123ae84828501612171565b91505092915050565b600080604083850312156123ce576123cd612123565b5b60006123dc858286016121a7565b92505060206123ed858286016121a7565b9150509250929050565b600061240282612128565b9050919050565b612412816123f7565b82525050565b600060208201905061242d6000830184612409565b92915050565b60006020828403121561244957612448612123565b5b6000612457848285016121a7565b91505092915050565b612469816121fc565b811461247457600080fd5b50565b60008135905061248681612460565b92915050565b600080604083850312156124a3576124a2612123565b5b60006124b185828601612171565b92505060206124c285828601612477565b9150509250929050565b6000602082840312156124e2576124e1612123565b5b60006124f084828501612477565b91505092915050565b600080604083850312156125105761250f612123565b5b600061251e85828601612171565b925050602061252f85828601612171565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061258057607f821691505b60208210810361259357612592612539565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006125f5602883612073565b915061260082612599565b604082019050919050565b60006020820190508181036000830152612624816125e8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061266582612186565b915061267083612186565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156126a5576126a461262b565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006126e6602083612073565b91506126f1826126b0565b602082019050919050565b60006020820190508181036000830152612715816126d9565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000612752600c83612073565b915061275d8261271c565b602082019050919050565b6000602082019050818103600083015261278181612745565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006127e4602583612073565b91506127ef82612788565b604082019050919050565b60006020820190508181036000830152612813816127d7565b9050919050565b7f76616c756520746f6f2068696768000000000000000000000000000000000000600082015250565b6000612850600e83612073565b915061285b8261281a565b602082019050919050565b6000602082019050818103600083015261287f81612843565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006128e2602a83612073565b91506128ed82612886565b604082019050919050565b60006020820190508181036000830152612911816128d5565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612974602683612073565b915061297f82612918565b604082019050919050565b600060208201905081810360008301526129a381612967565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612a06602483612073565b9150612a11826129aa565b604082019050919050565b60006020820190508181036000830152612a35816129f9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612a98602283612073565b9150612aa382612a3c565b604082019050919050565b60006020820190508181036000830152612ac781612a8b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612b2a602583612073565b9150612b3582612ace565b604082019050919050565b60006020820190508181036000830152612b5981612b1d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612bbc602383612073565b9150612bc782612b60565b604082019050919050565b60006020820190508181036000830152612beb81612baf565b9050919050565b7f616d6f756e74206578636565647320746865206d61785472616e73616374696f60008201527f6e416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000612c4e602883612073565b9150612c5982612bf2565b604082019050919050565b60006020820190508181036000830152612c7d81612c41565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612cbe82612186565b9150612cc983612186565b925082612cd957612cd8612c84565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612d40602683612073565b9150612d4b82612ce4565b604082019050919050565b60006020820190508181036000830152612d6f81612d33565b9050919050565b6000604082019050612d8b60008301856122ac565b612d9860208301846122ac565b9392505050565b6000612daa82612186565b9150612db583612186565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612dee57612ded61262b565b5b828202905092915050565b6000612e0482612186565b9150612e0f83612186565b925082821015612e2257612e2161262b565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050612e9a8161215a565b92915050565b600060208284031215612eb657612eb5612123565b5b6000612ec484828501612e8b565b91505092915050565b6000819050919050565b6000612ef2612eed612ee884612ecd565b612232565b612186565b9050919050565b612f0281612ed7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612f3d81612148565b82525050565b6000612f4f8383612f34565b60208301905092915050565b6000602082019050919050565b6000612f7382612f08565b612f7d8185612f13565b9350612f8883612f24565b8060005b83811015612fb9578151612fa08882612f43565b9750612fab83612f5b565b925050600181019050612f8c565b5085935050505092915050565b600060a082019050612fdb60008301886122ac565b612fe86020830187612ef9565b8181036040830152612ffa8186612f68565b90506130096060830185612360565b61301660808301846122ac565b9695505050505050565b600060c0820190506130356000830189612360565b61304260208301886122ac565b61304f6040830187612ef9565b61305c6060830186612ef9565b6130696080830185612360565b61307660a08301846122ac565b979650505050505050565b60008151905061309081612190565b92915050565b6000806000606084860312156130af576130ae612123565b5b60006130bd86828701613081565b93505060206130ce86828701613081565b92505060406130df86828701613081565b915050925092509256fea26469706673582212208ec608b33552a0409611591345f9ba9116c0e82b5d72e5daa1ac1187780f7ca564736f6c634300080f0033

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

000000000000000000000000f6bf0358b2d4cb39a58209e455fdca749106bca8

-----Decoded View---------------
Arg [0] : _owner (address): 0xf6Bf0358B2d4CB39A58209e455Fdca749106bCA8

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000f6bf0358b2d4cb39a58209e455fdca749106bca8


Deployed Bytecode Sourcemap

39622:6970:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5485:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7652:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39702:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6605:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8303:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6447:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9204:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39750:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39833:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46233:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45470:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40048:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6776:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17015:94;;;;;;;;;;;;;:::i;:::-;;40086:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16364:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5704:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40010:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9922:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7116:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45718:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45931:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46370:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39882:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7354:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39948:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17264:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5485:100;5539:13;5572:5;5565:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5485:100;:::o;7652:169::-;7735:4;7752:39;7761:12;:10;:12::i;:::-;7775:7;7784:6;7752:8;:39::i;:::-;7809:4;7802:11;;7652:169;;;;:::o;39702:41::-;;;;;;;;;;;;;:::o;6605:108::-;6666:7;6693:12;;6686:19;;6605:108;:::o;8303:492::-;8443:4;8460:36;8470:6;8478:9;8489:6;8460:9;:36::i;:::-;8509:24;8536:11;:19;8548:6;8536:19;;;;;;;;;;;;;;;:33;8556:12;:10;:12::i;:::-;8536:33;;;;;;;;;;;;;;;;8509:60;;8608:6;8588:16;:26;;8580:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8695:57;8704:6;8712:12;:10;:12::i;:::-;8745:6;8726:16;:25;8695:8;:57::i;:::-;8783:4;8776:11;;;8303:492;;;;;:::o;6447:93::-;6505:5;6530:2;6523:9;;6447:93;:::o;9204:215::-;9292:4;9309:80;9318:12;:10;:12::i;:::-;9332:7;9378:10;9341:11;:25;9353:12;:10;:12::i;:::-;9341:25;;;;;;;;;;;;;;;:34;9367:7;9341:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9309:8;:80::i;:::-;9407:4;9400:11;;9204:215;;;;:::o;39750:38::-;;;:::o;39833:40::-;;;;;;;;;;;;;:::o;46233:125::-;46298:4;46322:19;:28;46342:7;46322:28;;;;;;;;;;;;;;;;;;;;;;;;;46315:35;;46233:125;;;:::o;45470:240::-;16595:12;:10;:12::i;:::-;16584:23;;:7;:5;:7::i;:::-;:23;;;16576:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45604:2:::1;45568:32;45586:13;45568;:17;;:32;;;;:::i;:::-;:38;;45560:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;45649:13;45634:12;:28;;;;45688:13;45673:12;:28;;;;45470:240:::0;;:::o;40048:31::-;;;;:::o;6776:127::-;6850:7;6877:9;:18;6887:7;6877:18;;;;;;;;;;;;;;;;6870:25;;6776:127;;;:::o;17015:94::-;16595:12;:10;:12::i;:::-;16584:23;;:7;:5;:7::i;:::-;:23;;;16576:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17080:21:::1;17098:1;17080:9;:21::i;:::-;17015:94::o:0;40086:93::-;;;;;;;;;;;;;:::o;16364:87::-;16410:7;16437:6;;;;;;;;;;;16430:13;;16364:87;:::o;5704:104::-;5760:13;5793:7;5786:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5704:104;:::o;40010:31::-;;;;:::o;9922:413::-;10015:4;10032:24;10059:11;:25;10071:12;:10;:12::i;:::-;10059:25;;;;;;;;;;;;;;;:34;10085:7;10059:34;;;;;;;;;;;;;;;;10032:61;;10132:15;10112:16;:35;;10104:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10225:67;10234:12;:10;:12::i;:::-;10248:7;10276:15;10257:16;:34;10225:8;:67::i;:::-;10323:4;10316:11;;;9922:413;;;;:::o;7116:175::-;7202:4;7219:42;7229:12;:10;:12::i;:::-;7243:9;7254:6;7219:9;:42::i;:::-;7279:4;7272:11;;7116:175;;;;:::o;45718:204::-;16595:12;:10;:12::i;:::-;16584:23;;:7;:5;:7::i;:::-;:23;;;16576:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45818:12:::1;45795:20;:35;;;;45873:22;45891:3;45873:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;45849:20;;:46;;45841:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;45718:204:::0;:::o;45931:290::-;16595:12;:10;:12::i;:::-;16584:23;;:7;:5;:7::i;:::-;:23;;;16576:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46056:8:::1;46024:40;;:19;:28;46044:7;46024:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;46016:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;46153:8;46122:19;:28;46142:7;46122:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;46195:7;46179:34;;;46204:8;46179:34;;;;;;:::i;:::-;;;;;;;;45931:290:::0;;:::o;46370:171::-;16595:12;:10;:12::i;:::-;16584:23;;:7;:5;:7::i;:::-;:23;;;16576:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46471:8:::1;46447:21;;:32;;;;;;;;;;;;;;;;;;46495:38;46524:8;46495:38;;;;;;:::i;:::-;;;;;;;;46370:171:::0;:::o;39882:59::-;;;;:::o;7354:151::-;7443:7;7470:11;:18;7482:5;7470:18;;;;;;;;;;;;;;;:27;7489:7;7470:27;;;;;;;;;;;;;;;;7463:34;;7354:151;;;;:::o;39948:53::-;;;;:::o;17264:192::-;16595:12;:10;:12::i;:::-;16584:23;;:7;:5;:7::i;:::-;:23;;;16576:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17373:1:::1;17353:22;;:8;:22;;::::0;17345:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17429:19;17439:8;17429:9;:19::i;:::-;17264:192:::0;:::o;3395:98::-;3448:7;3475:10;3468:17;;3395:98;:::o;13614:380::-;13767:1;13750:19;;:5;:19;;;13742:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13848:1;13829:21;;:7;:21;;;13821:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13932:6;13902:11;:18;13914:5;13902:18;;;;;;;;;;;;;;;:27;13921:7;13902:27;;;;;;;;;;;;;;;:36;;;;13970:7;13954:32;;13963:5;13954:32;;;13979:6;13954:32;;;;;;:::i;:::-;;;;;;;;13614:380;;;:::o;41625:1470::-;41773:1;41757:18;;:4;:18;;;41749:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41850:1;41836:16;;:2;:16;;;41828:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41918:1;41908:6;:11;41905:92;;41936:28;41952:4;41958:2;41962:1;41936:15;:28::i;:::-;41979:7;;41905:92;42021:19;:25;42041:4;42021:25;;;;;;;;;;;;;;;;;;;;;;;;;42020:26;:54;;;;;42051:19;:23;42071:2;42051:23;;;;;;;;;;;;;;;;;;;;;;;;;42050:24;42020:54;42017:168;;;42108:20;;42098:6;:30;;42090:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;42017:168;42194:28;42225:24;42243:4;42225:9;:24::i;:::-;42194:55;;42270:24;42321:18;;42297:20;:42;;42270:69;;42376:19;:53;;;;;42413:16;;;;;;;;;;;42412:17;42376:53;:89;;;;;42452:13;42446:19;;:2;:19;;;42376:89;:128;;;;;42483:21;;;;;;;;;;;42376:128;42359:276;;;42554:18;;42531:41;;42587:36;42602:20;42587:14;:36::i;:::-;42359:276;42737:19;:25;42757:4;42737:25;;;;;;;;;;;;;;;;;;;;;;;;;42736:26;:54;;;;;42767:19;:23;42787:2;42767:23;;;;;;;;;;;;;;;;;;;;;;;;;42766:24;42736:54;42733:307;;;42804:12;42819:51;42866:3;42819:42;42830:30;42847:12;;42830;;:16;;:30;;;;:::i;:::-;42819:6;:10;;:42;;;;:::i;:::-;:46;;:51;;;;:::i;:::-;42804:66;;42891:16;42902:4;42891:6;:10;;:16;;;;:::i;:::-;42882:25;;42935:1;42928:4;:8;42924:91;;;42957:42;42973:4;42987;42994;42957:15;:42::i;:::-;42924:91;42792:248;42733:307;43052:33;43068:4;43074:2;43078:6;43052:15;:33::i;:::-;41738:1357;;41625:1470;;;;:::o;27518:98::-;27576:7;27607:1;27603;:5;;;;:::i;:::-;27596:12;;27518:98;;;;:::o;17464:173::-;17520:16;17539:6;;;;;;;;;;;17520:25;;17565:8;17556:6;;:17;;;;;;;;;;;;;;;;;;17620:8;17589:40;;17610:8;17589:40;;;;;;;;;;;;17509:128;17464:173;:::o;28655:98::-;28713:7;28744:1;28740;:5;;;;:::i;:::-;28733:12;;28655:98;;;;:::o;10825:733::-;10983:1;10965:20;;:6;:20;;;10957:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11067:1;11046:23;;:9;:23;;;11038:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11122:47;11143:6;11151:9;11162:6;11122:20;:47::i;:::-;11182:21;11206:9;:17;11216:6;11206:17;;;;;;;;;;;;;;;;11182:41;;11259:6;11242:13;:23;;11234:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11380:6;11364:13;:22;11344:9;:17;11354:6;11344:17;;;;;;;;;;;;;;;:42;;;;11432:6;11408:9;:20;11418:9;11408:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;11473:9;11456:35;;11465:6;11456:35;;;11484:6;11456:35;;;;;;:::i;:::-;;;;;;;;11504:46;11524:6;11532:9;11543:6;11504:19;:46::i;:::-;10946:612;10825:733;;;:::o;43104:1269::-;40675:4;40656:16;;:23;;;;;;;;;;;;;;;;;;43189:26:::1;43218:74;43261:30;43278:12;;43261;;:16;;:30;;;;:::i;:::-;43218:38;43243:12;;43218:20;:24;;:38;;;;:::i;:::-;:42;;:74;;;;:::i;:::-;43189:103;;43367:12;43382:25;43405:1;43382:18;:22;;:25;;;;:::i;:::-;43367:40;;43418:17;43438:28;43461:4;43438:18;:22;;:28;;;;:::i;:::-;43418:48;;43744:22;43769:21;43744:46;;43835:22;43852:4;43835:16;:22::i;:::-;43988:18;44009:41;44035:14;44009:21;:25;;:41;;;;:::i;:::-;43988:62;;44100:35;44113:9;44124:10;44100:12;:35::i;:::-;44195:62;44212:44;44237:18;44212:20;:24;;:44;;;;:::i;:::-;44195:16;:62::i;:::-;44268:15;;;;;;;;;;;:24;;:47;44293:21;44268:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;44333:32;44348:4;44354:10;44333:32;;;;;;;:::i;:::-;;;;;;;;43178:1195;;;;;40721:5:::0;40702:16;;:24;;;;;;;;;;;;;;;;;;43104:1269;:::o;28256:98::-;28314:7;28345:1;28341;:5;;;;:::i;:::-;28334:12;;28256:98;;;;:::o;27899:::-;27957:7;27988:1;27984;:5;;;;:::i;:::-;27977:12;;27899:98;;;;:::o;14594:125::-;;;;:::o;15323:124::-;;;;:::o;44381:692::-;44507:21;44545:1;44531:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44507:40;;44576:4;44558;44563:1;44558:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44602:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44592:4;44597:1;44592:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;44693:11;44640:50;44658:4;44673:15;;;;;;;;;;;44640:9;:50::i;:::-;:64;44637:156;;;44719:62;44736:4;44751:15;;;;;;;;;;;44778:1;44769:11;44719:8;:62::i;:::-;44637:156;44831:15;;;;;;;;;;;:66;;;44912:11;44938:1;44982:4;45009;45029:15;44831:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44436:637;44381:692;:::o;45081:381::-;45192:15;;;;;;;;;;;:31;;;45231:9;45264:4;45284:11;45310:1;45353;45396:7;:5;:7::i;:::-;45418:15;45192:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;45081:381;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:60::-;3522:3;3543:5;3536:12;;3494:60;;;:::o;3560:142::-;3610:9;3643:53;3661:34;3670:24;3688:5;3670:24;:::i;:::-;3661:34;:::i;:::-;3643:53;:::i;:::-;3630:66;;3560:142;;;:::o;3708:126::-;3758:9;3791:37;3822:5;3791:37;:::i;:::-;3778:50;;3708:126;;;:::o;3840:153::-;3917:9;3950:37;3981:5;3950:37;:::i;:::-;3937:50;;3840:153;;;:::o;3999:185::-;4113:64;4171:5;4113:64;:::i;:::-;4108:3;4101:77;3999:185;;:::o;4190:276::-;4310:4;4348:2;4337:9;4333:18;4325:26;;4361:98;4456:1;4445:9;4441:17;4432:6;4361:98;:::i;:::-;4190:276;;;;:::o;4472:118::-;4559:24;4577:5;4559:24;:::i;:::-;4554:3;4547:37;4472:118;;:::o;4596:222::-;4689:4;4727:2;4716:9;4712:18;4704:26;;4740:71;4808:1;4797:9;4793:17;4784:6;4740:71;:::i;:::-;4596:222;;;;:::o;4824:619::-;4901:6;4909;4917;4966:2;4954:9;4945:7;4941:23;4937:32;4934:119;;;4972:79;;:::i;:::-;4934:119;5092:1;5117:53;5162:7;5153:6;5142:9;5138:22;5117:53;:::i;:::-;5107:63;;5063:117;5219:2;5245:53;5290:7;5281:6;5270:9;5266:22;5245:53;:::i;:::-;5235:63;;5190:118;5347:2;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5318:118;4824:619;;;;;:::o;5449:86::-;5484:7;5524:4;5517:5;5513:16;5502:27;;5449:86;;;:::o;5541:112::-;5624:22;5640:5;5624:22;:::i;:::-;5619:3;5612:35;5541:112;;:::o;5659:214::-;5748:4;5786:2;5775:9;5771:18;5763:26;;5799:67;5863:1;5852:9;5848:17;5839:6;5799:67;:::i;:::-;5659:214;;;;:::o;5879:118::-;5966:24;5984:5;5966:24;:::i;:::-;5961:3;5954:37;5879:118;;:::o;6003:222::-;6096:4;6134:2;6123:9;6119:18;6111:26;;6147:71;6215:1;6204:9;6200:17;6191:6;6147:71;:::i;:::-;6003:222;;;;:::o;6231:329::-;6290:6;6339:2;6327:9;6318:7;6314:23;6310:32;6307:119;;;6345:79;;:::i;:::-;6307:119;6465:1;6490:53;6535:7;6526:6;6515:9;6511:22;6490:53;:::i;:::-;6480:63;;6436:117;6231:329;;;;:::o;6566:474::-;6634:6;6642;6691:2;6679:9;6670:7;6666:23;6662:32;6659:119;;;6697:79;;:::i;:::-;6659:119;6817:1;6842:53;6887:7;6878:6;6867:9;6863:22;6842:53;:::i;:::-;6832:63;;6788:117;6944:2;6970:53;7015:7;7006:6;6995:9;6991:22;6970:53;:::i;:::-;6960:63;;6915:118;6566:474;;;;;:::o;7046:104::-;7091:7;7120:24;7138:5;7120:24;:::i;:::-;7109:35;;7046:104;;;:::o;7156:142::-;7259:32;7285:5;7259:32;:::i;:::-;7254:3;7247:45;7156:142;;:::o;7304:254::-;7413:4;7451:2;7440:9;7436:18;7428:26;;7464:87;7548:1;7537:9;7533:17;7524:6;7464:87;:::i;:::-;7304:254;;;;:::o;7564:329::-;7623:6;7672:2;7660:9;7651:7;7647:23;7643:32;7640:119;;;7678:79;;:::i;:::-;7640:119;7798:1;7823:53;7868:7;7859:6;7848:9;7844:22;7823:53;:::i;:::-;7813:63;;7769:117;7564:329;;;;:::o;7899:116::-;7969:21;7984:5;7969:21;:::i;:::-;7962:5;7959:32;7949:60;;8005:1;8002;7995:12;7949:60;7899:116;:::o;8021:133::-;8064:5;8102:6;8089:20;8080:29;;8118:30;8142:5;8118:30;:::i;:::-;8021:133;;;;:::o;8160:468::-;8225:6;8233;8282:2;8270:9;8261:7;8257:23;8253:32;8250:119;;;8288:79;;:::i;:::-;8250:119;8408:1;8433:53;8478:7;8469:6;8458:9;8454:22;8433:53;:::i;:::-;8423:63;;8379:117;8535:2;8561:50;8603:7;8594:6;8583:9;8579:22;8561:50;:::i;:::-;8551:60;;8506:115;8160:468;;;;;:::o;8634:323::-;8690:6;8739:2;8727:9;8718:7;8714:23;8710:32;8707:119;;;8745:79;;:::i;:::-;8707:119;8865:1;8890:50;8932:7;8923:6;8912:9;8908:22;8890:50;:::i;:::-;8880:60;;8836:114;8634:323;;;;:::o;8963:474::-;9031:6;9039;9088:2;9076:9;9067:7;9063:23;9059:32;9056:119;;;9094:79;;:::i;:::-;9056:119;9214:1;9239:53;9284:7;9275:6;9264:9;9260:22;9239:53;:::i;:::-;9229:63;;9185:117;9341:2;9367:53;9412:7;9403:6;9392:9;9388:22;9367:53;:::i;:::-;9357:63;;9312:118;8963:474;;;;;:::o;9443:180::-;9491:77;9488:1;9481:88;9588:4;9585:1;9578:15;9612:4;9609:1;9602:15;9629:320;9673:6;9710:1;9704:4;9700:12;9690:22;;9757:1;9751:4;9747:12;9778:18;9768:81;;9834:4;9826:6;9822:17;9812:27;;9768:81;9896:2;9888:6;9885:14;9865:18;9862:38;9859:84;;9915:18;;:::i;:::-;9859:84;9680:269;9629:320;;;:::o;9955:227::-;10095:34;10091:1;10083:6;10079:14;10072:58;10164:10;10159:2;10151:6;10147:15;10140:35;9955:227;:::o;10188:366::-;10330:3;10351:67;10415:2;10410:3;10351:67;:::i;:::-;10344:74;;10427:93;10516:3;10427:93;:::i;:::-;10545:2;10540:3;10536:12;10529:19;;10188:366;;;:::o;10560:419::-;10726:4;10764:2;10753:9;10749:18;10741:26;;10813:9;10807:4;10803:20;10799:1;10788:9;10784:17;10777:47;10841:131;10967:4;10841:131;:::i;:::-;10833:139;;10560:419;;;:::o;10985:180::-;11033:77;11030:1;11023:88;11130:4;11127:1;11120:15;11154:4;11151:1;11144:15;11171:305;11211:3;11230:20;11248:1;11230:20;:::i;:::-;11225:25;;11264:20;11282:1;11264:20;:::i;:::-;11259:25;;11418:1;11350:66;11346:74;11343:1;11340:81;11337:107;;;11424:18;;:::i;:::-;11337:107;11468:1;11465;11461:9;11454:16;;11171:305;;;;:::o;11482:182::-;11622:34;11618:1;11610:6;11606:14;11599:58;11482:182;:::o;11670:366::-;11812:3;11833:67;11897:2;11892:3;11833:67;:::i;:::-;11826:74;;11909:93;11998:3;11909:93;:::i;:::-;12027:2;12022:3;12018:12;12011:19;;11670:366;;;:::o;12042:419::-;12208:4;12246:2;12235:9;12231:18;12223:26;;12295:9;12289:4;12285:20;12281:1;12270:9;12266:17;12259:47;12323:131;12449:4;12323:131;:::i;:::-;12315:139;;12042:419;;;:::o;12467:162::-;12607:14;12603:1;12595:6;12591:14;12584:38;12467:162;:::o;12635:366::-;12777:3;12798:67;12862:2;12857:3;12798:67;:::i;:::-;12791:74;;12874:93;12963:3;12874:93;:::i;:::-;12992:2;12987:3;12983:12;12976:19;;12635:366;;;:::o;13007:419::-;13173:4;13211:2;13200:9;13196:18;13188:26;;13260:9;13254:4;13250:20;13246:1;13235:9;13231:17;13224:47;13288:131;13414:4;13288:131;:::i;:::-;13280:139;;13007:419;;;:::o;13432:224::-;13572:34;13568:1;13560:6;13556:14;13549:58;13641:7;13636:2;13628:6;13624:15;13617:32;13432:224;:::o;13662:366::-;13804:3;13825:67;13889:2;13884:3;13825:67;:::i;:::-;13818:74;;13901:93;13990:3;13901:93;:::i;:::-;14019:2;14014:3;14010:12;14003:19;;13662:366;;;:::o;14034:419::-;14200:4;14238:2;14227:9;14223:18;14215:26;;14287:9;14281:4;14277:20;14273:1;14262:9;14258:17;14251:47;14315:131;14441:4;14315:131;:::i;:::-;14307:139;;14034:419;;;:::o;14459:164::-;14599:16;14595:1;14587:6;14583:14;14576:40;14459:164;:::o;14629:366::-;14771:3;14792:67;14856:2;14851:3;14792:67;:::i;:::-;14785:74;;14868:93;14957:3;14868:93;:::i;:::-;14986:2;14981:3;14977:12;14970:19;;14629:366;;;:::o;15001:419::-;15167:4;15205:2;15194:9;15190:18;15182:26;;15254:9;15248:4;15244:20;15240:1;15229:9;15225:17;15218:47;15282:131;15408:4;15282:131;:::i;:::-;15274:139;;15001:419;;;:::o;15426:229::-;15566:34;15562:1;15554:6;15550:14;15543:58;15635:12;15630:2;15622:6;15618:15;15611:37;15426:229;:::o;15661:366::-;15803:3;15824:67;15888:2;15883:3;15824:67;:::i;:::-;15817:74;;15900:93;15989:3;15900:93;:::i;:::-;16018:2;16013:3;16009:12;16002:19;;15661:366;;;:::o;16033:419::-;16199:4;16237:2;16226:9;16222:18;16214:26;;16286:9;16280:4;16276:20;16272:1;16261:9;16257:17;16250:47;16314:131;16440:4;16314:131;:::i;:::-;16306:139;;16033:419;;;:::o;16458:225::-;16598:34;16594:1;16586:6;16582:14;16575:58;16667:8;16662:2;16654:6;16650:15;16643:33;16458:225;:::o;16689:366::-;16831:3;16852:67;16916:2;16911:3;16852:67;:::i;:::-;16845:74;;16928:93;17017:3;16928:93;:::i;:::-;17046:2;17041:3;17037:12;17030:19;;16689:366;;;:::o;17061:419::-;17227:4;17265:2;17254:9;17250:18;17242:26;;17314:9;17308:4;17304:20;17300:1;17289:9;17285:17;17278:47;17342:131;17468:4;17342:131;:::i;:::-;17334:139;;17061:419;;;:::o;17486:223::-;17626:34;17622:1;17614:6;17610:14;17603:58;17695:6;17690:2;17682:6;17678:15;17671:31;17486:223;:::o;17715:366::-;17857:3;17878:67;17942:2;17937:3;17878:67;:::i;:::-;17871:74;;17954:93;18043:3;17954:93;:::i;:::-;18072:2;18067:3;18063:12;18056:19;;17715:366;;;:::o;18087:419::-;18253:4;18291:2;18280:9;18276:18;18268:26;;18340:9;18334:4;18330:20;18326:1;18315:9;18311:17;18304:47;18368:131;18494:4;18368:131;:::i;:::-;18360:139;;18087:419;;;:::o;18512:221::-;18652:34;18648:1;18640:6;18636:14;18629:58;18721:4;18716:2;18708:6;18704:15;18697:29;18512:221;:::o;18739:366::-;18881:3;18902:67;18966:2;18961:3;18902:67;:::i;:::-;18895:74;;18978:93;19067:3;18978:93;:::i;:::-;19096:2;19091:3;19087:12;19080:19;;18739:366;;;:::o;19111:419::-;19277:4;19315:2;19304:9;19300:18;19292:26;;19364:9;19358:4;19354:20;19350:1;19339:9;19335:17;19328:47;19392:131;19518:4;19392:131;:::i;:::-;19384:139;;19111:419;;;:::o;19536:224::-;19676:34;19672:1;19664:6;19660:14;19653:58;19745:7;19740:2;19732:6;19728:15;19721:32;19536:224;:::o;19766:366::-;19908:3;19929:67;19993:2;19988:3;19929:67;:::i;:::-;19922:74;;20005:93;20094:3;20005:93;:::i;:::-;20123:2;20118:3;20114:12;20107:19;;19766:366;;;:::o;20138:419::-;20304:4;20342:2;20331:9;20327:18;20319:26;;20391:9;20385:4;20381:20;20377:1;20366:9;20362:17;20355:47;20419:131;20545:4;20419:131;:::i;:::-;20411:139;;20138:419;;;:::o;20563:222::-;20703:34;20699:1;20691:6;20687:14;20680:58;20772:5;20767:2;20759:6;20755:15;20748:30;20563:222;:::o;20791:366::-;20933:3;20954:67;21018:2;21013:3;20954:67;:::i;:::-;20947:74;;21030:93;21119:3;21030:93;:::i;:::-;21148:2;21143:3;21139:12;21132:19;;20791:366;;;:::o;21163:419::-;21329:4;21367:2;21356:9;21352:18;21344:26;;21416:9;21410:4;21406:20;21402:1;21391:9;21387:17;21380:47;21444:131;21570:4;21444:131;:::i;:::-;21436:139;;21163:419;;;:::o;21588:227::-;21728:34;21724:1;21716:6;21712:14;21705:58;21797:10;21792:2;21784:6;21780:15;21773:35;21588:227;:::o;21821:366::-;21963:3;21984:67;22048:2;22043:3;21984:67;:::i;:::-;21977:74;;22060:93;22149:3;22060:93;:::i;:::-;22178:2;22173:3;22169:12;22162:19;;21821:366;;;:::o;22193:419::-;22359:4;22397:2;22386:9;22382:18;22374:26;;22446:9;22440:4;22436:20;22432:1;22421:9;22417:17;22410:47;22474:131;22600:4;22474:131;:::i;:::-;22466:139;;22193:419;;;:::o;22618:180::-;22666:77;22663:1;22656:88;22763:4;22760:1;22753:15;22787:4;22784:1;22777:15;22804:185;22844:1;22861:20;22879:1;22861:20;:::i;:::-;22856:25;;22895:20;22913:1;22895:20;:::i;:::-;22890:25;;22934:1;22924:35;;22939:18;;:::i;:::-;22924:35;22981:1;22978;22974:9;22969:14;;22804:185;;;;:::o;22995:225::-;23135:34;23131:1;23123:6;23119:14;23112:58;23204:8;23199:2;23191:6;23187:15;23180:33;22995:225;:::o;23226:366::-;23368:3;23389:67;23453:2;23448:3;23389:67;:::i;:::-;23382:74;;23465:93;23554:3;23465:93;:::i;:::-;23583:2;23578:3;23574:12;23567:19;;23226:366;;;:::o;23598:419::-;23764:4;23802:2;23791:9;23787:18;23779:26;;23851:9;23845:4;23841:20;23837:1;23826:9;23822:17;23815:47;23879:131;24005:4;23879:131;:::i;:::-;23871:139;;23598:419;;;:::o;24023:332::-;24144:4;24182:2;24171:9;24167:18;24159:26;;24195:71;24263:1;24252:9;24248:17;24239:6;24195:71;:::i;:::-;24276:72;24344:2;24333:9;24329:18;24320:6;24276:72;:::i;:::-;24023:332;;;;;:::o;24361:348::-;24401:7;24424:20;24442:1;24424:20;:::i;:::-;24419:25;;24458:20;24476:1;24458:20;:::i;:::-;24453:25;;24646:1;24578:66;24574:74;24571:1;24568:81;24563:1;24556:9;24549:17;24545:105;24542:131;;;24653:18;;:::i;:::-;24542:131;24701:1;24698;24694:9;24683:20;;24361:348;;;;:::o;24715:191::-;24755:4;24775:20;24793:1;24775:20;:::i;:::-;24770:25;;24809:20;24827:1;24809:20;:::i;:::-;24804:25;;24848:1;24845;24842:8;24839:34;;;24853:18;;:::i;:::-;24839:34;24898:1;24895;24891:9;24883:17;;24715:191;;;;:::o;24912:180::-;24960:77;24957:1;24950:88;25057:4;25054:1;25047:15;25081:4;25078:1;25071:15;25098:180;25146:77;25143:1;25136:88;25243:4;25240:1;25233:15;25267:4;25264:1;25257:15;25284:143;25341:5;25372:6;25366:13;25357:22;;25388:33;25415:5;25388:33;:::i;:::-;25284:143;;;;:::o;25433:351::-;25503:6;25552:2;25540:9;25531:7;25527:23;25523:32;25520:119;;;25558:79;;:::i;:::-;25520:119;25678:1;25703:64;25759:7;25750:6;25739:9;25735:22;25703:64;:::i;:::-;25693:74;;25649:128;25433:351;;;;:::o;25790:85::-;25835:7;25864:5;25853:16;;25790:85;;;:::o;25881:158::-;25939:9;25972:61;25990:42;25999:32;26025:5;25999:32;:::i;:::-;25990:42;:::i;:::-;25972:61;:::i;:::-;25959:74;;25881:158;;;:::o;26045:147::-;26140:45;26179:5;26140:45;:::i;:::-;26135:3;26128:58;26045:147;;:::o;26198:114::-;26265:6;26299:5;26293:12;26283:22;;26198:114;;;:::o;26318:184::-;26417:11;26451:6;26446:3;26439:19;26491:4;26486:3;26482:14;26467:29;;26318:184;;;;:::o;26508:132::-;26575:4;26598:3;26590:11;;26628:4;26623:3;26619:14;26611:22;;26508:132;;;:::o;26646:108::-;26723:24;26741:5;26723:24;:::i;:::-;26718:3;26711:37;26646:108;;:::o;26760:179::-;26829:10;26850:46;26892:3;26884:6;26850:46;:::i;:::-;26928:4;26923:3;26919:14;26905:28;;26760:179;;;;:::o;26945:113::-;27015:4;27047;27042:3;27038:14;27030:22;;26945:113;;;:::o;27094:732::-;27213:3;27242:54;27290:5;27242:54;:::i;:::-;27312:86;27391:6;27386:3;27312:86;:::i;:::-;27305:93;;27422:56;27472:5;27422:56;:::i;:::-;27501:7;27532:1;27517:284;27542:6;27539:1;27536:13;27517:284;;;27618:6;27612:13;27645:63;27704:3;27689:13;27645:63;:::i;:::-;27638:70;;27731:60;27784:6;27731:60;:::i;:::-;27721:70;;27577:224;27564:1;27561;27557:9;27552:14;;27517:284;;;27521:14;27817:3;27810:10;;27218:608;;;27094:732;;;;:::o;27832:831::-;28095:4;28133:3;28122:9;28118:19;28110:27;;28147:71;28215:1;28204:9;28200:17;28191:6;28147:71;:::i;:::-;28228:80;28304:2;28293:9;28289:18;28280:6;28228:80;:::i;:::-;28355:9;28349:4;28345:20;28340:2;28329:9;28325:18;28318:48;28383:108;28486:4;28477:6;28383:108;:::i;:::-;28375:116;;28501:72;28569:2;28558:9;28554:18;28545:6;28501:72;:::i;:::-;28583:73;28651:3;28640:9;28636:19;28627:6;28583:73;:::i;:::-;27832:831;;;;;;;;:::o;28669:807::-;28918:4;28956:3;28945:9;28941:19;28933:27;;28970:71;29038:1;29027:9;29023:17;29014:6;28970:71;:::i;:::-;29051:72;29119:2;29108:9;29104:18;29095:6;29051:72;:::i;:::-;29133:80;29209:2;29198:9;29194:18;29185:6;29133:80;:::i;:::-;29223;29299:2;29288:9;29284:18;29275:6;29223:80;:::i;:::-;29313:73;29381:3;29370:9;29366:19;29357:6;29313:73;:::i;:::-;29396;29464:3;29453:9;29449:19;29440:6;29396:73;:::i;:::-;28669:807;;;;;;;;;:::o;29482:143::-;29539:5;29570:6;29564:13;29555:22;;29586:33;29613:5;29586:33;:::i;:::-;29482:143;;;;:::o;29631:663::-;29719:6;29727;29735;29784:2;29772:9;29763:7;29759:23;29755:32;29752:119;;;29790:79;;:::i;:::-;29752:119;29910:1;29935:64;29991:7;29982:6;29971:9;29967:22;29935:64;:::i;:::-;29925:74;;29881:128;30048:2;30074:64;30130:7;30121:6;30110:9;30106:22;30074:64;:::i;:::-;30064:74;;30019:129;30187:2;30213:64;30269:7;30260:6;30249:9;30245:22;30213:64;:::i;:::-;30203:74;;30158:129;29631:663;;;;;:::o

Swarm Source

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