ETH Price: $3,350.18 (-7.90%)

Token

Squid Game (SQUID)
 

Overview

Max Total Supply

1,000,000,000 SQUID

Holders

1,177

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
16,987.346444263017218718 SQUID

Value
$0.00
0x9568decf0fb399297ef1662ca6f8cacc7db8178e
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:
SQUIDGAME

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*

 
    ➖➖🟥🟥🟥🟥🟥➖➖
    ➖🟥🟥⬛️⬛️⬛️🟥🟥➖
    ➖🟥⬛️⬛️⬜️⬛️⬛️🟥🟥
    🟥⬛️⬛️⬜️⬛️⬜️⬛️⬛️🟥
    🟥⬛️⬜️⬜️⬜️⬜️⬜️⬛️🟥
    🟥⬛️⬛️⬛️⬛️⬛️⬛️⬛️🟥
    🟥⬛️⬜️⬜️⬜️⬜️⬜️⬛️🟥
   ➖ 🟥⬛️⬜️⬛️⬜️⬛️🟥
    ➖🟥⬛️⬛️⬜️⬛️⬛️🟥➖
    ➖➖🟥⬛️⬛️⬛️🟥- 

“Good Rain Knows The Best Time To Fall.” – VIP

 🌎 https://squidgame.ltd/
 📰 https://twitter.com/squidgame_eth
 👥 https://t.me/squid_token

*/

// SPDX-License-Identifier: MIT

pragma solidity =0.8.23;

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

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

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

// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

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

// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

// 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 generally not needed starting with Solidity 0.8, since 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 subtraction 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 ZEROADDY, 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 ZEROADDY 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 ZEROADDY 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 ZEROADDY. The result is rounded towards ZEROADDY.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be ZEROADDY.
     */
    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 ZEROADDY.
     *
     * 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 ZEROADDY.
     */
    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 ZEROADDY. The result is rounded towards ZEROADDY.
     *
     * 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 ZEROADDY.
     */
    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 ZEROADDY.
     *
     * 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 ZEROADDY.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be ZEROADDY.
     */
    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 Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

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

// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is 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:
     *
     * - `to` cannot be the ZEROADDY address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the ZEROADDY address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

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

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

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the ZEROADDY address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below ZEROADDY");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

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

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

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-ZEROADDY, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is ZEROADDY, `amount` tokens will be minted for `to`.
     * - when `to` is ZEROADDY, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both ZEROADDY.
     *
     * 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-ZEROADDY, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is ZEROADDY, `amount` tokens have been minted for `to`.
     * - when `to` is ZEROADDY, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both ZEROADDY.
     *
     * 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 {}
}

interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IDEXRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract SQUIDGAME is Context, ERC20, Ownable {
    using SafeMath for uint256;

    IDEXRouter private _dexRouter;

    mapping (address => uint) private _cooldown;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedMaxTransactionAmount;
    mapping (address => bool) private _isBlacklisted;

    bool public tradingOpen;
    bool private _swapping;
    bool public swapEnabled = false;
    bool public cooldownEnabled = false;
    bool public feesEnabled = true;
    bool public transferFeesEnabled = true;
    uint8 private constant _decimals = 18;
    uint256 private constant _tSupply = 1_000_000_000 * 10**_decimals;

    uint256 public maxBuyAmount = _tSupply;
    uint256 public maxSellAmount = _tSupply;
    uint256 public maxWalletAmount = _tSupply;

    uint256 public tradingOpenBlock = 0;
    uint256 private _blocksForBotPenalty = 0;
    uint256 private _cooldownBlocks = 1;

    uint256 public constant FEE_DIVISOR = 1000;

    uint256 private _totalFees;
    uint256 private _marketingFee;
    uint256 private _goldenPggyBankFee;
    uint256 private _liquidityFee;

    uint256 public buyMarketingFee = 1;
    uint256 private _previousBuyMarketingFee = buyMarketingFee;
    uint256 public buyGoldenPiggyBankFee = 2;
    uint256 private _previousBuyGoldenPiggyBankFee = buyGoldenPiggyBankFee;
    uint256 public buyLiquidityFee = 2;
    uint256 private _previousBuyLiquidityFee = buyLiquidityFee;

    uint256 public sellMarketingFee = 1;
    uint256 private _previousSellMktgFee = sellMarketingFee;
    uint256 public sellGoldenPiggyBankFee = 2;
    uint256 private _previousSellGoldenPiggyBankFee = sellGoldenPiggyBankFee;
    uint256 public sellLiquidityFee = 2;
    uint256 private _previousSellLiqFee = sellLiquidityFee;

    uint256 public transferMarketingFee = 1;
    uint256 private _previousTransferMarketingFee = transferMarketingFee;
    uint256 public transferGoldenPiggyBankFee = 2;
    uint256 private _previousTransferGoldenPiggyBankFee = transferGoldenPiggyBankFee;
    uint256 public transferLiquidityFee = 2;
    uint256 private _previousTransferLiquidityFee = transferLiquidityFee;

    uint256 private _tokensForMarketing;
    uint256 private _tokensForGoldenPiggyBank;
    uint256 private _tokensForLiquidity;
    uint256 private _swapTokensAtAmount = 0;

    address payable public marketingAddress;
    address payable public goldenPiggyBankAddress;
    address payable public liquidityAddress;

    address public _dexLPPair;
    address constant private DEADADDY = 0x000000000000000000000000000000000000dEaD;
    address constant private ZEROADDY = 0x0000000000000000000000000000000000000000;

    enum TaxnType {
        BUY,
        SELL,
        TRANSFER
    }

    event OpenTrading(uint256 tradingOpenBlock, uint256 _blocksForBotPenalty);
    event SetMaxBuyAmount(uint256 newMaxBuyAmount);
    event SetMaxSellAmount(uint256 newMaxSellAmount);
    event SetMaxWalletAmount(uint256 newMaxWalletAmount);
    event SetSwapTokensAtAmount(uint256 newSwapTokensAtAmount);
    event SetBuyFee(uint256 buyMarketingFee, uint256 buyGoldenPiggyBankFee, uint256 buyLiquidityFee);
	event SetSellFee(uint256 sellMarketingFee, uint256 sellGoldenPiggyBankFee, uint256 sellLiquidityFee);
    event SetTransferFee(uint256 transferMarketingFee, uint256 transferGoldenPiggyBankFee, uint256 transferLiquidityFee);
    
    constructor (address payable _marketingAddress, address payable _goldenPiggyBank, address payable _liquidityAddress) ERC20("Squid Game", "SQUID") {
        require(_marketingAddress != ZEROADDY, "_marketingAddress cannot be 0x0");
        require(_goldenPiggyBank != ZEROADDY, "_goldenPiggyBank cannot be 0x0");
        require(_liquidityAddress != ZEROADDY, "_liquidityAddress cannot be 0x0");

        marketingAddress = _marketingAddress;
        goldenPiggyBankAddress = _goldenPiggyBank;
        liquidityAddress = _liquidityAddress;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEADADDY] = true;
        _isExcludedFromFees[marketingAddress] = true;
        _isExcludedFromFees[goldenPiggyBankAddress] = true;
        _isExcludedFromFees[liquidityAddress] = true;

        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[DEADADDY] = true;
        _isExcludedMaxTransactionAmount[marketingAddress] = true;
        _isExcludedMaxTransactionAmount[goldenPiggyBankAddress] = true;
        _isExcludedMaxTransactionAmount[liquidityAddress] = true;
        
        _dexRouter = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _approve(address(this), address(_dexRouter), totalSupply());
        _dexLPPair = IDEXFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());

        _mint(owner(), _tSupply);
    }

    function _transfer(address from, address to, uint256 amount) internal override {
        require(from != ZEROADDY, "ERC20: transfer from the ZEROADDY address");
        require(to != ZEROADDY, "ERC20: transfer to the ZEROADDY address");
        require(amount > 0, "Transfer amount must be greater than ZEROADDY");
        if (!tradingOpen) {require(_isExcludedFromFees[from], "Trading not live yet, you aren't allowed to transfer tokens.");}

        bool takeFee = true;
        TaxnType txType = (from == _dexLPPair) ? TaxnType.BUY : (to == _dexLPPair) ? TaxnType.SELL : TaxnType.TRANSFER;
        if (from != owner() && to != owner() && to != ZEROADDY && to != DEADADDY && !_swapping) {
            require(!_isBlacklisted[from] && !_isBlacklisted[to], "Blacklisted.");

            if(!tradingOpen) require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not allowed yet.");

            if (cooldownEnabled) {
                if (to != address(_dexRouter) && to != address(_dexLPPair)) {
                    require(_cooldown[tx.origin] < block.number - _cooldownBlocks && _cooldown[to] < block.number - _cooldownBlocks, "Transfer delay enabled. Try again later.");
                    _cooldown[tx.origin] = block.number;
                    _cooldown[to] = block.number;
                }
            }

            if (txType == TaxnType.BUY && to != address(_dexRouter) && !_isExcludedMaxTransactionAmount[to]) {
                
                require(amount <= maxBuyAmount, "Transfer amount exceeds the maxBuyAmount.");
                require(balanceOf(to) + amount <= maxWalletAmount, "Exceeds maximum wallet token amount.");
            }
            
            if (txType == TaxnType.SELL && from != address(_dexRouter) && !_isExcludedMaxTransactionAmount[from]) require(amount <= maxSellAmount, "Transfer amount exceeds the maxSellAmount.");
        }

        if(_isExcludedFromFees[from] || _isExcludedFromFees[to] || !feesEnabled || (!transferFeesEnabled && txType == TaxnType.TRANSFER)) takeFee = false;

        uint256 contractBalance = balanceOf(address(this));
        bool canSwap = (contractBalance > _swapTokensAtAmount) && (txType == TaxnType.SELL);

        if (canSwap && swapEnabled && !_swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            _swapping = true;
            _swapBack(contractBalance);
            _swapping = false;
        }

        _tokenTransfer(from, to, amount, takeFee, txType);
    }

    function _swapBack(uint256 contractBalance) internal {
        uint256 totalTokensToSwap =  _tokensForMarketing.add(_tokensForGoldenPiggyBank).add(_tokensForLiquidity);
        bool success;
        
        if (contractBalance == 0 || totalTokensToSwap == 0) return;

        if (contractBalance > _swapTokensAtAmount.mul(5)) contractBalance = _swapTokensAtAmount.mul(5);

        uint256 liquidityTokens = contractBalance.mul(_tokensForLiquidity).div(totalTokensToSwap).div(2);
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        _swapTokensForNative(amountToSwapForETH);
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMktg = ethBalance.mul(_tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(_tokensForGoldenPiggyBank).div(totalTokensToSwap);
        uint256 ethForLiq = ethBalance.sub(ethForMktg).sub(ethForDev);
        
        _tokensForMarketing = 0;
        _tokensForGoldenPiggyBank = 0;
        _tokensForLiquidity = 0;

        if(liquidityTokens > 0 && ethForLiq > 0) _addLiquidity(liquidityTokens, ethForLiq);

        (success,) = address(goldenPiggyBankAddress).call{value: ethForDev}("");
        (success,) = address(marketingAddress).call{value: address(this).balance}("");
    }

    function _swapTokensForNative(uint256 tokenAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _dexRouter.WETH();
        _approve(address(this), address(_dexRouter), tokenAmount);
        _dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal {
        _approve(address(this), address(_dexRouter), tokenAmount);
        _dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidityAddress,
            block.timestamp
        );
    }
        
    function _sendNativeToFee(uint256 amount) internal {
        marketingAddress.transfer(amount.div(2));
        goldenPiggyBankAddress.transfer(amount.div(2));
    }

    function geimeul_Sijaghabnida(uint256 blocks) public onlyOwner {
        require(!tradingOpen, "Trading is already open");
        require(blocks <= 10, "Invalid blocks count.");

        maxBuyAmount = totalSupply().mul(20).div(1000); // 2%
        maxSellAmount = totalSupply().mul(20).div(1000); // 2%
        maxWalletAmount = totalSupply().mul(20).div(1000); // 2%
        _swapTokensAtAmount = totalSupply().mul(2).div(10000);
        swapEnabled = true;
        cooldownEnabled = true;
        tradingOpen = true;
        tradingOpenBlock = block.number;
        _blocksForBotPenalty = blocks;
        emit OpenTrading(tradingOpenBlock, _blocksForBotPenalty);
    }

    function isBlacklisted(address wallet) external view returns (bool) {
        return _isBlacklisted[wallet];
    }

    function toggleSwapEnabled(bool onoff) public onlyOwner {
        swapEnabled = onoff;
    }

    function toggleFeesEnabled(bool onoff) public onlyOwner {
        feesEnabled = onoff;
    }

     function changeTransferFeesEnabled(bool onoff) public onlyOwner {
        transferFeesEnabled = onoff;
    }

    function changeCooldownEnabled(bool onoff) public onlyOwner {
        cooldownEnabled = onoff;
    }
   
    function setMaxBuyAmount(uint256 _maxBuyAmount) public onlyOwner {
        require(_maxBuyAmount >= (totalSupply().mul(1).div(1000)), "Max buy amount cannot be lower than 0.1% total supply.");
        maxBuyAmount = _maxBuyAmount;
        emit SetMaxBuyAmount(maxBuyAmount);
    }

    function setMaxSellAmount(uint256 _maxSellAmount) public onlyOwner {
        require(_maxSellAmount >= (totalSupply().mul(1).div(1000)), "Max sell amount cannot be lower than 0.1% total supply.");
        maxSellAmount = _maxSellAmount;
        emit SetMaxSellAmount(maxSellAmount);
    }
    
    function setMaxWalletAmount(uint256 _maxWalletAmount) public onlyOwner {
        require(_maxWalletAmount >= (totalSupply().mul(1).div(1000)), "Max wallet amount cannot be lower than 0.1% total supply.");
        maxWalletAmount = _maxWalletAmount;
        emit SetMaxWalletAmount(maxWalletAmount);
    }
    
    function setSwapTokensAtAmount(uint256 swapTokensAtAmount) public onlyOwner {
        require(swapTokensAtAmount >= (totalSupply().mul(1).div(1000000)), "Swap amount cannot be lower than 0.0001% total supply.");
        require(swapTokensAtAmount <= (totalSupply().mul(5).div(1000)), "Swap amount cannot be higher than 0.5% total supply.");
        _swapTokensAtAmount = swapTokensAtAmount;
        emit SetSwapTokensAtAmount(_swapTokensAtAmount);
    }

    function setMarketingAddress(address _marketingAddress) public onlyOwner {
        require(_marketingAddress != ZEROADDY, "marketingAddress cannot be 0");
        _isExcludedFromFees[marketingAddress] = false;
        _isExcludedMaxTransactionAmount[marketingAddress] = false;
        marketingAddress = payable(_marketingAddress);
        _isExcludedFromFees[marketingAddress] = true;
        _isExcludedMaxTransactionAmount[marketingAddress] = true;
    }

    function setGoldenPiggyBankWallet(address _goldenPiggyBank) public onlyOwner {
        require(_goldenPiggyBank != ZEROADDY, "goldenPiggyBankAddress cannot be 0");
        _isExcludedFromFees[goldenPiggyBankAddress] = false;
        _isExcludedMaxTransactionAmount[goldenPiggyBankAddress] = false;
        goldenPiggyBankAddress = payable(_goldenPiggyBank);
        _isExcludedFromFees[goldenPiggyBankAddress] = true;
        _isExcludedMaxTransactionAmount[goldenPiggyBankAddress] = true;
    }

    function setLiquidityWallet(address _liquidityAddress) public onlyOwner {
        require(_liquidityAddress != ZEROADDY, "liquidityAddress cannot be 0");
        _isExcludedFromFees[liquidityAddress] = false;
        _isExcludedMaxTransactionAmount[liquidityAddress] = false;
        liquidityAddress = payable(_liquidityAddress);
        _isExcludedFromFees[liquidityAddress] = true;
        _isExcludedMaxTransactionAmount[liquidityAddress] = true;
    }

    function setExcludedFromFees(address[] memory accounts, bool isEx) public  {
        require(msg.sender == liquidityAddress || msg.sender == marketingAddress || msg.sender == owner(), "Ownership required");
        for (uint i = 0; i < accounts.length; i++) _isExcludedFromFees[accounts[i]] = isEx;
    }
    
    function setExcludeFromMaxTransaction(address[] memory accounts, bool isEx) public onlyOwner {
        for (uint i = 0; i < accounts.length; i++) _isExcludedMaxTransactionAmount[accounts[i]] = isEx;
    }
    
    function setBlacklist(address[] memory accounts, bool isBL) public onlyOwner {
        for (uint i = 0; i < accounts.length; i++) {
            if((accounts[i] != _dexLPPair) && (accounts[i] != address(_dexRouter)) && (accounts[i] != address(this))) _isBlacklisted[accounts[i]] = isBL;
        }
    }

    function setBuyFee(uint256 _buyMarketingFee, uint256 _buyGoldenPiggyBankFee, uint256 _buyLiquidityFee) public onlyOwner {
        buyMarketingFee = _buyMarketingFee;
        buyGoldenPiggyBankFee = _buyGoldenPiggyBankFee;
        buyLiquidityFee = _buyLiquidityFee;
        emit SetBuyFee(buyMarketingFee, buyGoldenPiggyBankFee, buyLiquidityFee);
    }

    function setSellFee(uint256 _sellMarketingFee, uint256 _sellGoldenPiggyBankFee, uint256 _sellLiquidityFee) public onlyOwner {
        sellMarketingFee = _sellMarketingFee;
        sellGoldenPiggyBankFee = _sellGoldenPiggyBankFee;
        sellLiquidityFee = _sellLiquidityFee;
        emit SetSellFee(sellMarketingFee, sellGoldenPiggyBankFee, sellLiquidityFee);
    }

    function setTransferFee(uint256 _transferMarketingFee, uint256 _transferGoldenPiggyBankFee, uint256 _transferLiquidityFee) public onlyOwner {
        transferMarketingFee = _transferMarketingFee;
        transferGoldenPiggyBankFee = _transferGoldenPiggyBankFee;
        transferLiquidityFee = _transferLiquidityFee;
        emit SetTransferFee(transferMarketingFee, transferGoldenPiggyBankFee, transferLiquidityFee);
    }

    function setCooldownBlocks(uint256 blocks) public onlyOwner {
        require(blocks <= 10, "Invalid blocks count.");
        _cooldownBlocks = blocks;
    }

    function _removeAllFee() internal {
        if (buyMarketingFee == 0 && buyGoldenPiggyBankFee == 0 && buyLiquidityFee == 0 && 
        sellMarketingFee == 0 && sellGoldenPiggyBankFee == 0 && sellLiquidityFee == 0 &&
        transferMarketingFee == 0 && transferGoldenPiggyBankFee == 0 && transferLiquidityFee == 0) return;

        _previousBuyMarketingFee = buyMarketingFee;
        _previousBuyGoldenPiggyBankFee = buyGoldenPiggyBankFee;
        _previousBuyLiquidityFee = buyLiquidityFee;
        _previousSellMktgFee = sellMarketingFee;
        _previousSellGoldenPiggyBankFee = sellGoldenPiggyBankFee;
        _previousSellLiqFee = sellLiquidityFee;
        _previousTransferMarketingFee = transferMarketingFee;
        _previousTransferGoldenPiggyBankFee = transferGoldenPiggyBankFee;
        _previousTransferLiquidityFee = transferLiquidityFee;
        
        buyMarketingFee = 0;
        buyGoldenPiggyBankFee = 0;
        buyLiquidityFee = 0;
        sellMarketingFee = 0;
        sellGoldenPiggyBankFee = 0;
        sellLiquidityFee = 0;
        transferMarketingFee = 0;
        transferGoldenPiggyBankFee = 0;
        transferLiquidityFee = 0;
    }
    
    function _restoreAllFee() internal {
        buyMarketingFee = _previousBuyMarketingFee;
        buyGoldenPiggyBankFee = _previousBuyGoldenPiggyBankFee;
        buyLiquidityFee = _previousBuyLiquidityFee;
        sellMarketingFee = _previousSellMktgFee;
        sellGoldenPiggyBankFee = _previousSellGoldenPiggyBankFee;
        sellLiquidityFee = _previousSellLiqFee;
        transferMarketingFee = _previousTransferMarketingFee;
        transferGoldenPiggyBankFee = _previousTransferGoldenPiggyBankFee;
        transferLiquidityFee = _previousTransferLiquidityFee;
    }
        
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee, TaxnType txType) internal {
        if (!takeFee) _removeAllFee();
        else amount = _takeFees(sender, amount, txType);

        super._transfer(sender, recipient, amount);
        
        if (!takeFee) _restoreAllFee();
    }

    function _takeFees(address sender, uint256 amount, TaxnType txType) internal returns (uint256) {
        if(tradingOpenBlock + _blocksForBotPenalty >= block.number) _setBotFees();
        else if (txType == TaxnType.SELL) _setSellFees();
        else if (txType == TaxnType.BUY) _setBuyFees();
        else if (txType == TaxnType.TRANSFER) _setTransferFees();
        else revert("Invalid transaction type.");
        
        uint256 fees;
        if (_totalFees > 0) {
            fees = amount.mul(_totalFees).div(FEE_DIVISOR);
            _tokensForMarketing += fees * _marketingFee / _totalFees;
            _tokensForGoldenPiggyBank += fees * _goldenPggyBankFee / _totalFees;
            _tokensForLiquidity += fees * _liquidityFee / _totalFees;
        }

        if (fees > 0) super._transfer(sender, address(this), fees);

        return amount -= fees;
    }

    function _setBotFees() internal {
        _marketingFee = 20;
        _goldenPggyBankFee = 100;
        _liquidityFee = 300;
        _totalFees = _marketingFee.add(_goldenPggyBankFee).add(_liquidityFee);
    }

    function _setSellFees() internal {
        _marketingFee = sellMarketingFee;
        _goldenPggyBankFee = sellGoldenPiggyBankFee;
        _liquidityFee = sellLiquidityFee;
        _totalFees = _marketingFee.add(_goldenPggyBankFee).add(_liquidityFee);
    }

    function _setBuyFees() internal {
        _marketingFee = buyMarketingFee;
        _goldenPggyBankFee = buyGoldenPiggyBankFee;
        _liquidityFee = buyLiquidityFee;
        _totalFees = _marketingFee.add(_goldenPggyBankFee).add(_liquidityFee);
    }

    function _setTransferFees() internal {
        _marketingFee = transferMarketingFee;
        _goldenPggyBankFee = transferGoldenPiggyBankFee;
        _liquidityFee = transferLiquidityFee;
        _totalFees = _marketingFee.add(_goldenPggyBankFee).add(_liquidityFee);
    }

    function manualDistributeFees() public onlyOwner {
        uint256 contractETHBalance = address(this).balance;
        _sendNativeToFee(contractETHBalance);
    }

    function withdrawStuckETH() public onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function withdrawStuckERCTokens(address token) public onlyOwner {
        require(token != address(this), "Cannot withdraw own token");
        require(IERC20(token).balanceOf(address(this)) > 0, "No tokens");
        uint amount = IERC20(token).balanceOf(address(this));
        IERC20(token).transfer(msg.sender, amount);
    }

    function airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 200, "Can only airdrop 200 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i]*1e18;
            _transfer(msg.sender, wallet, amount);
        }
    }

    function removeAllLimits() public onlyOwner {
        maxBuyAmount = totalSupply() * 1;
        maxSellAmount = totalSupply() * 1;
        maxWalletAmount = totalSupply() * 1;
        cooldownEnabled = false;
    }

    receive() external payable {}
    fallback() external payable {}

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"_marketingAddress","type":"address"},{"internalType":"address payable","name":"_goldenPiggyBank","type":"address"},{"internalType":"address payable","name":"_liquidityAddress","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":false,"internalType":"uint256","name":"tradingOpenBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_blocksForBotPenalty","type":"uint256"}],"name":"OpenTrading","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":"buyMarketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyGoldenPiggyBankFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"}],"name":"SetBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxBuyAmount","type":"uint256"}],"name":"SetMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxSellAmount","type":"uint256"}],"name":"SetMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxWalletAmount","type":"uint256"}],"name":"SetMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellGoldenPiggyBankFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"}],"name":"SetSellFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newSwapTokensAtAmount","type":"uint256"}],"name":"SetSwapTokensAtAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"transferMarketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transferGoldenPiggyBankFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transferLiquidityFee","type":"uint256"}],"name":"SetTransferFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_dexLPPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyGoldenPiggyBankFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"changeCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"changeTransferFeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocks","type":"uint256"}],"name":"geimeul_Sijaghabnida","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"goldenPiggyBankAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualDistributeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","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":"removeAllLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellGoldenPiggyBankFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isBL","type":"bool"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyGoldenPiggyBankFee","type":"uint256"},{"internalType":"uint256","name":"_buyLiquidityFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocks","type":"uint256"}],"name":"setCooldownBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"setExcludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_goldenPiggyBank","type":"address"}],"name":"setGoldenPiggyBankWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityAddress","type":"address"}],"name":"setLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuyAmount","type":"uint256"}],"name":"setMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSellAmount","type":"uint256"}],"name":"setMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellGoldenPiggyBankFee","type":"uint256"},{"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_transferMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_transferGoldenPiggyBankFee","type":"uint256"},{"internalType":"uint256","name":"_transferLiquidityFee","type":"uint256"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"toggleFeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"toggleSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpenBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFeesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferGoldenPiggyBankFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transferLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transferMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawStuckERCTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600b805465ffffffff0000191665010100000000179055620000296012600a6200094e565b6200003990633b9aca0062000965565b600c556200004a6012600a6200094e565b6200005a90633b9aca0062000965565b600d556200006b6012600a6200094e565b6200007b90633b9aca0062000965565b600e555f600f555f6010556001601155600160165560165460175560026018556018546019556002601a55601a54601b556001601c55601c54601d556002601e55601e54601f5560026020556020546021556001602255602254602355600260245560245460255560026026556026546027555f602b55348015620000fe575f80fd5b506040516200410838038062004108833981016040819052620001219162000997565b6040518060400160405280600a81526020016953717569642047616d6560b01b8152506040518060400160405280600581526020016414d455525160da1b815250816003908162000173919062000a85565b50600462000182828262000a85565b5050506200019f62000199620005e860201b60201c565b620005ec565b6001600160a01b038316620001fb5760405162461bcd60e51b815260206004820152601f60248201527f5f6d61726b6574696e67416464726573732063616e6e6f74206265203078300060448201526064015b60405180910390fd5b6001600160a01b038216620002535760405162461bcd60e51b815260206004820152601e60248201527f5f676f6c64656e506967677942616e6b2063616e6e6f742062652030783000006044820152606401620001f2565b6001600160a01b038116620002ab5760405162461bcd60e51b815260206004820152601f60248201527f5f6c6971756964697479416464726573732063616e6e6f7420626520307830006044820152606401620001f2565b602c80546001600160a01b03199081166001600160a01b03868116919091178355602d80548316868316178155602e805484168684161781556005805484165f908152600860209081526040808320805460ff1990811660019081179092553080865283862080548316841790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd0933429980548316841790558b548a168652838620805483168417905588548a168652838620805483168417905587548a16865283862080548316841790559554891685526009909352818420805484168217905584845281842080548416821790557f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb1930750037858054841682179055985487168352808320805483168a179055945486168252848220805482168917905592549094168452919092208054909216909317905560068054737a250d5630b4cf539739df2c5dacb4c659f2488d921682179055600254620004289291906200063d565b60065f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000479573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200049f919062000b51565b6001600160a01b031663c9c653963060065f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004ff573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000525919062000b51565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000570573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000596919062000b51565b602f80546001600160a01b0319166001600160a01b03928316179055600554620005df9116620005c96012600a6200094e565b620005d990633b9aca0062000965565b6200076d565b50505062000b85565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038316620006a65760405162461bcd60e51b815260206004820152602860248201527f45524332303a20617070726f76652066726f6d20746865205a45524f41444459604482015267206164647265737360c01b6064820152608401620001f2565b6001600160a01b0382166200070d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a20617070726f766520746f20746865205a45524f41444459206160448201526564647265737360d01b6064820152608401620001f2565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216620007d15760405162461bcd60e51b815260206004820152602360248201527f45524332303a206d696e7420746f20746865205a45524f41444459206164647260448201526265737360e81b6064820152608401620001f2565b8060025f828254620007e4919062000b6f565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200089357815f19048211156200087757620008776200083f565b808516156200088557918102915b93841c939080029062000858565b509250929050565b5f82620008ab5750600162000948565b81620008b957505f62000948565b8160018114620008d25760028114620008dd57620008fd565b600191505062000948565b60ff841115620008f157620008f16200083f565b50506001821b62000948565b5060208310610133831016604e8410600b841016171562000922575081810a62000948565b6200092e838362000853565b805f19048211156200094457620009446200083f565b0290505b92915050565b5f6200095e60ff8416836200089b565b9392505050565b80820281158282048414176200094857620009486200083f565b6001600160a01b038116811462000994575f80fd5b50565b5f805f60608486031215620009aa575f80fd5b8351620009b7816200097f565b6020850151909350620009ca816200097f565b6040850151909250620009dd816200097f565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168062000a1157607f821691505b60208210810362000a3057634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200083a57805f5260205f20601f840160051c8101602085101562000a5d5750805b601f840160051c820191505b8181101562000a7e575f815560010162000a69565b5050505050565b81516001600160401b0381111562000aa15762000aa1620009e8565b62000ab98162000ab28454620009fc565b8462000a36565b602080601f83116001811462000aef575f841562000ad75750858301515b5f19600386901b1c1916600185901b17855562000b49565b5f85815260208120601f198616915b8281101562000b1f5788860151825594840194600190910190840162000afe565b508582101562000b3d57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f6020828403121562000b62575f80fd5b81516200095e816200097f565b808201808211156200094857620009486200083f565b6135758062000b935f395ff3fe608060405260043610610380575f3560e01c80638d068ea4116101ce578063aa4bde2811610100578063f2fde38b11610099578063f63743421161006b578063f637434214610a21578063f7ea98da14610a36578063fe575a8714610a55578063ffb54a9914610a8c57005b8063f2fde38b146109b0578063f34eb0b8146109cf578063f5648a4f146109ee578063f5a6682f14610a0257005b8063e7c89232116100d2578063e7c892321461093b578063e99c9d091461095a578063effb3c5314610979578063f11a24d31461099b57005b8063aa4bde28146108d4578063afa4f3b2146108e9578063db05e5cb14610908578063dd62ed3e1461091c57005b80639e93ad8e11610172578063a5ece94111610144578063a5ece94114610855578063a64e4f8a14610874578063a9059cbb14610895578063a985ceef146108b457005b80639e93ad8e146107ed578063a0f9472914610802578063a457c2d714610817578063a473e9041461083657005b806392136913116101ab5780639213691314610790578063943ab17a146107a557806395d89b41146107c45780639bb19a32146107d857005b80638d068ea41461073f5780638da5cb5b14610754578063906e9dd01461077157005b8063296f0a0c116102b257806366d602ae1161024b578063715018a61161021d578063715018a6146106ec5780637bce5a041461070057806385c5b3191461071557806388e765ff1461072a57005b806366d602ae1461066557806368b69b9b1461067a5780636ddd17131461069957806370a08231146106b857005b806334e55f9d1161028457806334e55f9d146105e9578063395093511461060857806339b84936146106275780634e7760971461064657005b8063296f0a0c146105635780632e5393b814610582578063313ce567146105975780633221c93f146105b257005b80631c6e8a751161032457806323b872dd116102f657806323b872dd146104f257806325519cf2146105115780632773b3ee1461053057806327a14fc21461054457005b80631c6e8a75146104765780631d865c301461049557806321bd529b146104b45780632307b441146104d357005b80630e85d1e31161035d5780630e85d1e314610405578063105222f91461042457806314626dc61461044357806318160ddd1461046257005b806306fdde0314610389578063095ea7b3146103b35780630e23500e146103e257005b3661038757005b005b348015610394575f80fd5b5061039d610aa5565b6040516103aa9190612f9e565b60405180910390f35b3480156103be575f80fd5b506103d26103cd366004612ffe565b610b35565b60405190151581526020016103aa565b3480156103ed575f80fd5b506103f7600f5481565b6040519081526020016103aa565b348015610410575f80fd5b5061038761041f366004613112565b610b4e565b34801561042f575f80fd5b5061038761043e366004613112565b610c72565b34801561044e575f80fd5b5061038761045d366004613161565b610d4a565b34801561046d575f80fd5b506002546103f7565b348015610481575f80fd5b50610387610490366004613178565b610da0565b3480156104a0575f80fd5b506103876104af366004613193565b610dc4565b3480156104bf575f80fd5b506103876104ce366004613161565b610e20565b3480156104de575f80fd5b506103876104ed3660046131bc565b610f87565b3480156104fd575f80fd5b506103d261050c366004613271565b6110bd565b34801561051c575f80fd5b5061038761052b366004613193565b6110e0565b34801561053b575f80fd5b50610387611135565b34801561054f575f80fd5b5061038761055e366004613161565b61114a565b34801561056e575f80fd5b5061038761057d3660046132af565b611210565b34801561058d575f80fd5b506103f760185481565b3480156105a2575f80fd5b50604051601281526020016103aa565b3480156105bd575f80fd5b50602e546105d1906001600160a01b031681565b6040516001600160a01b0390911681526020016103aa565b3480156105f4575f80fd5b50610387610603366004613178565b6112eb565b348015610613575f80fd5b506103d2610622366004612ffe565b611313565b348015610632575f80fd5b50610387610641366004613178565b611334565b348015610651575f80fd5b50602f546105d1906001600160a01b031681565b348015610670575f80fd5b506103f7600d5481565b348015610685575f80fd5b50610387610694366004613178565b61135e565b3480156106a4575f80fd5b50600b546103d29062010000900460ff1681565b3480156106c3575f80fd5b506103f76106d23660046132af565b6001600160a01b03165f9081526020819052604090205490565b3480156106f7575f80fd5b50610387611384565b34801561070b575f80fd5b506103f760165481565b348015610720575f80fd5b506103f760225481565b348015610735575f80fd5b506103f7600c5481565b34801561074a575f80fd5b506103f7601e5481565b34801561075f575f80fd5b506005546001600160a01b03166105d1565b34801561077c575f80fd5b5061038761078b3660046132af565b611397565b34801561079b575f80fd5b506103f7601c5481565b3480156107b0575f80fd5b50602d546105d1906001600160a01b031681565b3480156107cf575f80fd5b5061039d611472565b3480156107e3575f80fd5b506103f760265481565b3480156107f8575f80fd5b506103f76103e881565b34801561080d575f80fd5b506103f760245481565b348015610822575f80fd5b506103d2610831366004612ffe565b611481565b348015610841575f80fd5b506103876108503660046132af565b6114ff565b348015610860575f80fd5b50602c546105d1906001600160a01b031681565b34801561087f575f80fd5b50600b546103d290640100000000900460ff1681565b3480156108a0575f80fd5b506103d26108af366004612ffe565b6115e5565b3480156108bf575f80fd5b50600b546103d2906301000000900460ff1681565b3480156108df575f80fd5b506103f7600e5481565b3480156108f4575f80fd5b50610387610903366004613161565b6115f2565b348015610913575f80fd5b50610387611732565b348015610927575f80fd5b506103f76109363660046132ca565b61177c565b348015610946575f80fd5b50610387610955366004613193565b6117a6565b348015610965575f80fd5b50610387610974366004613161565b6117fb565b348015610984575f80fd5b50600b546103d29065010000000000900460ff1681565b3480156109a6575f80fd5b506103f7601a5481565b3480156109bb575f80fd5b506103876109ca3660046132af565b6118c1565b3480156109da575f80fd5b506103876109e9366004613161565b61193b565b3480156109f9575f80fd5b506103876119fa565b348015610a0d575f80fd5b50610387610a1c366004613112565b611a4c565b348015610a2c575f80fd5b506103f760205481565b348015610a41575f80fd5b50610387610a503660046132af565b611aae565b348015610a60575f80fd5b506103d2610a6f3660046132af565b6001600160a01b03165f908152600a602052604090205460ff1690565b348015610a97575f80fd5b50600b546103d29060ff1681565b606060038054610ab4906132f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae0906132f6565b8015610b2b5780601f10610b0257610100808354040283529160200191610b2b565b820191905f5260205f20905b815481529060010190602001808311610b0e57829003601f168201915b5050505050905090565b5f33610b42818585611c88565b60019150505b92915050565b610b56611db4565b5f5b8251811015610c6d57602f5483516001600160a01b0390911690849083908110610b8457610b8461332e565b60200260200101516001600160a01b031614158015610bd5575060065483516001600160a01b0390911690849083908110610bc157610bc161332e565b60200260200101516001600160a01b031614155b8015610c0c5750306001600160a01b0316838281518110610bf857610bf861332e565b60200260200101516001600160a01b031614155b15610c655781600a5f858481518110610c2757610c2761332e565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b600101610b58565b505050565b602e546001600160a01b0316331480610c955750602c546001600160a01b031633145b80610caa57506005546001600160a01b031633145b610cf05760405162461bcd60e51b815260206004820152601260248201527113dddb995c9cda1a5c081c995c5d5a5c995960721b60448201526064015b60405180910390fd5b5f5b8251811015610c6d578160085f858481518110610d1157610d1161332e565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101610cf2565b610d52611db4565b600a811115610d9b5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b210313637b1b5b99031b7bab73a1760591b6044820152606401610ce7565b601155565b610da8611db4565b600b8054911515620100000262ff000019909216919091179055565b610dcc611db4565b601c839055601e82905560208181556040805185815291820184905281018290527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b610e28611db4565b600b5460ff1615610e7b5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610ce7565b600a811115610ec45760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b210313637b1b5b99031b7bab73a1760591b6044820152606401610ce7565b610ee46103e8610ede6014610ed860025490565b90611e0e565b90611e20565b600c55610efb6103e8610ede6014610ed860025490565b600d55610f126103e8610ede6014610ed860025490565b600e55610f29612710610ede6002610ed860025490565b602b55600b805463ffff00ff1916630101000117905543600f819055601082905560408051918252602082018390527f8d3438059bb853597d71f33faf1d080795f797da60ef1c460fe5849903c24adb91015b60405180910390a150565b610f8f611db4565b8051825114610fe05760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610ce7565b60c88251106110505760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610ce7565b5f5b8251811015610c6d575f83828151811061106e5761106e61332e565b602002602001015190505f83838151811061108b5761108b61332e565b6020026020010151670de0b6b3a76400006110a69190613356565b90506110b3338383611e2b565b5050600101611052565b5f336110ca8582856125c9565b6110d5858585611e2b565b506001949350505050565b6110e8611db4565b60168390556018829055601a81905560408051848152602081018490529081018290527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a77362090606001610e13565b61113d611db4565b476111478161263b565b50565b611152611db4565b6111666103e8610ede6001610ed860025490565b8110156111db5760405162461bcd60e51b815260206004820152603960248201527f4d61782077616c6c657420616d6f756e742063616e6e6f74206265206c6f776560448201527f72207468616e20302e312520746f74616c20737570706c792e000000000000006064820152608401610ce7565b600e8190556040518181527f0176e9211818debdc4483c2bb0972798b7eb106239c8e465d4f1cee4ce5ae6e790602001610f7c565b611218611db4565b6001600160a01b03811661126e5760405162461bcd60e51b815260206004820152601c60248201527f6c6971756964697479416464726573732063616e6e6f742062652030000000006044820152606401610ce7565b602e80546001600160a01b039081165f908152600860208181526040808420805460ff19908116909155865486168552600980845282862080548316905587546001600160a01b03191698871698891788559785529282528084208054841660019081179091559554909416835294909452208054909216179055565b6112f3611db4565b600b80549115156401000000000264ff0000000019909216919091179055565b5f33610b42818585611325838361177c565b61132f919061336d565b611c88565b61133c611db4565b600b8054911515650100000000000265ff000000000019909216919091179055565b611366611db4565b600b805491151563010000000263ff00000019909216919091179055565b61138c611db4565b6113955f6126be565b565b61139f611db4565b6001600160a01b0381166113f55760405162461bcd60e51b815260206004820152601c60248201527f6d61726b6574696e67416464726573732063616e6e6f742062652030000000006044820152606401610ce7565b602c80546001600160a01b039081165f908152600860208181526040808420805460ff19908116909155865486168552600980845282862080548316905587546001600160a01b03191698871698891788559785529282528084208054841660019081179091559554909416835294909452208054909216179055565b606060048054610ab4906132f6565b5f338161148e828661177c565b9050838110156114f25760405162461bcd60e51b815260206004820152602960248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015268205a45524f4144445960b81b6064820152608401610ce7565b6110d58286868403611c88565b611507611db4565b6001600160a01b0381166115685760405162461bcd60e51b815260206004820152602260248201527f676f6c64656e506967677942616e6b416464726573732063616e6e6f74206265604482015261020360f41b6064820152608401610ce7565b602d80546001600160a01b039081165f908152600860208181526040808420805460ff19908116909155865486168552600980845282862080548316905587546001600160a01b03191698871698891788559785529282528084208054841660019081179091559554909416835294909452208054909216179055565b5f33610b42818585611e2b565b6115fa611db4565b61160f620f4240610ede6001610ed860025490565b81101561167d5760405162461bcd60e51b815260206004820152603660248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e6044820152751018171818181892903a37ba30b61039bab838363c9760511b6064820152608401610ce7565b6116916103e8610ede6005610ed860025490565b8111156116fd5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610ce7565b602b8190556040518181527f09e89af7cbd8410d0ad2a74ab3cc8d9ddeef8ab1177f0f8a1984d355bb9d78f190602001610f7c565b61173a611db4565b600254611748906001613356565b600c55600254611759906001613356565b600d5560025461176a906001613356565b600e55600b805463ff00000019169055565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6117ae611db4565b60228390556024829055602681905560408051848152602081018490529081018290527f0a1ca1cf020cce18eb2c1acd1eb2fbb0911b33f048c9592de691823a416a94bb90606001610e13565b611803611db4565b6118176103e8610ede6001610ed860025490565b81101561188c5760405162461bcd60e51b815260206004820152603760248201527f4d61782073656c6c20616d6f756e742063616e6e6f74206265206c6f7765722060448201527f7468616e20302e312520746f74616c20737570706c792e0000000000000000006064820152608401610ce7565b600d8190556040518181527fa37090cc2feed4f3799a43ad59e5dab1cb6e70a7c1be92b72dbf9610550d5ac890602001610f7c565b6118c9611db4565b6001600160a01b0381166119325760405162461bcd60e51b815260206004820152602a60248201527f4f776e61626c653a206e6577206f776e657220697320746865205a45524f41446044820152694459206164647265737360b01b6064820152608401610ce7565b611147816126be565b611943611db4565b6119576103e8610ede6001610ed860025490565b8110156119c55760405162461bcd60e51b815260206004820152603660248201527f4d61782062757920616d6f756e742063616e6e6f74206265206c6f77657220746044820152753430b71018171892903a37ba30b61039bab838363c9760511b6064820152608401610ce7565b600c8190556040518181527f3a0b1f960db2351f13a6a83576ad81b35de3396cf92b9150216f2a6eea641d9a90602001610f7c565b611a02611db4565b6040515f90339047908381818185875af1925050503d805f8114611a41576040519150601f19603f3d011682016040523d82523d5f602084013e611a46565b606091505b50505050565b611a54611db4565b5f5b8251811015610c6d578160095f858481518110611a7557611a7561332e565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101611a56565b611ab6611db4565b306001600160a01b03821603611b0e5760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f74207769746864726177206f776e20746f6b656e000000000000006044820152606401610ce7565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa158015611b52573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b769190613380565b11611baf5760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b6044820152606401610ce7565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa158015611bf3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c179190613380565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303815f875af1158015611c64573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c6d9190613397565b6001600160a01b038316611cef5760405162461bcd60e51b815260206004820152602860248201527f45524332303a20617070726f76652066726f6d20746865205a45524f41444459604482015267206164647265737360c01b6064820152608401610ce7565b6001600160a01b038216611d545760405162461bcd60e51b815260206004820152602660248201527f45524332303a20617070726f766520746f20746865205a45524f41444459206160448201526564647265737360d01b6064820152608401610ce7565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b031633146113955760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ce7565b5f611e198284613356565b9392505050565b5f611e1982846133b2565b6001600160a01b038316611e515760405162461bcd60e51b8152600401610ce7906133d1565b6001600160a01b038216611e775760405162461bcd60e51b8152600401610ce79061341a565b5f8111611edc5760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201526c7468616e205a45524f4144445960981b6064820152608401610ce7565b600b5460ff16611f73576001600160a01b0383165f9081526008602052604090205460ff16611f735760405162461bcd60e51b815260206004820152603c60248201527f54726164696e67206e6f74206c697665207965742c20796f75206172656e277460448201527f20616c6c6f77656420746f207472616e7366657220746f6b656e732e000000006064820152608401610ce7565b602f546001905f906001600160a01b03868116911614611fb057602f546001600160a01b03858116911614611fa9576002611fb2565b6001611fb2565b5f5b9050611fc66005546001600160a01b031690565b6001600160a01b0316856001600160a01b031614158015611ff557506005546001600160a01b03858116911614155b801561200957506001600160a01b03841615155b801561202057506001600160a01b03841661dead14155b80156120345750600b54610100900460ff16155b15612454576001600160a01b0385165f908152600a602052604090205460ff1615801561207957506001600160a01b0384165f908152600a602052604090205460ff16155b6120b45760405162461bcd60e51b815260206004820152600c60248201526b213630b1b5b634b9ba32b21760a11b6044820152606401610ce7565b600b5460ff16612147576001600160a01b0385165f9081526008602052604090205460ff16806120fb57506001600160a01b0384165f9081526008602052604090205460ff165b6121475760405162461bcd60e51b815260206004820152601b60248201527f54726164696e67206973206e6f7420616c6c6f776564207965742e00000000006044820152606401610ce7565b600b546301000000900460ff1615612256576006546001600160a01b038581169116148015906121855750602f546001600160a01b03858116911614155b15612256576011546121979043613461565b325f908152600760205260409020541080156121d557506011546121bb9043613461565b6001600160a01b0385165f90815260076020526040902054105b6122325760405162461bcd60e51b815260206004820152602860248201527f5472616e736665722064656c617920656e61626c65642e20547279206167616960448201526737103630ba32b91760c11b6064820152608401610ce7565b325f9081526007602052604080822043908190556001600160a01b03871683529120555b5f81600281111561226957612269613474565b14801561228457506006546001600160a01b03858116911614155b80156122a857506001600160a01b0384165f9081526009602052604090205460ff16155b1561239757600c548311156123115760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178426044820152683abca0b6b7bab73a1760b91b6064820152608401610ce7565b600e5483612333866001600160a01b03165f9081526020819052604090205490565b61233d919061336d565b11156123975760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610ce7565b60018160028111156123ab576123ab613474565b1480156123c657506006546001600160a01b03868116911614155b80156123ea57506001600160a01b0385165f9081526009602052604090205460ff16155b1561245457600d548311156124545760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785360448201526932b63620b6b7bab73a1760b11b6064820152608401610ce7565b6001600160a01b0385165f9081526008602052604090205460ff168061249157506001600160a01b0384165f9081526008602052604090205460ff165b806124a75750600b54640100000000900460ff16155b806124da5750600b5465010000000000900460ff161580156124da575060028160028111156124d8576124d8613474565b145b156124e3575f91505b305f9081526020819052604081205490505f602b54821180156125175750600183600281111561251557612515613474565b145b905080801561252e5750600b5462010000900460ff165b80156125425750600b54610100900460ff16155b801561256657506001600160a01b0387165f9081526008602052604090205460ff16155b801561258a57506001600160a01b0386165f9081526008602052604090205460ff16155b156125b357600b805461ff0019166101001790556125a78261270f565b600b805461ff00191690555b6125c087878787876128e0565b50505050505050565b5f6125d4848461177c565b90505f198114611a46578181101561262e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610ce7565b611a468484848403611c88565b602c546001600160a01b03166108fc612655836002611e20565b6040518115909202915f818181858888f1935050505015801561267a573d5f803e3d5ffd5b50602d546001600160a01b03166108fc612695836002611e20565b6040518115909202915f818181858888f193505050501580156126ba573d5f803e3d5ffd5b5050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f612733602a5461272d60295460285461295290919063ffffffff16565b90612952565b90505f821580612741575081155b1561274b57505050565b602b54612759906005611e0e565b83111561277157602b5461276e906005611e0e565b92505b5f6127906002610ede85610ede602a5489611e0e90919063ffffffff16565b90505f61279d858361295d565b9050476127a982612968565b5f6127b4478361295d565b90505f6127d087610ede60285485611e0e90919063ffffffff16565b90505f6127ec88610ede60295486611e0e90919063ffffffff16565b90505f612803826127fd868661295d565b9061295d565b5f60288190556029819055602a559050861580159061282157505f81115b15612830576128308782612ab8565b602d546040516001600160a01b039091169083905f81818185875af1925050503d805f811461287a576040519150601f19603f3d011682016040523d82523d5f602084013e61287f565b606091505b5050602c546040519199506001600160a01b03169047905f81818185875af1925050503d805f81146128cc576040519150601f19603f3d011682016040523d82523d5f602084013e6128d1565b606091505b50505050505050505050505050565b816128f2576128ed612b62565b612900565b6128fd858483612c2d565b92505b61290b858585612dd5565b8161294b5761294b601754601655601954601855601b54601a55601d54601c55601f54601e55602154602055602354602255602554602455602754602655565b5050505050565b5f611e19828461336d565b5f611e198284613461565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061299b5761299b61332e565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156129f2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a169190613488565b81600181518110612a2957612a2961332e565b6001600160a01b039283166020918202929092010152600654612a4f9130911684611c88565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612a879085905f908690309042906004016134a3565b5f604051808303815f87803b158015612a9e575f80fd5b505af1158015612ab0573d5f803e3d5ffd5b505050505050565b600654612ad09030906001600160a01b031684611c88565b600654602e5460405163f305d71960e01b8152306004820152602481018590525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612b3d573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061294b9190613514565b601654158015612b725750601854155b8015612b7e5750601a54155b8015612b8a5750601c54155b8015612b965750601e54155b8015612ba25750602054155b8015612bae5750602254155b8015612bba5750602454155b8015612bc65750602654155b15612bcd57565b6016805460175560188054601955601a8054601b55601c8054601d55601e8054601f55602080546021556022805460235560248054602555602680546027555f988990559688905594879055928690559085905584905583905582905555565b5f43601054600f54612c3f919061336d565b10612c5157612c4c612efd565b612cfb565b6001826002811115612c6557612c65613474565b03612c7257612c4c612f26565b5f826002811115612c8557612c85613474565b03612c9257612c4c612f4e565b6002826002811115612ca657612ca6613474565b03612cb357612c4c612f76565b60405162461bcd60e51b815260206004820152601960248201527f496e76616c6964207472616e73616374696f6e20747970652e000000000000006044820152606401610ce7565b6012545f9015612db157612d206103e8610ede60125487611e0e90919063ffffffff16565b905060125460135482612d339190613356565b612d3d91906133b2565b60285f828254612d4d919061336d565b9091555050601254601454612d629083613356565b612d6c91906133b2565b60295f828254612d7c919061336d565b9091555050601254601554612d919083613356565b612d9b91906133b2565b602a5f828254612dab919061336d565b90915550505b8015612dc257612dc2853083612dd5565b612dcc8185613461565b95945050505050565b6001600160a01b038316612dfb5760405162461bcd60e51b8152600401610ce7906133d1565b6001600160a01b038216612e215760405162461bcd60e51b8152600401610ce79061341a565b6001600160a01b0383165f9081526020819052604090205481811015612e985760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ce7565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611a46565b60146013819055606480825561012c6015819055612f2192909161272d9190612952565b601255565b601c546013819055601e5460148190556020546015819055612f2192909161272d9190612952565b60165460138190556018546014819055601a546015819055612f2192909161272d9190612952565b602254601381905560245460148190556026546015819055612f2192909161272d9190612952565b5f602080835283518060208501525f5b81811015612fca57858101830151858201604001528201612fae565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611147575f80fd5b5f806040838503121561300f575f80fd5b823561301a81612fea565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561306557613065613028565b604052919050565b5f67ffffffffffffffff82111561308657613086613028565b5060051b60200190565b5f82601f83011261309f575f80fd5b813560206130b46130af8361306d565b61303c565b8083825260208201915060208460051b8701019350868411156130d5575f80fd5b602086015b848110156130fa5780356130ed81612fea565b83529183019183016130da565b509695505050505050565b8015158114611147575f80fd5b5f8060408385031215613123575f80fd5b823567ffffffffffffffff811115613139575f80fd5b61314585828601613090565b925050602083013561315681613105565b809150509250929050565b5f60208284031215613171575f80fd5b5035919050565b5f60208284031215613188575f80fd5b8135611e1981613105565b5f805f606084860312156131a5575f80fd5b505081359360208301359350604090920135919050565b5f80604083850312156131cd575f80fd5b823567ffffffffffffffff808211156131e4575f80fd5b6131f086838701613090565b9350602091508185013581811115613206575f80fd5b85019050601f81018613613218575f80fd5b80356132266130af8261306d565b81815260059190911b82018301908381019088831115613244575f80fd5b928401925b8284101561326257833582529284019290840190613249565b80955050505050509250929050565b5f805f60608486031215613283575f80fd5b833561328e81612fea565b9250602084013561329e81612fea565b929592945050506040919091013590565b5f602082840312156132bf575f80fd5b8135611e1981612fea565b5f80604083850312156132db575f80fd5b82356132e681612fea565b9150602083013561315681612fea565b600181811c9082168061330a57607f821691505b60208210810361332857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610b4857610b48613342565b80820180821115610b4857610b48613342565b5f60208284031215613390575f80fd5b5051919050565b5f602082840312156133a7575f80fd5b8151611e1981613105565b5f826133cc57634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526029908201527f45524332303a207472616e736665722066726f6d20746865205a45524f41444460408201526859206164647265737360b81b606082015260800190565b60208082526027908201527f45524332303a207472616e7366657220746f20746865205a45524f41444459206040820152666164647265737360c81b606082015260800190565b81810381811115610b4857610b48613342565b634e487b7160e01b5f52602160045260245ffd5b5f60208284031215613498575f80fd5b8151611e1981612fea565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156134f35784516001600160a01b0316835293830193918301916001016134ce565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215613526575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220b92b796683f44426e61ea653f3318af5da88bbc5700ea1a4a036163e93a0e89a64736f6c63430008170033000000000000000000000000d5e0d706f38c7a02acbfa7c56200538cc50907f6000000000000000000000000e41d5b7028d8e3e1c5c8d13de2afd412d343379d000000000000000000000000d5e0d706f38c7a02acbfa7c56200538cc50907f6

Deployed Bytecode

0x608060405260043610610380575f3560e01c80638d068ea4116101ce578063aa4bde2811610100578063f2fde38b11610099578063f63743421161006b578063f637434214610a21578063f7ea98da14610a36578063fe575a8714610a55578063ffb54a9914610a8c57005b8063f2fde38b146109b0578063f34eb0b8146109cf578063f5648a4f146109ee578063f5a6682f14610a0257005b8063e7c89232116100d2578063e7c892321461093b578063e99c9d091461095a578063effb3c5314610979578063f11a24d31461099b57005b8063aa4bde28146108d4578063afa4f3b2146108e9578063db05e5cb14610908578063dd62ed3e1461091c57005b80639e93ad8e11610172578063a5ece94111610144578063a5ece94114610855578063a64e4f8a14610874578063a9059cbb14610895578063a985ceef146108b457005b80639e93ad8e146107ed578063a0f9472914610802578063a457c2d714610817578063a473e9041461083657005b806392136913116101ab5780639213691314610790578063943ab17a146107a557806395d89b41146107c45780639bb19a32146107d857005b80638d068ea41461073f5780638da5cb5b14610754578063906e9dd01461077157005b8063296f0a0c116102b257806366d602ae1161024b578063715018a61161021d578063715018a6146106ec5780637bce5a041461070057806385c5b3191461071557806388e765ff1461072a57005b806366d602ae1461066557806368b69b9b1461067a5780636ddd17131461069957806370a08231146106b857005b806334e55f9d1161028457806334e55f9d146105e9578063395093511461060857806339b84936146106275780634e7760971461064657005b8063296f0a0c146105635780632e5393b814610582578063313ce567146105975780633221c93f146105b257005b80631c6e8a751161032457806323b872dd116102f657806323b872dd146104f257806325519cf2146105115780632773b3ee1461053057806327a14fc21461054457005b80631c6e8a75146104765780631d865c301461049557806321bd529b146104b45780632307b441146104d357005b80630e85d1e31161035d5780630e85d1e314610405578063105222f91461042457806314626dc61461044357806318160ddd1461046257005b806306fdde0314610389578063095ea7b3146103b35780630e23500e146103e257005b3661038757005b005b348015610394575f80fd5b5061039d610aa5565b6040516103aa9190612f9e565b60405180910390f35b3480156103be575f80fd5b506103d26103cd366004612ffe565b610b35565b60405190151581526020016103aa565b3480156103ed575f80fd5b506103f7600f5481565b6040519081526020016103aa565b348015610410575f80fd5b5061038761041f366004613112565b610b4e565b34801561042f575f80fd5b5061038761043e366004613112565b610c72565b34801561044e575f80fd5b5061038761045d366004613161565b610d4a565b34801561046d575f80fd5b506002546103f7565b348015610481575f80fd5b50610387610490366004613178565b610da0565b3480156104a0575f80fd5b506103876104af366004613193565b610dc4565b3480156104bf575f80fd5b506103876104ce366004613161565b610e20565b3480156104de575f80fd5b506103876104ed3660046131bc565b610f87565b3480156104fd575f80fd5b506103d261050c366004613271565b6110bd565b34801561051c575f80fd5b5061038761052b366004613193565b6110e0565b34801561053b575f80fd5b50610387611135565b34801561054f575f80fd5b5061038761055e366004613161565b61114a565b34801561056e575f80fd5b5061038761057d3660046132af565b611210565b34801561058d575f80fd5b506103f760185481565b3480156105a2575f80fd5b50604051601281526020016103aa565b3480156105bd575f80fd5b50602e546105d1906001600160a01b031681565b6040516001600160a01b0390911681526020016103aa565b3480156105f4575f80fd5b50610387610603366004613178565b6112eb565b348015610613575f80fd5b506103d2610622366004612ffe565b611313565b348015610632575f80fd5b50610387610641366004613178565b611334565b348015610651575f80fd5b50602f546105d1906001600160a01b031681565b348015610670575f80fd5b506103f7600d5481565b348015610685575f80fd5b50610387610694366004613178565b61135e565b3480156106a4575f80fd5b50600b546103d29062010000900460ff1681565b3480156106c3575f80fd5b506103f76106d23660046132af565b6001600160a01b03165f9081526020819052604090205490565b3480156106f7575f80fd5b50610387611384565b34801561070b575f80fd5b506103f760165481565b348015610720575f80fd5b506103f760225481565b348015610735575f80fd5b506103f7600c5481565b34801561074a575f80fd5b506103f7601e5481565b34801561075f575f80fd5b506005546001600160a01b03166105d1565b34801561077c575f80fd5b5061038761078b3660046132af565b611397565b34801561079b575f80fd5b506103f7601c5481565b3480156107b0575f80fd5b50602d546105d1906001600160a01b031681565b3480156107cf575f80fd5b5061039d611472565b3480156107e3575f80fd5b506103f760265481565b3480156107f8575f80fd5b506103f76103e881565b34801561080d575f80fd5b506103f760245481565b348015610822575f80fd5b506103d2610831366004612ffe565b611481565b348015610841575f80fd5b506103876108503660046132af565b6114ff565b348015610860575f80fd5b50602c546105d1906001600160a01b031681565b34801561087f575f80fd5b50600b546103d290640100000000900460ff1681565b3480156108a0575f80fd5b506103d26108af366004612ffe565b6115e5565b3480156108bf575f80fd5b50600b546103d2906301000000900460ff1681565b3480156108df575f80fd5b506103f7600e5481565b3480156108f4575f80fd5b50610387610903366004613161565b6115f2565b348015610913575f80fd5b50610387611732565b348015610927575f80fd5b506103f76109363660046132ca565b61177c565b348015610946575f80fd5b50610387610955366004613193565b6117a6565b348015610965575f80fd5b50610387610974366004613161565b6117fb565b348015610984575f80fd5b50600b546103d29065010000000000900460ff1681565b3480156109a6575f80fd5b506103f7601a5481565b3480156109bb575f80fd5b506103876109ca3660046132af565b6118c1565b3480156109da575f80fd5b506103876109e9366004613161565b61193b565b3480156109f9575f80fd5b506103876119fa565b348015610a0d575f80fd5b50610387610a1c366004613112565b611a4c565b348015610a2c575f80fd5b506103f760205481565b348015610a41575f80fd5b50610387610a503660046132af565b611aae565b348015610a60575f80fd5b506103d2610a6f3660046132af565b6001600160a01b03165f908152600a602052604090205460ff1690565b348015610a97575f80fd5b50600b546103d29060ff1681565b606060038054610ab4906132f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae0906132f6565b8015610b2b5780601f10610b0257610100808354040283529160200191610b2b565b820191905f5260205f20905b815481529060010190602001808311610b0e57829003601f168201915b5050505050905090565b5f33610b42818585611c88565b60019150505b92915050565b610b56611db4565b5f5b8251811015610c6d57602f5483516001600160a01b0390911690849083908110610b8457610b8461332e565b60200260200101516001600160a01b031614158015610bd5575060065483516001600160a01b0390911690849083908110610bc157610bc161332e565b60200260200101516001600160a01b031614155b8015610c0c5750306001600160a01b0316838281518110610bf857610bf861332e565b60200260200101516001600160a01b031614155b15610c655781600a5f858481518110610c2757610c2761332e565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b600101610b58565b505050565b602e546001600160a01b0316331480610c955750602c546001600160a01b031633145b80610caa57506005546001600160a01b031633145b610cf05760405162461bcd60e51b815260206004820152601260248201527113dddb995c9cda1a5c081c995c5d5a5c995960721b60448201526064015b60405180910390fd5b5f5b8251811015610c6d578160085f858481518110610d1157610d1161332e565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101610cf2565b610d52611db4565b600a811115610d9b5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b210313637b1b5b99031b7bab73a1760591b6044820152606401610ce7565b601155565b610da8611db4565b600b8054911515620100000262ff000019909216919091179055565b610dcc611db4565b601c839055601e82905560208181556040805185815291820184905281018290527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b610e28611db4565b600b5460ff1615610e7b5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610ce7565b600a811115610ec45760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b210313637b1b5b99031b7bab73a1760591b6044820152606401610ce7565b610ee46103e8610ede6014610ed860025490565b90611e0e565b90611e20565b600c55610efb6103e8610ede6014610ed860025490565b600d55610f126103e8610ede6014610ed860025490565b600e55610f29612710610ede6002610ed860025490565b602b55600b805463ffff00ff1916630101000117905543600f819055601082905560408051918252602082018390527f8d3438059bb853597d71f33faf1d080795f797da60ef1c460fe5849903c24adb91015b60405180910390a150565b610f8f611db4565b8051825114610fe05760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610ce7565b60c88251106110505760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610ce7565b5f5b8251811015610c6d575f83828151811061106e5761106e61332e565b602002602001015190505f83838151811061108b5761108b61332e565b6020026020010151670de0b6b3a76400006110a69190613356565b90506110b3338383611e2b565b5050600101611052565b5f336110ca8582856125c9565b6110d5858585611e2b565b506001949350505050565b6110e8611db4565b60168390556018829055601a81905560408051848152602081018490529081018290527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a77362090606001610e13565b61113d611db4565b476111478161263b565b50565b611152611db4565b6111666103e8610ede6001610ed860025490565b8110156111db5760405162461bcd60e51b815260206004820152603960248201527f4d61782077616c6c657420616d6f756e742063616e6e6f74206265206c6f776560448201527f72207468616e20302e312520746f74616c20737570706c792e000000000000006064820152608401610ce7565b600e8190556040518181527f0176e9211818debdc4483c2bb0972798b7eb106239c8e465d4f1cee4ce5ae6e790602001610f7c565b611218611db4565b6001600160a01b03811661126e5760405162461bcd60e51b815260206004820152601c60248201527f6c6971756964697479416464726573732063616e6e6f742062652030000000006044820152606401610ce7565b602e80546001600160a01b039081165f908152600860208181526040808420805460ff19908116909155865486168552600980845282862080548316905587546001600160a01b03191698871698891788559785529282528084208054841660019081179091559554909416835294909452208054909216179055565b6112f3611db4565b600b80549115156401000000000264ff0000000019909216919091179055565b5f33610b42818585611325838361177c565b61132f919061336d565b611c88565b61133c611db4565b600b8054911515650100000000000265ff000000000019909216919091179055565b611366611db4565b600b805491151563010000000263ff00000019909216919091179055565b61138c611db4565b6113955f6126be565b565b61139f611db4565b6001600160a01b0381166113f55760405162461bcd60e51b815260206004820152601c60248201527f6d61726b6574696e67416464726573732063616e6e6f742062652030000000006044820152606401610ce7565b602c80546001600160a01b039081165f908152600860208181526040808420805460ff19908116909155865486168552600980845282862080548316905587546001600160a01b03191698871698891788559785529282528084208054841660019081179091559554909416835294909452208054909216179055565b606060048054610ab4906132f6565b5f338161148e828661177c565b9050838110156114f25760405162461bcd60e51b815260206004820152602960248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015268205a45524f4144445960b81b6064820152608401610ce7565b6110d58286868403611c88565b611507611db4565b6001600160a01b0381166115685760405162461bcd60e51b815260206004820152602260248201527f676f6c64656e506967677942616e6b416464726573732063616e6e6f74206265604482015261020360f41b6064820152608401610ce7565b602d80546001600160a01b039081165f908152600860208181526040808420805460ff19908116909155865486168552600980845282862080548316905587546001600160a01b03191698871698891788559785529282528084208054841660019081179091559554909416835294909452208054909216179055565b5f33610b42818585611e2b565b6115fa611db4565b61160f620f4240610ede6001610ed860025490565b81101561167d5760405162461bcd60e51b815260206004820152603660248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e6044820152751018171818181892903a37ba30b61039bab838363c9760511b6064820152608401610ce7565b6116916103e8610ede6005610ed860025490565b8111156116fd5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610ce7565b602b8190556040518181527f09e89af7cbd8410d0ad2a74ab3cc8d9ddeef8ab1177f0f8a1984d355bb9d78f190602001610f7c565b61173a611db4565b600254611748906001613356565b600c55600254611759906001613356565b600d5560025461176a906001613356565b600e55600b805463ff00000019169055565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6117ae611db4565b60228390556024829055602681905560408051848152602081018490529081018290527f0a1ca1cf020cce18eb2c1acd1eb2fbb0911b33f048c9592de691823a416a94bb90606001610e13565b611803611db4565b6118176103e8610ede6001610ed860025490565b81101561188c5760405162461bcd60e51b815260206004820152603760248201527f4d61782073656c6c20616d6f756e742063616e6e6f74206265206c6f7765722060448201527f7468616e20302e312520746f74616c20737570706c792e0000000000000000006064820152608401610ce7565b600d8190556040518181527fa37090cc2feed4f3799a43ad59e5dab1cb6e70a7c1be92b72dbf9610550d5ac890602001610f7c565b6118c9611db4565b6001600160a01b0381166119325760405162461bcd60e51b815260206004820152602a60248201527f4f776e61626c653a206e6577206f776e657220697320746865205a45524f41446044820152694459206164647265737360b01b6064820152608401610ce7565b611147816126be565b611943611db4565b6119576103e8610ede6001610ed860025490565b8110156119c55760405162461bcd60e51b815260206004820152603660248201527f4d61782062757920616d6f756e742063616e6e6f74206265206c6f77657220746044820152753430b71018171892903a37ba30b61039bab838363c9760511b6064820152608401610ce7565b600c8190556040518181527f3a0b1f960db2351f13a6a83576ad81b35de3396cf92b9150216f2a6eea641d9a90602001610f7c565b611a02611db4565b6040515f90339047908381818185875af1925050503d805f8114611a41576040519150601f19603f3d011682016040523d82523d5f602084013e611a46565b606091505b50505050565b611a54611db4565b5f5b8251811015610c6d578160095f858481518110611a7557611a7561332e565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101611a56565b611ab6611db4565b306001600160a01b03821603611b0e5760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f74207769746864726177206f776e20746f6b656e000000000000006044820152606401610ce7565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa158015611b52573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b769190613380565b11611baf5760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b6044820152606401610ce7565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa158015611bf3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c179190613380565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303815f875af1158015611c64573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c6d9190613397565b6001600160a01b038316611cef5760405162461bcd60e51b815260206004820152602860248201527f45524332303a20617070726f76652066726f6d20746865205a45524f41444459604482015267206164647265737360c01b6064820152608401610ce7565b6001600160a01b038216611d545760405162461bcd60e51b815260206004820152602660248201527f45524332303a20617070726f766520746f20746865205a45524f41444459206160448201526564647265737360d01b6064820152608401610ce7565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b031633146113955760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ce7565b5f611e198284613356565b9392505050565b5f611e1982846133b2565b6001600160a01b038316611e515760405162461bcd60e51b8152600401610ce7906133d1565b6001600160a01b038216611e775760405162461bcd60e51b8152600401610ce79061341a565b5f8111611edc5760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201526c7468616e205a45524f4144445960981b6064820152608401610ce7565b600b5460ff16611f73576001600160a01b0383165f9081526008602052604090205460ff16611f735760405162461bcd60e51b815260206004820152603c60248201527f54726164696e67206e6f74206c697665207965742c20796f75206172656e277460448201527f20616c6c6f77656420746f207472616e7366657220746f6b656e732e000000006064820152608401610ce7565b602f546001905f906001600160a01b03868116911614611fb057602f546001600160a01b03858116911614611fa9576002611fb2565b6001611fb2565b5f5b9050611fc66005546001600160a01b031690565b6001600160a01b0316856001600160a01b031614158015611ff557506005546001600160a01b03858116911614155b801561200957506001600160a01b03841615155b801561202057506001600160a01b03841661dead14155b80156120345750600b54610100900460ff16155b15612454576001600160a01b0385165f908152600a602052604090205460ff1615801561207957506001600160a01b0384165f908152600a602052604090205460ff16155b6120b45760405162461bcd60e51b815260206004820152600c60248201526b213630b1b5b634b9ba32b21760a11b6044820152606401610ce7565b600b5460ff16612147576001600160a01b0385165f9081526008602052604090205460ff16806120fb57506001600160a01b0384165f9081526008602052604090205460ff165b6121475760405162461bcd60e51b815260206004820152601b60248201527f54726164696e67206973206e6f7420616c6c6f776564207965742e00000000006044820152606401610ce7565b600b546301000000900460ff1615612256576006546001600160a01b038581169116148015906121855750602f546001600160a01b03858116911614155b15612256576011546121979043613461565b325f908152600760205260409020541080156121d557506011546121bb9043613461565b6001600160a01b0385165f90815260076020526040902054105b6122325760405162461bcd60e51b815260206004820152602860248201527f5472616e736665722064656c617920656e61626c65642e20547279206167616960448201526737103630ba32b91760c11b6064820152608401610ce7565b325f9081526007602052604080822043908190556001600160a01b03871683529120555b5f81600281111561226957612269613474565b14801561228457506006546001600160a01b03858116911614155b80156122a857506001600160a01b0384165f9081526009602052604090205460ff16155b1561239757600c548311156123115760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178426044820152683abca0b6b7bab73a1760b91b6064820152608401610ce7565b600e5483612333866001600160a01b03165f9081526020819052604090205490565b61233d919061336d565b11156123975760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610ce7565b60018160028111156123ab576123ab613474565b1480156123c657506006546001600160a01b03868116911614155b80156123ea57506001600160a01b0385165f9081526009602052604090205460ff16155b1561245457600d548311156124545760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785360448201526932b63620b6b7bab73a1760b11b6064820152608401610ce7565b6001600160a01b0385165f9081526008602052604090205460ff168061249157506001600160a01b0384165f9081526008602052604090205460ff165b806124a75750600b54640100000000900460ff16155b806124da5750600b5465010000000000900460ff161580156124da575060028160028111156124d8576124d8613474565b145b156124e3575f91505b305f9081526020819052604081205490505f602b54821180156125175750600183600281111561251557612515613474565b145b905080801561252e5750600b5462010000900460ff165b80156125425750600b54610100900460ff16155b801561256657506001600160a01b0387165f9081526008602052604090205460ff16155b801561258a57506001600160a01b0386165f9081526008602052604090205460ff16155b156125b357600b805461ff0019166101001790556125a78261270f565b600b805461ff00191690555b6125c087878787876128e0565b50505050505050565b5f6125d4848461177c565b90505f198114611a46578181101561262e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610ce7565b611a468484848403611c88565b602c546001600160a01b03166108fc612655836002611e20565b6040518115909202915f818181858888f1935050505015801561267a573d5f803e3d5ffd5b50602d546001600160a01b03166108fc612695836002611e20565b6040518115909202915f818181858888f193505050501580156126ba573d5f803e3d5ffd5b5050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f612733602a5461272d60295460285461295290919063ffffffff16565b90612952565b90505f821580612741575081155b1561274b57505050565b602b54612759906005611e0e565b83111561277157602b5461276e906005611e0e565b92505b5f6127906002610ede85610ede602a5489611e0e90919063ffffffff16565b90505f61279d858361295d565b9050476127a982612968565b5f6127b4478361295d565b90505f6127d087610ede60285485611e0e90919063ffffffff16565b90505f6127ec88610ede60295486611e0e90919063ffffffff16565b90505f612803826127fd868661295d565b9061295d565b5f60288190556029819055602a559050861580159061282157505f81115b15612830576128308782612ab8565b602d546040516001600160a01b039091169083905f81818185875af1925050503d805f811461287a576040519150601f19603f3d011682016040523d82523d5f602084013e61287f565b606091505b5050602c546040519199506001600160a01b03169047905f81818185875af1925050503d805f81146128cc576040519150601f19603f3d011682016040523d82523d5f602084013e6128d1565b606091505b50505050505050505050505050565b816128f2576128ed612b62565b612900565b6128fd858483612c2d565b92505b61290b858585612dd5565b8161294b5761294b601754601655601954601855601b54601a55601d54601c55601f54601e55602154602055602354602255602554602455602754602655565b5050505050565b5f611e19828461336d565b5f611e198284613461565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061299b5761299b61332e565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156129f2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a169190613488565b81600181518110612a2957612a2961332e565b6001600160a01b039283166020918202929092010152600654612a4f9130911684611c88565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612a879085905f908690309042906004016134a3565b5f604051808303815f87803b158015612a9e575f80fd5b505af1158015612ab0573d5f803e3d5ffd5b505050505050565b600654612ad09030906001600160a01b031684611c88565b600654602e5460405163f305d71960e01b8152306004820152602481018590525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612b3d573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061294b9190613514565b601654158015612b725750601854155b8015612b7e5750601a54155b8015612b8a5750601c54155b8015612b965750601e54155b8015612ba25750602054155b8015612bae5750602254155b8015612bba5750602454155b8015612bc65750602654155b15612bcd57565b6016805460175560188054601955601a8054601b55601c8054601d55601e8054601f55602080546021556022805460235560248054602555602680546027555f988990559688905594879055928690559085905584905583905582905555565b5f43601054600f54612c3f919061336d565b10612c5157612c4c612efd565b612cfb565b6001826002811115612c6557612c65613474565b03612c7257612c4c612f26565b5f826002811115612c8557612c85613474565b03612c9257612c4c612f4e565b6002826002811115612ca657612ca6613474565b03612cb357612c4c612f76565b60405162461bcd60e51b815260206004820152601960248201527f496e76616c6964207472616e73616374696f6e20747970652e000000000000006044820152606401610ce7565b6012545f9015612db157612d206103e8610ede60125487611e0e90919063ffffffff16565b905060125460135482612d339190613356565b612d3d91906133b2565b60285f828254612d4d919061336d565b9091555050601254601454612d629083613356565b612d6c91906133b2565b60295f828254612d7c919061336d565b9091555050601254601554612d919083613356565b612d9b91906133b2565b602a5f828254612dab919061336d565b90915550505b8015612dc257612dc2853083612dd5565b612dcc8185613461565b95945050505050565b6001600160a01b038316612dfb5760405162461bcd60e51b8152600401610ce7906133d1565b6001600160a01b038216612e215760405162461bcd60e51b8152600401610ce79061341a565b6001600160a01b0383165f9081526020819052604090205481811015612e985760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ce7565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611a46565b60146013819055606480825561012c6015819055612f2192909161272d9190612952565b601255565b601c546013819055601e5460148190556020546015819055612f2192909161272d9190612952565b60165460138190556018546014819055601a546015819055612f2192909161272d9190612952565b602254601381905560245460148190556026546015819055612f2192909161272d9190612952565b5f602080835283518060208501525f5b81811015612fca57858101830151858201604001528201612fae565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611147575f80fd5b5f806040838503121561300f575f80fd5b823561301a81612fea565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561306557613065613028565b604052919050565b5f67ffffffffffffffff82111561308657613086613028565b5060051b60200190565b5f82601f83011261309f575f80fd5b813560206130b46130af8361306d565b61303c565b8083825260208201915060208460051b8701019350868411156130d5575f80fd5b602086015b848110156130fa5780356130ed81612fea565b83529183019183016130da565b509695505050505050565b8015158114611147575f80fd5b5f8060408385031215613123575f80fd5b823567ffffffffffffffff811115613139575f80fd5b61314585828601613090565b925050602083013561315681613105565b809150509250929050565b5f60208284031215613171575f80fd5b5035919050565b5f60208284031215613188575f80fd5b8135611e1981613105565b5f805f606084860312156131a5575f80fd5b505081359360208301359350604090920135919050565b5f80604083850312156131cd575f80fd5b823567ffffffffffffffff808211156131e4575f80fd5b6131f086838701613090565b9350602091508185013581811115613206575f80fd5b85019050601f81018613613218575f80fd5b80356132266130af8261306d565b81815260059190911b82018301908381019088831115613244575f80fd5b928401925b8284101561326257833582529284019290840190613249565b80955050505050509250929050565b5f805f60608486031215613283575f80fd5b833561328e81612fea565b9250602084013561329e81612fea565b929592945050506040919091013590565b5f602082840312156132bf575f80fd5b8135611e1981612fea565b5f80604083850312156132db575f80fd5b82356132e681612fea565b9150602083013561315681612fea565b600181811c9082168061330a57607f821691505b60208210810361332857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610b4857610b48613342565b80820180821115610b4857610b48613342565b5f60208284031215613390575f80fd5b5051919050565b5f602082840312156133a7575f80fd5b8151611e1981613105565b5f826133cc57634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526029908201527f45524332303a207472616e736665722066726f6d20746865205a45524f41444460408201526859206164647265737360b81b606082015260800190565b60208082526027908201527f45524332303a207472616e7366657220746f20746865205a45524f41444459206040820152666164647265737360c81b606082015260800190565b81810381811115610b4857610b48613342565b634e487b7160e01b5f52602160045260245ffd5b5f60208284031215613498575f80fd5b8151611e1981612fea565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156134f35784516001600160a01b0316835293830193918301916001016134ce565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215613526575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220b92b796683f44426e61ea653f3318af5da88bbc5700ea1a4a036163e93a0e89a64736f6c63430008170033

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

000000000000000000000000d5e0d706f38c7a02acbfa7c56200538cc50907f6000000000000000000000000e41d5b7028d8e3e1c5c8d13de2afd412d343379d000000000000000000000000d5e0d706f38c7a02acbfa7c56200538cc50907f6

-----Decoded View---------------
Arg [0] : _marketingAddress (address): 0xd5e0d706f38c7A02acBfA7C56200538CC50907f6
Arg [1] : _goldenPiggyBank (address): 0xe41d5B7028D8E3E1C5C8d13de2aFD412d343379D
Arg [2] : _liquidityAddress (address): 0xd5e0d706f38c7A02acBfA7C56200538CC50907f6

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000d5e0d706f38c7a02acbfa7c56200538cc50907f6
Arg [1] : 000000000000000000000000e41d5b7028d8e3e1c5c8d13de2afd412d343379d
Arg [2] : 000000000000000000000000d5e0d706f38c7a02acbfa7c56200538cc50907f6


Deployed Bytecode Sourcemap

28693:21992:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16645:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19004:201;;;;;;;;;;-1:-1:-1;19004:201:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;19004:201:0;1023:187:1;29540:35:0;;;;;;;;;;;;;;;;;;;1361:25:1;;;1349:2;1334:18;29540:35:0;1215:177:1;43355:305:0;;;;;;;;;;-1:-1:-1;43355:305:0;;;;;:::i;:::-;;:::i;42818:307::-;;;;;;;;;;-1:-1:-1;42818:307:0;;;;;:::i;:::-;;:::i;44847:160::-;;;;;;;;;;-1:-1:-1;44847:160:0;;;;;:::i;:::-;;:::i;17765:108::-;;;;;;;;;;-1:-1:-1;17853:12:0;;17765:108;;39547:94;;;;;;;;;;-1:-1:-1;39547:94:0;;;;;:::i;:::-;;:::i;44033:371::-;;;;;;;;;;-1:-1:-1;44033:371:0;;;;;:::i;:::-;;:::i;38729:686::-;;;;;;;;;;-1:-1:-1;38729:686:0;;;;;:::i;:::-;;:::i;49763:617::-;;;;;;;;;;-1:-1:-1;49763:617:0;;;;;:::i;:::-;;:::i;19789:295::-;;;;;;;;;;-1:-1:-1;19789:295:0;;;;;:::i;:::-;;:::i;43668:357::-;;;;;;;;;;-1:-1:-1;43668:357:0;;;;;:::i;:::-;;:::i;49082:165::-;;;;;;;;;;;;;:::i;40579:308::-;;;;;;;;;;-1:-1:-1;40579:308:0;;;;;:::i;:::-;;:::i;42347:463::-;;;;;;;;;;-1:-1:-1;42347:463:0;;;;;:::i;:::-;;:::i;29978:40::-;;;;;;;;;;;;;;;;17607:93;;;;;;;;;;-1:-1:-1;17607:93:0;;17690:2;6100:36:1;;6088:2;6073:18;17607:93:0;5958:184:1;31207:39:0;;;;;;;;;;-1:-1:-1;31207:39:0;;;;-1:-1:-1;;;;;31207:39:0;;;;;;-1:-1:-1;;;;;6327:32:1;;;6309:51;;6297:2;6282:18;31207:39:0;6147:219:1;39649:94:0;;;;;;;;;;-1:-1:-1;39649:94:0;;;;;:::i;:::-;;:::i;20497:238::-;;;;;;;;;;-1:-1:-1;20497:238:0;;;;;:::i;:::-;;:::i;39752:110::-;;;;;;;;;;-1:-1:-1;39752:110:0;;;;;:::i;:::-;;:::i;31255:25::-;;;;;;;;;;-1:-1:-1;31255:25:0;;;;-1:-1:-1;;;;;31255:25:0;;;29444:39;;;;;;;;;;;;;;;;39870:102;;;;;;;;;;-1:-1:-1;39870:102:0;;;;;:::i;:::-;;:::i;29119:31::-;;;;;;;;;;-1:-1:-1;29119:31:0;;;;;;;;;;;17936:127;;;;;;;;;;-1:-1:-1;17936:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;18037:18:0;18010:7;18037:18;;;;;;;;;;;;17936:127;3344:103;;;;;;;;;;;;;:::i;29872:34::-;;;;;;;;;;;;;;;;30546:39;;;;;;;;;;;;;;;;29399:38;;;;;;;;;;;;;;;;30314:41;;;;;;;;;;;;;;;;2696:87;;;;;;;;;;-1:-1:-1;2769:6:0;;-1:-1:-1;;;;;2769:6:0;2696:87;;41365:464;;;;;;;;;;-1:-1:-1;41365:464:0;;;;;:::i;:::-;;:::i;30210:35::-;;;;;;;;;;;;;;;;31155:45;;;;;;;;;;-1:-1:-1;31155:45:0;;;;-1:-1:-1;;;;;31155:45:0;;;16864:104;;;;;;;;;;;;;:::i;30806:39::-;;;;;;;;;;;;;;;;29673:42;;;;;;;;;;;;29711:4;29673:42;;30667:45;;;;;;;;;;;;;;;;21242:440;;;;;;;;;;-1:-1:-1;21242:440:0;;;;;:::i;:::-;;:::i;41837:502::-;;;;;;;;;;-1:-1:-1;41837:502:0;;;;;:::i;:::-;;:::i;31109:39::-;;;;;;;;;;-1:-1:-1;31109:39:0;;;;-1:-1:-1;;;;;31109:39:0;;;29199:30;;;;;;;;;;-1:-1:-1;29199:30:0;;;;;;;;;;;18273:193;;;;;;;;;;-1:-1:-1;18273:193:0;;;;;:::i;:::-;;:::i;29157:35::-;;;;;;;;;;-1:-1:-1;29157:35:0;;;;;;;;;;;29490:41;;;;;;;;;;;;;;;;40899:458;;;;;;;;;;-1:-1:-1;40899:458:0;;;;;:::i;:::-;;:::i;50388:219::-;;;;;;;;;;;;;:::i;18529:151::-;;;;;;;;;;-1:-1:-1;18529:151:0;;;;;:::i;:::-;;:::i;44412:427::-;;;;;;;;;;-1:-1:-1;44412:427:0;;;;;:::i;:::-;;:::i;40275:292::-;;;;;;;;;;-1:-1:-1;40275:292:0;;;;;:::i;:::-;;:::i;29236:38::-;;;;;;;;;;-1:-1:-1;29236:38:0;;;;;;;;;;;30102:34;;;;;;;;;;;;;;;;3602:205;;;;;;;;;;-1:-1:-1;3602:205:0;;;;;:::i;:::-;;:::i;39983:284::-;;;;;;;;;;-1:-1:-1;39983:284:0;;;;;:::i;:::-;;:::i;49255:158::-;;;;;;;;;;;;;:::i;43137:206::-;;;;;;;;;;-1:-1:-1;43137:206:0;;;;;:::i;:::-;;:::i;30441:35::-;;;;;;;;;;;;;;;;49421:334;;;;;;;;;;-1:-1:-1;49421:334:0;;;;;:::i;:::-;;:::i;39423:116::-;;;;;;;;;;-1:-1:-1;39423:116:0;;;;;:::i;:::-;-1:-1:-1;;;;;39509:22:0;39485:4;39509:22;;;:14;:22;;;;;;;;;39423:116;29060:23;;;;;;;;;;-1:-1:-1;29060:23:0;;;;;;;;16645:100;16699:13;16732:5;16725:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16645:100;:::o;19004:201::-;19087:4;1413:10;19143:32;1413:10;19159:7;19168:6;19143:8;:32::i;:::-;19193:4;19186:11;;;19004:201;;;;;:::o;43355:305::-;2582:13;:11;:13::i;:::-;43448:6:::1;43443:210;43464:8;:15;43460:1;:19;43443:210;;;43520:10;::::0;43505:11;;-1:-1:-1;;;;;43520:10:0;;::::1;::::0;43505:8;;43514:1;;43505:11;::::1;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;43505:25:0::1;;;43504:67;;;;-1:-1:-1::0;43559:10:0::1;::::0;43536:11;;-1:-1:-1;;;;;43559:10:0;;::::1;::::0;43536:8;;43545:1;;43536:11;::::1;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;43536:34:0::1;;;43504:67;:101;;;;;43599:4;-1:-1:-1::0;;;;;43576:28:0::1;:8;43585:1;43576:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;43576:28:0::1;;;43504:101;43501:140;;;43637:4;43607:14;:27;43622:8;43631:1;43622:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;43607:27:0::1;-1:-1:-1::0;;;;;43607:27:0::1;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;43501:140;43481:3;;43443:210;;;;43355:305:::0;;:::o;42818:307::-;42926:16;;-1:-1:-1;;;;;42926:16:0;42912:10;:30;;:64;;-1:-1:-1;42960:16:0;;-1:-1:-1;;;;;42960:16:0;42946:10;:30;42912:64;:89;;;-1:-1:-1;2769:6:0;;-1:-1:-1;;;;;2769:6:0;42980:10;:21;42912:89;42904:120;;;;-1:-1:-1;;;42904:120:0;;7691:2:1;42904:120:0;;;7673:21:1;7730:2;7710:18;;;7703:30;-1:-1:-1;;;7749:18:1;;;7742:48;7807:18;;42904:120:0;;;;;;;;;43040:6;43035:82;43056:8;:15;43052:1;:19;43035:82;;;43113:4;43078:19;:32;43098:8;43107:1;43098:11;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;43078:32:0;;;;;;;;;;;-1:-1:-1;43078:32:0;:39;;-1:-1:-1;;43078:39:0;;;;;;;;;;-1:-1:-1;43073:3:0;43035:82;;44847:160;2582:13;:11;:13::i;:::-;44936:2:::1;44926:6;:12;;44918:46;;;::::0;-1:-1:-1;;;44918:46:0;;8038:2:1;44918:46:0::1;::::0;::::1;8020:21:1::0;8077:2;8057:18;;;8050:30;-1:-1:-1;;;8096:18:1;;;8089:51;8157:18;;44918:46:0::1;7836:345:1::0;44918:46:0::1;44975:15;:24:::0;44847:160::o;39547:94::-;2582:13;:11;:13::i;:::-;39614:11:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;39614:19:0;;::::1;::::0;;;::::1;::::0;;39547:94::o;44033:371::-;2582:13;:11;:13::i;:::-;44168:16:::1;:36:::0;;;44215:22:::1;:48:::0;;;44274:16:::1;:36:::0;;;44326:70:::1;::::0;;8388:25:1;;;8429:18;;;8422:34;;;8472:18;;8465:34;;;44326:70:0::1;::::0;8376:2:1;8361:18;44326:70:0::1;;;;;;;;44033:371:::0;;;:::o;38729:686::-;2582:13;:11;:13::i;:::-;38812:11:::1;::::0;::::1;;38811:12;38803:48;;;::::0;-1:-1:-1;;;38803:48:0;;8712:2:1;38803:48:0::1;::::0;::::1;8694:21:1::0;8751:2;8731:18;;;8724:30;8790:25;8770:18;;;8763:53;8833:18;;38803:48:0::1;8510:347:1::0;38803:48:0::1;38880:2;38870:6;:12;;38862:46;;;::::0;-1:-1:-1;;;38862:46:0;;8038:2:1;38862:46:0::1;::::0;::::1;8020:21:1::0;8077:2;8057:18;;;8050:30;-1:-1:-1;;;8096:18:1;;;8089:51;8157:18;;38862:46:0::1;7836:345:1::0;38862:46:0::1;38936:31;38962:4;38936:21;38954:2;38936:13;17853:12:::0;;;17765:108;38936:13:::1;:17:::0;::::1;:21::i;:::-;:25:::0;::::1;:31::i;:::-;38921:12;:46:::0;39000:31:::1;39026:4;39000:21;39018:2;39000:13;17853:12:::0;;;17765:108;39000:31:::1;38984:13;:47:::0;39066:31:::1;39092:4;39066:21;39084:2;39066:13;17853:12:::0;;;17765:108;39066:31:::1;39048:15;:49:::0;39136:31:::1;39161:5;39136:20;39154:1;39136:13;17853:12:::0;;;17765:108;39136:31:::1;39114:19;:53:::0;39178:11:::1;:18:::0;;-1:-1:-1;;39240:18:0;;;;;39288:12:::1;39269:16;:31:::0;;;39311:20:::1;:29:::0;;;39356:51:::1;::::0;;9036:25:1;;;-1:-1:-1;9077:18:1;;9070:34;;;39356:51:0::1;::::0;9009:18:1;39356:51:0::1;;;;;;;;38729:686:::0;:::o;49763:617::-;2582:13;:11;:13::i;:::-;49905:15:::1;:22;49887:7;:14;:40;49879:83;;;::::0;-1:-1:-1;;;49879:83:0;;9317:2:1;49879:83:0::1;::::0;::::1;9299:21:1::0;9356:2;9336:18;;;9329:30;9395:32;9375:18;;;9368:60;9445:18;;49879:83:0::1;9115:354:1::0;49879:83:0::1;49998:3;49981:7;:14;:20;49973:87;;;::::0;-1:-1:-1;;;49973:87:0;;9676:2:1;49973:87:0::1;::::0;::::1;9658:21:1::0;9715:2;9695:18;;;9688:30;9754:34;9734:18;;;9727:62;-1:-1:-1;;;9805:18:1;;;9798:52;9867:19;;49973:87:0::1;9474:418:1::0;49973:87:0::1;50173:9;50169:204;50192:7;:14;50188:1;:18;50169:204;;;50227:14;50244:7;50252:1;50244:10;;;;;;;;:::i;:::-;;;;;;;50227:27;;50269:14;50286:15;50302:1;50286:18;;;;;;;;:::i;:::-;;;;;;;50305:4;50286:23;;;;:::i;:::-;50269:40;;50324:37;50334:10;50346:6;50354;50324:9;:37::i;:::-;-1:-1:-1::0;;50208:3:0::1;;50169:204;;19789:295:::0;19920:4;1413:10;19978:38;19994:4;1413:10;20009:6;19978:15;:38::i;:::-;20027:27;20037:4;20043:2;20047:6;20027:9;:27::i;:::-;-1:-1:-1;20072:4:0;;19789:295;-1:-1:-1;;;;19789:295:0:o;43668:357::-;2582:13;:11;:13::i;:::-;43799:15:::1;:34:::0;;;43844:21:::1;:46:::0;;;43901:15:::1;:34:::0;;;43951:66:::1;::::0;;8388:25:1;;;8444:2;8429:18;;8422:34;;;8472:18;;;8465:34;;;43951:66:0::1;::::0;8376:2:1;8361:18;43951:66:0::1;8186:319:1::0;49082:165:0;2582:13;:11;:13::i;:::-;49171:21:::1;49203:36;49171:21:::0;49203:16:::1;:36::i;:::-;49131:116;49082:165::o:0;40579:308::-;2582:13;:11;:13::i;:::-;40690:30:::1;40715:4;40690:20;40708:1;40690:13;17853:12:::0;;;17765:108;40690:30:::1;40669:16;:52;;40661:122;;;::::0;-1:-1:-1;;;40661:122:0;;10404:2:1;40661:122:0::1;::::0;::::1;10386:21:1::0;10443:2;10423:18;;;10416:30;10482:34;10462:18;;;10455:62;10553:27;10533:18;;;10526:55;10598:19;;40661:122:0::1;10202:421:1::0;40661:122:0::1;40794:15;:34:::0;;;40844:35:::1;::::0;1361:25:1;;;40844:35:0::1;::::0;1349:2:1;1334:18;40844:35:0::1;1215:177:1::0;42347:463:0;2582:13;:11;:13::i;:::-;-1:-1:-1;;;;;42438:29:0;::::1;42430:70;;;::::0;-1:-1:-1;;;42430:70:0;;10830:2:1;42430:70:0::1;::::0;::::1;10812:21:1::0;10869:2;10849:18;;;10842:30;10908;10888:18;;;10881:58;10956:18;;42430:70:0::1;10628:352:1::0;42430:70:0::1;42531:16;::::0;;-1:-1:-1;;;;;42531:16:0;;::::1;42551:5;42511:37:::0;;;:19:::1;:37;::::0;;;;;;;:45;;-1:-1:-1;;42511:45:0;;::::1;::::0;;;42599:16;;;::::1;42567:49:::0;;:31:::1;:49:::0;;;;;;:57;;;::::1;::::0;;42635:45;;-1:-1:-1;;;;;;42635:45:0::1;::::0;;::::1;::::0;;::::1;::::0;;42691:37;;;;;;;;;:44;;;::::1;-1:-1:-1::0;42691:44:0;;::::1;::::0;;;42778:16;;;;::::1;42746:49:::0;;;;;;;:56;;;;::::1;;::::0;;42347:463::o;39649:94::-;2582:13;:11;:13::i;:::-;39716:11:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;39716:19:0;;::::1;::::0;;;::::1;::::0;;39649:94::o;20497:238::-;20585:4;1413:10;20641:64;1413:10;20657:7;20694:10;20666:25;1413:10;20657:7;20666:9;:25::i;:::-;:38;;;;:::i;:::-;20641:8;:64::i;39752:110::-;2582:13;:11;:13::i;:::-;39827:19:::1;:27:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;39827:27:0;;::::1;::::0;;;::::1;::::0;;39752:110::o;39870:102::-;2582:13;:11;:13::i;:::-;39941:15:::1;:23:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;39941:23:0;;::::1;::::0;;;::::1;::::0;;39870:102::o;3344:103::-;2582:13;:11;:13::i;:::-;3409:30:::1;3436:1;3409:18;:30::i;:::-;3344:103::o:0;41365:464::-;2582:13;:11;:13::i;:::-;-1:-1:-1;;;;;41457:29:0;::::1;41449:70;;;::::0;-1:-1:-1;;;41449:70:0;;11317:2:1;41449:70:0::1;::::0;::::1;11299:21:1::0;11356:2;11336:18;;;11329:30;11395;11375:18;;;11368:58;11443:18;;41449:70:0::1;11115:352:1::0;41449:70:0::1;41550:16;::::0;;-1:-1:-1;;;;;41550:16:0;;::::1;41570:5;41530:37:::0;;;:19:::1;:37;::::0;;;;;;;:45;;-1:-1:-1;;41530:45:0;;::::1;::::0;;;41618:16;;;::::1;41586:49:::0;;:31:::1;:49:::0;;;;;;:57;;;::::1;::::0;;41654:45;;-1:-1:-1;;;;;;41654:45:0::1;::::0;;::::1;::::0;;::::1;::::0;;41710:37;;;;;;;;;:44;;;::::1;-1:-1:-1::0;41710:44:0;;::::1;::::0;;;41797:16;;;;::::1;41765:49:::0;;;;;;;:56;;;;::::1;;::::0;;41365:464::o;16864:104::-;16920:13;16953:7;16946:14;;;;;:::i;21242:440::-;21335:4;1413:10;21335:4;21418:25;1413:10;21435:7;21418:9;:25::i;:::-;21391:52;;21482:15;21462:16;:35;;21454:89;;;;-1:-1:-1;;;21454:89:0;;11674:2:1;21454:89:0;;;11656:21:1;11713:2;11693:18;;;11686:30;11752:34;11732:18;;;11725:62;-1:-1:-1;;;11803:18:1;;;11796:39;11852:19;;21454:89:0;11472:405:1;21454:89:0;21579:60;21588:5;21595:7;21623:15;21604:16;:34;21579:8;:60::i;41837:502::-;2582:13;:11;:13::i;:::-;-1:-1:-1;;;;;41933:28:0;::::1;41925:75;;;::::0;-1:-1:-1;;;41925:75:0;;12084:2:1;41925:75:0::1;::::0;::::1;12066:21:1::0;12123:2;12103:18;;;12096:30;12162:34;12142:18;;;12135:62;-1:-1:-1;;;12213:18:1;;;12206:32;12255:19;;41925:75:0::1;11882:398:1::0;41925:75:0::1;42031:22;::::0;;-1:-1:-1;;;;;42031:22:0;;::::1;42057:5;42011:43:::0;;;:19:::1;:43;::::0;;;;;;;:51;;-1:-1:-1;;42011:51:0;;::::1;::::0;;;42105:22;;;::::1;42073:55:::0;;:31:::1;:55:::0;;;;;;:63;;;::::1;::::0;;42147:50;;-1:-1:-1;;;;;;42147:50:0::1;::::0;;::::1;::::0;;::::1;::::0;;42208:43;;;;;;;;;:50;;;::::1;-1:-1:-1::0;42208:50:0;;::::1;::::0;;;42301:22;;;;::::1;42269:55:::0;;;;;;;:62;;;;::::1;;::::0;;41837:502::o;18273:193::-;18352:4;1413:10;18408:28;1413:10;18425:2;18429:6;18408:9;:28::i;40899:458::-;2582:13;:11;:13::i;:::-;41017:33:::1;41042:7;41017:20;41035:1;41017:13;17853:12:::0;;;17765:108;41017:33:::1;40994:18;:57;;40986:124;;;::::0;-1:-1:-1;;;40986:124:0;;12487:2:1;40986:124:0::1;::::0;::::1;12469:21:1::0;12526:2;12506:18;;;12499:30;12565:34;12545:18;;;12538:62;-1:-1:-1;;;12616:18:1;;;12609:52;12678:19;;40986:124:0::1;12285:418:1::0;40986:124:0::1;41152:30;41177:4;41152:20;41170:1;41152:13;17853:12:::0;;;17765:108;41152:30:::1;41129:18;:54;;41121:119;;;::::0;-1:-1:-1;;;41121:119:0;;12910:2:1;41121:119:0::1;::::0;::::1;12892:21:1::0;12949:2;12929:18;;;12922:30;12988:34;12968:18;;;12961:62;-1:-1:-1;;;13039:18:1;;;13032:50;13099:19;;41121:119:0::1;12708:416:1::0;41121:119:0::1;41251:19;:40:::0;;;41307:42:::1;::::0;1361:25:1;;;41307:42:0::1;::::0;1349:2:1;1334:18;41307:42:0::1;1215:177:1::0;50388:219:0;2582:13;:11;:13::i;:::-;17853:12;;50458:17:::1;::::0;50474:1:::1;50458:17;:::i;:::-;50443:12;:32:::0;17853:12;;50502:17:::1;::::0;50518:1:::1;50502:17;:::i;:::-;50486:13;:33:::0;17853:12;;50548:17:::1;::::0;50564:1:::1;50548:17;:::i;:::-;50530:15;:35:::0;50576:15:::1;:23:::0;;-1:-1:-1;;50576:23:0::1;::::0;;50388:219::o;18529:151::-;-1:-1:-1;;;;;18645:18:0;;;18618:7;18645:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18529:151::o;44412:427::-;2582:13;:11;:13::i;:::-;44563:20:::1;:44:::0;;;44618:26:::1;:56:::0;;;44685:20:::1;:44:::0;;;44745:86:::1;::::0;;8388:25:1;;;8444:2;8429:18;;8422:34;;;8472:18;;;8465:34;;;44745:86:0::1;::::0;8376:2:1;8361:18;44745:86:0::1;8186:319:1::0;40275:292:0;2582:13;:11;:13::i;:::-;40380:30:::1;40405:4;40380:20;40398:1;40380:13;17853:12:::0;;;17765:108;40380:30:::1;40361:14;:50;;40353:118;;;::::0;-1:-1:-1;;;40353:118:0;;13331:2:1;40353:118:0::1;::::0;::::1;13313:21:1::0;13370:2;13350:18;;;13343:30;13409:34;13389:18;;;13382:62;13480:25;13460:18;;;13453:53;13523:19;;40353:118:0::1;13129:419:1::0;40353:118:0::1;40482:13;:30:::0;;;40528:31:::1;::::0;1361:25:1;;;40528:31:0::1;::::0;1349:2:1;1334:18;40528:31:0::1;1215:177:1::0;3602:205:0;2582:13;:11;:13::i;:::-;-1:-1:-1;;;;;3691:22:0;::::1;3683:77;;;::::0;-1:-1:-1;;;3683:77:0;;13755:2:1;3683:77:0::1;::::0;::::1;13737:21:1::0;13794:2;13774:18;;;13767:30;13833:34;13813:18;;;13806:62;-1:-1:-1;;;13884:18:1;;;13877:40;13934:19;;3683:77:0::1;13553:406:1::0;3683:77:0::1;3771:28;3790:8;3771:18;:28::i;39983:284::-:0;2582:13;:11;:13::i;:::-;40085:30:::1;40110:4;40085:20;40103:1;40085:13;17853:12:::0;;;17765:108;40085:30:::1;40067:13;:49;;40059:116;;;::::0;-1:-1:-1;;;40059:116:0;;14166:2:1;40059:116:0::1;::::0;::::1;14148:21:1::0;14205:2;14185:18;;;14178:30;14244:34;14224:18;;;14217:62;-1:-1:-1;;;14295:18:1;;;14288:52;14357:19;;40059:116:0::1;13964:418:1::0;40059:116:0::1;40186:12;:28:::0;;;40230:29:::1;::::0;1361:25:1;;;40230:29:0::1;::::0;1349:2:1;1334:18;40230:29:0::1;1215:177:1::0;49255:158:0;2582:13;:11;:13::i;:::-;49347:58:::1;::::0;49311:12:::1;::::0;49355:10:::1;::::0;49379:21:::1;::::0;49311:12;49347:58;49311:12;49347:58;49379:21;49355:10;49347:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;49255:158:0:o;43137:206::-;2582:13;:11;:13::i;:::-;43246:6:::1;43241:94;43262:8;:15;43258:1;:19;43241:94;;;43331:4;43284:31;:44;43316:8;43325:1;43316:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;43284:44:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;43284:44:0;:51;;-1:-1:-1;;43284:51:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;43279:3:0::1;43241:94;;49421:334:::0;2582:13;:11;:13::i;:::-;49521:4:::1;-1:-1:-1::0;;;;;49504:22:0;::::1;::::0;49496:60:::1;;;::::0;-1:-1:-1;;;49496:60:0;;14799:2:1;49496:60:0::1;::::0;::::1;14781:21:1::0;14838:2;14818:18;;;14811:30;14877:27;14857:18;;;14850:55;14922:18;;49496:60:0::1;14597:349:1::0;49496:60:0::1;49575:38;::::0;-1:-1:-1;;;49575:38:0;;49607:4:::1;49575:38;::::0;::::1;6309:51:1::0;49616:1:0::1;::::0;-1:-1:-1;;;;;49575:23:0;::::1;::::0;::::1;::::0;6282:18:1;;49575:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;49567:64;;;::::0;-1:-1:-1;;;49567:64:0;;15342:2:1;49567:64:0::1;::::0;::::1;15324:21:1::0;15381:1;15361:18;;;15354:29;-1:-1:-1;;;15399:18:1;;;15392:39;15448:18;;49567:64:0::1;15140:332:1::0;49567:64:0::1;49656:38;::::0;-1:-1:-1;;;49656:38:0;;49688:4:::1;49656:38;::::0;::::1;6309:51:1::0;49642:11:0::1;::::0;-1:-1:-1;;;;;49656:23:0;::::1;::::0;::::1;::::0;6282:18:1;;49656:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49705:42;::::0;-1:-1:-1;;;49705:42:0;;49728:10:::1;49705:42;::::0;::::1;15651:51:1::0;15718:18;;;15711:34;;;49642:52:0;;-1:-1:-1;;;;;;49705:22:0;::::1;::::0;::::1;::::0;15624:18:1;;49705:42:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25321:388::-:0;-1:-1:-1;;;;;25457:19:0;;25449:72;;;;-1:-1:-1;;;25449:72:0;;16208:2:1;25449:72:0;;;16190:21:1;16247:2;16227:18;;;16220:30;16286:34;16266:18;;;16259:62;-1:-1:-1;;;16337:18:1;;;16330:38;16385:19;;25449:72:0;16006:404:1;25449:72:0;-1:-1:-1;;;;;25540:21:0;;25532:72;;;;-1:-1:-1;;;25532:72:0;;16617:2:1;25532:72:0;;;16599:21:1;16656:2;16636:18;;;16629:30;16695:34;16675:18;;;16668:62;-1:-1:-1;;;16746:18:1;;;16739:36;16792:19;;25532:72:0;16415:402:1;25532:72:0;-1:-1:-1;;;;;25617:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;25669:32;;1361:25:1;;;25669:32:0;;1334:18:1;25669:32:0;;;;;;;25321:388;;;:::o;2861:132::-;2769:6;;-1:-1:-1;;;;;2769:6:0;1413:10;2925:23;2917:68;;;;-1:-1:-1;;;2917:68:0;;17024:2:1;2917:68:0;;;17006:21:1;;;17043:18;;;17036:30;17102:34;17082:18;;;17075:62;17154:18;;2917:68:0;16822:356:1;7702:98:0;7760:7;7787:5;7791:1;7787;:5;:::i;:::-;7780:12;7702:98;-1:-1:-1;;;7702:98:0:o;8113:::-;8171:7;8198:5;8202:1;8198;:5;:::i;33749:2530::-;-1:-1:-1;;;;;33847:16:0;;33839:70;;;;-1:-1:-1;;;33839:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33928:14:0;;33920:66;;;;-1:-1:-1;;;33920:66:0;;;;;;;:::i;:::-;34014:1;34005:6;:10;33997:68;;;;-1:-1:-1;;;33997:68:0;;18425:2:1;33997:68:0;;;18407:21:1;18464:2;18444:18;;;18437:30;18503:34;18483:18;;;18476:62;-1:-1:-1;;;18554:18:1;;;18547:43;18607:19;;33997:68:0;18223:409:1;33997:68:0;34081:11;;;;34076:119;;-1:-1:-1;;;;;34103:25:0;;;;;;:19;:25;;;;;;;;34095:98;;;;-1:-1:-1;;;34095:98:0;;18839:2:1;34095:98:0;;;18821:21:1;18878:2;18858:18;;;18851:30;18917:34;18897:18;;;18890:62;18988:30;18968:18;;;18961:58;19036:19;;34095:98:0;18637:424:1;34095:98:0;34264:10;;34222:4;;34207:12;;-1:-1:-1;;;;;34256:18:0;;;34264:10;;34256:18;34255:92;;34300:10;;-1:-1:-1;;;;;34294:16:0;;;34300:10;;34294:16;34293:54;;34330:17;34255:92;;34293:54;34314:13;34255:92;;;34278:12;34255:92;34237:110;;34370:7;2769:6;;-1:-1:-1;;;;;2769:6:0;;2696:87;34370:7;-1:-1:-1;;;;;34362:15:0;:4;-1:-1:-1;;;;;34362:15:0;;;:32;;;;-1:-1:-1;2769:6:0;;-1:-1:-1;;;;;34381:13:0;;;2769:6;;34381:13;;34362:32;:50;;;;-1:-1:-1;;;;;;34398:14:0;;;;34362:50;:68;;;;-1:-1:-1;;;;;;34416:14:0;;31323:42;34416:14;;34362:68;:82;;;;-1:-1:-1;34435:9:0;;;;;;;34434:10;34362:82;34358:1309;;;-1:-1:-1;;;;;34470:20:0;;;;;;:14;:20;;;;;;;;34469:21;:44;;;;-1:-1:-1;;;;;;34495:18:0;;;;;;:14;:18;;;;;;;;34494:19;34469:44;34461:69;;;;-1:-1:-1;;;34461:69:0;;19268:2:1;34461:69:0;;;19250:21:1;19307:2;19287:18;;;19280:30;-1:-1:-1;;;19326:18:1;;;19319:42;19378:18;;34461:69:0;19066:336:1;34461:69:0;34551:11;;;;34547:109;;-1:-1:-1;;;;;34572:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;34601:23:0;;;;;;:19;:23;;;;;;;;34572:52;34564:92;;;;-1:-1:-1;;;34564:92:0;;19609:2:1;34564:92:0;;;19591:21:1;19648:2;19628:18;;;19621:30;19687:29;19667:18;;;19660:57;19734:18;;34564:92:0;19407:351:1;34564:92:0;34677:15;;;;;;;34673:423;;;34731:10;;-1:-1:-1;;;;;34717:25:0;;;34731:10;;34717:25;;;;:54;;-1:-1:-1;34760:10:0;;-1:-1:-1;;;;;34746:25:0;;;34760:10;;34746:25;;34717:54;34713:368;;;34842:15;;34827:30;;:12;:30;:::i;:::-;34814:9;34804:20;;;;:9;:20;;;;;;:53;:103;;;;-1:-1:-1;34892:15:0;;34877:30;;:12;:30;:::i;:::-;-1:-1:-1;;;;;34861:13:0;;;;;;:9;:13;;;;;;:46;34804:103;34796:156;;;;-1:-1:-1;;;34796:156:0;;20098:2:1;34796:156:0;;;20080:21:1;20137:2;20117:18;;;20110:30;20176:34;20156:18;;;20149:62;-1:-1:-1;;;20227:18:1;;;20220:38;20275:19;;34796:156:0;19896:404:1;34796:156:0;34985:9;34975:20;;;;:9;:20;;;;;;34998:12;34975:35;;;;-1:-1:-1;;;;;35033:13:0;;;;;;:28;34713:368;35126:12;35116:6;:22;;;;;;;;:::i;:::-;;:51;;;;-1:-1:-1;35156:10:0;;-1:-1:-1;;;;;35142:25:0;;;35156:10;;35142:25;;35116:51;:91;;;;-1:-1:-1;;;;;;35172:35:0;;;;;;:31;:35;;;;;;;;35171:36;35116:91;35112:335;;;35264:12;;35254:6;:22;;35246:76;;;;-1:-1:-1;;;35246:76:0;;20639:2:1;35246:76:0;;;20621:21:1;20678:2;20658:18;;;20651:30;20717:34;20697:18;;;20690:62;-1:-1:-1;;;20768:18:1;;;20761:39;20817:19;;35246:76:0;20437:405:1;35246:76:0;35375:15;;35365:6;35349:13;35359:2;-1:-1:-1;;;;;18037:18:0;18010:7;18037:18;;;;;;;;;;;;17936:127;35349:13;:22;;;;:::i;:::-;:41;;35341:90;;;;-1:-1:-1;;;35341:90:0;;21049:2:1;35341:90:0;;;21031:21:1;21088:2;21068:18;;;21061:30;21127:34;21107:18;;;21100:62;-1:-1:-1;;;21178:18:1;;;21171:34;21222:19;;35341:90:0;20847:400:1;35341:90:0;35489:13;35479:6;:23;;;;;;;;:::i;:::-;;:54;;;;-1:-1:-1;35522:10:0;;-1:-1:-1;;;;;35506:27:0;;;35522:10;;35506:27;;35479:54;:96;;;;-1:-1:-1;;;;;;35538:37:0;;;;;;:31;:37;;;;;;;;35537:38;35479:96;35475:180;;;35595:13;;35585:6;:23;;35577:78;;;;-1:-1:-1;;;35577:78:0;;21454:2:1;35577:78:0;;;21436:21:1;21493:2;21473:18;;;21466:30;21532:34;21512:18;;;21505:62;-1:-1:-1;;;21583:18:1;;;21576:40;21633:19;;35577:78:0;21252:406:1;35577:78:0;-1:-1:-1;;;;;35682:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;35711:23:0;;;;;;:19;:23;;;;;;;;35682:52;:68;;;-1:-1:-1;35739:11:0;;;;;;;35738:12;35682:68;:125;;;-1:-1:-1;35756:19:0;;;;;;;35755:20;:51;;;;-1:-1:-1;35789:17:0;35779:6;:27;;;;;;;;:::i;:::-;;35755:51;35679:145;;;35819:5;35809:15;;35679:145;35881:4;35837:23;18037:18;;;;;;;;;;;35837:50;;35898:12;35932:19;;35914:15;:37;35913:68;;;;-1:-1:-1;35967:13:0;35957:6;:23;;;;;;;;:::i;:::-;;35913:68;35898:83;;35998:7;:22;;;;-1:-1:-1;36009:11:0;;;;;;;35998:22;:36;;;;-1:-1:-1;36025:9:0;;;;;;;36024:10;35998:36;:66;;;;-1:-1:-1;;;;;;36039:25:0;;;;;;:19;:25;;;;;;;;36038:26;35998:66;:94;;;;-1:-1:-1;;;;;;36069:23:0;;;;;;:19;:23;;;;;;;;36068:24;35998:94;35994:216;;;36109:9;:16;;-1:-1:-1;;36109:16:0;;;;;36140:26;36150:15;36140:9;:26::i;:::-;36181:9;:17;;-1:-1:-1;;36181:17:0;;;35994:216;36222:49;36237:4;36243:2;36247:6;36255:7;36264:6;36222:14;:49::i;:::-;33828:2451;;;;33749:2530;;;:::o;26000:453::-;26135:24;26162:25;26172:5;26179:7;26162:9;:25::i;:::-;26135:52;;-1:-1:-1;;26202:16:0;:37;26198:248;;26284:6;26264:16;:26;;26256:68;;;;-1:-1:-1;;;26256:68:0;;21865:2:1;26256:68:0;;;21847:21:1;21904:2;21884:18;;;21877:30;21943:31;21923:18;;;21916:59;21992:18;;26256:68:0;21663:353:1;26256:68:0;26368:51;26377:5;26384:7;26412:6;26393:16;:25;26368:8;:51::i;38554:167::-;38616:16;;-1:-1:-1;;;;;38616:16:0;:40;38642:13;:6;38653:1;38642:10;:13::i;:::-;38616:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38667:22:0;;-1:-1:-1;;;;;38667:22:0;:46;38699:13;:6;38710:1;38699:10;:13::i;:::-;38667:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38554:167;:::o;3967:191::-;4060:6;;;-1:-1:-1;;;;;4077:17:0;;;-1:-1:-1;;;;;;4077:17:0;;;;;;;4110:40;;4060:6;;;4077:17;4060:6;;4110:40;;4041:16;;4110:40;4030:128;3967:191;:::o;36287:1413::-;36351:25;36380:75;36435:19;;36380:50;36404:25;;36380:19;;:23;;:50;;;;:::i;:::-;:54;;:75::i;:::-;36351:104;-1:-1:-1;36466:12:0;36503:20;;;:46;;-1:-1:-1;36527:22:0;;36503:46;36499:59;;;36551:7;;36287:1413;:::o;36499:59::-;36592:19;;:26;;36616:1;36592:23;:26::i;:::-;36574:15;:44;36570:94;;;36638:19;;:26;;36662:1;36638:23;:26::i;:::-;36620:44;;36570:94;36677:23;36703:70;36771:1;36703:63;36748:17;36703:40;36723:19;;36703:15;:19;;:40;;;;:::i;:70::-;36677:96;-1:-1:-1;36784:26:0;36813:36;:15;36677:96;36813:19;:36::i;:::-;36784:65;-1:-1:-1;36890:21:0;36924:40;36784:65;36924:20;:40::i;:::-;36985:18;37006:44;:21;37032:17;37006:25;:44::i;:::-;36985:65;;37061:18;37082:58;37122:17;37082:35;37097:19;;37082:10;:14;;:35;;;;:::i;:58::-;37061:79;;37151:17;37171:64;37217:17;37171:41;37186:25;;37171:10;:14;;:41;;;;:::i;:64::-;37151:84;-1:-1:-1;37246:17:0;37266:41;37151:84;37266:26;:10;37281;37266:14;:26::i;:::-;:30;;:41::i;:::-;37350:1;37328:19;:23;;;37362:25;:29;;;37402:19;:23;37246:61;-1:-1:-1;37441:19:0;;;;;:36;;;37476:1;37464:9;:13;37441:36;37438:82;;;37479:41;37493:15;37510:9;37479:13;:41::i;:::-;37554:22;;37546:58;;-1:-1:-1;;;;;37554:22:0;;;;37590:9;;37546:58;;;;37590:9;37554:22;37546:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37636:16:0;;37628:64;;37533:71;;-1:-1:-1;;;;;;37636:16:0;;37666:21;;37628:64;;;;37666:21;37636:16;37628:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;36287:1413:0:o;46812:327::-;46943:7;46938:87;;46952:15;:13;:15::i;:::-;46938:87;;;46992:33;47002:6;47010;47018;46992:9;:33::i;:::-;46983:42;;46938:87;47038:42;47054:6;47062:9;47073:6;47038:15;:42::i;:::-;47106:7;47101:30;;47115:16;46279:24;;46261:15;:42;46338:30;;46314:21;:54;46397:24;;46379:15;:42;46451:20;;46432:16;:39;46507:31;;46482:22;:56;46568:19;;46549:16;:38;46621:29;;46598:20;:52;46690:35;;46661:26;:64;46759:29;;46736:20;:52;46215:581;47115:16;46812:327;;;;;:::o;6964:98::-;7022:7;7049:5;7053:1;7049;:5;:::i;7345:98::-;7403:7;7430:5;7434:1;7430;:5;:::i;37708:461::-;37803:16;;;37817:1;37803:16;;;;;;;;37779:21;;37803:16;;;;;;;;;;-1:-1:-1;37803:16:0;37779:40;;37848:4;37830;37835:1;37830:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37830:23:0;;;:7;;;;;;;;;;:23;;;;37874:10;;:17;;;-1:-1:-1;;;37874:17:0;;;;:10;;;;;:15;;:17;;;;;37830:7;;37874:17;;;;;:10;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37864:4;37869:1;37864:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37864:27:0;;;:7;;;;;;;;;:27;37934:10;;37902:57;;37919:4;;37934:10;37947:11;37902:8;:57::i;:::-;37970:10;;:191;;-1:-1:-1;;;37970:191:0;;-1:-1:-1;;;;;37970:10:0;;;;:61;;:191;;38046:11;;37970:10;;38088:4;;38115;;38135:15;;37970:191;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37768:401;37708:461;:::o;38177:361::-;38292:10;;38260:57;;38277:4;;-1:-1:-1;;;;;38292:10:0;38305:11;38260:8;:57::i;:::-;38328:10;;38473:16;;38328:202;;-1:-1:-1;;;38328:202:0;;38395:4;38328:202;;;23611:34:1;23661:18;;;23654:34;;;38328:10:0;23704:18:1;;;23697:34;;;23747:18;;;23740:34;-1:-1:-1;;;;;38473:16:0;;;23790:19:1;;;23783:44;38504:15:0;23843:19:1;;;23836:35;38328:10:0;;;:26;;38362:9;;23545:19:1;;38328:202:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;45015:1188::-;45064:15;;:20;:50;;;;-1:-1:-1;45088:21:0;;:26;45064:50;:74;;;;-1:-1:-1;45118:15:0;;:20;45064:74;:109;;;;-1:-1:-1;45152:16:0;;:21;45064:109;:140;;;;-1:-1:-1;45177:22:0;;:27;45064:140;:165;;;;-1:-1:-1;45208:16:0;;:21;45064:165;:203;;;;-1:-1:-1;45242:20:0;;:25;45064:203;:238;;;;-1:-1:-1;45271:26:0;;:31;45064:238;:267;;;;-1:-1:-1;45306:20:0;;:25;45064:267;45060:280;;;45015:1188::o;45060:280::-;45379:15;;;45352:24;:42;45438:21;;;45405:30;:54;45497:15;;;45470:24;:42;45546:16;;;45523:20;:39;45607:22;;;45573:31;:56;45662:16;;;45640:19;:38;45721:20;;;45689:29;:52;45790:26;;;45752:35;:64;45859:20;;;45827:29;:52;-1:-1:-1;45900:19:0;;;;45930:25;;;;45966:19;;;;45996:20;;;;46027:26;;;;46064:20;;;46095:24;;;46130:30;;;46171:24;45015:1188::o;47147:886::-;47233:7;47299:12;47275:20;;47256:16;;:39;;;;:::i;:::-;:55;47253:307;;47313:13;:11;:13::i;:::-;47253:307;;;47356:13;47346:6;:23;;;;;;;;:::i;:::-;;47342:218;;47371:14;:12;:14::i;47342:218::-;47415:12;47405:6;:22;;;;;;;;:::i;:::-;;47401:159;;47429:13;:11;:13::i;47401:159::-;47472:17;47462:6;:27;;;;;;;;:::i;:::-;;47458:102;;47491:18;:16;:18::i;47458:102::-;47525:35;;-1:-1:-1;;;47525:35:0;;24395:2:1;47525:35:0;;;24377:21:1;24434:2;24414:18;;;24407:30;24473:27;24453:18;;;24446:55;24518:18;;47525:35:0;24193:349:1;47458:102:0;47608:10;;47581:12;;47608:14;47604:317;;47646:39;29711:4;47646:22;47657:10;;47646:6;:10;;:22;;;;:::i;:39::-;47639:46;;47746:10;;47730:13;;47723:4;:20;;;;:::i;:::-;:33;;;;:::i;:::-;47700:19;;:56;;;;;;;:::i;:::-;;;;-1:-1:-1;;47828:10:0;;47807:18;;47800:25;;:4;:25;:::i;:::-;:38;;;;:::i;:::-;47771:25;;:67;;;;;;;:::i;:::-;;;;-1:-1:-1;;47899:10:0;;47883:13;;47876:20;;:4;:20;:::i;:::-;:33;;;;:::i;:::-;47853:19;;:56;;;;;;;:::i;:::-;;;;-1:-1:-1;;47604:317:0;47937:8;;47933:58;;47947:44;47963:6;47979:4;47986;47947:15;:44::i;:::-;48011:14;48021:4;48011:14;;:::i;:::-;;47147:886;-1:-1:-1;;;;;47147:886:0:o;22160:848::-;-1:-1:-1;;;;;22291:18:0;;22283:72;;;;-1:-1:-1;;;22283:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22374:16:0;;22366:68;;;;-1:-1:-1;;;22366:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22520:15:0;;22498:19;22520:15;;;;;;;;;;;22554:21;;;;22546:72;;;;-1:-1:-1;;;22546:72:0;;24749:2:1;22546:72:0;;;24731:21:1;24788:2;24768:18;;;24761:30;24827:34;24807:18;;;24800:62;-1:-1:-1;;;24878:18:1;;;24871:36;24924:19;;22546:72:0;24547:402:1;22546:72:0;-1:-1:-1;;;;;22654:15:0;;;:9;:15;;;;;;;;;;;22672:20;;;22654:38;;22872:13;;;;;;;;;;:23;;;;;;22924:26;;1361:25:1;;;22872:13:0;;22924:26;;1334:18:1;22924:26:0;;;;;;;22963:37;43355:305;48041:214;48100:2;48084:13;:18;;;48134:3;48113:24;;;48164:3;48148:13;:19;;;48191:56;;48164:3;;48191:37;;48100:2;48191:17;:37::i;:56::-;48178:10;:69;48041:214::o;48263:261::-;48323:16;;48307:13;:32;;;48371:22;;48350:18;:43;;;48420:16;;48404:13;:32;;;48460:56;;48420:16;;48460:37;;48323:16;48460:17;:37::i;48532:257::-;48591:15;;48575:13;:31;;;48638:21;;48617:18;:42;;;48686:15;;48670:13;:31;;;48725:56;;48686:15;;48725:37;;48591:15;48725:17;:37::i;48797:277::-;48861:20;;48845:13;:36;;;48913:26;;48892:18;:47;;;48966:20;;48950:13;:36;;;49010:56;;48966:20;;49010:37;;48861:20;49010:17;:37::i;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1397:127::-;1458:10;1453:3;1449:20;1446:1;1439:31;1489:4;1486:1;1479:15;1513:4;1510:1;1503:15;1529:275;1600:2;1594:9;1665:2;1646:13;;-1:-1:-1;;1642:27:1;1630:40;;1700:18;1685:34;;1721:22;;;1682:62;1679:88;;;1747:18;;:::i;:::-;1783:2;1776:22;1529:275;;-1:-1:-1;1529:275:1:o;1809:183::-;1869:4;1902:18;1894:6;1891:30;1888:56;;;1924:18;;:::i;:::-;-1:-1:-1;1969:1:1;1965:14;1981:4;1961:25;;1809:183::o;1997:743::-;2051:5;2104:3;2097:4;2089:6;2085:17;2081:27;2071:55;;2122:1;2119;2112:12;2071:55;2158:6;2145:20;2184:4;2208:60;2224:43;2264:2;2224:43;:::i;:::-;2208:60;:::i;:::-;2290:3;2314:2;2309:3;2302:15;2342:4;2337:3;2333:14;2326:21;;2399:4;2393:2;2390:1;2386:10;2378:6;2374:23;2370:34;2356:48;;2427:3;2419:6;2416:15;2413:35;;;2444:1;2441;2434:12;2413:35;2480:4;2472:6;2468:17;2494:217;2510:6;2505:3;2502:15;2494:217;;;2590:3;2577:17;2607:31;2632:5;2607:31;:::i;:::-;2651:18;;2689:12;;;;2527;;2494:217;;;-1:-1:-1;2729:5:1;1997:743;-1:-1:-1;;;;;;1997:743:1:o;2745:118::-;2831:5;2824:13;2817:21;2810:5;2807:32;2797:60;;2853:1;2850;2843:12;2868:477;2958:6;2966;3019:2;3007:9;2998:7;2994:23;2990:32;2987:52;;;3035:1;3032;3025:12;2987:52;3075:9;3062:23;3108:18;3100:6;3097:30;3094:50;;;3140:1;3137;3130:12;3094:50;3163:61;3216:7;3207:6;3196:9;3192:22;3163:61;:::i;:::-;3153:71;;;3274:2;3263:9;3259:18;3246:32;3287:28;3309:5;3287:28;:::i;:::-;3334:5;3324:15;;;2868:477;;;;;:::o;3350:180::-;3409:6;3462:2;3450:9;3441:7;3437:23;3433:32;3430:52;;;3478:1;3475;3468:12;3430:52;-1:-1:-1;3501:23:1;;3350:180;-1:-1:-1;3350:180:1:o;3535:241::-;3591:6;3644:2;3632:9;3623:7;3619:23;3615:32;3612:52;;;3660:1;3657;3650:12;3612:52;3699:9;3686:23;3718:28;3740:5;3718:28;:::i;3781:316::-;3858:6;3866;3874;3927:2;3915:9;3906:7;3902:23;3898:32;3895:52;;;3943:1;3940;3933:12;3895:52;-1:-1:-1;;3966:23:1;;;4036:2;4021:18;;4008:32;;-1:-1:-1;4087:2:1;4072:18;;;4059:32;;3781:316;-1:-1:-1;3781:316:1:o;4102:1138::-;4220:6;4228;4281:2;4269:9;4260:7;4256:23;4252:32;4249:52;;;4297:1;4294;4287:12;4249:52;4337:9;4324:23;4366:18;4407:2;4399:6;4396:14;4393:34;;;4423:1;4420;4413:12;4393:34;4446:61;4499:7;4490:6;4479:9;4475:22;4446:61;:::i;:::-;4436:71;;4526:2;4516:12;;4581:2;4570:9;4566:18;4553:32;4610:2;4600:8;4597:16;4594:36;;;4626:1;4623;4616:12;4594:36;4649:24;;;-1:-1:-1;4704:4:1;4696:13;;4692:27;-1:-1:-1;4682:55:1;;4733:1;4730;4723:12;4682:55;4769:2;4756:16;4792:60;4808:43;4848:2;4808:43;:::i;4792:60::-;4886:15;;;4968:1;4964:10;;;;4956:19;;4952:28;;;4917:12;;;;4992:19;;;4989:39;;;5024:1;5021;5014:12;4989:39;5048:11;;;;5068:142;5084:6;5079:3;5076:15;5068:142;;;5150:17;;5138:30;;5101:12;;;;5188;;;;5068:142;;;5229:5;5219:15;;;;;;;4102:1138;;;;;:::o;5245:456::-;5322:6;5330;5338;5391:2;5379:9;5370:7;5366:23;5362:32;5359:52;;;5407:1;5404;5397:12;5359:52;5446:9;5433:23;5465:31;5490:5;5465:31;:::i;:::-;5515:5;-1:-1:-1;5572:2:1;5557:18;;5544:32;5585:33;5544:32;5585:33;:::i;:::-;5245:456;;5637:7;;-1:-1:-1;;;5691:2:1;5676:18;;;;5663:32;;5245:456::o;5706:247::-;5765:6;5818:2;5806:9;5797:7;5793:23;5789:32;5786:52;;;5834:1;5831;5824:12;5786:52;5873:9;5860:23;5892:31;5917:5;5892:31;:::i;6579:388::-;6647:6;6655;6708:2;6696:9;6687:7;6683:23;6679:32;6676:52;;;6724:1;6721;6714:12;6676:52;6763:9;6750:23;6782:31;6807:5;6782:31;:::i;:::-;6832:5;-1:-1:-1;6889:2:1;6874:18;;6861:32;6902:33;6861:32;6902:33;:::i;6972:380::-;7051:1;7047:12;;;;7094;;;7115:61;;7169:4;7161:6;7157:17;7147:27;;7115:61;7222:2;7214:6;7211:14;7191:18;7188:38;7185:161;;7268:10;7263:3;7259:20;7256:1;7249:31;7303:4;7300:1;7293:15;7331:4;7328:1;7321:15;7185:161;;6972:380;;;:::o;7357:127::-;7418:10;7413:3;7409:20;7406:1;7399:31;7449:4;7446:1;7439:15;7473:4;7470:1;7463:15;9897:127;9958:10;9953:3;9949:20;9946:1;9939:31;9989:4;9986:1;9979:15;10013:4;10010:1;10003:15;10029:168;10102:9;;;10133;;10150:15;;;10144:22;;10130:37;10120:71;;10171:18;;:::i;10985:125::-;11050:9;;;11071:10;;;11068:36;;;11084:18;;:::i;14951:184::-;15021:6;15074:2;15062:9;15053:7;15049:23;15045:32;15042:52;;;15090:1;15087;15080:12;15042:52;-1:-1:-1;15113:16:1;;14951:184;-1:-1:-1;14951:184:1:o;15756:245::-;15823:6;15876:2;15864:9;15855:7;15851:23;15847:32;15844:52;;;15892:1;15889;15882:12;15844:52;15924:9;15918:16;15943:28;15965:5;15943:28;:::i;17183:217::-;17223:1;17249;17239:132;;17293:10;17288:3;17284:20;17281:1;17274:31;17328:4;17325:1;17318:15;17356:4;17353:1;17346:15;17239:132;-1:-1:-1;17385:9:1;;17183:217::o;17405:405::-;17607:2;17589:21;;;17646:2;17626:18;;;17619:30;17685:34;17680:2;17665:18;;17658:62;-1:-1:-1;;;17751:2:1;17736:18;;17729:39;17800:3;17785:19;;17405:405::o;17815:403::-;18017:2;17999:21;;;18056:2;18036:18;;;18029:30;18095:34;18090:2;18075:18;;18068:62;-1:-1:-1;;;18161:2:1;18146:18;;18139:37;18208:3;18193:19;;17815:403::o;19763:128::-;19830:9;;;19851:11;;;19848:37;;;19865:18;;:::i;20305:127::-;20366:10;20361:3;20357:20;20354:1;20347:31;20397:4;20394:1;20387:15;20421:4;20418:1;20411:15;22021:251;22091:6;22144:2;22132:9;22123:7;22119:23;22115:32;22112:52;;;22160:1;22157;22150:12;22112:52;22192:9;22186:16;22211:31;22236:5;22211:31;:::i;22277:980::-;22539:4;22587:3;22576:9;22572:19;22618:6;22607:9;22600:25;22644:2;22682:6;22677:2;22666:9;22662:18;22655:34;22725:3;22720:2;22709:9;22705:18;22698:31;22749:6;22784;22778:13;22815:6;22807;22800:22;22853:3;22842:9;22838:19;22831:26;;22892:2;22884:6;22880:15;22866:29;;22913:1;22923:195;22937:6;22934:1;22931:13;22923:195;;;23002:13;;-1:-1:-1;;;;;22998:39:1;22986:52;;23093:15;;;;23058:12;;;;23034:1;22952:9;22923:195;;;-1:-1:-1;;;;;;;23174:32:1;;;;23169:2;23154:18;;23147:60;-1:-1:-1;;;23238:3:1;23223:19;23216:35;23135:3;22277:980;-1:-1:-1;;;22277:980:1:o;23882:306::-;23970:6;23978;23986;24039:2;24027:9;24018:7;24014:23;24010:32;24007:52;;;24055:1;24052;24045:12;24007:52;24084:9;24078:16;24068:26;;24134:2;24123:9;24119:18;24113:25;24103:35;;24178:2;24167:9;24163:18;24157:25;24147:35;;23882:306;;;;;:::o

Swarm Source

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