ETH Price: $2,515.72 (-1.38%)

Token

Poof Token (POOF)
 

Overview

Max Total Supply

100,000,000 POOF

Holders

2,490 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
7.772999924297715247 POOF

Value
$0.00
0x97854273885743526ecab925d2e1f68d61f472f6
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:
PoofToken

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity =0.8.17;

// 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 zero address");
        _transferOwnership(newOwner);
    }

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

// 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 zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

// 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 zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

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

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

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

// 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 zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 PoofToken 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;
    mapping (address => bool) public humanVerified;

    bool public tradingOpen;
    bool private _swapping;
    bool public swapEnabled = false;
    bool public cooldownEnabled = false;
    bool public feesEnabled = true;
    bool public transferFeesEnabled = true;
    bool private humanVerificationRequired = true;

    uint256 private constant _tSupply = 100_000_000 ether;

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

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

    uint256 public constant FEE_DIVISOR = 1000;

    uint256 private _totalFees;
    uint256 private _marketingFee;
    uint256 private _dreamFee;
    uint256 private _liquidityFee;

    uint256 public buyMarketingFee = 20;
    uint256 private _previousBuyMarketingFee = buyMarketingFee;
    uint256 public buyDREAMFee = 10;
    uint256 private _previousBuyDREAMFee = buyDREAMFee;
    uint256 public buyLiquidityFee = 30;
    uint256 private _previousBuyLiquidityFee = buyLiquidityFee;

    uint256 public sellMarketingFee = 20;
    uint256 private _previousSellMktgFee = sellMarketingFee;
    uint256 public sellDREAMFee = 10;
    uint256 private _previousSellDevFee = sellDREAMFee;
    uint256 public sellLiquidityFee = 30;
    uint256 private _previousSellLiqFee = sellLiquidityFee;

    uint256 public transferMarketingFee = 20;
    uint256 private _previousTransferMarketingFee = transferMarketingFee;
    uint256 public transferDREAMFee = 10;
    uint256 private _previousTransferDREAMFee = transferDREAMFee;
    uint256 public transferLiquidityFee = 30;
    uint256 private _previousTransferLiquidityFee = transferLiquidityFee;

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

    address payable public marketingWalletAddress;
    address payable public dreamWalletAddress;
    address payable public liquidityWalletAddress;
    address private _signerAddress;

    address private _dexPair;
    address constant private DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant private ZERO = 0x0000000000000000000000000000000000000000;

    enum TransactionType {
        BUY,
        SELL,
        TRANSFER
    }

    event OpenTrading(uint256 tradingOpenBlock, uint256 _blocksToBlacklist);
    event SetMaxBuyAmount(uint256 newMaxBuyAmount);
    event SetMaxSellAmount(uint256 newMaxSellAmount);
    event SetMaxWalletAmount(uint256 newMaxWalletAmount);
    event SetSwapTokensAtAmount(uint256 newSwapTokensAtAmount);
    event SetBuyFee(uint256 buyMarketingFee, uint256 buyDREAMFee, uint256 buyLiquidityFee);
	event SetSellFee(uint256 sellMarketingFee, uint256 sellDREAMFee, uint256 sellLiquidityFee);
    event SetTransferFee(uint256 transferMarketingFee, uint256 transferDREAMFee, uint256 transferLiquidityFee);
    event VerifyHuman(address signer);
    
    constructor (address payable _marketingWalletAddress, address payable _dreamWalletAddress, address payable _liquidityWalletAddress, address signerAddress) ERC20("Poof Token", "POOF") payable {
        require(_marketingWalletAddress != ZERO, "_marketingWalletAddress cannot be 0");
        require(_dreamWalletAddress != ZERO, "_dreamWalletAddress cannot be 0");
        require(_liquidityWalletAddress != ZERO, "_liquidityWalletAddress cannot be 0");
        require(signerAddress != ZERO, "_signerAddress cannot be 0");

        marketingWalletAddress = _marketingWalletAddress;
        dreamWalletAddress = _dreamWalletAddress;
        liquidityWalletAddress = _liquidityWalletAddress;
        _signerAddress = signerAddress;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _isExcludedFromFees[marketingWalletAddress] = true;
        _isExcludedFromFees[dreamWalletAddress] = true;
        _isExcludedFromFees[liquidityWalletAddress] = true;
        _isExcludedFromFees[_signerAddress] = true;

        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[DEAD] = true;
        _isExcludedMaxTransactionAmount[marketingWalletAddress] = true;
        _isExcludedMaxTransactionAmount[dreamWalletAddress] = true;
        _isExcludedMaxTransactionAmount[liquidityWalletAddress] = true;
        _isExcludedMaxTransactionAmount[_signerAddress] = true;

        humanVerified[owner()] = true;
        humanVerified[address(this)] = true;
        humanVerified[DEAD] = true;
        humanVerified[marketingWalletAddress] = true;
        humanVerified[dreamWalletAddress] = true;
        humanVerified[liquidityWalletAddress] = true;
        humanVerified[_signerAddress] = true;

        _mint(address(this), _tSupply.mul(5).div(100));
        _mint(owner(), _tSupply.mul(95).div(100));
    }

    function _transfer(address from, address to, uint256 amount) internal override {
        require(from != ZERO, "ERC20: transfer from the zero address");
        require(to != ZERO, "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        bool takeFee = true;
        TransactionType txType = (from == _dexPair) ? TransactionType.BUY : (to == _dexPair) ? TransactionType.SELL : TransactionType.TRANSFER;
        if (from != owner() && to != owner() && to != ZERO && to != DEAD && !_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(_dexPair)) {
                    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 == TransactionType.BUY && to != address(_dexRouter) && !_isExcludedMaxTransactionAmount[to]) {
                if (humanVerificationRequired) require(humanVerified[to] == true, "Human not verified.");
                
                require(amount <= maxBuyAmount, "Transfer amount exceeds the maxBuyAmount.");
                require(balanceOf(to) + amount <= maxWalletAmount, "Exceeds maximum wallet token amount.");
            }
            
            if (txType == TransactionType.SELL && from != address(_dexRouter) && !_isExcludedMaxTransactionAmount[from]) require(amount <= maxSellAmount, "Transfer amount exceeds the maxSellAmount.");
        }

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

        uint256 contractBalance = balanceOf(address(this));
        bool canSwap = (contractBalance > _swapTokensAtAmount) && (txType == TransactionType.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(_tokensForDREAM).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;

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

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

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

    function _swapTokensForETH(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,
            liquidityWalletAddress,
            block.timestamp
        );
    }
        
    function _sendETHToFee(uint256 amount) internal {
        marketingWalletAddress.transfer(amount.div(2));
        dreamWalletAddress.transfer(amount.div(2));
    }

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

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

        if (block.chainid == 1 || block.chainid == 5) _dexRouter = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // ETH: Uniswap V2
        else if (block.chainid == 56) _dexRouter = IDEXRouter(0x10ED43C718714eb63d5aA57B78B54704E256024E); // ETH Chain: PCS V2
        else if (block.chainid == 97) _dexRouter = IDEXRouter(0xD99D1c33F9fC3444f8101754aBC46c52416550D1); // ETH Chain Testnet: PCS V2
        else if (block.chainid == 137 || block.chainid == 80001) _dexRouter = IDEXRouter(0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff); // Polygon: Quickswap 
        else revert("Chain not set.");

        _approve(address(this), address(_dexRouter), totalSupply());
        _dexPair = IDEXFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());
        _dexRouter.addLiquidityETH{value: address(this).balance}(address(this), balanceOf(address(this)), 0, 0, owner(), block.timestamp);
        IERC20(_dexPair).approve(address(_dexRouter), type(uint).max);

        maxBuyAmount = totalSupply().mul(2).div(1000);
        maxSellAmount = totalSupply().mul(2).div(1000);
        maxWalletAmount = totalSupply().mul(1).div(100);
        _swapTokensAtAmount = totalSupply().mul(2).div(10000);
        swapEnabled = true;
        cooldownEnabled = true;
        tradingOpen = true;
        tradingOpenBlock = block.number;
        _blocksToBlacklist = blocks;
        emit OpenTrading(tradingOpenBlock, _blocksToBlacklist);
    }

    function setCooldownEnabled(bool onoff) public onlyOwner {
        cooldownEnabled = onoff;
    }

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

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

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

    function setHumanVerificationRequired(bool onoff) public onlyOwner {
        humanVerificationRequired = 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 setMarketingWalletAddress(address _marketingWalletAddress) public onlyOwner {
        require(_marketingWalletAddress != ZERO, "marketingWalletAddress cannot be 0");
        _isExcludedFromFees[marketingWalletAddress] = false;
        _isExcludedMaxTransactionAmount[marketingWalletAddress] = false;
        marketingWalletAddress = payable(_marketingWalletAddress);
        _isExcludedFromFees[marketingWalletAddress] = true;
        _isExcludedMaxTransactionAmount[marketingWalletAddress] = true;
    }

    function setDREAMWalletAddress(address _dreamWalletAddress) public onlyOwner {
        require(_dreamWalletAddress != ZERO, "dreamWalletAddress cannot be 0");
        _isExcludedFromFees[dreamWalletAddress] = false;
        _isExcludedMaxTransactionAmount[dreamWalletAddress] = false;
        dreamWalletAddress = payable(_dreamWalletAddress);
        _isExcludedFromFees[dreamWalletAddress] = true;
        _isExcludedMaxTransactionAmount[dreamWalletAddress] = true;
    }

    function setLiquidityWalletAddress(address _liquidityWalletAddress) public onlyOwner {
        require(_liquidityWalletAddress != ZERO, "liquidityWalletAddress cannot be 0");
        _isExcludedFromFees[liquidityWalletAddress] = false;
        _isExcludedMaxTransactionAmount[liquidityWalletAddress] = false;
        liquidityWalletAddress = payable(_liquidityWalletAddress);
        _isExcludedFromFees[liquidityWalletAddress] = true;
        _isExcludedMaxTransactionAmount[liquidityWalletAddress] = true;
    }

    function setSignerAddress(address signerAddress) public onlyOwner {
        require(signerAddress != ZERO, "_signerAddress cannot be 0");
        _signerAddress = signerAddress;
    }

    function setExcludedFromFees(address[] memory accounts, bool isEx) public onlyOwner {
        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 setBlacklisted(address[] memory accounts, bool isBL) public onlyOwner {
        for (uint i = 0; i < accounts.length; i++) {
            if((accounts[i] != _dexPair) && (accounts[i] != address(_dexRouter)) && (accounts[i] != address(this))) _isBlacklisted[accounts[i]] = isBL;
        }
    }

    function setBuyFee(uint256 _buyMarketingFee, uint256 _buyDREAMFee, uint256 _buyLiquidityFee) public onlyOwner {
        require(_buyMarketingFee.add(_buyDREAMFee).add(_buyLiquidityFee) <= 120, "Must keep buy taxes below 12%");
        buyMarketingFee = _buyMarketingFee;
        buyDREAMFee = _buyDREAMFee;
        buyLiquidityFee = _buyLiquidityFee;
        emit SetBuyFee(buyMarketingFee, buyDREAMFee, buyLiquidityFee);
    }

    function setSellFee(uint256 _sellMarketingFee, uint256 _sellDREAMFee, uint256 _sellLiquidityFee) public onlyOwner {
        require(_sellMarketingFee.add(_sellDREAMFee).add(_sellLiquidityFee) <= 120, "Must keep sell taxes below 12%");
        sellMarketingFee = _sellMarketingFee;
        sellDREAMFee = _sellDREAMFee;
        sellLiquidityFee = _sellLiquidityFee;
        emit SetSellFee(sellMarketingFee, sellDREAMFee, sellLiquidityFee);
    }

    function setTransferFee(uint256 _transferMarketingFee, uint256 _transferDREAMFee, uint256 _transferLiquidityFee) public onlyOwner {
        require(_transferMarketingFee.add(_transferDREAMFee).add(_transferLiquidityFee) <= 250, "Must keep transfer taxes below 25%");
        transferMarketingFee = _transferMarketingFee;
        transferDREAMFee = _transferDREAMFee;
        transferLiquidityFee = _transferLiquidityFee;
        emit SetTransferFee(transferMarketingFee, transferDREAMFee, transferLiquidityFee);
    }

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

    function _removeAllFee() internal {
        if (buyMarketingFee == 0 && buyDREAMFee == 0 && buyLiquidityFee == 0 && 
        sellMarketingFee == 0 && sellDREAMFee == 0 && sellLiquidityFee == 0 &&
        transferMarketingFee == 0 && transferDREAMFee == 0 && transferLiquidityFee == 0) return;

        _previousBuyMarketingFee = buyMarketingFee;
        _previousBuyDREAMFee = buyDREAMFee;
        _previousBuyLiquidityFee = buyLiquidityFee;
        _previousSellMktgFee = sellMarketingFee;
        _previousSellDevFee = sellDREAMFee;
        _previousSellLiqFee = sellLiquidityFee;
        _previousTransferMarketingFee = transferMarketingFee;
        _previousTransferDREAMFee = transferDREAMFee;
        _previousTransferLiquidityFee = transferLiquidityFee;
        
        buyMarketingFee = 0;
        buyDREAMFee = 0;
        buyLiquidityFee = 0;
        sellMarketingFee = 0;
        sellDREAMFee = 0;
        sellLiquidityFee = 0;
        transferMarketingFee = 0;
        transferDREAMFee = 0;
        transferLiquidityFee = 0;
    }
    
    function _restoreAllFee() internal {
        buyMarketingFee = _previousBuyMarketingFee;
        buyDREAMFee = _previousBuyDREAMFee;
        buyLiquidityFee = _previousBuyLiquidityFee;
        sellMarketingFee = _previousSellMktgFee;
        sellDREAMFee = _previousSellDevFee;
        sellLiquidityFee = _previousSellLiqFee;
        transferMarketingFee = _previousTransferMarketingFee;
        transferDREAMFee = _previousTransferDREAMFee;
        transferLiquidityFee = _previousTransferLiquidityFee;
    }
        
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee, TransactionType 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, TransactionType txType) internal returns (uint256) {
        if(tradingOpenBlock + _blocksToBlacklist >= block.number) _setBot();
        else if (txType == TransactionType.SELL) _setSell();
        else if (txType == TransactionType.BUY) _setBuy();
        else if (txType == TransactionType.TRANSFER) _setTransfer();
        else revert("Invalid transaction type.");
        
        uint256 fees;
        if (_totalFees > 0) {
            fees = amount.mul(_totalFees).div(FEE_DIVISOR);
            _tokensForMarketing += fees * _marketingFee / _totalFees;
            _tokensForDREAM += fees * _dreamFee / _totalFees;
            _tokensForLiquidity += fees * _liquidityFee / _totalFees;
        }

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

        return amount -= fees;
    }

    function _setBot() internal {
        _marketingFee = 333;
        _dreamFee = 333;
        _liquidityFee = 333;
        _totalFees = _marketingFee.add(_dreamFee).add(_liquidityFee);
    }

    function _setSell() internal {
        _marketingFee = sellMarketingFee;
        _dreamFee = sellDREAMFee;
        _liquidityFee = sellLiquidityFee;
        _totalFees = _marketingFee.add(_dreamFee).add(_liquidityFee);
    }

    function _setBuy() internal {
        _marketingFee = buyMarketingFee;
        _dreamFee = buyDREAMFee;
        _liquidityFee = buyLiquidityFee;
        _totalFees = _marketingFee.add(_dreamFee).add(_liquidityFee);
    }

    function _setTransfer() internal {
        _marketingFee = transferMarketingFee;
        _dreamFee = transferDREAMFee;
        _liquidityFee = transferLiquidityFee;
        _totalFees = _marketingFee.add(_dreamFee).add(_liquidityFee);
    }
    
    function unclog() public onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        _swapTokensForETH(contractBalance);
    }
    
    function distributeFees() public onlyOwner {
        uint256 contractETHBalance = address(this).balance;
        _sendETHToFee(contractETHBalance);
    }

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

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

    function removeLimits() public onlyOwner {
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();
        maxWalletAmount = totalSupply();
        cooldownEnabled = false;
    }

    function verifyHuman(uint8 _v, bytes32 _r, bytes32 _s) public {
        require(tradingOpen, "Trading is not allowed yet.");
        bytes memory prefix = "\x19Ethereum Signed Message:\n32";
        bytes32 hash = keccak256(abi.encodePacked(address(this), _msgSender(), "POOF!"));
        bytes32 prefixedHash = keccak256(abi.encodePacked(prefix, hash));
        address recovered = ecrecover(prefixedHash, _v, _r, _s);

        if (recovered == _signerAddress) {
            humanVerified[_msgSender()] = true;
            emit VerifyHuman(_msgSender());
        } else {
            revert("Human not verified.");
        }
    }

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

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"_marketingWalletAddress","type":"address"},{"internalType":"address payable","name":"_dreamWalletAddress","type":"address"},{"internalType":"address payable","name":"_liquidityWalletAddress","type":"address"},{"internalType":"address","name":"signerAddress","type":"address"}],"stateMutability":"payable","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":"_blocksToBlacklist","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":"buyDREAMFee","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":"sellDREAMFee","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":"transferDREAMFee","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"signer","type":"address"}],"name":"VerifyHuman","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"buyDREAMFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"distributeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dreamWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"humanVerified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"liquidityWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWalletAddress","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":[{"internalType":"uint256","name":"blocks","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDREAMFee","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":"setBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyDREAMFee","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":"bool","name":"onoff","type":"bool"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_dreamWalletAddress","type":"address"}],"name":"setDREAMWalletAddress","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":"bool","name":"onoff","type":"bool"}],"name":"setFeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setHumanVerificationRequired","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityWalletAddress","type":"address"}],"name":"setLiquidityWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWalletAddress","type":"address"}],"name":"setMarketingWalletAddress","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":"_sellDREAMFee","type":"uint256"},{"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"signerAddress","type":"address"}],"name":"setSignerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setSwapEnabled","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":"_transferDREAMFee","type":"uint256"},{"internalType":"uint256","name":"_transferLiquidityFee","type":"uint256"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setTransferFeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"transferDREAMFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"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":[],"name":"unclog","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"verifyHuman","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tkn","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040819052600c805466ffffffffff0000191666010101000000001790556a52b7d2dcc80cd2e4000000600d819055600e819055600f556000601081905560118190556001601255601460178190556018819055600a6019819055601a819055601e601b819055601c819055601d839055828155601f829055602082905560218190556022819055602383905560249290925560258190556026556027819055602855602c55620045c038819003908190833981016040819052620000c691620006bd565b6040518060400160405280600a8152602001692837b7b3102a37b5b2b760b11b815250604051806040016040528060048152602001632827a7a360e11b8152508160039081620001179190620007c9565b506004620001268282620007c9565b505050620001436200013d6200056160201b60201c565b62000565565b6001600160a01b038416620001ab5760405162461bcd60e51b815260206004820152602360248201527f5f6d61726b6574696e6757616c6c6574416464726573732063616e6e6f74206260448201526206520360ec1b60648201526084015b60405180910390fd5b6001600160a01b038316620002035760405162461bcd60e51b815260206004820152601f60248201527f5f647265616d57616c6c6574416464726573732063616e6e6f742062652030006044820152606401620001a2565b6001600160a01b038216620002675760405162461bcd60e51b815260206004820152602360248201527f5f6c697175696469747957616c6c6574416464726573732063616e6e6f74206260448201526206520360ec1b6064820152608401620001a2565b6001600160a01b038116620002bf5760405162461bcd60e51b815260206004820152601a60248201527f5f7369676e6572416464726573732063616e6e6f7420626520300000000000006044820152606401620001a2565b602d80546001600160a01b03199081166001600160a01b03878116919091178355602e80548316878316178155602f80548416878416178155603080549094168684161784556005805484166000908152600860209081526040808320805460ff1990811660019081179092553080865283862080548316841790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd0933429980548316841790558b548a168652838620805483168417905588548a168652838620805483168417905587548a16865283862080548316841790558a548a168652838620805483168417905586548a16865260098552838620805483168417905580865283862080548316841790557f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb19307500378580548316841790558b548a168652838620805483168417905588548a168652838620805483168417905587548a16865283862080548316841790558a548a168652838620805483168417905586548a168652600b8552838620805483168417905580865283862080548316841790557f44433eeeda1d04bdae79f62169cdb2ab0a6af287fa15706d3fafdbac5fac341580548316841790559a5489168552828520805482168317905596548816845281842080548816821790559454871683528083208054871686179055965490951681529490942080549092161790556200051492916200050e91606491620004fa916a52b7d2dcc80cd2e40000009190620023c1620005b7821b17901c565b620005ce60201b620023d41790919060201c565b620005dc565b620005576200052b6005546001600160a01b031690565b6200050e6064620004fa605f6a52b7d2dcc80cd2e4000000620005b760201b620023c11790919060201c565b50505050620008fe565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000620005c58284620008ab565b90505b92915050565b6000620005c58284620008c5565b6001600160a01b038216620006345760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620001a2565b8060026000828254620006489190620008e8565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b6001600160a01b0381168114620006ba57600080fd5b50565b60008060008060808587031215620006d457600080fd5b8451620006e181620006a4565b6020860151909450620006f481620006a4565b60408601519093506200070781620006a4565b60608601519092506200071a81620006a4565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200075057607f821691505b6020821081036200077157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200069f57600081815260208120601f850160051c81016020861015620007a05750805b601f850160051c820191505b81811015620007c157828155600101620007ac565b505050505050565b81516001600160401b03811115620007e557620007e562000725565b620007fd81620007f684546200073b565b8462000777565b602080601f8311600181146200083557600084156200081c5750858301515b600019600386901b1c1916600185901b178555620007c1565b600085815260208120601f198616915b82811015620008665788860151825594840194600190910190840162000845565b5085821015620008855787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620005c857620005c862000895565b600082620008e357634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620005c857620005c862000895565b613cb2806200090e6000396000f3fe6080604052600436106103a25760003560e01c80639a7bdd3c116101e5578063d16336491161010c578063f11a24d3116100a5578063f5a6682f11610077578063f5a6682f14610abf578063f637434214610adf578063fcb4067414610af5578063fe575a8714610b15578063ffb54a9914610b4e57005b8063f11a24d314610a54578063f2fde38b14610a6a578063f34eb0b814610a8a578063f5648a4f14610aaa57005b8063e1baae1f116100de578063e1baae1f146109d1578063e7c89232146109f1578063e99c9d0914610a11578063effb3c5314610a3157005b8063d163364914610951578063dd62ed3e14610971578063dd77b7e614610991578063e01af92c146109b157005b8063a985ceef1161017e578063c9c9afc511610150578063c9c9afc5146108d1578063cb963728146108f1578063cec9945914610911578063d158272d1461093157005b8063a985ceef14610865578063aa4bde2814610886578063afa4f3b21461089c578063bb57ad20146108bc57005b8063a457c2d7116101b7578063a457c2d7146107e3578063a64e4f8a14610803578063a901dd9214610825578063a9059cbb1461084557005b80639a7bdd3c146107775780639bb19a32146107975780639e93ad8e146107ad578063a3a560d7146107c357005b80635932ead1116102c95780637bce5a04116102625780638da5cb5b116102345780638da5cb5b146106fa5780638eb83f251461072c578063921369131461074c57806395d89b411461076257005b80637bce5a04146106a257806385c5b319146106b857806386f39ae9146106ce57806388e765ff146106e457005b80636ddd17131161029b5780636ddd17131461062257806370a0823114610642578063715018a614610678578063751039fc1461068d57005b80635932ead1146105c15780635ce84c08146105e157806366d602ae146105f757806367c453491461060d57005b80631d865c301161033b57806327a14fc21161030d57806327a14fc214610545578063313ce5671461056557806339509351146105815780634cb80fd5146105a157005b80631d865c30146104cf5780631dbe04ee146104ef57806323b872dd1461050557806325519cf21461052557005b80630e23500e116103745780630e23500e14610456578063105222f91461047a57806314626dc61461049a57806318160ddd146104ba57005b8063046dc166146103ab57806306fdde03146103cb578063095ea7b3146103f65780630988df751461042657005b366103a957005b005b3480156103b757600080fd5b506103a96103c63660046136f4565b610b68565b3480156103d757600080fd5b506103e0610bed565b6040516103ed9190613735565b60405180910390f35b34801561040257600080fd5b50610416610411366004613768565b610c7f565b60405190151581526020016103ed565b34801561043257600080fd5b506104166104413660046136f4565b600b6020526000908152604090205460ff1681565b34801561046257600080fd5b5061046c60105481565b6040519081526020016103ed565b34801561048657600080fd5b506103a96104953660046137c3565b610c99565b3480156104a657600080fd5b506103a96104b536600461389a565b610d0d565b3480156104c657600080fd5b5060025461046c565b3480156104db57600080fd5b506103a96104ea3660046138b3565b610d63565b3480156104fb57600080fd5b5061046c601f5481565b34801561051157600080fd5b506104166105203660046138df565b610e25565b34801561053157600080fd5b506103a96105403660046138b3565b610e49565b34801561055157600080fd5b506103a961056036600461389a565b610efc565b34801561057157600080fd5b50604051601281526020016103ed565b34801561058d57600080fd5b5061041661059c366004613768565b610fd5565b3480156105ad57600080fd5b506103a96105bc3660046136f4565b610ff7565b3480156105cd57600080fd5b506103a96105dc366004613920565b6110de565b3480156105ed57600080fd5b5061046c60255481565b34801561060357600080fd5b5061046c600e5481565b34801561061957600080fd5b506103a9611104565b34801561062e57600080fd5b50600c546104169062010000900460ff1681565b34801561064e57600080fd5b5061046c61065d3660046136f4565b6001600160a01b031660009081526020819052604090205490565b34801561068457600080fd5b506103a9611128565b34801561069957600080fd5b506103a961113c565b3480156106ae57600080fd5b5061046c60175481565b3480156106c457600080fd5b5061046c60235481565b3480156106da57600080fd5b5061046c60195481565b3480156106f057600080fd5b5061046c600d5481565b34801561070657600080fd5b506005546001600160a01b03165b6040516001600160a01b0390911681526020016103ed565b34801561073857600080fd5b50602f54610714906001600160a01b031681565b34801561075857600080fd5b5061046c601d5481565b34801561076e57600080fd5b506103e0611165565b34801561078357600080fd5b50602e54610714906001600160a01b031681565b3480156107a357600080fd5b5061046c60275481565b3480156107b957600080fd5b5061046c6103e881565b3480156107cf57600080fd5b506103a96107de36600461393d565b611174565b3480156107ef57600080fd5b506104166107fe366004613768565b61138e565b34801561080f57600080fd5b50600c5461041690640100000000900460ff1681565b34801561083157600080fd5b506103a9610840366004613920565b611409565b34801561085157600080fd5b50610416610860366004613768565b611431565b34801561087157600080fd5b50600c54610416906301000000900460ff1681565b34801561089257600080fd5b5061046c600f5481565b3480156108a857600080fd5b506103a96108b736600461389a565b61143f565b3480156108c857600080fd5b506103a961157f565b3480156108dd57600080fd5b506103a96108ec3660046136f4565b611591565b3480156108fd57600080fd5b506103a961090c3660046136f4565b611678565b34801561091d57600080fd5b506103a961092c366004613920565b61185b565b34801561093d57600080fd5b50602d54610714906001600160a01b031681565b34801561095d57600080fd5b506103a961096c36600461389a565b611887565b34801561097d57600080fd5b5061046c61098c366004613978565b611dc2565b34801561099d57600080fd5b506103a96109ac366004613920565b611ded565b3480156109bd57600080fd5b506103a96109cc366004613920565b611e17565b3480156109dd57600080fd5b506103a96109ec3660046137c3565b611e3b565b3480156109fd57600080fd5b506103a9610a0c3660046138b3565b611f68565b348015610a1d57600080fd5b506103a9610a2c36600461389a565b612026565b348015610a3d57600080fd5b50600c546104169065010000000000900460ff1681565b348015610a6057600080fd5b5061046c601b5481565b348015610a7657600080fd5b506103a9610a853660046136f4565b6120ec565b348015610a9657600080fd5b506103a9610aa536600461389a565b612162565b348015610ab657600080fd5b506103a9612221565b348015610acb57600080fd5b506103a9610ada3660046137c3565b612276565b348015610aeb57600080fd5b5061046c60215481565b348015610b0157600080fd5b506103a9610b103660046136f4565b6122e5565b348015610b2157600080fd5b50610416610b303660046136f4565b6001600160a01b03166000908152600a602052604090205460ff1690565b348015610b5a57600080fd5b50600c546104169060ff1681565b610b706123e0565b6001600160a01b038116610bcb5760405162461bcd60e51b815260206004820152601a60248201527f5f7369676e6572416464726573732063616e6e6f74206265203000000000000060448201526064015b60405180910390fd5b603080546001600160a01b0319166001600160a01b0392909216919091179055565b606060038054610bfc906139b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610c28906139b1565b8015610c755780601f10610c4a57610100808354040283529160200191610c75565b820191906000526020600020905b815481529060010190602001808311610c5857829003601f168201915b5050505050905090565b600033610c8d81858561243a565b60019150505b92915050565b610ca16123e0565b60005b8251811015610d08578160086000858481518110610cc457610cc46139eb565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610d0081613a17565b915050610ca4565b505050565b610d156123e0565b600a811115610d5e5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b210313637b1b5b99031b7bab73a1760591b6044820152606401610bc2565b601255565b610d6b6123e0565b6078610d8182610d7b868661255e565b9061255e565b1115610dcf5760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772031322500006044820152606401610bc2565b601d839055601f829055602181905560408051848152602081018490529081018290527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b600033610e3385828561256a565b610e3e8585856125de565b506001949350505050565b610e516123e0565b6078610e6182610d7b868661255e565b1115610eaf5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203132250000006044820152606401610bc2565b60178390556019829055601b81905560408051848152602081018490529081018290527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a77362090606001610e18565b610f046123e0565b610f246103e8610f1e6001610f1860025490565b906123c1565b906123d4565b811015610f995760405162461bcd60e51b815260206004820152603960248201527f4d61782077616c6c657420616d6f756e742063616e6e6f74206265206c6f776560448201527f72207468616e20302e312520746f74616c20737570706c792e000000000000006064820152608401610bc2565b600f8190556040518181527f0176e9211818debdc4483c2bb0972798b7eb106239c8e465d4f1cee4ce5ae6e7906020015b60405180910390a150565b600033610c8d818585610fe88383611dc2565b610ff29190613a30565b61243a565b610fff6123e0565b6001600160a01b0381166110605760405162461bcd60e51b815260206004820152602260248201527f6d61726b6574696e6757616c6c6574416464726573732063616e6e6f74206265604482015261020360f41b6064820152608401610bc2565b602d80546001600160a01b039081166000908152600860208181526040808420805460ff19908116909155865486168552600980845282862080548316905587546001600160a01b03191698871698891788559785529282528084208054841660019081179091559554909416835294909452208054909216179055565b6110e66123e0565b600c805491151563010000000263ff00000019909216919091179055565b61110c6123e0565b3060009081526020819052604090205461112581612d65565b50565b6111306123e0565b61113a6000612ebf565b565b6111446123e0565b600254600d55600254600e55600254600f55600c805463ff00000019169055565b606060048054610bfc906139b1565b600c5460ff166111c65760405162461bcd60e51b815260206004820152601b60248201527f54726164696e67206973206e6f7420616c6c6f776564207965742e00000000006044820152606401610bc2565b60408051808201909152601c81527f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152600030336040516bffffffffffffffffffffffff19606093841b811660208301529190921b16603482015264504f4f462160d81b6048820152604d0160405160208183030381529060405280519060200120905060008282604051602001611263929190613a43565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156112ce573d6000803e3d6000fd5b5050604051601f1901516030549092506001600160a01b0390811690831603905061134757336000818152600b6020908152604091829020805460ff19166001179055815192835290517fe385c2eb95e37ee2cdf02c6a43e5d1ae3ccdc71f092306f1b23574eae3cddc859281900390910190a1611385565b60405162461bcd60e51b8152602060048201526013602482015272243ab6b0b7103737ba103b32b934b334b2b21760691b6044820152606401610bc2565b50505050505050565b6000338161139c8286611dc2565b9050838110156113fc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bc2565b610e3e828686840361243a565b6114116123e0565b600c80549115156401000000000264ff0000000019909216919091179055565b600033610c8d8185856125de565b6114476123e0565b61145c620f4240610f1e6001610f1860025490565b8110156114ca5760405162461bcd60e51b815260206004820152603660248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e6044820152751018171818181892903a37ba30b61039bab838363c9760511b6064820152608401610bc2565b6114de6103e8610f1e6005610f1860025490565b81111561154a5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610bc2565b602c8190556040518181527f09e89af7cbd8410d0ad2a74ab3cc8d9ddeef8ab1177f0f8a1984d355bb9d78f190602001610fca565b6115876123e0565b4761112581612f11565b6115996123e0565b6001600160a01b0381166115fa5760405162461bcd60e51b815260206004820152602260248201527f6c697175696469747957616c6c6574416464726573732063616e6e6f74206265604482015261020360f41b6064820152608401610bc2565b602f80546001600160a01b039081166000908152600860208181526040808420805460ff19908116909155865486168552600980845282862080548316905587546001600160a01b03191698871698891788559785529282528084208054841660019081179091559554909416835294909452208054909216179055565b6116806123e0565b306001600160a01b038216036116d85760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f74207769746864726177206f776e20746f6b656e000000000000006044820152606401610bc2565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561171f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117439190613a65565b1161177c5760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b6044820152606401610bc2565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156117c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e79190613a65565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611837573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d089190613a7e565b6118636123e0565b600c805491151566010000000000000266ff00000000000019909216919091179055565b61188f6123e0565b600c5460ff16156118e25760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610bc2565b600a81111561192b5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b210313637b1b5b99031b7bab73a1760591b6044820152606401610bc2565b466001148061193a5750466005145b1561196a57600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055611a4a565b4660380361199d57600680546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e179055611a4a565b466061036119d057600680546001600160a01b03191673d99d1c33f9fc3444f8101754abc46c52416550d1179055611a4a565b46608914806119e157504662013881145b15611a1157600680546001600160a01b03191673a5e0829caced8ffdd4de3c43696c57f7d7a678ff179055611a4a565b60405162461bcd60e51b815260206004820152600e60248201526d21b430b4b7103737ba1039b2ba1760911b6044820152606401610bc2565b600654611a659030906001600160a01b0316610ff260025490565b600660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611adc9190613a9b565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b629190613a9b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd39190613a9b565b603180546001600160a01b039283166001600160a01b03199091161790556006541663f305d7194730611c1b816001600160a01b031660009081526020819052604090205490565b600080611c306005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611c5296959493929190613ab8565b60606040518083038185885af1158015611c70573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c959190613af3565b505060315460065460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b3906044016020604051808303816000875af1158015611cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d129190613a7e565b50611d276103e8610f1e6002610f1860025490565b600d55611d3e6103e8610f1e6002610f1860025490565b600e55611d546064610f1e6001610f1860025490565b600f55611d6b612710610f1e6002610f1860025490565b602c55600c805463ffff00ff19166301010001179055436010819055601182905560408051918252602082018390527f8d3438059bb853597d71f33faf1d080795f797da60ef1c460fe5849903c24adb9101610fca565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b611df56123e0565b600c8054911515650100000000000265ff000000000019909216919091179055565b611e1f6123e0565b600c8054911515620100000262ff000019909216919091179055565b611e436123e0565b60005b8251811015610d085760315483516001600160a01b0390911690849083908110611e7257611e726139eb565b60200260200101516001600160a01b031614158015611ec3575060065483516001600160a01b0390911690849083908110611eaf57611eaf6139eb565b60200260200101516001600160a01b031614155b8015611efa5750306001600160a01b0316838281518110611ee657611ee66139eb565b60200260200101516001600160a01b031614155b15611f565781600a6000858481518110611f1657611f166139eb565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80611f6081613a17565b915050611e46565b611f706123e0565b60fa611f8082610d7b868661255e565b1115611fd95760405162461bcd60e51b815260206004820152602260248201527f4d757374206b656570207472616e736665722074617865732062656c6f772032604482015261352560f01b6064820152608401610bc2565b60238390556025829055602781905560408051848152602081018490529081018290527f0a1ca1cf020cce18eb2c1acd1eb2fbb0911b33f048c9592de691823a416a94bb90606001610e18565b61202e6123e0565b6120426103e8610f1e6001610f1860025490565b8110156120b75760405162461bcd60e51b815260206004820152603760248201527f4d61782073656c6c20616d6f756e742063616e6e6f74206265206c6f7765722060448201527f7468616e20302e312520746f74616c20737570706c792e0000000000000000006064820152608401610bc2565b600e8190556040518181527fa37090cc2feed4f3799a43ad59e5dab1cb6e70a7c1be92b72dbf9610550d5ac890602001610fca565b6120f46123e0565b6001600160a01b0381166121595760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bc2565b61112581612ebf565b61216a6123e0565b61217e6103e8610f1e6001610f1860025490565b8110156121ec5760405162461bcd60e51b815260206004820152603660248201527f4d61782062757920616d6f756e742063616e6e6f74206265206c6f77657220746044820152753430b71018171892903a37ba30b61039bab838363c9760511b6064820152608401610bc2565b600d8190556040518181527f3a0b1f960db2351f13a6a83576ad81b35de3396cf92b9150216f2a6eea641d9a90602001610fca565b6122296123e0565b604051600090339047908381818185875af1925050503d806000811461226b576040519150601f19603f3d011682016040523d82523d6000602084013e612270565b606091505b50505050565b61227e6123e0565b60005b8251811015610d085781600960008584815181106122a1576122a16139eb565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806122dd81613a17565b915050612281565b6122ed6123e0565b6001600160a01b0381166123435760405162461bcd60e51b815260206004820152601e60248201527f647265616d57616c6c6574416464726573732063616e6e6f74206265203000006044820152606401610bc2565b602e80546001600160a01b039081166000908152600860208181526040808420805460ff19908116909155865486168552600980845282862080548316905587546001600160a01b03191698871698891788559785529282528084208054841660019081179091559554909416835294909452208054909216179055565b60006123cd8284613b21565b9392505050565b60006123cd8284613b38565b6005546001600160a01b0316331461113a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bc2565b6001600160a01b03831661249c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bc2565b6001600160a01b0382166124fd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bc2565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006123cd8284613a30565b60006125768484611dc2565b9050600019811461227057818110156125d15760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610bc2565b612270848484840361243a565b6001600160a01b0383166126045760405162461bcd60e51b8152600401610bc290613b5a565b6001600160a01b03821661262a5760405162461bcd60e51b8152600401610bc290613b9f565b6000811161268c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bc2565b6031546001906000906001600160a01b038681169116146126ca576031546001600160a01b038581169116146126c35760026126cd565b60016126cd565b60005b90506126e16005546001600160a01b031690565b6001600160a01b0316856001600160a01b03161415801561271057506005546001600160a01b03858116911614155b801561272457506001600160a01b03841615155b801561273b57506001600160a01b03841661dead14155b801561274f5750600c54610100900460ff16155b15612bf2576001600160a01b0385166000908152600a602052604090205460ff1615801561279657506001600160a01b0384166000908152600a602052604090205460ff16155b6127d15760405162461bcd60e51b815260206004820152600c60248201526b213630b1b5b634b9ba32b21760a11b6044820152606401610bc2565b600c5460ff16612866576001600160a01b03851660009081526008602052604090205460ff168061281a57506001600160a01b03841660009081526008602052604090205460ff165b6128665760405162461bcd60e51b815260206004820152601b60248201527f54726164696e67206973206e6f7420616c6c6f776564207965742e00000000006044820152606401610bc2565b600c546301000000900460ff1615612978576006546001600160a01b038581169116148015906128a457506031546001600160a01b03858116911614155b15612978576012546128b69043613be2565b326000908152600760205260409020541080156128f657506012546128db9043613be2565b6001600160a01b038516600090815260076020526040902054105b6129535760405162461bcd60e51b815260206004820152602860248201527f5472616e736665722064656c617920656e61626c65642e20547279206167616960448201526737103630ba32b91760c11b6064820152608401610bc2565b3260009081526007602052604080822043908190556001600160a01b03871683529120555b600081600281111561298c5761298c613bf5565b1480156129a757506006546001600160a01b03858116911614155b80156129cc57506001600160a01b03841660009081526009602052604090205460ff16155b15612b3457600c546601000000000000900460ff1615612a49576001600160a01b0384166000908152600b602052604090205460ff161515600114612a495760405162461bcd60e51b8152602060048201526013602482015272243ab6b0b7103737ba103b32b934b334b2b21760691b6044820152606401610bc2565b600d54831115612aad5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178426044820152683abca0b6b7bab73a1760b91b6064820152608401610bc2565b600f5483612ad0866001600160a01b031660009081526020819052604090205490565b612ada9190613a30565b1115612b345760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610bc2565b6001816002811115612b4857612b48613bf5565b148015612b6357506006546001600160a01b03868116911614155b8015612b8857506001600160a01b03851660009081526009602052604090205460ff16155b15612bf257600e54831115612bf25760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785360448201526932b63620b6b7bab73a1760b11b6064820152608401610bc2565b6001600160a01b03851660009081526008602052604090205460ff1680612c3157506001600160a01b03841660009081526008602052604090205460ff165b80612c475750600c54640100000000900460ff16155b80612c7a5750600c5465010000000000900460ff16158015612c7a57506002816002811115612c7857612c78613bf5565b145b15612c8457600091505b3060009081526020819052604081205490506000602c5482118015612cba57506001836002811115612cb857612cb8613bf5565b145b9050808015612cd15750600c5462010000900460ff165b8015612ce55750600c54610100900460ff16155b8015612d0a57506001600160a01b03871660009081526008602052604090205460ff16155b8015612d2f57506001600160a01b03861660009081526008602052604090205460ff16155b15612d5857600c805461ff001916610100179055612d4c82612f9a565b600c805461ff00191690555b6113858787878787613175565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d9a57612d9a6139eb565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612df3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e179190613a9b565b81600181518110612e2a57612e2a6139eb565b6001600160a01b039283166020918202929092010152600654612e50913091168461243a565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e89908590600090869030904290600401613c0b565b600060405180830381600087803b158015612ea357600080fd5b505af1158015612eb7573d6000803e3d6000fd5b505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b602d546001600160a01b03166108fc612f2b8360026123d4565b6040518115909202916000818181858888f19350505050158015612f53573d6000803e3d6000fd5b50602e546001600160a01b03166108fc612f6e8360026123d4565b6040518115909202916000818181858888f19350505050158015612f96573d6000803e3d6000fd5b5050565b6000612fb9602b54610d7b602a5460295461255e90919063ffffffff16565b90506000821580612fc8575081155b15612fd257505050565b602c54612fe09060056123c1565b831115612ff857602c54612ff59060056123c1565b92505b60006130186002610f1e85610f1e602b54896123c190919063ffffffff16565b9050600061302685836131e7565b90504761303282612d65565b600061303e47836131e7565b9050600061305b87610f1e602954856123c190919063ffffffff16565b9050600061307888610f1e602a54866123c190919063ffffffff16565b905060006130908261308a86866131e7565b906131e7565b60006029819055602a819055602b55905086158015906130b05750600081115b156130bf576130bf87826131f3565b602e546040516001600160a01b03909116908390600081818185875af1925050503d806000811461310c576040519150601f19603f3d011682016040523d82523d6000602084013e613111565b606091505b5050602d546040519199506001600160a01b0316904790600081818185875af1925050503d8060008114613161576040519150601f19603f3d011682016040523d82523d6000602084013e613166565b606091505b50505050505050505050505050565b816131875761318261328e565b613195565b61319285848361335a565b92505b6131a0858585613508565b816131e0576131e0601854601755601a54601955601c54601b55601e54601d55602054601f55602254602155602454602355602654602555602854602755565b5050505050565b60006123cd8284613be2565b60065461320b9030906001600160a01b03168461243a565b600654602f5460405163f305d71960e01b81526001600160a01b039283169263f305d71992859261324b9230928992600092839216904290600401613ab8565b60606040518083038185885af1158015613269573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131e09190613af3565b60175415801561329e5750601954155b80156132aa5750601b54155b80156132b65750601d54155b80156132c25750601f54155b80156132ce5750602154155b80156132da5750602354155b80156132e65750602554155b80156132f25750602754155b156132f957565b6017805460185560198054601a55601b8054601c55601d8054601e55601f8054602055602180546022556023805460245560258054602655602780546028556000988990559688905594879055928690559085905584905583905582905555565b60004360115460105461336d9190613a30565b1061337f5761337a613632565b61342a565b600182600281111561339357613393613bf5565b036133a05761337a613657565b60008260028111156133b4576133b4613bf5565b036133c15761337a61367f565b60028260028111156133d5576133d5613bf5565b036133e25761337a6136a7565b60405162461bcd60e51b815260206004820152601960248201527f496e76616c6964207472616e73616374696f6e20747970652e000000000000006044820152606401610bc2565b601354600090156134e4576134506103e8610f1e601354876123c190919063ffffffff16565b9050601354601454826134639190613b21565b61346d9190613b38565b6029600082825461347e9190613a30565b90915550506013546015546134939083613b21565b61349d9190613b38565b602a60008282546134ae9190613a30565b90915550506013546016546134c39083613b21565b6134cd9190613b38565b602b60008282546134de9190613a30565b90915550505b80156134f5576134f5853083613508565b6134ff8185613be2565b95945050505050565b6001600160a01b03831661352e5760405162461bcd60e51b8152600401610bc290613b5a565b6001600160a01b0382166135545760405162461bcd60e51b8152600401610bc290613b9f565b6001600160a01b038316600090815260208190526040902054818110156135cc5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bc2565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3612270565b61014d60148190556015819055601681905561365290610d7b818061255e565b601355565b601d546014819055601f5460158190556021546016819055613652929091610d7b919061255e565b60175460148190556019546015819055601b546016819055613652929091610d7b919061255e565b602354601481905560255460158190556027546016819055613652929091610d7b919061255e565b6001600160a01b038116811461112557600080fd5b80356136ef816136cf565b919050565b60006020828403121561370657600080fd5b81356123cd816136cf565b60005b8381101561372c578181015183820152602001613714565b50506000910152565b6020815260008251806020840152613754816040850160208701613711565b601f01601f19169190910160400192915050565b6000806040838503121561377b57600080fd5b8235613786816136cf565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b801515811461112557600080fd5b80356136ef816137aa565b600080604083850312156137d657600080fd5b823567ffffffffffffffff808211156137ee57600080fd5b818501915085601f83011261380257600080fd5b813560208282111561381657613816613794565b8160051b604051601f19603f8301168101818110868211171561383b5761383b613794565b60405292835281830193508481018201928984111561385957600080fd5b948201945b8386101561387e5761386f866136e4565b8552948201949382019361385e565b965061388d90508782016137b8565b9450505050509250929050565b6000602082840312156138ac57600080fd5b5035919050565b6000806000606084860312156138c857600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156138f457600080fd5b83356138ff816136cf565b9250602084013561390f816136cf565b929592945050506040919091013590565b60006020828403121561393257600080fd5b81356123cd816137aa565b60008060006060848603121561395257600080fd5b833560ff8116811461396357600080fd5b95602085013595506040909401359392505050565b6000806040838503121561398b57600080fd5b8235613996816136cf565b915060208301356139a6816136cf565b809150509250929050565b600181811c908216806139c557607f821691505b6020821081036139e557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613a2957613a29613a01565b5060010190565b80820180821115610c9357610c93613a01565b60008351613a55818460208801613711565b9190910191825250602001919050565b600060208284031215613a7757600080fd5b5051919050565b600060208284031215613a9057600080fd5b81516123cd816137aa565b600060208284031215613aad57600080fd5b81516123cd816136cf565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613b0857600080fd5b8351925060208401519150604084015190509250925092565b8082028115828204841417610c9357610c93613a01565b600082613b5557634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c9357610c93613a01565b634e487b7160e01b600052602160045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613c5b5784516001600160a01b031683529383019391830191600101613c36565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220aa3440f7e00f061a3b03291c9798b1948f6978cf54c1c21d306a71da36f0377064736f6c63430008110033000000000000000000000000995f2de133e2c8bd2c17a1fddfd3570e624a0d5900000000000000000000000081252e081f4335e3b766ad5c6c4038076a444994000000000000000000000000828ffc43f245c293ebe6f75a9fb4a8c54c5e5356000000000000000000000000b08981501f6af6c3018e024d0d4f74c91c4f02ce

Deployed Bytecode

0x6080604052600436106103a25760003560e01c80639a7bdd3c116101e5578063d16336491161010c578063f11a24d3116100a5578063f5a6682f11610077578063f5a6682f14610abf578063f637434214610adf578063fcb4067414610af5578063fe575a8714610b15578063ffb54a9914610b4e57005b8063f11a24d314610a54578063f2fde38b14610a6a578063f34eb0b814610a8a578063f5648a4f14610aaa57005b8063e1baae1f116100de578063e1baae1f146109d1578063e7c89232146109f1578063e99c9d0914610a11578063effb3c5314610a3157005b8063d163364914610951578063dd62ed3e14610971578063dd77b7e614610991578063e01af92c146109b157005b8063a985ceef1161017e578063c9c9afc511610150578063c9c9afc5146108d1578063cb963728146108f1578063cec9945914610911578063d158272d1461093157005b8063a985ceef14610865578063aa4bde2814610886578063afa4f3b21461089c578063bb57ad20146108bc57005b8063a457c2d7116101b7578063a457c2d7146107e3578063a64e4f8a14610803578063a901dd9214610825578063a9059cbb1461084557005b80639a7bdd3c146107775780639bb19a32146107975780639e93ad8e146107ad578063a3a560d7146107c357005b80635932ead1116102c95780637bce5a04116102625780638da5cb5b116102345780638da5cb5b146106fa5780638eb83f251461072c578063921369131461074c57806395d89b411461076257005b80637bce5a04146106a257806385c5b319146106b857806386f39ae9146106ce57806388e765ff146106e457005b80636ddd17131161029b5780636ddd17131461062257806370a0823114610642578063715018a614610678578063751039fc1461068d57005b80635932ead1146105c15780635ce84c08146105e157806366d602ae146105f757806367c453491461060d57005b80631d865c301161033b57806327a14fc21161030d57806327a14fc214610545578063313ce5671461056557806339509351146105815780634cb80fd5146105a157005b80631d865c30146104cf5780631dbe04ee146104ef57806323b872dd1461050557806325519cf21461052557005b80630e23500e116103745780630e23500e14610456578063105222f91461047a57806314626dc61461049a57806318160ddd146104ba57005b8063046dc166146103ab57806306fdde03146103cb578063095ea7b3146103f65780630988df751461042657005b366103a957005b005b3480156103b757600080fd5b506103a96103c63660046136f4565b610b68565b3480156103d757600080fd5b506103e0610bed565b6040516103ed9190613735565b60405180910390f35b34801561040257600080fd5b50610416610411366004613768565b610c7f565b60405190151581526020016103ed565b34801561043257600080fd5b506104166104413660046136f4565b600b6020526000908152604090205460ff1681565b34801561046257600080fd5b5061046c60105481565b6040519081526020016103ed565b34801561048657600080fd5b506103a96104953660046137c3565b610c99565b3480156104a657600080fd5b506103a96104b536600461389a565b610d0d565b3480156104c657600080fd5b5060025461046c565b3480156104db57600080fd5b506103a96104ea3660046138b3565b610d63565b3480156104fb57600080fd5b5061046c601f5481565b34801561051157600080fd5b506104166105203660046138df565b610e25565b34801561053157600080fd5b506103a96105403660046138b3565b610e49565b34801561055157600080fd5b506103a961056036600461389a565b610efc565b34801561057157600080fd5b50604051601281526020016103ed565b34801561058d57600080fd5b5061041661059c366004613768565b610fd5565b3480156105ad57600080fd5b506103a96105bc3660046136f4565b610ff7565b3480156105cd57600080fd5b506103a96105dc366004613920565b6110de565b3480156105ed57600080fd5b5061046c60255481565b34801561060357600080fd5b5061046c600e5481565b34801561061957600080fd5b506103a9611104565b34801561062e57600080fd5b50600c546104169062010000900460ff1681565b34801561064e57600080fd5b5061046c61065d3660046136f4565b6001600160a01b031660009081526020819052604090205490565b34801561068457600080fd5b506103a9611128565b34801561069957600080fd5b506103a961113c565b3480156106ae57600080fd5b5061046c60175481565b3480156106c457600080fd5b5061046c60235481565b3480156106da57600080fd5b5061046c60195481565b3480156106f057600080fd5b5061046c600d5481565b34801561070657600080fd5b506005546001600160a01b03165b6040516001600160a01b0390911681526020016103ed565b34801561073857600080fd5b50602f54610714906001600160a01b031681565b34801561075857600080fd5b5061046c601d5481565b34801561076e57600080fd5b506103e0611165565b34801561078357600080fd5b50602e54610714906001600160a01b031681565b3480156107a357600080fd5b5061046c60275481565b3480156107b957600080fd5b5061046c6103e881565b3480156107cf57600080fd5b506103a96107de36600461393d565b611174565b3480156107ef57600080fd5b506104166107fe366004613768565b61138e565b34801561080f57600080fd5b50600c5461041690640100000000900460ff1681565b34801561083157600080fd5b506103a9610840366004613920565b611409565b34801561085157600080fd5b50610416610860366004613768565b611431565b34801561087157600080fd5b50600c54610416906301000000900460ff1681565b34801561089257600080fd5b5061046c600f5481565b3480156108a857600080fd5b506103a96108b736600461389a565b61143f565b3480156108c857600080fd5b506103a961157f565b3480156108dd57600080fd5b506103a96108ec3660046136f4565b611591565b3480156108fd57600080fd5b506103a961090c3660046136f4565b611678565b34801561091d57600080fd5b506103a961092c366004613920565b61185b565b34801561093d57600080fd5b50602d54610714906001600160a01b031681565b34801561095d57600080fd5b506103a961096c36600461389a565b611887565b34801561097d57600080fd5b5061046c61098c366004613978565b611dc2565b34801561099d57600080fd5b506103a96109ac366004613920565b611ded565b3480156109bd57600080fd5b506103a96109cc366004613920565b611e17565b3480156109dd57600080fd5b506103a96109ec3660046137c3565b611e3b565b3480156109fd57600080fd5b506103a9610a0c3660046138b3565b611f68565b348015610a1d57600080fd5b506103a9610a2c36600461389a565b612026565b348015610a3d57600080fd5b50600c546104169065010000000000900460ff1681565b348015610a6057600080fd5b5061046c601b5481565b348015610a7657600080fd5b506103a9610a853660046136f4565b6120ec565b348015610a9657600080fd5b506103a9610aa536600461389a565b612162565b348015610ab657600080fd5b506103a9612221565b348015610acb57600080fd5b506103a9610ada3660046137c3565b612276565b348015610aeb57600080fd5b5061046c60215481565b348015610b0157600080fd5b506103a9610b103660046136f4565b6122e5565b348015610b2157600080fd5b50610416610b303660046136f4565b6001600160a01b03166000908152600a602052604090205460ff1690565b348015610b5a57600080fd5b50600c546104169060ff1681565b610b706123e0565b6001600160a01b038116610bcb5760405162461bcd60e51b815260206004820152601a60248201527f5f7369676e6572416464726573732063616e6e6f74206265203000000000000060448201526064015b60405180910390fd5b603080546001600160a01b0319166001600160a01b0392909216919091179055565b606060038054610bfc906139b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610c28906139b1565b8015610c755780601f10610c4a57610100808354040283529160200191610c75565b820191906000526020600020905b815481529060010190602001808311610c5857829003601f168201915b5050505050905090565b600033610c8d81858561243a565b60019150505b92915050565b610ca16123e0565b60005b8251811015610d08578160086000858481518110610cc457610cc46139eb565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610d0081613a17565b915050610ca4565b505050565b610d156123e0565b600a811115610d5e5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b210313637b1b5b99031b7bab73a1760591b6044820152606401610bc2565b601255565b610d6b6123e0565b6078610d8182610d7b868661255e565b9061255e565b1115610dcf5760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772031322500006044820152606401610bc2565b601d839055601f829055602181905560408051848152602081018490529081018290527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b600033610e3385828561256a565b610e3e8585856125de565b506001949350505050565b610e516123e0565b6078610e6182610d7b868661255e565b1115610eaf5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203132250000006044820152606401610bc2565b60178390556019829055601b81905560408051848152602081018490529081018290527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a77362090606001610e18565b610f046123e0565b610f246103e8610f1e6001610f1860025490565b906123c1565b906123d4565b811015610f995760405162461bcd60e51b815260206004820152603960248201527f4d61782077616c6c657420616d6f756e742063616e6e6f74206265206c6f776560448201527f72207468616e20302e312520746f74616c20737570706c792e000000000000006064820152608401610bc2565b600f8190556040518181527f0176e9211818debdc4483c2bb0972798b7eb106239c8e465d4f1cee4ce5ae6e7906020015b60405180910390a150565b600033610c8d818585610fe88383611dc2565b610ff29190613a30565b61243a565b610fff6123e0565b6001600160a01b0381166110605760405162461bcd60e51b815260206004820152602260248201527f6d61726b6574696e6757616c6c6574416464726573732063616e6e6f74206265604482015261020360f41b6064820152608401610bc2565b602d80546001600160a01b039081166000908152600860208181526040808420805460ff19908116909155865486168552600980845282862080548316905587546001600160a01b03191698871698891788559785529282528084208054841660019081179091559554909416835294909452208054909216179055565b6110e66123e0565b600c805491151563010000000263ff00000019909216919091179055565b61110c6123e0565b3060009081526020819052604090205461112581612d65565b50565b6111306123e0565b61113a6000612ebf565b565b6111446123e0565b600254600d55600254600e55600254600f55600c805463ff00000019169055565b606060048054610bfc906139b1565b600c5460ff166111c65760405162461bcd60e51b815260206004820152601b60248201527f54726164696e67206973206e6f7420616c6c6f776564207965742e00000000006044820152606401610bc2565b60408051808201909152601c81527f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152600030336040516bffffffffffffffffffffffff19606093841b811660208301529190921b16603482015264504f4f462160d81b6048820152604d0160405160208183030381529060405280519060200120905060008282604051602001611263929190613a43565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156112ce573d6000803e3d6000fd5b5050604051601f1901516030549092506001600160a01b0390811690831603905061134757336000818152600b6020908152604091829020805460ff19166001179055815192835290517fe385c2eb95e37ee2cdf02c6a43e5d1ae3ccdc71f092306f1b23574eae3cddc859281900390910190a1611385565b60405162461bcd60e51b8152602060048201526013602482015272243ab6b0b7103737ba103b32b934b334b2b21760691b6044820152606401610bc2565b50505050505050565b6000338161139c8286611dc2565b9050838110156113fc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bc2565b610e3e828686840361243a565b6114116123e0565b600c80549115156401000000000264ff0000000019909216919091179055565b600033610c8d8185856125de565b6114476123e0565b61145c620f4240610f1e6001610f1860025490565b8110156114ca5760405162461bcd60e51b815260206004820152603660248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e6044820152751018171818181892903a37ba30b61039bab838363c9760511b6064820152608401610bc2565b6114de6103e8610f1e6005610f1860025490565b81111561154a5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610bc2565b602c8190556040518181527f09e89af7cbd8410d0ad2a74ab3cc8d9ddeef8ab1177f0f8a1984d355bb9d78f190602001610fca565b6115876123e0565b4761112581612f11565b6115996123e0565b6001600160a01b0381166115fa5760405162461bcd60e51b815260206004820152602260248201527f6c697175696469747957616c6c6574416464726573732063616e6e6f74206265604482015261020360f41b6064820152608401610bc2565b602f80546001600160a01b039081166000908152600860208181526040808420805460ff19908116909155865486168552600980845282862080548316905587546001600160a01b03191698871698891788559785529282528084208054841660019081179091559554909416835294909452208054909216179055565b6116806123e0565b306001600160a01b038216036116d85760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f74207769746864726177206f776e20746f6b656e000000000000006044820152606401610bc2565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561171f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117439190613a65565b1161177c5760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b6044820152606401610bc2565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156117c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e79190613a65565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611837573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d089190613a7e565b6118636123e0565b600c805491151566010000000000000266ff00000000000019909216919091179055565b61188f6123e0565b600c5460ff16156118e25760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610bc2565b600a81111561192b5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b210313637b1b5b99031b7bab73a1760591b6044820152606401610bc2565b466001148061193a5750466005145b1561196a57600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055611a4a565b4660380361199d57600680546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e179055611a4a565b466061036119d057600680546001600160a01b03191673d99d1c33f9fc3444f8101754abc46c52416550d1179055611a4a565b46608914806119e157504662013881145b15611a1157600680546001600160a01b03191673a5e0829caced8ffdd4de3c43696c57f7d7a678ff179055611a4a565b60405162461bcd60e51b815260206004820152600e60248201526d21b430b4b7103737ba1039b2ba1760911b6044820152606401610bc2565b600654611a659030906001600160a01b0316610ff260025490565b600660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611adc9190613a9b565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b629190613a9b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd39190613a9b565b603180546001600160a01b039283166001600160a01b03199091161790556006541663f305d7194730611c1b816001600160a01b031660009081526020819052604090205490565b600080611c306005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611c5296959493929190613ab8565b60606040518083038185885af1158015611c70573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c959190613af3565b505060315460065460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b3906044016020604051808303816000875af1158015611cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d129190613a7e565b50611d276103e8610f1e6002610f1860025490565b600d55611d3e6103e8610f1e6002610f1860025490565b600e55611d546064610f1e6001610f1860025490565b600f55611d6b612710610f1e6002610f1860025490565b602c55600c805463ffff00ff19166301010001179055436010819055601182905560408051918252602082018390527f8d3438059bb853597d71f33faf1d080795f797da60ef1c460fe5849903c24adb9101610fca565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b611df56123e0565b600c8054911515650100000000000265ff000000000019909216919091179055565b611e1f6123e0565b600c8054911515620100000262ff000019909216919091179055565b611e436123e0565b60005b8251811015610d085760315483516001600160a01b0390911690849083908110611e7257611e726139eb565b60200260200101516001600160a01b031614158015611ec3575060065483516001600160a01b0390911690849083908110611eaf57611eaf6139eb565b60200260200101516001600160a01b031614155b8015611efa5750306001600160a01b0316838281518110611ee657611ee66139eb565b60200260200101516001600160a01b031614155b15611f565781600a6000858481518110611f1657611f166139eb565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80611f6081613a17565b915050611e46565b611f706123e0565b60fa611f8082610d7b868661255e565b1115611fd95760405162461bcd60e51b815260206004820152602260248201527f4d757374206b656570207472616e736665722074617865732062656c6f772032604482015261352560f01b6064820152608401610bc2565b60238390556025829055602781905560408051848152602081018490529081018290527f0a1ca1cf020cce18eb2c1acd1eb2fbb0911b33f048c9592de691823a416a94bb90606001610e18565b61202e6123e0565b6120426103e8610f1e6001610f1860025490565b8110156120b75760405162461bcd60e51b815260206004820152603760248201527f4d61782073656c6c20616d6f756e742063616e6e6f74206265206c6f7765722060448201527f7468616e20302e312520746f74616c20737570706c792e0000000000000000006064820152608401610bc2565b600e8190556040518181527fa37090cc2feed4f3799a43ad59e5dab1cb6e70a7c1be92b72dbf9610550d5ac890602001610fca565b6120f46123e0565b6001600160a01b0381166121595760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bc2565b61112581612ebf565b61216a6123e0565b61217e6103e8610f1e6001610f1860025490565b8110156121ec5760405162461bcd60e51b815260206004820152603660248201527f4d61782062757920616d6f756e742063616e6e6f74206265206c6f77657220746044820152753430b71018171892903a37ba30b61039bab838363c9760511b6064820152608401610bc2565b600d8190556040518181527f3a0b1f960db2351f13a6a83576ad81b35de3396cf92b9150216f2a6eea641d9a90602001610fca565b6122296123e0565b604051600090339047908381818185875af1925050503d806000811461226b576040519150601f19603f3d011682016040523d82523d6000602084013e612270565b606091505b50505050565b61227e6123e0565b60005b8251811015610d085781600960008584815181106122a1576122a16139eb565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806122dd81613a17565b915050612281565b6122ed6123e0565b6001600160a01b0381166123435760405162461bcd60e51b815260206004820152601e60248201527f647265616d57616c6c6574416464726573732063616e6e6f74206265203000006044820152606401610bc2565b602e80546001600160a01b039081166000908152600860208181526040808420805460ff19908116909155865486168552600980845282862080548316905587546001600160a01b03191698871698891788559785529282528084208054841660019081179091559554909416835294909452208054909216179055565b60006123cd8284613b21565b9392505050565b60006123cd8284613b38565b6005546001600160a01b0316331461113a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bc2565b6001600160a01b03831661249c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bc2565b6001600160a01b0382166124fd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bc2565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006123cd8284613a30565b60006125768484611dc2565b9050600019811461227057818110156125d15760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610bc2565b612270848484840361243a565b6001600160a01b0383166126045760405162461bcd60e51b8152600401610bc290613b5a565b6001600160a01b03821661262a5760405162461bcd60e51b8152600401610bc290613b9f565b6000811161268c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bc2565b6031546001906000906001600160a01b038681169116146126ca576031546001600160a01b038581169116146126c35760026126cd565b60016126cd565b60005b90506126e16005546001600160a01b031690565b6001600160a01b0316856001600160a01b03161415801561271057506005546001600160a01b03858116911614155b801561272457506001600160a01b03841615155b801561273b57506001600160a01b03841661dead14155b801561274f5750600c54610100900460ff16155b15612bf2576001600160a01b0385166000908152600a602052604090205460ff1615801561279657506001600160a01b0384166000908152600a602052604090205460ff16155b6127d15760405162461bcd60e51b815260206004820152600c60248201526b213630b1b5b634b9ba32b21760a11b6044820152606401610bc2565b600c5460ff16612866576001600160a01b03851660009081526008602052604090205460ff168061281a57506001600160a01b03841660009081526008602052604090205460ff165b6128665760405162461bcd60e51b815260206004820152601b60248201527f54726164696e67206973206e6f7420616c6c6f776564207965742e00000000006044820152606401610bc2565b600c546301000000900460ff1615612978576006546001600160a01b038581169116148015906128a457506031546001600160a01b03858116911614155b15612978576012546128b69043613be2565b326000908152600760205260409020541080156128f657506012546128db9043613be2565b6001600160a01b038516600090815260076020526040902054105b6129535760405162461bcd60e51b815260206004820152602860248201527f5472616e736665722064656c617920656e61626c65642e20547279206167616960448201526737103630ba32b91760c11b6064820152608401610bc2565b3260009081526007602052604080822043908190556001600160a01b03871683529120555b600081600281111561298c5761298c613bf5565b1480156129a757506006546001600160a01b03858116911614155b80156129cc57506001600160a01b03841660009081526009602052604090205460ff16155b15612b3457600c546601000000000000900460ff1615612a49576001600160a01b0384166000908152600b602052604090205460ff161515600114612a495760405162461bcd60e51b8152602060048201526013602482015272243ab6b0b7103737ba103b32b934b334b2b21760691b6044820152606401610bc2565b600d54831115612aad5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178426044820152683abca0b6b7bab73a1760b91b6064820152608401610bc2565b600f5483612ad0866001600160a01b031660009081526020819052604090205490565b612ada9190613a30565b1115612b345760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610bc2565b6001816002811115612b4857612b48613bf5565b148015612b6357506006546001600160a01b03868116911614155b8015612b8857506001600160a01b03851660009081526009602052604090205460ff16155b15612bf257600e54831115612bf25760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785360448201526932b63620b6b7bab73a1760b11b6064820152608401610bc2565b6001600160a01b03851660009081526008602052604090205460ff1680612c3157506001600160a01b03841660009081526008602052604090205460ff165b80612c475750600c54640100000000900460ff16155b80612c7a5750600c5465010000000000900460ff16158015612c7a57506002816002811115612c7857612c78613bf5565b145b15612c8457600091505b3060009081526020819052604081205490506000602c5482118015612cba57506001836002811115612cb857612cb8613bf5565b145b9050808015612cd15750600c5462010000900460ff165b8015612ce55750600c54610100900460ff16155b8015612d0a57506001600160a01b03871660009081526008602052604090205460ff16155b8015612d2f57506001600160a01b03861660009081526008602052604090205460ff16155b15612d5857600c805461ff001916610100179055612d4c82612f9a565b600c805461ff00191690555b6113858787878787613175565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d9a57612d9a6139eb565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612df3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e179190613a9b565b81600181518110612e2a57612e2a6139eb565b6001600160a01b039283166020918202929092010152600654612e50913091168461243a565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e89908590600090869030904290600401613c0b565b600060405180830381600087803b158015612ea357600080fd5b505af1158015612eb7573d6000803e3d6000fd5b505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b602d546001600160a01b03166108fc612f2b8360026123d4565b6040518115909202916000818181858888f19350505050158015612f53573d6000803e3d6000fd5b50602e546001600160a01b03166108fc612f6e8360026123d4565b6040518115909202916000818181858888f19350505050158015612f96573d6000803e3d6000fd5b5050565b6000612fb9602b54610d7b602a5460295461255e90919063ffffffff16565b90506000821580612fc8575081155b15612fd257505050565b602c54612fe09060056123c1565b831115612ff857602c54612ff59060056123c1565b92505b60006130186002610f1e85610f1e602b54896123c190919063ffffffff16565b9050600061302685836131e7565b90504761303282612d65565b600061303e47836131e7565b9050600061305b87610f1e602954856123c190919063ffffffff16565b9050600061307888610f1e602a54866123c190919063ffffffff16565b905060006130908261308a86866131e7565b906131e7565b60006029819055602a819055602b55905086158015906130b05750600081115b156130bf576130bf87826131f3565b602e546040516001600160a01b03909116908390600081818185875af1925050503d806000811461310c576040519150601f19603f3d011682016040523d82523d6000602084013e613111565b606091505b5050602d546040519199506001600160a01b0316904790600081818185875af1925050503d8060008114613161576040519150601f19603f3d011682016040523d82523d6000602084013e613166565b606091505b50505050505050505050505050565b816131875761318261328e565b613195565b61319285848361335a565b92505b6131a0858585613508565b816131e0576131e0601854601755601a54601955601c54601b55601e54601d55602054601f55602254602155602454602355602654602555602854602755565b5050505050565b60006123cd8284613be2565b60065461320b9030906001600160a01b03168461243a565b600654602f5460405163f305d71960e01b81526001600160a01b039283169263f305d71992859261324b9230928992600092839216904290600401613ab8565b60606040518083038185885af1158015613269573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131e09190613af3565b60175415801561329e5750601954155b80156132aa5750601b54155b80156132b65750601d54155b80156132c25750601f54155b80156132ce5750602154155b80156132da5750602354155b80156132e65750602554155b80156132f25750602754155b156132f957565b6017805460185560198054601a55601b8054601c55601d8054601e55601f8054602055602180546022556023805460245560258054602655602780546028556000988990559688905594879055928690559085905584905583905582905555565b60004360115460105461336d9190613a30565b1061337f5761337a613632565b61342a565b600182600281111561339357613393613bf5565b036133a05761337a613657565b60008260028111156133b4576133b4613bf5565b036133c15761337a61367f565b60028260028111156133d5576133d5613bf5565b036133e25761337a6136a7565b60405162461bcd60e51b815260206004820152601960248201527f496e76616c6964207472616e73616374696f6e20747970652e000000000000006044820152606401610bc2565b601354600090156134e4576134506103e8610f1e601354876123c190919063ffffffff16565b9050601354601454826134639190613b21565b61346d9190613b38565b6029600082825461347e9190613a30565b90915550506013546015546134939083613b21565b61349d9190613b38565b602a60008282546134ae9190613a30565b90915550506013546016546134c39083613b21565b6134cd9190613b38565b602b60008282546134de9190613a30565b90915550505b80156134f5576134f5853083613508565b6134ff8185613be2565b95945050505050565b6001600160a01b03831661352e5760405162461bcd60e51b8152600401610bc290613b5a565b6001600160a01b0382166135545760405162461bcd60e51b8152600401610bc290613b9f565b6001600160a01b038316600090815260208190526040902054818110156135cc5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bc2565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3612270565b61014d60148190556015819055601681905561365290610d7b818061255e565b601355565b601d546014819055601f5460158190556021546016819055613652929091610d7b919061255e565b60175460148190556019546015819055601b546016819055613652929091610d7b919061255e565b602354601481905560255460158190556027546016819055613652929091610d7b919061255e565b6001600160a01b038116811461112557600080fd5b80356136ef816136cf565b919050565b60006020828403121561370657600080fd5b81356123cd816136cf565b60005b8381101561372c578181015183820152602001613714565b50506000910152565b6020815260008251806020840152613754816040850160208701613711565b601f01601f19169190910160400192915050565b6000806040838503121561377b57600080fd5b8235613786816136cf565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b801515811461112557600080fd5b80356136ef816137aa565b600080604083850312156137d657600080fd5b823567ffffffffffffffff808211156137ee57600080fd5b818501915085601f83011261380257600080fd5b813560208282111561381657613816613794565b8160051b604051601f19603f8301168101818110868211171561383b5761383b613794565b60405292835281830193508481018201928984111561385957600080fd5b948201945b8386101561387e5761386f866136e4565b8552948201949382019361385e565b965061388d90508782016137b8565b9450505050509250929050565b6000602082840312156138ac57600080fd5b5035919050565b6000806000606084860312156138c857600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156138f457600080fd5b83356138ff816136cf565b9250602084013561390f816136cf565b929592945050506040919091013590565b60006020828403121561393257600080fd5b81356123cd816137aa565b60008060006060848603121561395257600080fd5b833560ff8116811461396357600080fd5b95602085013595506040909401359392505050565b6000806040838503121561398b57600080fd5b8235613996816136cf565b915060208301356139a6816136cf565b809150509250929050565b600181811c908216806139c557607f821691505b6020821081036139e557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613a2957613a29613a01565b5060010190565b80820180821115610c9357610c93613a01565b60008351613a55818460208801613711565b9190910191825250602001919050565b600060208284031215613a7757600080fd5b5051919050565b600060208284031215613a9057600080fd5b81516123cd816137aa565b600060208284031215613aad57600080fd5b81516123cd816136cf565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613b0857600080fd5b8351925060208401519150604084015190509250925092565b8082028115828204841417610c9357610c93613a01565b600082613b5557634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c9357610c93613a01565b634e487b7160e01b600052602160045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613c5b5784516001600160a01b031683529383019391830191600101613c36565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220aa3440f7e00f061a3b03291c9798b1948f6978cf54c1c21d306a71da36f0377064736f6c63430008110033

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

000000000000000000000000995f2de133e2c8bd2c17a1fddfd3570e624a0d5900000000000000000000000081252e081f4335e3b766ad5c6c4038076a444994000000000000000000000000828ffc43f245c293ebe6f75a9fb4a8c54c5e5356000000000000000000000000b08981501f6af6c3018e024d0d4f74c91c4f02ce

-----Decoded View---------------
Arg [0] : _marketingWalletAddress (address): 0x995f2de133E2c8BD2C17a1FddfD3570e624A0D59
Arg [1] : _dreamWalletAddress (address): 0x81252E081f4335e3B766AD5C6C4038076A444994
Arg [2] : _liquidityWalletAddress (address): 0x828fFc43F245C293eBe6f75A9Fb4a8C54C5E5356
Arg [3] : signerAddress (address): 0xb08981501f6AF6C3018e024d0d4f74C91C4F02ce

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000995f2de133e2c8bd2c17a1fddfd3570e624a0d59
Arg [1] : 00000000000000000000000081252e081f4335e3b766ad5c6c4038076a444994
Arg [2] : 000000000000000000000000828ffc43f245c293ebe6f75a9fb4a8c54c5e5356
Arg [3] : 000000000000000000000000b08981501f6af6c3018e024d0d4f74c91c4f02ce


Deployed Bytecode Sourcemap

27843:23762:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43562:186;;;;;;;;;;-1:-1:-1;43562:186:0;;;;;:::i;:::-;;:::i;15907:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18258:201;;;;;;;;;;-1:-1:-1;18258:201:0;;;;;:::i;:::-;;:::i;:::-;;;1682:14:1;;1675:22;1657:41;;1645:2;1630:18;18258:201:0;1517:187:1;28208:46:0;;;;;;;;;;-1:-1:-1;28208:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28741:35;;;;;;;;;;;;;;;;;;;1855:25:1;;;1843:2;1828:18;28741:35:0;1709:177:1;43756:185:0;;;;;;;;;;-1:-1:-1;43756:185:0;;;;;:::i;:::-;;:::i;45915:160::-;;;;;;;;;;-1:-1:-1;45915:160:0;;;;;:::i;:::-;;:::i;17027:108::-;;;;;;;;;;-1:-1:-1;17115:12:0;;17027:108;;44925:451;;;;;;;;;;-1:-1:-1;44925:451:0;;;;;:::i;:::-;;:::i;29478:32::-;;;;;;;;;;;;;;;;19039:295;;;;;;;;;;-1:-1:-1;19039:295:0;;;;;:::i;:::-;;:::i;44484:433::-;;;;;;;;;;-1:-1:-1;44484:433:0;;;;;:::i;:::-;;:::i;41232:308::-;;;;;;;;;;-1:-1:-1;41232:308:0;;;;;:::i;:::-;;:::i;16869:93::-;;;;;;;;;;-1:-1:-1;16869:93:0;;16952:2;4584:36:1;;4572:2;4557:18;16869:93:0;4442:184:1;19743:238:0;;;;;;;;;;-1:-1:-1;19743:238:0;;;;;:::i;:::-;;:::i;42018:520::-;;;;;;;;;;-1:-1:-1;42018:520:0;;;;;:::i;:::-;;:::i;40089:99::-;;;;;;;;;;-1:-1:-1;40089:99:0;;;;;:::i;:::-;;:::i;29802:36::-;;;;;;;;;;;;;;;;28645:39;;;;;;;;;;;;;;;;49851:149;;;;;;;;;;;;;:::i;28322:31::-;;;;;;;;;;-1:-1:-1;28322:31:0;;;;;;;;;;;17198:127;;;;;;;;;;-1:-1:-1;17198:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;17299:18:0;17272:7;17299:18;;;;;;;;;;;;17198:127;2670:103;;;;;;;;;;;;;:::i;50671:204::-;;;;;;;;;;;;;:::i;29062:35::-;;;;;;;;;;;;;;;;29680:40;;;;;;;;;;;;;;;;29169:31;;;;;;;;;;;;;;;;28600:38;;;;;;;;;;;;;;;;2022:87;;;;;;;;;;-1:-1:-1;2095:6:0;;-1:-1:-1;;;;;2095:6:0;2022:87;;;-1:-1:-1;;;;;5041:32:1;;;5023:51;;5011:2;4996:18;2022:87:0;4877:203:1;30306:45:0;;;;;;;;;;-1:-1:-1;30306:45:0;;;;-1:-1:-1;;;;;30306:45:0;;;29373:36;;;;;;;;;;;;;;;;16126:104;;;;;;;;;;;;;:::i;30258:41::-;;;;;;;;;;-1:-1:-1;30258:41:0;;;;-1:-1:-1;;;;;30258:41:0;;;29912:40;;;;;;;;;;;;;;;;28872:42;;;;;;;;;;;;28910:4;28872:42;;50883:644;;;;;;;;;;-1:-1:-1;50883:644:0;;;;;:::i;:::-;;:::i;20484:436::-;;;;;;;;;;-1:-1:-1;20484:436:0;;;;;:::i;:::-;;:::i;28402:30::-;;;;;;;;;;-1:-1:-1;28402:30:0;;;;;;;;;;;40295:91;;;;;;;;;;-1:-1:-1;40295:91:0;;;;;:::i;:::-;;:::i;17531:193::-;;;;;;;;;;-1:-1:-1;17531:193:0;;;;;:::i;:::-;;:::i;28360:35::-;;;;;;;;;;-1:-1:-1;28360:35:0;;;;;;;;;;;28691:41;;;;;;;;;;;;;;;;41552:458;;;;;;;;;;-1:-1:-1;41552:458:0;;;;;:::i;:::-;;:::i;50012:156::-;;;;;;;;;;;;;:::i;43034:520::-;;;;;;;;;;-1:-1:-1;43034:520:0;;;;;:::i;:::-;;:::i;50342:321::-;;;;;;;;;;-1:-1:-1;50342:321:0;;;;;:::i;:::-;;:::i;40509:119::-;;;;;;;;;;-1:-1:-1;40509:119:0;;;;;:::i;:::-;;:::i;30206:45::-;;;;;;;;;;-1:-1:-1;30206:45:0;;;;-1:-1:-1;;;;;30206:45:0;;;38437:1644;;;;;;;;;;-1:-1:-1;38437:1644:0;;;;;:::i;:::-;;:::i;17787:151::-;;;;;;;;;;-1:-1:-1;17787:151:0;;;;;:::i;:::-;;:::i;40394:107::-;;;;;;;;;;-1:-1:-1;40394:107:0;;;;;:::i;:::-;;:::i;40196:91::-;;;;;;;;;;-1:-1:-1;40196:91:0;;;;;:::i;:::-;;:::i;44171:305::-;;;;;;;;;;-1:-1:-1;44171:305:0;;;;;:::i;:::-;;:::i;45384:523::-;;;;;;;;;;-1:-1:-1;45384:523:0;;;;;:::i;:::-;;:::i;40928:292::-;;;;;;;;;;-1:-1:-1;40928:292:0;;;;;:::i;:::-;;:::i;28439:38::-;;;;;;;;;;-1:-1:-1;28439:38:0;;;;;;;;;;;29264:35;;;;;;;;;;;;;;;;2928:201;;;;;;;;;;-1:-1:-1;2928:201:0;;;;;:::i;:::-;;:::i;40636:284::-;;;;;;;;;;-1:-1:-1;40636:284:0;;;;;:::i;:::-;;:::i;50176:158::-;;;;;;;;;;;;;:::i;43953:206::-;;;;;;;;;;-1:-1:-1;43953:206:0;;;;;:::i;:::-;;:::i;29574:36::-;;;;;;;;;;;;;;;;42546:480;;;;;;;;;;-1:-1:-1;42546:480:0;;;;;:::i;:::-;;:::i;38313:116::-;;;;;;;;;;-1:-1:-1;38313:116:0;;;;;:::i;:::-;-1:-1:-1;;;;;38399:22:0;38375:4;38399:22;;;:14;:22;;;;;;;;;38313:116;28263:23;;;;;;;;;;-1:-1:-1;28263:23:0;;;;;;;;43562:186;1908:13;:11;:13::i;:::-;-1:-1:-1;;;;;43647:21:0;::::1;43639:60;;;::::0;-1:-1:-1;;;43639:60:0;;6314:2:1;43639:60:0::1;::::0;::::1;6296:21:1::0;6353:2;6333:18;;;6326:30;6392:28;6372:18;;;6365:56;6438:18;;43639:60:0::1;;;;;;;;;43710:14;:30:::0;;-1:-1:-1;;;;;;43710:30:0::1;-1:-1:-1::0;;;;;43710:30:0;;;::::1;::::0;;;::::1;::::0;;43562:186::o;15907:100::-;15961:13;15994:5;15987:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15907:100;:::o;18258:201::-;18341:4;739:10;18397:32;739:10;18413:7;18422:6;18397:8;:32::i;:::-;18447:4;18440:11;;;18258:201;;;;;:::o;43756:185::-;1908:13;:11;:13::i;:::-;43856:6:::1;43851:82;43872:8;:15;43868:1;:19;43851:82;;;43929:4;43894:19;:32;43914:8;43923:1;43914:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;43894:32:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;43894:32:0;:39;;-1:-1:-1;;43894:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43889:3;::::1;::::0;::::1;:::i;:::-;;;;43851:82;;;;43756:185:::0;;:::o;45915:160::-;1908:13;:11;:13::i;:::-;46004:2:::1;45994:6;:12;;45986:46;;;::::0;-1:-1:-1;;;45986:46:0;;7458:2:1;45986:46:0::1;::::0;::::1;7440:21:1::0;7497:2;7477:18;;;7470:30;-1:-1:-1;;;7516:18:1;;;7509:51;7577:18;;45986:46:0::1;7256:345:1::0;45986:46:0::1;46043:15;:24:::0;45915:160::o;44925:451::-;1908:13;:11;:13::i;:::-;45121:3:::1;45058:59;45099:17:::0;45058:36:::1;:17:::0;45080:13;45058:21:::1;:36::i;:::-;:40:::0;::::1;:59::i;:::-;:66;;45050:109;;;::::0;-1:-1:-1;;;45050:109:0;;7808:2:1;45050:109:0::1;::::0;::::1;7790:21:1::0;7847:2;7827:18;;;7820:30;7886:32;7866:18;;;7859:60;7936:18;;45050:109:0::1;7606:354:1::0;45050:109:0::1;45170:16;:36:::0;;;45217:12:::1;:28:::0;;;45256:16:::1;:36:::0;;;45308:60:::1;::::0;;8167:25:1;;;8223:2;8208:18;;8201:34;;;8251:18;;;8244:34;;;45308:60:0::1;::::0;8155:2:1;8140:18;45308:60:0::1;;;;;;;;44925:451:::0;;;:::o;19039:295::-;19170:4;739:10;19228:38;19244:4;739:10;19259:6;19228:15;:38::i;:::-;19277:27;19287:4;19293:2;19297:6;19277:9;:27::i;:::-;-1:-1:-1;19322:4:0;;19039:295;-1:-1:-1;;;;19039:295:0:o;44484:433::-;1908:13;:11;:13::i;:::-;44673:3:::1;44613:56;44652:16:::0;44613:34:::1;:16:::0;44634:12;44613:20:::1;:34::i;:56::-;:63;;44605:105;;;::::0;-1:-1:-1;;;44605:105:0;;8491:2:1;44605:105:0::1;::::0;::::1;8473:21:1::0;8530:2;8510:18;;;8503:30;8569:31;8549:18;;;8542:59;8618:18;;44605:105:0::1;8289:353:1::0;44605:105:0::1;44721:15;:34:::0;;;44766:11:::1;:26:::0;;;44803:15:::1;:34:::0;;;44853:56:::1;::::0;;8167:25:1;;;8223:2;8208:18;;8201:34;;;8251:18;;;8244:34;;;44853:56:0::1;::::0;8155:2:1;8140:18;44853:56:0::1;7965:319:1::0;41232:308:0;1908:13;:11;:13::i;:::-;41343:30:::1;41368:4;41343:20;41361:1;41343:13;17115:12:::0;;;17027:108;41343:13:::1;:17:::0;::::1;:20::i;:::-;:24:::0;::::1;:30::i;:::-;41322:16;:52;;41314:122;;;::::0;-1:-1:-1;;;41314:122:0;;8849:2:1;41314:122:0::1;::::0;::::1;8831:21:1::0;8888:2;8868:18;;;8861:30;8927:34;8907:18;;;8900:62;8998:27;8978:18;;;8971:55;9043:19;;41314:122:0::1;8647:421:1::0;41314:122:0::1;41447:15;:34:::0;;;41497:35:::1;::::0;1855:25:1;;;41497:35:0::1;::::0;1843:2:1;1828:18;41497:35:0::1;;;;;;;;41232:308:::0;:::o;19743:238::-;19831:4;739:10;19887:64;739:10;19903:7;19940:10;19912:25;739:10;19903:7;19912:9;:25::i;:::-;:38;;;;:::i;:::-;19887:8;:64::i;42018:520::-;1908:13;:11;:13::i;:::-;-1:-1:-1;;;;;42122:31:0;::::1;42114:78;;;::::0;-1:-1:-1;;;42114:78:0;;9405:2:1;42114:78:0::1;::::0;::::1;9387:21:1::0;9444:2;9424:18;;;9417:30;9483:34;9463:18;;;9456:62;-1:-1:-1;;;9534:18:1;;;9527:32;9576:19;;42114:78:0::1;9203:398:1::0;42114:78:0::1;42223:22;::::0;;-1:-1:-1;;;;;42223:22:0;;::::1;42249:5;42203:43:::0;;;:19:::1;:43;::::0;;;;;;;:51;;-1:-1:-1;;42203:51:0;;::::1;::::0;;;42297:22;;;::::1;42265:55:::0;;:31:::1;:55:::0;;;;;;:63;;;::::1;::::0;;42339:57;;-1:-1:-1;;;;;;42339:57:0::1;::::0;;::::1;::::0;;::::1;::::0;;42407:43;;;;;;;;;:50;;;::::1;-1:-1:-1::0;42407:50:0;;::::1;::::0;;;42500:22;;;;::::1;42468:55:::0;;;;;;;:62;;;;::::1;;::::0;;42018:520::o;40089:99::-;1908:13;:11;:13::i;:::-;40157:15:::1;:23:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;40157:23:0;;::::1;::::0;;;::::1;::::0;;40089:99::o;49851:149::-;1908:13;:11;:13::i;:::-;49941:4:::1;49897:23;17299:18:::0;;;;;;;;;;;49958:34:::1;17299:18:::0;49958:17:::1;:34::i;:::-;49886:114;49851:149::o:0;2670:103::-;1908:13;:11;:13::i;:::-;2735:30:::1;2762:1;2735:18;:30::i;:::-;2670:103::o:0;50671:204::-;1908:13;:11;:13::i;:::-;17115:12;;50723::::1;:28:::0;17115:12;;50762:13:::1;:29:::0;17115:12;;50802:15:::1;:31:::0;50844:15:::1;:23:::0;;-1:-1:-1;;50844:23:0::1;::::0;;50671:204::o;16126:104::-;16182:13;16215:7;16208:14;;;;;:::i;50883:644::-;50964:11;;;;50956:51;;;;-1:-1:-1;;;50956:51:0;;9808:2:1;50956:51:0;;;9790:21:1;9847:2;9827:18;;;9820:30;9886:29;9866:18;;;9859:57;9933:18;;50956:51:0;9606:351:1;50956:51:0;51018:56;;;;;;;;;;;;;;;;;-1:-1:-1;51135:4:0;739:10;51110:54;;-1:-1:-1;;10290:2:1;10286:15;;;10282:24;;51110:54:0;;;10270:37:1;10341:15;;;;10337:24;10323:12;;;10316:46;-1:-1:-1;;;10378:12:1;;;10371:29;10416:12;;51110:54:0;;;;;;;;;;;;51100:65;;;;;;51085:80;;51176:20;51226:6;51234:4;51209:30;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;51209:30:0;;;;;;;;;51199:41;;51209:30;51199:41;;;;51251:17;51271:35;;;;;;;;;11054:25:1;;;11127:4;11115:17;;11095:18;;;11088:45;;;;11149:18;;;11142:34;;;11192:18;;;11185:34;;;51199:41:0;;-1:-1:-1;51251:17:0;51271:35;;11026:19:1;;51271:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;51271:35:0;;-1:-1:-1;;51271:35:0;;51336:14;;51271:35;;-1:-1:-1;;;;;;51336:14:0;;;51323:27;;;;;-1:-1:-1;51319:201:0;;739:10;51367:27;;;;:13;:27;;;;;;;;;:34;;-1:-1:-1;;51367:34:0;51397:4;51367:34;;;51421:25;;5023:51:1;;;51421:25:0;;;;;;;;;;;;51319:201;;;51479:29;;-1:-1:-1;;;51479:29:0;;11432:2:1;51479:29:0;;;11414:21:1;11471:2;11451:18;;;11444:30;-1:-1:-1;;;11490:18:1;;;11483:49;11549:18;;51479:29:0;11230:343:1;51319:201:0;50945:582;;;;50883:644;;;:::o;20484:436::-;20577:4;739:10;20577:4;20660:25;739:10;20677:7;20660:9;:25::i;:::-;20633:52;;20724:15;20704:16;:35;;20696:85;;;;-1:-1:-1;;;20696:85:0;;11780:2:1;20696:85:0;;;11762:21:1;11819:2;11799:18;;;11792:30;11858:34;11838:18;;;11831:62;-1:-1:-1;;;11909:18:1;;;11902:35;11954:19;;20696:85:0;11578:401:1;20696:85:0;20817:60;20826:5;20833:7;20861:15;20842:16;:34;20817:8;:60::i;40295:91::-;1908:13;:11;:13::i;:::-;40359:11:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;40359:19:0;;::::1;::::0;;;::::1;::::0;;40295:91::o;17531:193::-;17610:4;739:10;17666:28;739:10;17683:2;17687:6;17666:9;:28::i;41552:458::-;1908:13;:11;:13::i;:::-;41670:33:::1;41695:7;41670:20;41688:1;41670:13;17115:12:::0;;;17027:108;41670:33:::1;41647:18;:57;;41639:124;;;::::0;-1:-1:-1;;;41639:124:0;;12186:2:1;41639:124:0::1;::::0;::::1;12168:21:1::0;12225:2;12205:18;;;12198:30;12264:34;12244:18;;;12237:62;-1:-1:-1;;;12315:18:1;;;12308:52;12377:19;;41639:124:0::1;11984:418:1::0;41639:124:0::1;41805:30;41830:4;41805:20;41823:1;41805:13;17115:12:::0;;;17027:108;41805:30:::1;41782:18;:54;;41774:119;;;::::0;-1:-1:-1;;;41774:119:0;;12609:2:1;41774:119:0::1;::::0;::::1;12591:21:1::0;12648:2;12628:18;;;12621:30;12687:34;12667:18;;;12660:62;-1:-1:-1;;;12738:18:1;;;12731:50;12798:19;;41774:119:0::1;12407:416:1::0;41774:119:0::1;41904:19;:40:::0;;;41960:42:::1;::::0;1855:25:1;;;41960:42:0::1;::::0;1843:2:1;1828:18;41960:42:0::1;1709:177:1::0;50012:156:0;1908:13;:11;:13::i;:::-;50095:21:::1;50127:33;50095:21:::0;50127:13:::1;:33::i;43034:520::-:0;1908:13;:11;:13::i;:::-;-1:-1:-1;;;;;43138:31:0;::::1;43130:78;;;::::0;-1:-1:-1;;;43130:78:0;;13030:2:1;43130:78:0::1;::::0;::::1;13012:21:1::0;13069:2;13049:18;;;13042:30;13108:34;13088:18;;;13081:62;-1:-1:-1;;;13159:18:1;;;13152:32;13201:19;;43130:78:0::1;12828:398:1::0;43130:78:0::1;43239:22;::::0;;-1:-1:-1;;;;;43239:22:0;;::::1;43265:5;43219:43:::0;;;:19:::1;:43;::::0;;;;;;;:51;;-1:-1:-1;;43219:51:0;;::::1;::::0;;;43313:22;;;::::1;43281:55:::0;;:31:::1;:55:::0;;;;;;:63;;;::::1;::::0;;43355:57;;-1:-1:-1;;;;;;43355:57:0::1;::::0;;::::1;::::0;;::::1;::::0;;43423:43;;;;;;;;;:50;;;::::1;-1:-1:-1::0;43423:50:0;;::::1;::::0;;;43516:22;;;;::::1;43484:55:::0;;;;;;;:62;;;;::::1;;::::0;;43034:520::o;50342:321::-;1908:13;:11;:13::i;:::-;50435:4:::1;-1:-1:-1::0;;;;;50420:20:0;::::1;::::0;50412:58:::1;;;::::0;-1:-1:-1;;;50412:58:0;;13433:2:1;50412:58:0::1;::::0;::::1;13415:21:1::0;13472:2;13452:18;;;13445:30;13511:27;13491:18;;;13484:55;13556:18;;50412:58:0::1;13231:349:1::0;50412:58:0::1;50489:36;::::0;-1:-1:-1;;;50489:36:0;;50519:4:::1;50489:36;::::0;::::1;5023:51:1::0;50528:1:0::1;::::0;-1:-1:-1;;;;;50489:21:0;::::1;::::0;::::1;::::0;4996:18:1;;50489:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;50481:62;;;::::0;-1:-1:-1;;;50481:62:0;;13976:2:1;50481:62:0::1;::::0;::::1;13958:21:1::0;14015:1;13995:18;;;13988:29;-1:-1:-1;;;14033:18:1;;;14026:39;14082:18;;50481:62:0::1;13774:332:1::0;50481:62:0::1;50568:36;::::0;-1:-1:-1;;;50568:36:0;;50598:4:::1;50568:36;::::0;::::1;5023:51:1::0;50554:11:0::1;::::0;-1:-1:-1;;;;;50568:21:0;::::1;::::0;::::1;::::0;4996:18:1;;50568:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50615:40;::::0;-1:-1:-1;;;50615:40:0;;50636:10:::1;50615:40;::::0;::::1;14285:51:1::0;14352:18;;;14345:34;;;50554:50:0;;-1:-1:-1;;;;;;50615:20:0;::::1;::::0;::::1;::::0;14258:18:1;;50615:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;40509:119::-:0;1908:13;:11;:13::i;:::-;40587:25:::1;:33:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;40587:33:0;;::::1;::::0;;;::::1;::::0;;40509:119::o;38437:1644::-;1908:13;:11;:13::i;:::-;38511:11:::1;::::0;::::1;;38510:12;38502:48;;;::::0;-1:-1:-1;;;38502:48:0;;14842:2:1;38502:48:0::1;::::0;::::1;14824:21:1::0;14881:2;14861:18;;;14854:30;14920:25;14900:18;;;14893:53;14963:18;;38502:48:0::1;14640:347:1::0;38502:48:0::1;38579:2;38569:6;:12;;38561:46;;;::::0;-1:-1:-1;;;38561:46:0;;7458:2:1;38561:46:0::1;::::0;::::1;7440:21:1::0;7497:2;7477:18;;;7470:30;-1:-1:-1;;;7516:18:1;;;7509:51;7577:18;;38561:46:0::1;7256:345:1::0;38561:46:0::1;38624:13;38641:1;38624:18;:40;;;;38646:13;38663:1;38646:18;38624:40;38620:596;;;38666:10;:67:::0;;-1:-1:-1;;;;;;38666:67:0::1;38690:42;38666:67;::::0;;38620:596:::1;;;38772:13;38789:2;38772:19:::0;38768:448:::1;;38793:10;:67:::0;;-1:-1:-1;;;;;;38793:67:0::1;38817:42;38793:67;::::0;;38768:448:::1;;;38901:13;38918:2;38901:19:::0;38897:319:::1;;38922:10;:67:::0;;-1:-1:-1;;;;;;38922:67:0::1;38946:42;38922:67;::::0;;38897:319:::1;;;39038:13;39055:3;39038:20;:46;;;;39062:13;39079:5;39062:22;39038:46;39034:182;;;39086:10;:67:::0;;-1:-1:-1;;;;;;39086:67:0::1;39110:42;39086:67;::::0;;39034:182:::1;;;39192:24;::::0;-1:-1:-1;;;39192:24:0;;15194:2:1;39192:24:0::1;::::0;::::1;15176:21:1::0;15233:2;15213:18;;;15206:30;-1:-1:-1;;;15252:18:1;;;15245:44;15306:18;;39192:24:0::1;14992:338:1::0;39034:182:0::1;39261:10;::::0;39229:59:::1;::::0;39246:4:::1;::::0;-1:-1:-1;;;;;39261:10:0::1;39274:13;17115:12:::0;;;17027:108;39229:59:::1;39322:10;;;;;;;;;-1:-1:-1::0;;;;;39322:10:0::1;-1:-1:-1::0;;;;;39322:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39310:44:0::1;;39363:4;39370:10;;;;;;;;;-1:-1:-1::0;;;;;39370:10:0::1;-1:-1:-1::0;;;;;39370:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39310:78;::::0;-1:-1:-1;;;;;;39310:78:0::1;::::0;;;;;;-1:-1:-1;;;;;15821:15:1;;;39310:78:0::1;::::0;::::1;15803:34:1::0;15873:15;;15853:18;;;15846:43;15738:18;;39310:78:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39299:8;:89:::0;;-1:-1:-1;;;;;39299:89:0;;::::1;-1:-1:-1::0;;;;;;39299:89:0;;::::1;;::::0;;39399:10:::1;::::0;::::1;:26;39433:21;39464:4;39471:24;39464:4:::0;-1:-1:-1;;;;;17299:18:0;17272:7;17299:18;;;;;;;;;;;;17198:127;39471:24:::1;39497:1;39500::::0;39503:7:::1;2095:6:::0;;-1:-1:-1;;;;;2095:6:0;;2022:87;39503:7:::1;39512:15;39399:129;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;39546:8:0::1;::::0;39572:10:::1;::::0;39539:61:::1;::::0;-1:-1:-1;;;39539:61:0;;-1:-1:-1;;;;;39572:10:0;;::::1;39539:61;::::0;::::1;14285:51:1::0;-1:-1:-1;;14352:18:1;;;14345:34;39546:8:0;::::1;::::0;-1:-1:-1;39539:24:0::1;::::0;14258:18:1;;39539:61:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39628:30;39653:4;39628:20;39646:1;39628:13;17115:12:::0;;;17027:108;39628:30:::1;39613:12;:45:::0;39685:30:::1;39710:4;39685:20;39703:1;39685:13;17115:12:::0;;;17027:108;39685:30:::1;39669:13;:46:::0;39744:29:::1;39769:3;39744:20;39762:1;39744:13;17115:12:::0;;;17027:108;39744:29:::1;39726:15;:47:::0;39806:31:::1;39831:5;39806:20;39824:1;39806:13;17115:12:::0;;;17027:108;39806:31:::1;39784:19;:53:::0;39848:11:::1;:18:::0;;-1:-1:-1;;39910:18:0;;;;;39958:12:::1;39939:16;:31:::0;;;39981:18:::1;:27:::0;;;40024:49:::1;::::0;;16997:25:1;;;-1:-1:-1;17038:18:1;;17031:34;;;40024:49:0::1;::::0;16970:18:1;40024:49:0::1;16823:248:1::0;17787:151:0;-1:-1:-1;;;;;17903:18:0;;;17876:7;17903:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17787:151::o;40394:107::-;1908:13;:11;:13::i;:::-;40466:19:::1;:27:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;40466:27:0;;::::1;::::0;;;::::1;::::0;;40394:107::o;40196:91::-;1908:13;:11;:13::i;:::-;40260:11:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;40260:19:0;;::::1;::::0;;;::::1;::::0;;40196:91::o;44171:305::-;1908:13;:11;:13::i;:::-;44266:6:::1;44261:208;44282:8;:15;44278:1;:19;44261:208;;;44338:8;::::0;44323:11;;-1:-1:-1;;;;;44338:8:0;;::::1;::::0;44323;;44332:1;;44323:11;::::1;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;44323:23:0::1;;;44322:65;;;;-1:-1:-1::0;44375:10:0::1;::::0;44352:11;;-1:-1:-1;;;;;44375:10:0;;::::1;::::0;44352:8;;44361:1;;44352:11;::::1;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;44352:34:0::1;;;44322:65;:99;;;;;44415:4;-1:-1:-1::0;;;;;44392:28:0::1;:8;44401:1;44392:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;44392:28:0::1;;;44322:99;44319:138;;;44453:4;44423:14;:27;44438:8;44447:1;44438:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;44423:27:0::1;-1:-1:-1::0;;;;;44423:27:0::1;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;44319:138;44299:3:::0;::::1;::::0;::::1;:::i;:::-;;;;44261:208;;45384:523:::0;1908:13;:11;:13::i;:::-;45608:3:::1;45533:71;45582:21:::0;45533:44:::1;:21:::0;45559:17;45533:25:::1;:44::i;:71::-;:78;;45525:125;;;::::0;-1:-1:-1;;;45525:125:0;;17278:2:1;45525:125:0::1;::::0;::::1;17260:21:1::0;17317:2;17297:18;;;17290:30;17356:34;17336:18;;;17329:62;-1:-1:-1;;;17407:18:1;;;17400:32;17449:19;;45525:125:0::1;17076:398:1::0;45525:125:0::1;45661:20;:44:::0;;;45716:16:::1;:36:::0;;;45763:20:::1;:44:::0;;;45823:76:::1;::::0;;8167:25:1;;;8223:2;8208:18;;8201:34;;;8251:18;;;8244:34;;;45823:76:0::1;::::0;8155:2:1;8140:18;45823:76:0::1;7965:319:1::0;40928:292:0;1908:13;:11;:13::i;:::-;41033:30:::1;41058:4;41033:20;41051:1;41033:13;17115:12:::0;;;17027:108;41033:30:::1;41014:14;:50;;41006:118;;;::::0;-1:-1:-1;;;41006:118:0;;17681:2:1;41006:118:0::1;::::0;::::1;17663:21:1::0;17720:2;17700:18;;;17693:30;17759:34;17739:18;;;17732:62;17830:25;17810:18;;;17803:53;17873:19;;41006:118:0::1;17479:419:1::0;41006:118:0::1;41135:13;:30:::0;;;41181:31:::1;::::0;1855:25:1;;;41181:31:0::1;::::0;1843:2:1;1828:18;41181:31:0::1;1709:177:1::0;2928:201:0;1908:13;:11;:13::i;:::-;-1:-1:-1;;;;;3017:22:0;::::1;3009:73;;;::::0;-1:-1:-1;;;3009:73:0;;18105:2:1;3009:73:0::1;::::0;::::1;18087:21:1::0;18144:2;18124:18;;;18117:30;18183:34;18163:18;;;18156:62;-1:-1:-1;;;18234:18:1;;;18227:36;18280:19;;3009:73:0::1;17903:402:1::0;3009:73:0::1;3093:28;3112:8;3093:18;:28::i;40636:284::-:0;1908:13;:11;:13::i;:::-;40738:30:::1;40763:4;40738:20;40756:1;40738:13;17115:12:::0;;;17027:108;40738:30:::1;40720:13;:49;;40712:116;;;::::0;-1:-1:-1;;;40712:116:0;;18512:2:1;40712:116:0::1;::::0;::::1;18494:21:1::0;18551:2;18531:18;;;18524:30;18590:34;18570:18;;;18563:62;-1:-1:-1;;;18641:18:1;;;18634:52;18703:19;;40712:116:0::1;18310:418:1::0;40712:116:0::1;40839:12;:28:::0;;;40883:29:::1;::::0;1855:25:1;;;40883:29:0::1;::::0;1843:2:1;1828:18;40883:29:0::1;1709:177:1::0;50176:158:0;1908:13;:11;:13::i;:::-;50268:58:::1;::::0;50232:12:::1;::::0;50276:10:::1;::::0;50300:21:::1;::::0;50232:12;50268:58;50232:12;50268:58;50300:21;50276:10;50268:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;50176:158:0:o;43953:206::-;1908:13;:11;:13::i;:::-;44062:6:::1;44057:94;44078:8;:15;44074:1;:19;44057:94;;;44147:4;44100:31;:44;44132:8;44141:1;44132:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;44100:44:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;44100:44:0;:51;;-1:-1:-1;;44100:51:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44095:3;::::1;::::0;::::1;:::i;:::-;;;;44057:94;;42546:480:::0;1908:13;:11;:13::i;:::-;-1:-1:-1;;;;;42642:27:0;::::1;42634:70;;;::::0;-1:-1:-1;;;42634:70:0;;19145:2:1;42634:70:0::1;::::0;::::1;19127:21:1::0;19184:2;19164:18;;;19157:30;19223:32;19203:18;;;19196:60;19273:18;;42634:70:0::1;18943:354:1::0;42634:70:0::1;42735:18;::::0;;-1:-1:-1;;;;;42735:18:0;;::::1;42757:5;42715:39:::0;;;:19:::1;:39;::::0;;;;;;;:47;;-1:-1:-1;;42715:47:0;;::::1;::::0;;;42805:18;;;::::1;42773:51:::0;;:31:::1;:51:::0;;;;;;:59;;;::::1;::::0;;42843:49;;-1:-1:-1;;;;;;42843:49:0::1;::::0;;::::1;::::0;;::::1;::::0;;42903:39;;;;;;;;;:46;;;::::1;-1:-1:-1::0;42903:46:0;;::::1;::::0;;;42992:18;;;;::::1;42960:51:::0;;;;;;;:58;;;;::::1;;::::0;;42546:480::o;7012:98::-;7070:7;7097:5;7101:1;7097;:5;:::i;:::-;7090:12;7012:98;-1:-1:-1;;;7012:98:0:o;7411:::-;7469:7;7496:5;7500:1;7496;:5;:::i;2187:132::-;2095:6;;-1:-1:-1;;;;;2095:6:0;739:10;2251:23;2243:68;;;;-1:-1:-1;;;2243:68:0;;19899:2:1;2243:68:0;;;19881:21:1;;;19918:18;;;19911:30;19977:34;19957:18;;;19950:62;20029:18;;2243:68:0;19697:356:1;24511:380:0;-1:-1:-1;;;;;24647:19:0;;24639:68;;;;-1:-1:-1;;;24639:68:0;;20260:2:1;24639:68:0;;;20242:21:1;20299:2;20279:18;;;20272:30;20338:34;20318:18;;;20311:62;-1:-1:-1;;;20389:18:1;;;20382:34;20433:19;;24639:68:0;20058:400:1;24639:68:0;-1:-1:-1;;;;;24726:21:0;;24718:68;;;;-1:-1:-1;;;24718:68:0;;20665:2:1;24718:68:0;;;20647:21:1;20704:2;20684:18;;;20677:30;20743:34;20723:18;;;20716:62;-1:-1:-1;;;20794:18:1;;;20787:32;20836:19;;24718:68:0;20463:398:1;24718:68:0;-1:-1:-1;;;;;24799:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24851:32;;1855:25:1;;;24851:32:0;;1828:18:1;24851:32:0;;;;;;;24511:380;;;:::o;6274:98::-;6332:7;6359:5;6363:1;6359;:5;:::i;25182:453::-;25317:24;25344:25;25354:5;25361:7;25344:9;:25::i;:::-;25317:52;;-1:-1:-1;;25384:16:0;:37;25380:248;;25466:6;25446:16;:26;;25438:68;;;;-1:-1:-1;;;25438:68:0;;21068:2:1;25438:68:0;;;21050:21:1;21107:2;21087:18;;;21080:30;21146:31;21126:18;;;21119:59;21195:18;;25438:68:0;20866:353:1;25438:68:0;25550:51;25559:5;25566:7;25594:6;25575:16;:25;25550:8;:51::i;33362:2530::-;-1:-1:-1;;;;;33460:12:0;;33452:62;;;;-1:-1:-1;;;33452:62:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33533:10:0;;33525:58;;;;-1:-1:-1;;;33525:58:0;;;;;;;:::i;:::-;33611:1;33602:6;:10;33594:64;;;;-1:-1:-1;;;33594:64:0;;22236:2:1;33594:64:0;;;22218:21:1;22275:2;22255:18;;;22248:30;22314:34;22294:18;;;22287:62;-1:-1:-1;;;22365:18:1;;;22358:39;22414:19;;33594:64:0;22034:405:1;33594:64:0;33735:8;;33686:4;;33671:12;;-1:-1:-1;;;;;33727:16:0;;;33735:8;;33727:16;33726:109;;33776:8;;-1:-1:-1;;;;;33770:14:0;;;33776:8;;33770:14;33769:66;;33811:24;33726:109;;33769:66;33788:20;33726:109;;;33747:19;33726:109;33701:134;;33858:7;2095:6;;-1:-1:-1;;;;;2095:6:0;;2022:87;33858:7;-1:-1:-1;;;;;33850:15:0;:4;-1:-1:-1;;;;;33850:15:0;;;:32;;;;-1:-1:-1;2095:6:0;;-1:-1:-1;;;;;33869:13:0;;;2095:6;;33869:13;;33850:32;:46;;;;-1:-1:-1;;;;;;33886:10:0;;;;33850:46;:60;;;;-1:-1:-1;;;;;;33900:10:0;;30460:42;33900:10;;33850:60;:74;;;;-1:-1:-1;33915:9:0;;;;;;;33914:10;33850:74;33846:1420;;;-1:-1:-1;;;;;33950:20:0;;;;;;:14;:20;;;;;;;;33949:21;:44;;;;-1:-1:-1;;;;;;33975:18:0;;;;;;:14;:18;;;;;;;;33974:19;33949:44;33941:69;;;;-1:-1:-1;;;33941:69:0;;22646:2:1;33941:69:0;;;22628:21:1;22685:2;22665:18;;;22658:30;-1:-1:-1;;;22704:18:1;;;22697:42;22756:18;;33941:69:0;22444:336:1;33941:69:0;34031:11;;;;34027:109;;-1:-1:-1;;;;;34052:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;34081:23:0;;;;;;:19;:23;;;;;;;;34052:52;34044:92;;;;-1:-1:-1;;;34044:92:0;;9808:2:1;34044:92:0;;;9790:21:1;9847:2;9827:18;;;9820:30;9886:29;9866:18;;;9859:57;9933:18;;34044:92:0;9606:351:1;34044:92:0;34157:15;;;;;;;34153:421;;;34211:10;;-1:-1:-1;;;;;34197:25:0;;;34211:10;;34197:25;;;;:52;;-1:-1:-1;34240:8:0;;-1:-1:-1;;;;;34226:23:0;;;34240:8;;34226:23;;34197:52;34193:366;;;34320:15;;34305:30;;:12;:30;:::i;:::-;34292:9;34282:20;;;;:9;:20;;;;;;:53;:103;;;;-1:-1:-1;34370:15:0;;34355:30;;:12;:30;:::i;:::-;-1:-1:-1;;;;;34339:13:0;;;;;;:9;:13;;;;;;:46;34282:103;34274:156;;;;-1:-1:-1;;;34274:156:0;;23120:2:1;34274:156:0;;;23102:21:1;23159:2;23139:18;;;23132:30;23198:34;23178:18;;;23171:62;-1:-1:-1;;;23249:18:1;;;23242:38;23297:19;;34274:156:0;22918:404:1;34274:156:0;34463:9;34453:20;;;;:9;:20;;;;;;34476:12;34453:35;;;;-1:-1:-1;;;;;34511:13:0;;;;;;:28;34193:366;34604:19;34594:6;:29;;;;;;;;:::i;:::-;;:58;;;;-1:-1:-1;34641:10:0;;-1:-1:-1;;;;;34627:25:0;;;34641:10;;34627:25;;34594:58;:98;;;;-1:-1:-1;;;;;;34657:35:0;;;;;;:31;:35;;;;;;;;34656:36;34594:98;34590:449;;;34717:25;;;;;;;34713:88;;;-1:-1:-1;;;;;34752:17:0;;;;;;:13;:17;;;;;;;;:25;;:17;:25;34744:57;;;;-1:-1:-1;;;34744:57:0;;11432:2:1;34744:57:0;;;11414:21:1;11471:2;11451:18;;;11444:30;-1:-1:-1;;;11490:18:1;;;11483:49;11549:18;;34744:57:0;11230:343:1;34744:57:0;34856:12;;34846:6;:22;;34838:76;;;;-1:-1:-1;;;34838:76:0;;23661:2:1;34838:76:0;;;23643:21:1;23700:2;23680:18;;;23673:30;23739:34;23719:18;;;23712:62;-1:-1:-1;;;23790:18:1;;;23783:39;23839:19;;34838:76:0;23459:405:1;34838:76:0;34967:15;;34957:6;34941:13;34951:2;-1:-1:-1;;;;;17299:18:0;17272:7;17299:18;;;;;;;;;;;;17198:127;34941:13;:22;;;;:::i;:::-;:41;;34933:90;;;;-1:-1:-1;;;34933:90:0;;24071:2:1;34933:90:0;;;24053:21:1;24110:2;24090:18;;;24083:30;24149:34;24129:18;;;24122:62;-1:-1:-1;;;24200:18:1;;;24193:34;24244:19;;34933:90:0;23869:400:1;34933:90:0;35081:20;35071:6;:30;;;;;;;;:::i;:::-;;:61;;;;-1:-1:-1;35121:10:0;;-1:-1:-1;;;;;35105:27:0;;;35121:10;;35105:27;;35071:61;:103;;;;-1:-1:-1;;;;;;35137:37:0;;;;;;:31;:37;;;;;;;;35136:38;35071:103;35067:187;;;35194:13;;35184:6;:23;;35176:78;;;;-1:-1:-1;;;35176:78:0;;24476:2:1;35176:78:0;;;24458:21:1;24515:2;24495:18;;;24488:30;24554:34;24534:18;;;24527:62;-1:-1:-1;;;24605:18:1;;;24598:40;24655:19;;35176:78:0;24274:406:1;35176:78:0;-1:-1:-1;;;;;35281:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;35310:23:0;;;;;;:19;:23;;;;;;;;35281:52;:68;;;-1:-1:-1;35338:11:0;;;;;;;35337:12;35281:68;:132;;;-1:-1:-1;35355:19:0;;;;;;;35354:20;:58;;;;-1:-1:-1;35388:24:0;35378:6;:34;;;;;;;;:::i;:::-;;35354:58;35278:152;;;35425:5;35415:15;;35278:152;35487:4;35443:23;17299:18;;;;;;;;;;;35443:50;;35504:12;35538:19;;35520:15;:37;35519:75;;;;-1:-1:-1;35573:20:0;35563:6;:30;;;;;;;;:::i;:::-;;35519:75;35504:90;;35611:7;:22;;;;-1:-1:-1;35622:11:0;;;;;;;35611:22;:36;;;;-1:-1:-1;35638:9:0;;;;;;;35637:10;35611:36;:66;;;;-1:-1:-1;;;;;;35652:25:0;;;;;;:19;:25;;;;;;;;35651:26;35611:66;:94;;;;-1:-1:-1;;;;;;35682:23:0;;;;;;:19;:23;;;;;;;;35681:24;35611:94;35607:216;;;35722:9;:16;;-1:-1:-1;;35722:16:0;;;;;35753:26;35763:15;35753:9;:26::i;:::-;35794:9;:17;;-1:-1:-1;;35794:17:0;;;35607:216;35835:49;35850:4;35856:2;35860:6;35868:7;35877:6;35835:14;:49::i;37290:458::-;37382:16;;;37396:1;37382:16;;;;;;;;37358:21;;37382:16;;;;;;;;;;-1:-1:-1;37382:16:0;37358:40;;37427:4;37409;37414:1;37409:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37409:23:0;;;:7;;;;;;;;;;:23;;;;37453:10;;:17;;;-1:-1:-1;;;37453:17:0;;;;:10;;;;;:15;;:17;;;;;37409:7;;37453:17;;;;;:10;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37443:4;37448:1;37443:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37443:27:0;;;:7;;;;;;;;;:27;37513:10;;37481:57;;37498:4;;37513:10;37526:11;37481:8;:57::i;:::-;37549:10;;:191;;-1:-1:-1;;;37549:191:0;;-1:-1:-1;;;;;37549:10:0;;;;:61;;:191;;37625:11;;37549:10;;37667:4;;37694;;37714:15;;37549:191;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37347:401;37290:458;:::o;3289:191::-;3382:6;;;-1:-1:-1;;;;;3399:17:0;;;-1:-1:-1;;;;;;3399:17:0;;;;;;;3432:40;;3382:6;;;3399:17;3382:6;;3432:40;;3363:16;;3432:40;3352:128;3289:191;:::o;38139:166::-;38198:22;;-1:-1:-1;;;;;38198:22:0;:46;38230:13;:6;38241:1;38230:10;:13::i;:::-;38198:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38255:18:0;;-1:-1:-1;;;;;38255:18:0;:42;38283:13;:6;38294:1;38283:10;:13::i;:::-;38255:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38139:166;:::o;35900:1382::-;35964:25;35993:65;36038:19;;35993:40;36017:15;;35993:19;;:23;;:40;;;;:::i;:65::-;35964:94;-1:-1:-1;36069:12:0;36106:20;;;:46;;-1:-1:-1;36130:22:0;;36106:46;36102:59;;;36154:7;;35900:1382;:::o;36102:59::-;36195:19;;:26;;36219:1;36195:23;:26::i;:::-;36177:15;:44;36173:94;;;36241:19;;:26;;36265:1;36241:23;:26::i;:::-;36223:44;;36173:94;36280:23;36306:70;36374:1;36306:63;36351:17;36306:40;36326:19;;36306:15;:19;;:40;;;;:::i;:70::-;36280:96;-1:-1:-1;36387:26:0;36416:36;:15;36280:96;36416:19;:36::i;:::-;36387:65;-1:-1:-1;36493:21:0;36527:37;36387:65;36527:17;:37::i;:::-;36585:18;36606:44;:21;36632:17;36606:25;:44::i;:::-;36585:65;;36661:18;36682:58;36722:17;36682:35;36697:19;;36682:10;:14;;:35;;;;:::i;:58::-;36661:79;;36751:17;36771:54;36807:17;36771:31;36786:15;;36771:10;:14;;:31;;;;:::i;:54::-;36751:74;-1:-1:-1;36836:17:0;36856:41;36751:74;36856:26;:10;36871;36856:14;:26::i;:::-;:30;;:41::i;:::-;36940:1;36918:19;:23;;;36952:15;:19;;;36982;:23;36836:61;-1:-1:-1;37021:19:0;;;;;:36;;;37056:1;37044:9;:13;37021:36;37018:82;;;37059:41;37073:15;37090:9;37059:13;:41::i;:::-;37134:18;;37126:54;;-1:-1:-1;;;;;37134:18:0;;;;37166:9;;37126:54;;;;37166:9;37134:18;37126:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37212:22:0;;37204:70;;37113:67;;-1:-1:-1;;;;;;37212:22:0;;37248:21;;37204:70;;;;37248:21;37212:22;37204:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;35900:1382:0:o;47696:334::-;47834:7;47829:87;;47843:15;:13;:15::i;:::-;47829:87;;;47883:33;47893:6;47901;47909;47883:9;:33::i;:::-;47874:42;;47829:87;47929:42;47945:6;47953:9;47964:6;47929:15;:42::i;:::-;47997:7;47992:30;;48006:16;47225:24;;47207:15;:42;47274:20;;47260:11;:34;47323:24;;47305:15;:42;47377:20;;47358:16;:39;47423:19;;47408:12;:34;47472:19;;47453:16;:38;47525:29;;47502:20;:52;47584:25;;47565:16;:44;47643:29;;47620:20;:52;47161:519;48006:16;47696:334;;;;;:::o;6655:98::-;6713:7;6740:5;6744:1;6740;:5;:::i;37756:367::-;37871:10;;37839:57;;37856:4;;-1:-1:-1;;;;;37871:10:0;37884:11;37839:8;:57::i;:::-;37907:10;;38052:22;;37907:208;;-1:-1:-1;;;37907:208:0;;-1:-1:-1;;;;;37907:10:0;;;;:26;;37941:9;;37907:208;;37974:4;;37994:11;;37907:10;;;;38052:22;;38089:15;;37907:208;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;46083:1066::-;46132:15;;:20;:40;;;;-1:-1:-1;46156:11:0;;:16;46132:40;:64;;;;-1:-1:-1;46176:15:0;;:20;46132:64;:99;;;;-1:-1:-1;46210:16:0;;:21;46132:99;:120;;;;-1:-1:-1;46235:12:0;;:17;46132:120;:145;;;;-1:-1:-1;46256:16:0;;:21;46132:145;:183;;;;-1:-1:-1;46290:20:0;;:25;46132:183;:208;;;;-1:-1:-1;46319:16:0;;:21;46132:208;:237;;;;-1:-1:-1;46344:20:0;;:25;46132:237;46128:250;;;46083:1066::o;46128:250::-;46417:15;;;46390:24;:42;46466:11;;;46443:20;:34;46515:15;;;46488:24;:42;46564:16;;;46541:20;:39;46613:12;;;46591:19;:34;46658:16;;;46636:19;:38;46717:20;;;46685:29;:52;46776:16;;;46748:25;:44;46835:20;;;46803:29;:52;-1:-1:-1;46876:19:0;;;;46906:15;;;;46932:19;;;;46962:20;;;;46993:16;;;;47020:20;;;47051:24;;;47086:20;;;47117:24;46083:1066::o;48038:877::-;48131:7;48195:12;48173:18;;48154:16;;:37;;;;:::i;:::-;:53;48151:310;;48209:9;:7;:9::i;:::-;48151:310;;;48248:20;48238:6;:30;;;;;;;;:::i;:::-;;48234:227;;48270:10;:8;:10::i;48234:227::-;48310:19;48300:6;:29;;;;;;;;:::i;:::-;;48296:165;;48331:9;:7;:9::i;48296:165::-;48370:24;48360:6;:34;;;;;;;;:::i;:::-;;48356:105;;48396:14;:12;:14::i;48356:105::-;48426:35;;-1:-1:-1;;;48426:35:0;;26492:2:1;48426:35:0;;;26474:21:1;26531:2;26511:18;;;26504:30;26570:27;26550:18;;;26543:55;26615:18;;48426:35:0;26290:349:1;48356:105:0;48509:10;;48482:12;;48509:14;48505:298;;48547:39;28910:4;48547:22;48558:10;;48547:6;:10;;:22;;;;:::i;:39::-;48540:46;;48647:10;;48631:13;;48624:4;:20;;;;:::i;:::-;:33;;;;:::i;:::-;48601:19;;:56;;;;;;;:::i;:::-;;;;-1:-1:-1;;48710:10:0;;48698:9;;48691:16;;:4;:16;:::i;:::-;:29;;;;:::i;:::-;48672:15;;:48;;;;;;;:::i;:::-;;;;-1:-1:-1;;48781:10:0;;48765:13;;48758:20;;:4;:20;:::i;:::-;:33;;;;:::i;:::-;48735:19;;:56;;;;;;;:::i;:::-;;;;-1:-1:-1;;48505:298:0;48819:8;;48815:58;;48829:44;48845:6;48861:4;48868;48829:15;:44::i;:::-;48893:14;48903:4;48893:14;;:::i;:::-;;48038:877;-1:-1:-1;;;;;48038:877:0:o;21390:840::-;-1:-1:-1;;;;;21521:18:0;;21513:68;;;;-1:-1:-1;;;21513:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21600:16:0;;21592:64;;;;-1:-1:-1;;;21592:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21742:15:0;;21720:19;21742:15;;;;;;;;;;;21776:21;;;;21768:72;;;;-1:-1:-1;;;21768:72:0;;26846:2:1;21768:72:0;;;26828:21:1;26885:2;26865:18;;;26858:30;26924:34;26904:18;;;26897:62;-1:-1:-1;;;26975:18:1;;;26968:36;27021:19;;21768:72:0;26644:402:1;21768:72:0;-1:-1:-1;;;;;21876:15:0;;;:9;:15;;;;;;;;;;;21894:20;;;21876:38;;22094:13;;;;;;;;;;:23;;;;;;22146:26;;1855:25:1;;;22094:13:0;;22146:26;;1828:18:1;22146:26:0;;;;;;;22185:37;43756:185;48923:193;48978:3;48962:13;:19;;;48992:9;:15;;;49018:13;:19;;;49061:47;;:28;48978:3;;49061:17;:28::i;:47::-;49048:10;:60;48923:193::o;49124:229::-;49180:16;;49164:13;:32;;;49219:12;;49207:9;:24;;;49258:16;;49242:13;:32;;;49298:47;;49258:16;;49298:28;;49180:16;49298:17;:28::i;49361:225::-;49416:15;;49400:13;:31;;;49454:11;;49442:9;:23;;;49492:15;;49476:13;:31;;;49531:47;;49492:15;;49531:28;;49416:15;49531:17;:28::i;49594:245::-;49654:20;;49638:13;:36;;;49697:16;;49685:9;:28;;;49740:20;;49724:13;:36;;;49784:47;;49740:20;;49784:28;;49654:20;49784:17;:28::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:134;218:20;;247:31;218:20;247:31;:::i;:::-;150:134;;;:::o;289:247::-;348:6;401:2;389:9;380:7;376:23;372:32;369:52;;;417:1;414;407:12;369:52;456:9;443:23;475:31;500:5;475:31;:::i;541:250::-;626:1;636:113;650:6;647:1;644:13;636:113;;;726:11;;;720:18;707:11;;;700:39;672:2;665:10;636:113;;;-1:-1:-1;;783:1:1;765:16;;758:27;541:250::o;796:396::-;945:2;934:9;927:21;908:4;977:6;971:13;1020:6;1015:2;1004:9;1000:18;993:34;1036:79;1108:6;1103:2;1092:9;1088:18;1083:2;1075:6;1071:15;1036:79;:::i;:::-;1176:2;1155:15;-1:-1:-1;;1151:29:1;1136:45;;;;1183:2;1132:54;;796:396;-1:-1:-1;;796:396:1:o;1197:315::-;1265:6;1273;1326:2;1314:9;1305:7;1301:23;1297:32;1294:52;;;1342:1;1339;1332:12;1294:52;1381:9;1368:23;1400:31;1425:5;1400:31;:::i;:::-;1450:5;1502:2;1487:18;;;;1474:32;;-1:-1:-1;;;1197:315:1:o;1891:127::-;1952:10;1947:3;1943:20;1940:1;1933:31;1983:4;1980:1;1973:15;2007:4;2004:1;1997:15;2023:118;2109:5;2102:13;2095:21;2088:5;2085:32;2075:60;;2131:1;2128;2121:12;2146:128;2211:20;;2240:28;2211:20;2240:28;:::i;2279:1191::-;2369:6;2377;2430:2;2418:9;2409:7;2405:23;2401:32;2398:52;;;2446:1;2443;2436:12;2398:52;2486:9;2473:23;2515:18;2556:2;2548:6;2545:14;2542:34;;;2572:1;2569;2562:12;2542:34;2610:6;2599:9;2595:22;2585:32;;2655:7;2648:4;2644:2;2640:13;2636:27;2626:55;;2677:1;2674;2667:12;2626:55;2713:2;2700:16;2735:4;2758:2;2754;2751:10;2748:36;;;2764:18;;:::i;:::-;2810:2;2807:1;2803:10;2842:2;2836:9;2905:2;2901:7;2896:2;2892;2888:11;2884:25;2876:6;2872:38;2960:6;2948:10;2945:22;2940:2;2928:10;2925:18;2922:46;2919:72;;;2971:18;;:::i;:::-;3007:2;3000:22;3057:18;;;3091:15;;;;-1:-1:-1;3133:11:1;;;3129:20;;;3161:19;;;3158:39;;;3193:1;3190;3183:12;3158:39;3217:11;;;;3237:148;3253:6;3248:3;3245:15;3237:148;;;3319:23;3338:3;3319:23;:::i;:::-;3307:36;;3270:12;;;;3363;;;;3237:148;;;3404:6;-1:-1:-1;3429:35:1;;-1:-1:-1;3445:18:1;;;3429:35;:::i;:::-;3419:45;;;;;;2279:1191;;;;;:::o;3475:180::-;3534:6;3587:2;3575:9;3566:7;3562:23;3558:32;3555:52;;;3603:1;3600;3593:12;3555:52;-1:-1:-1;3626:23:1;;3475:180;-1:-1:-1;3475:180:1:o;3660:316::-;3737:6;3745;3753;3806:2;3794:9;3785:7;3781:23;3777:32;3774:52;;;3822:1;3819;3812:12;3774:52;-1:-1:-1;;3845:23:1;;;3915:2;3900:18;;3887:32;;-1:-1:-1;3966:2:1;3951:18;;;3938:32;;3660:316;-1:-1:-1;3660:316:1:o;3981:456::-;4058:6;4066;4074;4127:2;4115:9;4106:7;4102:23;4098:32;4095:52;;;4143:1;4140;4133:12;4095:52;4182:9;4169:23;4201:31;4226:5;4201:31;:::i;:::-;4251:5;-1:-1:-1;4308:2:1;4293:18;;4280:32;4321:33;4280:32;4321:33;:::i;:::-;3981:456;;4373:7;;-1:-1:-1;;;4427:2:1;4412:18;;;;4399:32;;3981:456::o;4631:241::-;4687:6;4740:2;4728:9;4719:7;4715:23;4711:32;4708:52;;;4756:1;4753;4746:12;4708:52;4795:9;4782:23;4814:28;4836:5;4814:28;:::i;5309:405::-;5384:6;5392;5400;5453:2;5441:9;5432:7;5428:23;5424:32;5421:52;;;5469:1;5466;5459:12;5421:52;5508:9;5495:23;5558:4;5551:5;5547:16;5540:5;5537:27;5527:55;;5578:1;5575;5568:12;5527:55;5601:5;5653:2;5638:18;;5625:32;;-1:-1:-1;5704:2:1;5689:18;;;5676:32;;5309:405;-1:-1:-1;;;5309:405:1:o;5719:388::-;5787:6;5795;5848:2;5836:9;5827:7;5823:23;5819:32;5816:52;;;5864:1;5861;5854:12;5816:52;5903:9;5890:23;5922:31;5947:5;5922:31;:::i;:::-;5972:5;-1:-1:-1;6029:2:1;6014:18;;6001:32;6042:33;6001:32;6042:33;:::i;:::-;6094:7;6084:17;;;5719:388;;;;;:::o;6467:380::-;6546:1;6542:12;;;;6589;;;6610:61;;6664:4;6656:6;6652:17;6642:27;;6610:61;6717:2;6709:6;6706:14;6686:18;6683:38;6680:161;;6763:10;6758:3;6754:20;6751:1;6744:31;6798:4;6795:1;6788:15;6826:4;6823:1;6816:15;6680:161;;6467:380;;;:::o;6852:127::-;6913:10;6908:3;6904:20;6901:1;6894:31;6944:4;6941:1;6934:15;6968:4;6965:1;6958:15;6984:127;7045:10;7040:3;7036:20;7033:1;7026:31;7076:4;7073:1;7066:15;7100:4;7097:1;7090:15;7116:135;7155:3;7176:17;;;7173:43;;7196:18;;:::i;:::-;-1:-1:-1;7243:1:1;7232:13;;7116:135::o;9073:125::-;9138:9;;;9159:10;;;9156:36;;;9172:18;;:::i;10439:383::-;10596:3;10634:6;10628:13;10650:66;10709:6;10704:3;10697:4;10689:6;10685:17;10650:66;:::i;:::-;10738:16;;;;10763:21;;;-1:-1:-1;10811:4:1;10800:16;;10439:383;-1:-1:-1;10439:383:1:o;13585:184::-;13655:6;13708:2;13696:9;13687:7;13683:23;13679:32;13676:52;;;13724:1;13721;13714:12;13676:52;-1:-1:-1;13747:16:1;;13585:184;-1:-1:-1;13585:184:1:o;14390:245::-;14457:6;14510:2;14498:9;14489:7;14485:23;14481:32;14478:52;;;14526:1;14523;14516:12;14478:52;14558:9;14552:16;14577:28;14599:5;14577:28;:::i;15335:251::-;15405:6;15458:2;15446:9;15437:7;15433:23;15429:32;15426:52;;;15474:1;15471;15464:12;15426:52;15506:9;15500:16;15525:31;15550:5;15525:31;:::i;15900:607::-;-1:-1:-1;;;;;16259:15:1;;;16241:34;;16306:2;16291:18;;16284:34;;;;16349:2;16334:18;;16327:34;;;;16392:2;16377:18;;16370:34;;;;16441:15;;;16435:3;16420:19;;16413:44;16221:3;16473:19;;16466:35;;;;16190:3;16175:19;;15900:607::o;16512:306::-;16600:6;16608;16616;16669:2;16657:9;16648:7;16644:23;16640:32;16637:52;;;16685:1;16682;16675:12;16637:52;16714:9;16708:16;16698:26;;16764:2;16753:9;16749:18;16743:25;16733:35;;16808:2;16797:9;16793:18;16787:25;16777:35;;16512:306;;;;;:::o;19302:168::-;19375:9;;;19406;;19423:15;;;19417:22;;19403:37;19393:71;;19444:18;;:::i;19475:217::-;19515:1;19541;19531:132;;19585:10;19580:3;19576:20;19573:1;19566:31;19620:4;19617:1;19610:15;19648:4;19645:1;19638:15;19531:132;-1:-1:-1;19677:9:1;;19475:217::o;21224:401::-;21426:2;21408:21;;;21465:2;21445:18;;;21438:30;21504:34;21499:2;21484:18;;21477:62;-1:-1:-1;;;21570:2:1;21555:18;;21548:35;21615:3;21600:19;;21224:401::o;21630:399::-;21832:2;21814:21;;;21871:2;21851:18;;;21844:30;21910:34;21905:2;21890:18;;21883:62;-1:-1:-1;;;21976:2:1;21961:18;;21954:33;22019:3;22004:19;;21630:399::o;22785:128::-;22852:9;;;22873:11;;;22870:37;;;22887:18;;:::i;23327:127::-;23388:10;23383:3;23379:20;23376:1;23369:31;23419:4;23416:1;23409:15;23443:4;23440:1;23433:15;24685:980;24947:4;24995:3;24984:9;24980:19;25026:6;25015:9;25008:25;25052:2;25090:6;25085:2;25074:9;25070:18;25063:34;25133:3;25128:2;25117:9;25113:18;25106:31;25157:6;25192;25186:13;25223:6;25215;25208:22;25261:3;25250:9;25246:19;25239:26;;25300:2;25292:6;25288:15;25274:29;;25321:1;25331:195;25345:6;25342:1;25339:13;25331:195;;;25410:13;;-1:-1:-1;;;;;25406:39:1;25394:52;;25501:15;;;;25466:12;;;;25442:1;25360:9;25331:195;;;-1:-1:-1;;;;;;;25582:32:1;;;;25577:2;25562:18;;25555:60;-1:-1:-1;;;25646:3:1;25631:19;25624:35;25543:3;24685:980;-1:-1:-1;;;24685:980:1:o

Swarm Source

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