ETH Price: $2,669.31 (+1.64%)

Token

DollarSqueeze (DSQ)
 

Overview

Max Total Supply

100,000,000 DSQ

Holders

56

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
84,473.34639613759947737 DSQ

Value
$0.00
0xb9090973f0a1e2943a5a710f1b7dc0c6d7854d5c
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:
DSQ

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-07
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

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

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

/**
 * @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.zeppelin.solutions/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, _allowances[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 = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `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;
        }
        _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;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

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

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

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

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

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

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

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

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

    /**
     * @dev Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * 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 {}
}

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}
pragma solidity 0.8.18;

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;

    function INIT_CODE_PAIR_HASH() external view returns (bytes32);
}

interface IGemAntiBot {
    function setTokenOwner(address owner) external;

    function onPreTransferCheck(
        address from,
        address to,
        uint256 amount
    ) external;
}
interface IUniswapV2Caller {
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        address router,
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        uint256 deadline
    ) external;
}
contract DSQ is ERC20, Ownable {
    using SafeERC20 for IERC20;
    uint256 private constant MAX = ~uint256(0);
    IUniswapV2Caller public constant uniswapV2Caller =
        IUniswapV2Caller(0x1CcFE8c40eF259566433716002E379dFfFbf5a3e);
    address public gemAntiBot;
    bool public antiBotEnabled;
    uint8 private _decimals;
    ///////////////////////////////////////////////////////////////////////////
    address public baseTokenForPair;
    bool private inSwapAndLiquify;
    uint16 public sellLiquidityFee;
    uint16 public buyLiquidityFee;
    uint16 public transferLiquidityFee;

    uint16 public sellMarketingFee;
    uint16 public buyMarketingFee;
    uint16 public transferMarketingFee;

    uint16 public sellBurnFee;
    uint16 public buyBurnFee;
    uint16 public transferBurnFee;


    address public marketingWallet;
    bool public isMarketingFeeBaseToken;

    uint256 public minAmountToTakeFee;
    uint256 public maxWallet;
    uint256 public maxTransactionAmount;

    IUniswapV2Router02 public mainRouter;
    address public mainPair;

    mapping(address => bool) public isExcludedFromMaxTransactionAmount;
    mapping(address => bool) public isExcludedFromFee;
    mapping(address => bool) public automatedMarketMakerPairs;

    uint256 private _liquidityFeeTokens;
    uint256 private _marketingFeeTokens;

    event UpdateLiquidityFee(
        uint16 sellLiquidityFee,
        uint16 buyLiquidityFee,
        uint16 transferLiquidityFee
    );
    event UpdateMarketingFee(
        uint16 sellMarketingFee,
        uint16 buyMarketingFee,
        uint16 transferMarketingFee
    );
    event UpdateBurnFee(
        uint16 sellBurnFee,
        uint16 buyBurnFee,
        uint16 transferBurnFee
    );
    event UpdateMarketingWallet(
        address indexed marketingWallet,
        bool isMarketingFeeBaseToken
    );
    event ExcludedFromMaxTransactionAmount(address indexed account, bool isExcluded);
    event UpdateMinAmountToTakeFee(uint256 minAmountToTakeFee);
    event SetAutomatedMarketMakerPair(address indexed pair, bool value);  
    event ExcludedFromFee(address indexed account, bool isEx);
    event SwapAndLiquify(
        uint256 tokensForLiquidity,
        uint256 baseTokenForLiquidity
    );
    event MarketingFeeTaken(
        uint256 marketingFeeTokens,
        uint256 marketingFeeBaseTokenSwapped
    );
    event UpdateUniswapV2Router(address indexed uniswapV2Router);
    event UpdateMaxWallet(uint256 maxWallet);
    event UpdateMaxTransactionAmount(uint256 maxTransactionAmount);
    ///////////////////////////////////////////////////////////////////////////////
    constructor(
        string memory _name,
        string memory _symbol,
        uint8 __decimals,
        uint256 _totalSupply,
        uint256 _maxWallet,
        uint256 _maxTransactionAmount,
        address[4] memory _accounts,
        bool _isMarketingFeeBaseToken,
        uint16[9] memory _fees
    ) ERC20(_name, _symbol) {
        _decimals = __decimals;
        _mint(msg.sender, _totalSupply);
        baseTokenForPair = _accounts[2];
        require(_accounts[0] != address(0), "marketing wallet can not be 0");
        require(_accounts[1] != address(0), "Router address can not be 0");
        require(_fees[0] + _fees[3] + _fees[6] <= 200, "sell fee <= 20%");
        require(_fees[1] + _fees[4] + _fees[7] <= 200, "buy fee <= 20%");
        require(_fees[2] + _fees[5] + _fees[8] <= 200, "transfer fee <= 20%");
        gemAntiBot = _accounts[3];
        IGemAntiBot(gemAntiBot).setTokenOwner(msg.sender);
        antiBotEnabled = true;
        marketingWallet = _accounts[0];
        isMarketingFeeBaseToken = _isMarketingFeeBaseToken;
        emit UpdateMarketingWallet(
            marketingWallet,
            isMarketingFeeBaseToken
        );
        mainRouter = IUniswapV2Router02(_accounts[1]);
        if(baseTokenForPair != mainRouter.WETH()){            
            IERC20(baseTokenForPair).approve(address(mainRouter), MAX);            
        }
        _approve(address(this), address(uniswapV2Caller), MAX);
        _approve(address(this), address(mainRouter), MAX);
        emit UpdateUniswapV2Router(address(mainRouter));
        mainPair = IUniswapV2Factory(mainRouter.factory()).createPair(
            address(this),
            baseTokenForPair
        );
        require(_maxTransactionAmount>=_totalSupply / 10000, "maxTransactionAmount >= total supply / 10000");
        require(_maxWallet>=_totalSupply / 10000, "maxWallet >= total supply / 10000");
        maxWallet = _maxWallet;
        emit UpdateMaxWallet(maxWallet);
        maxTransactionAmount=_maxTransactionAmount;
        emit UpdateMaxTransactionAmount(maxTransactionAmount);        
        sellLiquidityFee = _fees[0];
        buyLiquidityFee = _fees[1];
        transferLiquidityFee = _fees[2];
        emit UpdateLiquidityFee(sellLiquidityFee, buyLiquidityFee, transferLiquidityFee);        
        sellMarketingFee=_fees[3];
        buyMarketingFee=_fees[4];
        transferMarketingFee = _fees[5];        
        emit UpdateMarketingFee(
            sellMarketingFee,
            buyMarketingFee,
            transferMarketingFee
        );
        sellBurnFee=_fees[6];
        buyBurnFee=_fees[7];
        transferBurnFee = _fees[8];        
        emit UpdateBurnFee(
            sellBurnFee,
            buyBurnFee,
            transferBurnFee
        );
        minAmountToTakeFee = _totalSupply / 10000;
        emit UpdateMinAmountToTakeFee(minAmountToTakeFee);
        isExcludedFromFee[address(this)] = true;
        isExcludedFromFee[marketingWallet] = true;
        isExcludedFromFee[_msgSender()] = true;
        isExcludedFromFee[address(0xdead)] = true;
        isExcludedFromMaxTransactionAmount[address(0xdead)] = true;
        isExcludedFromMaxTransactionAmount[address(this)] = true;
        isExcludedFromMaxTransactionAmount[marketingWallet] = true;
        isExcludedFromMaxTransactionAmount[_msgSender()] = true;
        _setAutomatedMarketMakerPair(mainPair, true);
    }

    function decimals() public view override returns (uint8) {
        return _decimals;
    }

    function setUsingAntiBot(bool enabled_) external onlyOwner {
        antiBotEnabled = enabled_;
    }

    function updateUniswapV2Pair(address _baseTokenForPair) external onlyOwner {
        baseTokenForPair = _baseTokenForPair;
        mainPair = IUniswapV2Factory(mainRouter.factory()).createPair(
            address(this),
            baseTokenForPair
        );
        if(baseTokenForPair != mainRouter.WETH()){
            IERC20(baseTokenForPair).approve(address(mainRouter), MAX);            
        }
        _setAutomatedMarketMakerPair(mainPair, true);
    }

    function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(
            newAddress != address(mainRouter),
            "The router already has that address"
        );
        emit UpdateUniswapV2Router(newAddress);
        mainRouter = IUniswapV2Router02(newAddress);
        _approve(address(this), address(mainRouter), MAX);
        if(baseTokenForPair != mainRouter.WETH()){
            IERC20(baseTokenForPair).approve(address(mainRouter), MAX);            
        }   
        address _mainPair = IUniswapV2Factory(mainRouter.factory()).createPair(
            address(this),
            baseTokenForPair
        );
        mainPair = _mainPair;
        _setAutomatedMarketMakerPair(mainPair, true);
    }

    function updateMaxWallet(uint256 _maxWallet) external onlyOwner {
        require(_maxWallet>=totalSupply() / 10000, "maxWallet >= total supply / 10000");
        emit UpdateMaxWallet(_maxWallet);
        maxWallet = _maxWallet;
    }

    function updateMaxTransactionAmount(uint256 _maxTransactionAmount)
        external
        onlyOwner
    {
        require(_maxTransactionAmount>=totalSupply() / 10000, "maxTransactionAmount >= total supply / 10000");
        emit UpdateMaxTransactionAmount(_maxTransactionAmount);
        maxTransactionAmount = _maxTransactionAmount;
    }

    /////////////////////////////////////////////////////////////////////////////////
    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    function updateLiquidityFee(
        uint16 _sellLiquidityFee,
        uint16 _buyLiquidityFee,
        uint16 _transferLiquidityFee
    ) external onlyOwner {
        require(
            _sellLiquidityFee + sellMarketingFee + sellBurnFee <= 200,
            "sell fee <= 20%"
        );
        require(_buyLiquidityFee + buyMarketingFee + buyBurnFee <= 200, "buy fee <= 20%");
        require(_transferLiquidityFee + transferMarketingFee + transferBurnFee <= 200, "buy fee <= 20%");
        emit UpdateLiquidityFee(
            _sellLiquidityFee,
            _buyLiquidityFee,
            _transferLiquidityFee
        );
        sellLiquidityFee = _sellLiquidityFee;
        buyLiquidityFee = _buyLiquidityFee;  
        transferLiquidityFee = _transferLiquidityFee; 
    }

    function updateMarketingFee(
        uint16 _sellMarketingFee,
        uint16 _buyMarketingFee,
        uint16 _transferMarketingFee
    ) external onlyOwner {
        require(
            _sellMarketingFee + sellLiquidityFee + sellBurnFee <= 200,
            "sell fee <= 20%"
        );
        require(_buyMarketingFee + buyLiquidityFee + buyBurnFee <= 200, "buy fee <= 20%");
        require(_transferMarketingFee + transferLiquidityFee + transferBurnFee <= 200, "buy fee <= 20%");
        emit UpdateMarketingFee(
            _sellMarketingFee,
            _buyMarketingFee,
            _transferMarketingFee
        );
        sellMarketingFee = _sellMarketingFee;
        buyMarketingFee = _buyMarketingFee;     
        transferMarketingFee = _transferMarketingFee;
    }

    function updateBurnFee(
        uint16 _sellBurnFee,
        uint16 _buyBurnFee,
        uint16 _transferBurnFee
    ) external onlyOwner {
        require(
            _sellBurnFee + sellLiquidityFee + sellMarketingFee <= 200,
            "sell fee <= 20%"
        );
        require(_buyBurnFee + buyLiquidityFee + buyMarketingFee <= 200, "buy fee <= 20%");
        require(_transferBurnFee + transferLiquidityFee + transferMarketingFee <= 200, "buy fee <= 20%");
        emit UpdateBurnFee(
            _sellBurnFee,
            _buyBurnFee,
            _transferBurnFee
        );
        sellBurnFee = _sellBurnFee;
        buyBurnFee = _buyBurnFee;     
        transferBurnFee = _transferBurnFee;
    }

    function updateMarketingWallet(
        address _marketingWallet,
        bool _isMarketingFeeBaseToken
    ) external onlyOwner {
        require(_marketingWallet != address(0), "marketing wallet can't be 0");
        emit UpdateMarketingWallet(_marketingWallet, _isMarketingFeeBaseToken);
        marketingWallet = _marketingWallet;
        isMarketingFeeBaseToken = _isMarketingFeeBaseToken;
        isExcludedFromFee[_marketingWallet] = true;
        isExcludedFromMaxTransactionAmount[_marketingWallet] = true;
    }

    function updateMinAmountToTakeFee(uint256 _minAmountToTakeFee)
        external
        onlyOwner
    {
        require(_minAmountToTakeFee > 0, "minAmountToTakeFee > 0");
        emit UpdateMinAmountToTakeFee(_minAmountToTakeFee);
        minAmountToTakeFee = _minAmountToTakeFee;     
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[pair] = value;
        isExcludedFromMaxTransactionAmount[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function excludeFromFee(address account, bool isEx) external onlyOwner {
        require(isExcludedFromFee[account] != isEx, "already");
        isExcludedFromFee[account] = isEx;
        emit ExcludedFromFee(account, isEx);
    }

    function excludeFromMaxTransactionAmount(address account, bool isEx)
        external
        onlyOwner
    {
        require(isExcludedFromMaxTransactionAmount[account]!=isEx, "already");
        isExcludedFromMaxTransactionAmount[account] = isEx;
        emit ExcludedFromMaxTransactionAmount(account, isEx);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        if (
            !inSwapAndLiquify &&
            antiBotEnabled &&
            !isExcludedFromFee[from] &&
            !isExcludedFromFee[to]
        ) {
            IGemAntiBot(gemAntiBot).onPreTransferCheck(from, to, amount);
        }
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >=
            minAmountToTakeFee;

        // Take Fee
        if (
            !inSwapAndLiquify &&
            balanceOf(mainPair) > 0 &&
            overMinimumTokenBalance &&
            automatedMarketMakerPairs[to]
        ) {
            takeFee();
        }

        uint256 _liquidityFee;
        uint256 _marketingFee;
        uint256 _burnFee;
        // If any account belongs to isExcludedFromFee account then remove the fee
        if (
            !inSwapAndLiquify &&
            !isExcludedFromFee[from] &&
            !isExcludedFromFee[to]
        ) {
            // Buy
            if (automatedMarketMakerPairs[from]) {
                _liquidityFee = amount * buyLiquidityFee / 1000;
                _marketingFee = amount * buyMarketingFee / 1000;
                _burnFee = amount * buyBurnFee / 1000;
            }
            // Sell
            else if (automatedMarketMakerPairs[to]) {
                _liquidityFee = amount * sellLiquidityFee / 1000;
                _marketingFee = amount * sellMarketingFee / 1000;
                _burnFee = amount * sellBurnFee / 1000;
            } else {
                _liquidityFee = amount * transferLiquidityFee / 1000;
                _marketingFee = amount * transferMarketingFee / 1000;
                _burnFee = amount * transferBurnFee / 1000;
            }
            uint256 _feeTotal = _liquidityFee + _marketingFee;
            if (_feeTotal > 0) super._transfer(from, address(this), _feeTotal);
            if(_burnFee > 0) super._transfer(from, address(0xdead), _burnFee);
            amount = amount - _liquidityFee - _marketingFee - _burnFee;
            _liquidityFeeTokens = _liquidityFeeTokens + _liquidityFee;
            _marketingFeeTokens = _marketingFeeTokens + _marketingFee;
        }
        super._transfer(from, to, amount);
        if (!inSwapAndLiquify) {
            if (!isExcludedFromMaxTransactionAmount[from]) {
                require(
                    amount < maxTransactionAmount,
                    "ERC20: exceeds transfer limit"
                );
            }
            if (!isExcludedFromMaxTransactionAmount[to]) {
                require(
                    balanceOf(to) < maxWallet,
                    "ERC20: exceeds max wallet limit"
                );
            }
        }
    }

    function takeFee() private lockTheSwap {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensTaken = _liquidityFeeTokens + _marketingFeeTokens;
        if (totalTokensTaken == 0 || contractBalance < totalTokensTaken) {
            return;
        }

        // Halve the amount of liquidity tokens
        uint256 tokensForLiquidity = _liquidityFeeTokens / 2;
        uint256 initialBaseTokenBalance = baseTokenForPair==mainRouter.WETH() ? address(this).balance
            : IERC20(baseTokenForPair).balanceOf(address(this));
        uint256 baseTokenForLiquidity;
        if (isMarketingFeeBaseToken) {
            uint256 tokensForSwap=tokensForLiquidity+_marketingFeeTokens;
            if(tokensForSwap>0)
                swapTokensForBaseToken(tokensForSwap);
            uint256 baseTokenBalance = baseTokenForPair==mainRouter.WETH() ? address(this).balance - initialBaseTokenBalance
                : IERC20(baseTokenForPair).balanceOf(address(this)) - initialBaseTokenBalance;
            uint256 baseTokenForMarketing = (baseTokenBalance *
                _marketingFeeTokens) / tokensForSwap;
            baseTokenForLiquidity = baseTokenBalance - baseTokenForMarketing;
            if(baseTokenForMarketing>0){
                if(baseTokenForPair==mainRouter.WETH()){                
                    (bool success, )=address(marketingWallet).call{value: baseTokenForMarketing}("");
                    if(success){                        
                        emit MarketingFeeTaken(0, baseTokenForMarketing);
                    }
                }else{
                    IERC20(baseTokenForPair).safeTransfer(
                        marketingWallet,
                        baseTokenForMarketing
                    );
                    emit MarketingFeeTaken(0, baseTokenForMarketing);
                }                   
            }  
        } else {
            if(tokensForLiquidity>0)
                swapTokensForBaseToken(tokensForLiquidity);
            baseTokenForLiquidity = baseTokenForPair==mainRouter.WETH() ? address(this).balance - initialBaseTokenBalance
                : IERC20(baseTokenForPair).balanceOf(address(this)) - initialBaseTokenBalance;
            if(_marketingFeeTokens>0){
                _transfer(address(this), marketingWallet, _marketingFeeTokens);
                emit MarketingFeeTaken(_marketingFeeTokens, 0);
            }   
        }

        if (tokensForLiquidity > 0 && baseTokenForLiquidity > 0) {
            addLiquidity(tokensForLiquidity, baseTokenForLiquidity);
            emit SwapAndLiquify(tokensForLiquidity, baseTokenForLiquidity);
        }
        _marketingFeeTokens = 0;
        _liquidityFeeTokens = 0;
        if(owner()!=address(0))
            _transfer(address(this), owner(), balanceOf(address(this))); 
    }

    function swapTokensForBaseToken(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = baseTokenForPair;        
        if (path[1] == mainRouter.WETH()){
            mainRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
                tokenAmount,
                0, // accept any amount of BaseToken
                path,
                address(this),
                block.timestamp
            );
        }else{
            uniswapV2Caller.swapExactTokensForTokensSupportingFeeOnTransferTokens(
                    address(mainRouter),
                    tokenAmount,
                    0, // accept any amount of BaseToken
                    path,
                    block.timestamp
                );
        }
    }

    function addLiquidity(uint256 tokenAmount, uint256 baseTokenAmount)
        private
    {
        if (baseTokenForPair == mainRouter.WETH()) 
            mainRouter.addLiquidityETH{value: baseTokenAmount}(
                address(this),
                tokenAmount,
                0, // slippage is unavoidable
                0, // slippage is unavoidable
                address(0xdead),
                block.timestamp
            );
        else{
            mainRouter.addLiquidity(
                address(this),
                baseTokenForPair,
                tokenAmount,
                baseTokenAmount,
                0,
                0,
                address(0xdead),
                block.timestamp
            );
        }            
    }
    function withdrawETH() external onlyOwner {
        (bool success, )=address(owner()).call{value: address(this).balance}("");
        require(success, "Failed in withdrawal");
    }
    function withdrawToken(address token) external onlyOwner{
        require(address(this) != token, "Not allowed");
        IERC20(token).safeTransfer(owner(), IERC20(token).balanceOf(address(this)));
    }
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"__decimals","type":"uint8"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTransactionAmount","type":"uint256"},{"internalType":"address[4]","name":"_accounts","type":"address[4]"},{"internalType":"bool","name":"_isMarketingFeeBaseToken","type":"bool"},{"internalType":"uint16[9]","name":"_fees","type":"uint16[9]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isEx","type":"bool"}],"name":"ExcludedFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFeeTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFeeBaseTokenSwapped","type":"uint256"}],"name":"MarketingFeeTaken","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":true,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensForLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"baseTokenForLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":"uint16","name":"sellBurnFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"buyBurnFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"transferBurnFee","type":"uint16"}],"name":"UpdateBurnFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"sellLiquidityFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"buyLiquidityFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"transferLiquidityFee","type":"uint16"}],"name":"UpdateLiquidityFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"sellMarketingFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"buyMarketingFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"transferMarketingFee","type":"uint16"}],"name":"UpdateMarketingFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"marketingWallet","type":"address"},{"indexed":false,"internalType":"bool","name":"isMarketingFeeBaseToken","type":"bool"}],"name":"UpdateMarketingWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTransactionAmount","type":"uint256"}],"name":"UpdateMaxTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"UpdateMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minAmountToTakeFee","type":"uint256"}],"name":"UpdateMinAmountToTakeFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"uniswapV2Router","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiBotEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenForPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gemAntiBot","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMarketingFeeBaseToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minAmountToTakeFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled_","type":"bool"}],"name":"setUsingAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferBurnFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"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":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transferMarketingFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Caller","outputs":[{"internalType":"contract IUniswapV2Caller","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_sellBurnFee","type":"uint16"},{"internalType":"uint16","name":"_buyBurnFee","type":"uint16"},{"internalType":"uint16","name":"_transferBurnFee","type":"uint16"}],"name":"updateBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_sellLiquidityFee","type":"uint16"},{"internalType":"uint16","name":"_buyLiquidityFee","type":"uint16"},{"internalType":"uint16","name":"_transferLiquidityFee","type":"uint16"}],"name":"updateLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_sellMarketingFee","type":"uint16"},{"internalType":"uint16","name":"_buyMarketingFee","type":"uint16"},{"internalType":"uint16","name":"_transferMarketingFee","type":"uint16"}],"name":"updateMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"bool","name":"_isMarketingFeeBaseToken","type":"bool"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmount","type":"uint256"}],"name":"updateMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minAmountToTakeFee","type":"uint256"}],"name":"updateMinAmountToTakeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_baseTokenForPair","type":"address"}],"name":"updateUniswapV2Pair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b5060405162004e7438038062004e74833981016040819052620000349162001065565b88886003620000448382620011d1565b506004620000538282620011d1565b505050620000706200006a62000af960201b60201c565b62000afd565b6006805460ff60a81b1916600160a81b60ff8a160217905562000094338762000b4f565b6040830151600780546001600160a01b0319166001600160a01b039283161790558351166200010a5760405162461bcd60e51b815260206004820152601d60248201527f6d61726b6574696e672077616c6c65742063616e206e6f74206265203000000060448201526064015b60405180910390fd5b60208301516001600160a01b0316620001665760405162461bcd60e51b815260206004820152601b60248201527f526f7574657220616464726573732063616e206e6f7420626520300000000000604482015260640162000101565b60c08101516060820151825160c892916200018191620012b3565b6200018d9190620012b3565b61ffff161115620001d35760405162461bcd60e51b815260206004820152600f60248201526e73656c6c20666565203c3d2032302560881b604482015260640162000101565b60e08101516080820151602083015160c89291620001f191620012b3565b620001fd9190620012b3565b61ffff161115620002425760405162461bcd60e51b815260206004820152600e60248201526d62757920666565203c3d2032302560901b604482015260640162000101565b61010081015160a0820151604083015160c892916200026191620012b3565b6200026d9190620012b3565b61ffff161115620002c15760405162461bcd60e51b815260206004820152601360248201527f7472616e7366657220666565203c3d2032302500000000000000000000000000604482015260640162000101565b6060830151600680546001600160a01b039092166001600160a01b0319909216821790556040516318e02bd960e01b81523360048201526318e02bd990602401600060405180830381600087803b1580156200031c57600080fd5b505af115801562000331573d6000803e3d6000fd5b50506006805460ff60a01b1916600160a01b1790555050825160088054841515600160e01b90810260ff60e01b196001600160a01b039586166801000000000000000090810291909116600160401b600160e81b031990941693909317179283905560405190830460ff16151581529104909116907f5ddebadd13549f5ff5b3c95499e6a1781606c1ed34a3d856d1f20694feade7bc9060200160405180910390a2602083810151600c80546001600160a01b0319166001600160a01b039092169182179055604080516315ab88c960e31b81529051919263ad5c4648926004808401938290030181865afa1580156200042f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004559190620012d8565b6007546001600160a01b03908116911614620004ea57600754600c5460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af1158015620004c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e89190620012fd565b505b6200050d30731ccfe8c40ef259566433716002e379dfffbf5a3e60001962000c34565b600c54620005299030906001600160a01b031660001962000c34565b600c546040516001600160a01b03909116907f0c36f1f3a0f38cd9563b52fb110cc5b0fa22c509defc16728a6a42f1bddad22990600090a2600c60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620005b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005db9190620012d8565b6007546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af11580156200062d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006539190620012d8565b600d80546001600160a01b0319166001600160a01b039290921691909117905562000681612710876200131b565b841015620006e75760405162461bcd60e51b815260206004820152602c60248201527f6d61785472616e73616374696f6e416d6f756e74203e3d20746f74616c20737560448201526b070706c79202f2031303030360a41b606482015260840162000101565b620006f5612710876200131b565b851015620007505760405162461bcd60e51b815260206004820152602160248201527f6d617857616c6c6574203e3d20746f74616c20737570706c79202f20313030306044820152600360fc1b606482015260840162000101565b600a8590556040518581527fdd4ef051c4c49233ec73abfc2ee1514725d2a818fbcde46ee5d34a49034922f99060200160405180910390a1600b8490556040518481527fce2d2ed7bf9bb2097381750343540bf6b3977d70c462c5caf59a8193a7d6d5d39060200160405180910390a180516007805460208085015160408087015161ffff928316600160b81b90810263ffffffff60a81b19909616978416600160a81b90810261ffff60b81b1916989098179590951761ffff60c81b1916600160c81b91841682021795869055815196860483168752938504821692860192909252919092041682820152517f64adb63860db5af335def35863f10c56ab25637c99d52beb2d1ff316c7e903949181900360600190a160608082015160078054608085015161ffff60e81b19600160d81b61ffff95861681029190911663ffffffff60d81b1990931692909217600160e81b9185168202179283905560a08601516008805491861661ffff19909216821790556040805193850486168452919093049093166020820152918201527fdbfe7b28b40249743de161180a749238bf4c3d3132c7a40ca1d0d5a0529ddb02910160405180910390a160c08101516008805460e084015161010085015161ffff91821664010000000090810265ffffffff0000199094169583166201000090810261ffff60201b1916969096179390931761ffff60301b191666010000000000009183168202179384905560408051958504831686529284048216602086015290920490911682820152517fc669367848545f5b2f930636ec43af4b3603ba349d14de28bf07ab7e5d48fa139181900360600190a1620009c4612710876200131b565b60098190556040519081527f37e5d1260bc61b4faf5a9f8f5415209eb753f52c24812cdb9d7b97608225fbcf9060200160405180910390a1306000818152600f602090815260408083208054600160ff199182168117909255600880546001600160a01b0368010000000000000000918290048116885285882080548516861790553380895286892080548616871790557f99629f56119585bf27511b6b7d295dffb54757453fcc3dabcf51d92028301f108054861687179055600e9097527ff77e91909e61d18f67b875b2bfcae1f683a8d555e55382e3a6b082e2c59ea57a805485168617905597875284872080548416851790559054048616855282852080548216831790559284529220805490911682179055600d5462000aea92169062000d5c565b5050505050505050506200135a565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821662000ba75760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000101565b806002600082825462000bbb91906200133e565b90915550506001600160a01b0382166000908152602081905260408120805483929062000bea9084906200133e565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b03831662000c985760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000101565b6001600160a01b03821662000cfb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000101565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03821660009081526010602052604090205481151560ff90911615150362000df45760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c75650000000000000000606482015260840162000101565b6001600160a01b0382166000818152601060209081526040808320805486151560ff199182168117909255600e84529382902080549094168117909355519182527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab910160405180910390a25050565b505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562000eaa5762000eaa62000e69565b604052919050565b600082601f83011262000ec457600080fd5b81516001600160401b0381111562000ee05762000ee062000e69565b602062000ef6601f8301601f1916820162000e7f565b828152858284870101111562000f0b57600080fd5b60005b8381101562000f2b57858101830151828201840152820162000f0e565b506000928101909101919091529392505050565b80516001600160a01b038116811462000f5757600080fd5b919050565b600082601f83011262000f6e57600080fd5b604051608081016001600160401b038111828210171562000f935762000f9362000e69565b60405280608084018581111562000fa957600080fd5b845b8181101562000fce5762000fbf8162000f3f565b83526020928301920162000fab565b509195945050505050565b8051801515811462000f5757600080fd5b600082601f83011262000ffc57600080fd5b6040516101208082016001600160401b038111838210171562001023576200102362000e69565b604052830181858211156200103757600080fd5b845b8281101562000fce57805161ffff81168114620010565760008081fd5b82526020918201910162001039565b60008060008060008060008060006102808a8c0312156200108557600080fd5b89516001600160401b03808211156200109d57600080fd5b620010ab8d838e0162000eb2565b9a5060208c0151915080821115620010c257600080fd5b50620010d18c828d0162000eb2565b98505060408a015160ff81168114620010e957600080fd5b8097505060608a0151955060808a0151945060a08a01519350620011118b60c08c0162000f5c565b9250620011226101408b0162000fd9565b9150620011348b6101608c0162000fea565b90509295985092959850929598565b600181811c908216806200115857607f821691505b6020821081036200117957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000e6457600081815260208120601f850160051c81016020861015620011a85750805b601f850160051c820191505b81811015620011c957828155600101620011b4565b505050505050565b81516001600160401b03811115620011ed57620011ed62000e69565b6200120581620011fe845462001143565b846200117f565b602080601f8311600181146200123d5760008415620012245750858301515b600019600386901b1c1916600185901b178555620011c9565b600085815260208120601f198616915b828110156200126e578886015182559484019460019091019084016200124d565b50858210156200128d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b61ffff818116838216019080821115620012d157620012d16200129d565b5092915050565b600060208284031215620012eb57600080fd5b620012f68262000f3f565b9392505050565b6000602082840312156200131057600080fd5b620012f68262000fd9565b6000826200133957634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200135457620013546200129d565b92915050565b613b0a806200136a6000396000f3fe6080604052600436106103035760003560e01c80638947606911610190578063c8c8ebe4116100dc578063e71dc3f511610095578063f2fde38b1161006f578063f2fde38b146109bb578063f6374342146109db578063f8b45b05146109fd578063fc59d23d14610a1357600080fd5b8063e71dc3f514610946578063e9481eee14610969578063f11a24d31461099957600080fd5b8063c8c8ebe414610874578063cf188ad01461088a578063d8c6404b146108aa578063dd62ed3e146108cb578063df8408fe14610911578063e086e5ec1461093157600080fd5b80639a7a23d611610149578063a9059cbb11610123578063a9059cbb146107e3578063aa49802314610803578063adb873bd14610823578063b62496f51461084457600080fd5b80639a7a23d6146107815780639bb19a32146107a1578063a457c2d7146107c357600080fd5b806389476069146106cc5780638da5cb5b146106ec57806391c1004a1461070a578063921369131461072a57806395d89b411461074c578063995614a71461076157600080fd5b806357e62b981161024f57806376ae31d0116102085780637c75ad3a116101e25780637c75ad3a146106495780637cf84bd71461067157806385af30c51461069157806385c5b319146106b157600080fd5b806376ae31d0146105e757806377ec7449146106075780637bce5a041461062757600080fd5b806357e62b98146104fc57806365b8dbc01461051d57806370a082311461053d578063715018a61461057357806373b9e82c1461058857806375f0a874146105a857600080fd5b806323b872dd116102bc578063313ce56711610296578063313ce56714610460578063395093511461048c5780634707c551146104ac5780635342acb4146104cc57600080fd5b806323b872dd146104005780632ae2f121146104205780632d5fd55a1461044057600080fd5b806306fdde031461030f578063095ea7b31461033a57806310cb58321461036a57806318160ddd1461038c5780631c499ab0146103ab5780631c8a6adc146103cb57600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610a29565b60405161033191906135ac565b60405180910390f35b34801561034657600080fd5b5061035a6103553660046135f4565b610abb565b6040519015158152602001610331565b34801561037657600080fd5b5061038a610385366004613637565b610ad5565b005b34801561039857600080fd5b506002545b604051908152602001610331565b3480156103b757600080fd5b5061038a6103c636600461367a565b610c98565b3480156103d757600080fd5b506008546103ed90600160301b900461ffff1681565b60405161ffff9091168152602001610331565b34801561040c57600080fd5b5061035a61041b366004613693565b610d69565b34801561042c57600080fd5b5061038a61043b3660046136e2565b610d8f565b34801561044c57600080fd5b5061038a61045b36600461371b565b610e73565b34801561046c57600080fd5b50600654600160a81b900460ff1660405160ff9091168152602001610331565b34801561049857600080fd5b5061035a6104a73660046135f4565b610ebb565b3480156104b857600080fd5b5061038a6104c73660046136e2565b610efa565b3480156104d857600080fd5b5061035a6104e7366004613738565b600f6020526000908152604090205460ff1681565b34801561050857600080fd5b5060085461035a90600160e01b900460ff1681565b34801561052957600080fd5b5061038a610538366004613738565b611037565b34801561054957600080fd5b5061039d610558366004613738565b6001600160a01b031660009081526020819052604090205490565b34801561057f57600080fd5b5061038a611346565b34801561059457600080fd5b5061038a6105a336600461367a565b61137c565b3480156105b457600080fd5b506008546105cf90600160401b90046001600160a01b031681565b6040516001600160a01b039091168152602001610331565b3480156105f357600080fd5b5061038a610602366004613637565b611427565b34801561061357600080fd5b506006546105cf906001600160a01b031681565b34801561063357600080fd5b506007546103ed90600160e81b900461ffff1681565b34801561065557600080fd5b506105cf731ccfe8c40ef259566433716002e379dfffbf5a3e81565b34801561067d57600080fd5b506007546105cf906001600160a01b031681565b34801561069d57600080fd5b50600d546105cf906001600160a01b031681565b3480156106bd57600080fd5b506008546103ed9061ffff1681565b3480156106d857600080fd5b5061038a6106e7366004613738565b6115da565b3480156106f857600080fd5b506005546001600160a01b03166105cf565b34801561071657600080fd5b5061038a610725366004613738565b6116db565b34801561073657600080fd5b506007546103ed90600160d81b900461ffff1681565b34801561075857600080fd5b5061032461192a565b34801561076d57600080fd5b5061038a61077c366004613637565b611939565b34801561078d57600080fd5b5061038a61079c3660046136e2565b611aec565b3480156107ad57600080fd5b506007546103ed90600160c81b900461ffff1681565b3480156107cf57600080fd5b5061035a6107de3660046135f4565b611b20565b3480156107ef57600080fd5b5061035a6107fe3660046135f4565b611bbd565b34801561080f57600080fd5b5061038a61081e36600461367a565b611bcb565b34801561082f57600080fd5b506008546103ed9062010000900461ffff1681565b34801561085057600080fd5b5061035a61085f366004613738565b60106020526000908152604090205460ff1681565b34801561088057600080fd5b5061039d600b5481565b34801561089657600080fd5b50600c546105cf906001600160a01b031681565b3480156108b657600080fd5b5060065461035a90600160a01b900460ff1681565b3480156108d757600080fd5b5061039d6108e6366004613755565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561091d57600080fd5b5061038a61092c3660046136e2565b611ca7565b34801561093d57600080fd5b5061038a611d83565b34801561095257600080fd5b506008546103ed90640100000000900461ffff1681565b34801561097557600080fd5b5061035a610984366004613738565b600e6020526000908152604090205460ff1681565b3480156109a557600080fd5b506007546103ed90600160b81b900461ffff1681565b3480156109c757600080fd5b5061038a6109d6366004613738565b611e58565b3480156109e757600080fd5b506007546103ed90600160a81b900461ffff1681565b348015610a0957600080fd5b5061039d600a5481565b348015610a1f57600080fd5b5061039d60095481565b606060038054610a3890613783565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6490613783565b8015610ab15780601f10610a8657610100808354040283529160200191610ab1565b820191906000526020600020905b815481529060010190602001808311610a9457829003601f168201915b5050505050905090565b600033610ac9818585611ef0565b60019150505b92915050565b6005546001600160a01b03163314610b085760405162461bcd60e51b8152600401610aff906137bd565b60405180910390fd5b60085460075460c89161ffff62010000909104811691610b3191600160a81b9091041686613808565b610b3b9190613808565b61ffff161115610b5d5760405162461bcd60e51b8152600401610aff9061382a565b60085460075460c89161ffff640100000000909104811691610b8891600160b81b9091041685613808565b610b929190613808565b61ffff161115610bb45760405162461bcd60e51b8152600401610aff90613853565b60085460075460c89161ffff600160301b909104811691610bde91600160c81b9091041684613808565b610be89190613808565b61ffff161115610c0a5760405162461bcd60e51b8152600401610aff90613853565b6040805161ffff8581168252848116602083015283168183015290517fdbfe7b28b40249743de161180a749238bf4c3d3132c7a40ca1d0d5a0529ddb029181900360600190a16007805463ffffffff60d81b1916600160d81b61ffff9586160261ffff60e81b191617600160e81b93851693909302929092179091556008805461ffff191691909216179055565b6005546001600160a01b03163314610cc25760405162461bcd60e51b8152600401610aff906137bd565b612710610cce60025490565b610cd8919061387b565b811015610d315760405162461bcd60e51b815260206004820152602160248201527f6d617857616c6c6574203e3d20746f74616c20737570706c79202f20313030306044820152600360fc1b6064820152608401610aff565b6040518181527fdd4ef051c4c49233ec73abfc2ee1514725d2a818fbcde46ee5d34a49034922f99060200160405180910390a1600a55565b600033610d77858285612014565b610d828585856120a6565b60019150505b9392505050565b6005546001600160a01b03163314610db95760405162461bcd60e51b8152600401610aff906137bd565b6001600160a01b0382166000908152600e602052604090205481151560ff909116151503610e135760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b6044820152606401610aff565b6001600160a01b0382166000818152600e6020908152604091829020805460ff191685151590811790915591519182527f82170bbd72c16b30c410014b7382121a699ed119a182e48a0b6cadcc89104ac991015b60405180910390a25050565b6005546001600160a01b03163314610e9d5760405162461bcd60e51b8152600401610aff906137bd565b60068054911515600160a01b0260ff60a01b19909216919091179055565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610ac99082908690610ef590879061389d565b611ef0565b6005546001600160a01b03163314610f245760405162461bcd60e51b8152600401610aff906137bd565b6001600160a01b038216610f7a5760405162461bcd60e51b815260206004820152601b60248201527f6d61726b6574696e672077616c6c65742063616e2774206265203000000000006044820152606401610aff565b816001600160a01b03167f5ddebadd13549f5ff5b3c95499e6a1781606c1ed34a3d856d1f20694feade7bc82604051610fb7911515815260200190565b60405180910390a26008805468010000000000000000600160e81b031916600160401b6001600160a01b039490941693840260ff60e01b191617600160e01b921515929092029190911790556000908152600f60209081526040808320805460ff199081166001908117909255600e909352922080549091169091179055565b6005546001600160a01b031633146110615760405162461bcd60e51b8152600401610aff906137bd565b600c546001600160a01b03908116908216036110cb5760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610aff565b6040516001600160a01b038216907f0c36f1f3a0f38cd9563b52fb110cc5b0fa22c509defc16728a6a42f1bddad22990600090a2600c80546001600160a01b0319166001600160a01b03831690811790915561112b903090600019611ef0565b600c60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561117e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a291906138b0565b6007546001600160a01b0390811691161461123357600754600c5460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af115801561120d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123191906138cd565b505b600c546040805163c45a015560e01b815290516000926001600160a01b03169163c45a01559160048083019260209291908290030181865afa15801561127d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a191906138b0565b6007546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af11580156112f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131691906138b0565b600d80546001600160a01b0319166001600160a01b0383169081179091559091506113429060016125f7565b5050565b6005546001600160a01b031633146113705760405162461bcd60e51b8152600401610aff906137bd565b61137a60006126f6565b565b6005546001600160a01b031633146113a65760405162461bcd60e51b8152600401610aff906137bd565b600081116113ef5760405162461bcd60e51b815260206004820152601660248201527506d696e416d6f756e74546f54616b65466565203e20360541b6044820152606401610aff565b6040518181527f37e5d1260bc61b4faf5a9f8f5415209eb753f52c24812cdb9d7b97608225fbcf9060200160405180910390a1600955565b6005546001600160a01b031633146114515760405162461bcd60e51b8152600401610aff906137bd565b60075460c89061ffff600160d81b820481169161147791600160a81b9091041686613808565b6114819190613808565b61ffff1611156114a35760405162461bcd60e51b8152600401610aff9061382a565b60075460c89061ffff600160e81b82048116916114c991600160b81b9091041685613808565b6114d39190613808565b61ffff1611156114f55760405162461bcd60e51b8152600401610aff90613853565b60085460075460c89161ffff9081169161151891600160c81b9091041684613808565b6115229190613808565b61ffff1611156115445760405162461bcd60e51b8152600401610aff90613853565b6040805161ffff8581168252848116602083015283168183015290517fc669367848545f5b2f930636ec43af4b3603ba349d14de28bf07ab7e5d48fa139181900360600190a16008805465ffffffff000019166201000061ffff9586160265ffff00000000191617640100000000938516939093029290921767ffff0000000000001916600160301b9190931602919091179055565b6005546001600160a01b031633146116045760405162461bcd60e51b8152600401610aff906137bd565b6001600160a01b038116300361164a5760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b6044820152606401610aff565b6116d861165f6005546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156116a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c791906138ea565b6001600160a01b0384169190612748565b50565b6005546001600160a01b031633146117055760405162461bcd60e51b8152600401610aff906137bd565b600780546001600160a01b0319166001600160a01b0383811691909117909155600c546040805163c45a015560e01b81529051919092169163c45a01559160048083019260209291908290030181865afa158015611767573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178b91906138b0565b6007546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af11580156117dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180091906138b0565b600d80546001600160a01b0319166001600160a01b03928316179055600c54604080516315ab88c960e31b81529051919092169163ad5c46489160048083019260209291908290030181865afa15801561185e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188291906138b0565b6007546001600160a01b0390811691161461191357600754600c5460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af11580156118ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191191906138cd565b505b600d546116d8906001600160a01b031660016125f7565b606060048054610a3890613783565b6005546001600160a01b031633146119635760405162461bcd60e51b8152600401610aff906137bd565b60085460075460c89161ffff6201000090910481169161198c91600160d81b9091041686613808565b6119969190613808565b61ffff1611156119b85760405162461bcd60e51b8152600401610aff9061382a565b60085460075460c89161ffff6401000000009091048116916119e391600160e81b9091041685613808565b6119ed9190613808565b61ffff161115611a0f5760405162461bcd60e51b8152600401610aff90613853565b60085460c89061ffff600160301b8204811691611a2d911684613808565b611a379190613808565b61ffff161115611a595760405162461bcd60e51b8152600401610aff90613853565b6040805161ffff8581168252848116602083015283168183015290517f64adb63860db5af335def35863f10c56ab25637c99d52beb2d1ff316c7e903949181900360600190a16007805463ffffffff60a81b1916600160a81b61ffff9586160261ffff60b81b191617600160b81b938516939093029290921761ffff60c81b1916600160c81b9190931602919091179055565b6005546001600160a01b03163314611b165760405162461bcd60e51b8152600401610aff906137bd565b61134282826125f7565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015611ba55760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610aff565b611bb28286868403611ef0565b506001949350505050565b600033610ac98185856120a6565b6005546001600160a01b03163314611bf55760405162461bcd60e51b8152600401610aff906137bd565b612710611c0160025490565b611c0b919061387b565b811015611c6f5760405162461bcd60e51b815260206004820152602c60248201527f6d61785472616e73616374696f6e416d6f756e74203e3d20746f74616c20737560448201526b070706c79202f2031303030360a41b6064820152608401610aff565b6040518181527fce2d2ed7bf9bb2097381750343540bf6b3977d70c462c5caf59a8193a7d6d5d39060200160405180910390a1600b55565b6005546001600160a01b03163314611cd15760405162461bcd60e51b8152600401610aff906137bd565b6001600160a01b0382166000908152600f602052604090205481151560ff909116151503611d2b5760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b6044820152606401610aff565b6001600160a01b0382166000818152600f6020908152604091829020805460ff191685151590811790915591519182527f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa99101610e67565b6005546001600160a01b03163314611dad5760405162461bcd60e51b8152600401610aff906137bd565b6000611dc16005546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114611e0b576040519150601f19603f3d011682016040523d82523d6000602084013e611e10565b606091505b50509050806116d85760405162461bcd60e51b815260206004820152601460248201527311985a5b1959081a5b881dda5d1a191c985dd85b60621b6044820152606401610aff565b6005546001600160a01b03163314611e825760405162461bcd60e51b8152600401610aff906137bd565b6001600160a01b038116611ee75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aff565b6116d8816126f6565b6001600160a01b038316611f525760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610aff565b6001600160a01b038216611fb35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610aff565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146120a057818110156120935760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610aff565b6120a08484848403611ef0565b50505050565b600754600160a01b900460ff161580156120c95750600654600160a01b900460ff165b80156120ee57506001600160a01b0383166000908152600f602052604090205460ff16155b801561211357506001600160a01b0382166000908152600f602052604090205460ff16155b156121875760065460405163090ec10b60e31b81526001600160a01b03858116600483015284811660248301526044820184905290911690634876085890606401600060405180830381600087803b15801561216e57600080fd5b505af1158015612182573d6000803e3d6000fd5b505050505b6001600160a01b0383166121ad5760405162461bcd60e51b8152600401610aff90613903565b6001600160a01b0382166121d35760405162461bcd60e51b8152600401610aff90613948565b306000908152602081905260409020546009546007549082101590600160a01b900460ff1615801561221d5750600d546001600160a01b0316600090815260208190526040812054115b80156122265750805b801561224a57506001600160a01b03841660009081526010602052604090205460ff165b156122575761225761279f565b6000806000600760149054906101000a900460ff1615801561229257506001600160a01b0388166000908152600f602052604090205460ff16155b80156122b757506001600160a01b0387166000908152600f602052604090205460ff16155b156124d7576001600160a01b03881660009081526010602052604090205460ff161561235d576007546103e8906122f990600160b81b900461ffff168861398b565b612303919061387b565b6007549093506103e89061232290600160e81b900461ffff168861398b565b61232c919061387b565b6008549092506103e89061234c90640100000000900461ffff168861398b565b612356919061387b565b905061245f565b6001600160a01b03871660009081526010602052604090205460ff16156123eb576007546103e89061239a90600160a81b900461ffff168861398b565b6123a4919061387b565b6007549093506103e8906123c390600160d81b900461ffff168861398b565b6123cd919061387b565b6008549092506103e89061234c9062010000900461ffff168861398b565b6007546103e89061240790600160c81b900461ffff168861398b565b612411919061387b565b6008549093506103e8906124299061ffff168861398b565b612433919061387b565b6008549092506103e89061245290600160301b900461ffff168861398b565b61245c919061387b565b90505b600061246b838561389d565b9050801561247e5761247e893083612e4a565b8115612491576124918961dead84612e4a565b818361249d868a6139a2565b6124a791906139a2565b6124b191906139a2565b9650836011546124c1919061389d565b6011556012546124d290849061389d565b601255505b6124e2888888612e4a565b600754600160a01b900460ff166125ed576001600160a01b0388166000908152600e602052604090205460ff1661256457600b5486106125645760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2065786365656473207472616e73666572206c696d69740000006044820152606401610aff565b6001600160a01b0387166000908152600e602052604090205460ff166125ed57600a546001600160a01b038816600090815260208190526040902054106125ed5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a2065786365656473206d61782077616c6c6574206c696d6974006044820152606401610aff565b5050505050505050565b6001600160a01b03821660009081526010602052604090205481151560ff90911615150361268d5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610aff565b6001600160a01b0382166000818152601060209081526040808320805486151560ff199182168117909255600e84529382902080549094168117909355519182527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9101610e67565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261279a908490612f9e565b505050565b6007805460ff60a01b1916600160a01b17905530600090815260208190526040812054905060006012546011546127d6919061389d565b90508015806127e457508082105b156127f0575050612e3b565b60006002601154612801919061387b565b90506000600c60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612858573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061287c91906138b0565b6007546001600160a01b03908116911614612902576007546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156128d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128fd91906138ea565b612904565b475b600854909150600090600160e01b900460ff1615612c0e5760006012548461292c919061389d565b9050801561293d5761293d81613070565b600c54604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015612987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ab91906138b0565b6007546001600160a01b03908116911614612a3b576007546040516370a0823160e01b815230600482015285916001600160a01b0316906370a0823190602401602060405180830381865afa158015612a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2c91906138ea565b612a3691906139a2565b612a45565b612a4584476139a2565b905060008260125483612a58919061398b565b612a62919061387b565b9050612a6e81836139a2565b93508015612c0657600c60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aed91906138b0565b6007546001600160a01b03918216911603612ba657600854604051600091600160401b90046001600160a01b03169083908381818185875af1925050503d8060008114612b56576040519150601f19603f3d011682016040523d82523d6000602084013e612b5b565b606091505b505090508015612ba0576040805160008152602081018490527f6f92bce3e91466137aa4d5474fe565c002872fb18ed6af4a856959be0a81277a910160405180910390a15b50612c06565b600854600754612bcb916001600160a01b0391821691600160401b9091041683612748565b6040805160008152602081018390527f6f92bce3e91466137aa4d5474fe565c002872fb18ed6af4a856959be0a81277a910160405180910390a15b505050612d96565b8215612c1d57612c1d83613070565b600c60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9491906138b0565b6007546001600160a01b03908116911614612d24576007546040516370a0823160e01b815230600482015283916001600160a01b0316906370a0823190602401602060405180830381865afa158015612cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d1591906138ea565b612d1f91906139a2565b612d2e565b612d2e82476139a2565b60125490915015612d9657612d593060088054906101000a90046001600160a01b03166012546120a6565b60125460408051918252600060208301527f6f92bce3e91466137aa4d5474fe565c002872fb18ed6af4a856959be0a81277a910160405180910390a15b600083118015612da65750600081115b15612def57612db5838261323f565b60408051848152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b600060128190556011556005546001600160a01b031615612e3557612e3530612e206005546001600160a01b031690565b306000908152602081905260409020546120a6565b50505050505b6007805460ff60a01b19169055565b6001600160a01b038316612e705760405162461bcd60e51b8152600401610aff90613903565b6001600160a01b038216612e965760405162461bcd60e51b8152600401610aff90613948565b6001600160a01b03831660009081526020819052604090205481811015612f0e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610aff565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612f4590849061389d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f9191815260200190565b60405180910390a36120a0565b6000612ff3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166134079092919063ffffffff16565b80519091501561279a578080602001905181019061301191906138cd565b61279a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610aff565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106130a5576130a56139b5565b6001600160a01b0392831660209182029290920101526007548251911690829060019081106130d6576130d66139b5565b6001600160a01b03928316602091820292909201810191909152600c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561312f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315391906138b0565b6001600160a01b03168160018151811061316f5761316f6139b5565b60200260200101516001600160a01b0316036131f457600c5460405163791ac94760e01b81526001600160a01b039091169063791ac947906131be908590600090869030904290600401613a0f565b600060405180830381600087803b1580156131d857600080fd5b505af11580156131ec573d6000803e3d6000fd5b505050505050565b600c54604051637274ca1b60e11b8152731ccfe8c40ef259566433716002e379dfffbf5a3e9163e4e99436916131be916001600160a01b031690869060009087904290600401613a4b565b600c60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613292573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b691906138b0565b6007546001600160a01b0391821691160361336557600c5460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613339573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061335e9190613a8a565b5050505050565b600c5460075460405162e8e33760e81b81523060048201526001600160a01b039182166024820152604481018590526064810184905260006084820181905260a482015261dead60c48201524260e482015291169063e8e3370090610104016060604051808303816000875af11580156133e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335e9190613a8a565b6060613416848460008561341e565b949350505050565b60608247101561347f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610aff565b6001600160a01b0385163b6134d65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aff565b600080866001600160a01b031685876040516134f29190613ab8565b60006040518083038185875af1925050503d806000811461352f576040519150601f19603f3d011682016040523d82523d6000602084013e613534565b606091505b509150915061354482828661354f565b979650505050505050565b6060831561355e575081610d88565b82511561356e5782518084602001fd5b8160405162461bcd60e51b8152600401610aff91906135ac565b60005b838110156135a357818101518382015260200161358b565b50506000910152565b60208152600082518060208401526135cb816040850160208701613588565b601f01601f19169190910160400192915050565b6001600160a01b03811681146116d857600080fd5b6000806040838503121561360757600080fd5b8235613612816135df565b946020939093013593505050565b803561ffff8116811461363257600080fd5b919050565b60008060006060848603121561364c57600080fd5b61365584613620565b925061366360208501613620565b915061367160408501613620565b90509250925092565b60006020828403121561368c57600080fd5b5035919050565b6000806000606084860312156136a857600080fd5b83356136b3816135df565b925060208401356136c3816135df565b929592945050506040919091013590565b80151581146116d857600080fd5b600080604083850312156136f557600080fd5b8235613700816135df565b91506020830135613710816136d4565b809150509250929050565b60006020828403121561372d57600080fd5b8135610d88816136d4565b60006020828403121561374a57600080fd5b8135610d88816135df565b6000806040838503121561376857600080fd5b8235613773816135df565b91506020830135613710816135df565b600181811c9082168061379757607f821691505b6020821081036137b757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b61ffff818116838216019080821115613823576138236137f2565b5092915050565b6020808252600f908201526e73656c6c20666565203c3d2032302560881b604082015260600190565b6020808252600e908201526d62757920666565203c3d2032302560901b604082015260600190565b60008261389857634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610acf57610acf6137f2565b6000602082840312156138c257600080fd5b8151610d88816135df565b6000602082840312156138df57600080fd5b8151610d88816136d4565b6000602082840312156138fc57600080fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8082028115828204841417610acf57610acf6137f2565b81810381811115610acf57610acf6137f2565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015613a045781516001600160a01b0316875295820195908201906001016139df565b509495945050505050565b85815284602082015260a060408201526000613a2e60a08301866139cb565b6001600160a01b0394909416606083015250608001529392505050565b60018060a01b038616815284602082015283604082015260a060608201526000613a7860a08301856139cb565b90508260808301529695505050505050565b600080600060608486031215613a9f57600080fd5b8351925060208401519150604084015190509250925092565b60008251613aca818460208701613588565b919091019291505056fea26469706673582212204a181bb7fbaa60949088fab62eec0b77e4117e8802cd677fcf68a1045c6bb91264736f6c63430008120033000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000052b7d2dcc80cd2e400000000000000000000000000000000000000000000000052b7d2dcc80cd2e400000000000000000000000000000000000000000000000052b7d2dcc80cd2e40000000000000000000000000000005c2d262058c9b81e2b858396e26c2c70f36bd5c10000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000005d73f4b0d6e65323af1955c5f7ceb9a8fa2f3d8e00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d446f6c6c617253717565657a650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034453510000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106103035760003560e01c80638947606911610190578063c8c8ebe4116100dc578063e71dc3f511610095578063f2fde38b1161006f578063f2fde38b146109bb578063f6374342146109db578063f8b45b05146109fd578063fc59d23d14610a1357600080fd5b8063e71dc3f514610946578063e9481eee14610969578063f11a24d31461099957600080fd5b8063c8c8ebe414610874578063cf188ad01461088a578063d8c6404b146108aa578063dd62ed3e146108cb578063df8408fe14610911578063e086e5ec1461093157600080fd5b80639a7a23d611610149578063a9059cbb11610123578063a9059cbb146107e3578063aa49802314610803578063adb873bd14610823578063b62496f51461084457600080fd5b80639a7a23d6146107815780639bb19a32146107a1578063a457c2d7146107c357600080fd5b806389476069146106cc5780638da5cb5b146106ec57806391c1004a1461070a578063921369131461072a57806395d89b411461074c578063995614a71461076157600080fd5b806357e62b981161024f57806376ae31d0116102085780637c75ad3a116101e25780637c75ad3a146106495780637cf84bd71461067157806385af30c51461069157806385c5b319146106b157600080fd5b806376ae31d0146105e757806377ec7449146106075780637bce5a041461062757600080fd5b806357e62b98146104fc57806365b8dbc01461051d57806370a082311461053d578063715018a61461057357806373b9e82c1461058857806375f0a874146105a857600080fd5b806323b872dd116102bc578063313ce56711610296578063313ce56714610460578063395093511461048c5780634707c551146104ac5780635342acb4146104cc57600080fd5b806323b872dd146104005780632ae2f121146104205780632d5fd55a1461044057600080fd5b806306fdde031461030f578063095ea7b31461033a57806310cb58321461036a57806318160ddd1461038c5780631c499ab0146103ab5780631c8a6adc146103cb57600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610a29565b60405161033191906135ac565b60405180910390f35b34801561034657600080fd5b5061035a6103553660046135f4565b610abb565b6040519015158152602001610331565b34801561037657600080fd5b5061038a610385366004613637565b610ad5565b005b34801561039857600080fd5b506002545b604051908152602001610331565b3480156103b757600080fd5b5061038a6103c636600461367a565b610c98565b3480156103d757600080fd5b506008546103ed90600160301b900461ffff1681565b60405161ffff9091168152602001610331565b34801561040c57600080fd5b5061035a61041b366004613693565b610d69565b34801561042c57600080fd5b5061038a61043b3660046136e2565b610d8f565b34801561044c57600080fd5b5061038a61045b36600461371b565b610e73565b34801561046c57600080fd5b50600654600160a81b900460ff1660405160ff9091168152602001610331565b34801561049857600080fd5b5061035a6104a73660046135f4565b610ebb565b3480156104b857600080fd5b5061038a6104c73660046136e2565b610efa565b3480156104d857600080fd5b5061035a6104e7366004613738565b600f6020526000908152604090205460ff1681565b34801561050857600080fd5b5060085461035a90600160e01b900460ff1681565b34801561052957600080fd5b5061038a610538366004613738565b611037565b34801561054957600080fd5b5061039d610558366004613738565b6001600160a01b031660009081526020819052604090205490565b34801561057f57600080fd5b5061038a611346565b34801561059457600080fd5b5061038a6105a336600461367a565b61137c565b3480156105b457600080fd5b506008546105cf90600160401b90046001600160a01b031681565b6040516001600160a01b039091168152602001610331565b3480156105f357600080fd5b5061038a610602366004613637565b611427565b34801561061357600080fd5b506006546105cf906001600160a01b031681565b34801561063357600080fd5b506007546103ed90600160e81b900461ffff1681565b34801561065557600080fd5b506105cf731ccfe8c40ef259566433716002e379dfffbf5a3e81565b34801561067d57600080fd5b506007546105cf906001600160a01b031681565b34801561069d57600080fd5b50600d546105cf906001600160a01b031681565b3480156106bd57600080fd5b506008546103ed9061ffff1681565b3480156106d857600080fd5b5061038a6106e7366004613738565b6115da565b3480156106f857600080fd5b506005546001600160a01b03166105cf565b34801561071657600080fd5b5061038a610725366004613738565b6116db565b34801561073657600080fd5b506007546103ed90600160d81b900461ffff1681565b34801561075857600080fd5b5061032461192a565b34801561076d57600080fd5b5061038a61077c366004613637565b611939565b34801561078d57600080fd5b5061038a61079c3660046136e2565b611aec565b3480156107ad57600080fd5b506007546103ed90600160c81b900461ffff1681565b3480156107cf57600080fd5b5061035a6107de3660046135f4565b611b20565b3480156107ef57600080fd5b5061035a6107fe3660046135f4565b611bbd565b34801561080f57600080fd5b5061038a61081e36600461367a565b611bcb565b34801561082f57600080fd5b506008546103ed9062010000900461ffff1681565b34801561085057600080fd5b5061035a61085f366004613738565b60106020526000908152604090205460ff1681565b34801561088057600080fd5b5061039d600b5481565b34801561089657600080fd5b50600c546105cf906001600160a01b031681565b3480156108b657600080fd5b5060065461035a90600160a01b900460ff1681565b3480156108d757600080fd5b5061039d6108e6366004613755565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561091d57600080fd5b5061038a61092c3660046136e2565b611ca7565b34801561093d57600080fd5b5061038a611d83565b34801561095257600080fd5b506008546103ed90640100000000900461ffff1681565b34801561097557600080fd5b5061035a610984366004613738565b600e6020526000908152604090205460ff1681565b3480156109a557600080fd5b506007546103ed90600160b81b900461ffff1681565b3480156109c757600080fd5b5061038a6109d6366004613738565b611e58565b3480156109e757600080fd5b506007546103ed90600160a81b900461ffff1681565b348015610a0957600080fd5b5061039d600a5481565b348015610a1f57600080fd5b5061039d60095481565b606060038054610a3890613783565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6490613783565b8015610ab15780601f10610a8657610100808354040283529160200191610ab1565b820191906000526020600020905b815481529060010190602001808311610a9457829003601f168201915b5050505050905090565b600033610ac9818585611ef0565b60019150505b92915050565b6005546001600160a01b03163314610b085760405162461bcd60e51b8152600401610aff906137bd565b60405180910390fd5b60085460075460c89161ffff62010000909104811691610b3191600160a81b9091041686613808565b610b3b9190613808565b61ffff161115610b5d5760405162461bcd60e51b8152600401610aff9061382a565b60085460075460c89161ffff640100000000909104811691610b8891600160b81b9091041685613808565b610b929190613808565b61ffff161115610bb45760405162461bcd60e51b8152600401610aff90613853565b60085460075460c89161ffff600160301b909104811691610bde91600160c81b9091041684613808565b610be89190613808565b61ffff161115610c0a5760405162461bcd60e51b8152600401610aff90613853565b6040805161ffff8581168252848116602083015283168183015290517fdbfe7b28b40249743de161180a749238bf4c3d3132c7a40ca1d0d5a0529ddb029181900360600190a16007805463ffffffff60d81b1916600160d81b61ffff9586160261ffff60e81b191617600160e81b93851693909302929092179091556008805461ffff191691909216179055565b6005546001600160a01b03163314610cc25760405162461bcd60e51b8152600401610aff906137bd565b612710610cce60025490565b610cd8919061387b565b811015610d315760405162461bcd60e51b815260206004820152602160248201527f6d617857616c6c6574203e3d20746f74616c20737570706c79202f20313030306044820152600360fc1b6064820152608401610aff565b6040518181527fdd4ef051c4c49233ec73abfc2ee1514725d2a818fbcde46ee5d34a49034922f99060200160405180910390a1600a55565b600033610d77858285612014565b610d828585856120a6565b60019150505b9392505050565b6005546001600160a01b03163314610db95760405162461bcd60e51b8152600401610aff906137bd565b6001600160a01b0382166000908152600e602052604090205481151560ff909116151503610e135760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b6044820152606401610aff565b6001600160a01b0382166000818152600e6020908152604091829020805460ff191685151590811790915591519182527f82170bbd72c16b30c410014b7382121a699ed119a182e48a0b6cadcc89104ac991015b60405180910390a25050565b6005546001600160a01b03163314610e9d5760405162461bcd60e51b8152600401610aff906137bd565b60068054911515600160a01b0260ff60a01b19909216919091179055565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610ac99082908690610ef590879061389d565b611ef0565b6005546001600160a01b03163314610f245760405162461bcd60e51b8152600401610aff906137bd565b6001600160a01b038216610f7a5760405162461bcd60e51b815260206004820152601b60248201527f6d61726b6574696e672077616c6c65742063616e2774206265203000000000006044820152606401610aff565b816001600160a01b03167f5ddebadd13549f5ff5b3c95499e6a1781606c1ed34a3d856d1f20694feade7bc82604051610fb7911515815260200190565b60405180910390a26008805468010000000000000000600160e81b031916600160401b6001600160a01b039490941693840260ff60e01b191617600160e01b921515929092029190911790556000908152600f60209081526040808320805460ff199081166001908117909255600e909352922080549091169091179055565b6005546001600160a01b031633146110615760405162461bcd60e51b8152600401610aff906137bd565b600c546001600160a01b03908116908216036110cb5760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610aff565b6040516001600160a01b038216907f0c36f1f3a0f38cd9563b52fb110cc5b0fa22c509defc16728a6a42f1bddad22990600090a2600c80546001600160a01b0319166001600160a01b03831690811790915561112b903090600019611ef0565b600c60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561117e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a291906138b0565b6007546001600160a01b0390811691161461123357600754600c5460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af115801561120d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123191906138cd565b505b600c546040805163c45a015560e01b815290516000926001600160a01b03169163c45a01559160048083019260209291908290030181865afa15801561127d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a191906138b0565b6007546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af11580156112f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131691906138b0565b600d80546001600160a01b0319166001600160a01b0383169081179091559091506113429060016125f7565b5050565b6005546001600160a01b031633146113705760405162461bcd60e51b8152600401610aff906137bd565b61137a60006126f6565b565b6005546001600160a01b031633146113a65760405162461bcd60e51b8152600401610aff906137bd565b600081116113ef5760405162461bcd60e51b815260206004820152601660248201527506d696e416d6f756e74546f54616b65466565203e20360541b6044820152606401610aff565b6040518181527f37e5d1260bc61b4faf5a9f8f5415209eb753f52c24812cdb9d7b97608225fbcf9060200160405180910390a1600955565b6005546001600160a01b031633146114515760405162461bcd60e51b8152600401610aff906137bd565b60075460c89061ffff600160d81b820481169161147791600160a81b9091041686613808565b6114819190613808565b61ffff1611156114a35760405162461bcd60e51b8152600401610aff9061382a565b60075460c89061ffff600160e81b82048116916114c991600160b81b9091041685613808565b6114d39190613808565b61ffff1611156114f55760405162461bcd60e51b8152600401610aff90613853565b60085460075460c89161ffff9081169161151891600160c81b9091041684613808565b6115229190613808565b61ffff1611156115445760405162461bcd60e51b8152600401610aff90613853565b6040805161ffff8581168252848116602083015283168183015290517fc669367848545f5b2f930636ec43af4b3603ba349d14de28bf07ab7e5d48fa139181900360600190a16008805465ffffffff000019166201000061ffff9586160265ffff00000000191617640100000000938516939093029290921767ffff0000000000001916600160301b9190931602919091179055565b6005546001600160a01b031633146116045760405162461bcd60e51b8152600401610aff906137bd565b6001600160a01b038116300361164a5760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b6044820152606401610aff565b6116d861165f6005546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156116a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c791906138ea565b6001600160a01b0384169190612748565b50565b6005546001600160a01b031633146117055760405162461bcd60e51b8152600401610aff906137bd565b600780546001600160a01b0319166001600160a01b0383811691909117909155600c546040805163c45a015560e01b81529051919092169163c45a01559160048083019260209291908290030181865afa158015611767573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178b91906138b0565b6007546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af11580156117dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180091906138b0565b600d80546001600160a01b0319166001600160a01b03928316179055600c54604080516315ab88c960e31b81529051919092169163ad5c46489160048083019260209291908290030181865afa15801561185e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188291906138b0565b6007546001600160a01b0390811691161461191357600754600c5460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af11580156118ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191191906138cd565b505b600d546116d8906001600160a01b031660016125f7565b606060048054610a3890613783565b6005546001600160a01b031633146119635760405162461bcd60e51b8152600401610aff906137bd565b60085460075460c89161ffff6201000090910481169161198c91600160d81b9091041686613808565b6119969190613808565b61ffff1611156119b85760405162461bcd60e51b8152600401610aff9061382a565b60085460075460c89161ffff6401000000009091048116916119e391600160e81b9091041685613808565b6119ed9190613808565b61ffff161115611a0f5760405162461bcd60e51b8152600401610aff90613853565b60085460c89061ffff600160301b8204811691611a2d911684613808565b611a379190613808565b61ffff161115611a595760405162461bcd60e51b8152600401610aff90613853565b6040805161ffff8581168252848116602083015283168183015290517f64adb63860db5af335def35863f10c56ab25637c99d52beb2d1ff316c7e903949181900360600190a16007805463ffffffff60a81b1916600160a81b61ffff9586160261ffff60b81b191617600160b81b938516939093029290921761ffff60c81b1916600160c81b9190931602919091179055565b6005546001600160a01b03163314611b165760405162461bcd60e51b8152600401610aff906137bd565b61134282826125f7565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015611ba55760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610aff565b611bb28286868403611ef0565b506001949350505050565b600033610ac98185856120a6565b6005546001600160a01b03163314611bf55760405162461bcd60e51b8152600401610aff906137bd565b612710611c0160025490565b611c0b919061387b565b811015611c6f5760405162461bcd60e51b815260206004820152602c60248201527f6d61785472616e73616374696f6e416d6f756e74203e3d20746f74616c20737560448201526b070706c79202f2031303030360a41b6064820152608401610aff565b6040518181527fce2d2ed7bf9bb2097381750343540bf6b3977d70c462c5caf59a8193a7d6d5d39060200160405180910390a1600b55565b6005546001600160a01b03163314611cd15760405162461bcd60e51b8152600401610aff906137bd565b6001600160a01b0382166000908152600f602052604090205481151560ff909116151503611d2b5760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b6044820152606401610aff565b6001600160a01b0382166000818152600f6020908152604091829020805460ff191685151590811790915591519182527f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa99101610e67565b6005546001600160a01b03163314611dad5760405162461bcd60e51b8152600401610aff906137bd565b6000611dc16005546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114611e0b576040519150601f19603f3d011682016040523d82523d6000602084013e611e10565b606091505b50509050806116d85760405162461bcd60e51b815260206004820152601460248201527311985a5b1959081a5b881dda5d1a191c985dd85b60621b6044820152606401610aff565b6005546001600160a01b03163314611e825760405162461bcd60e51b8152600401610aff906137bd565b6001600160a01b038116611ee75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aff565b6116d8816126f6565b6001600160a01b038316611f525760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610aff565b6001600160a01b038216611fb35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610aff565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146120a057818110156120935760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610aff565b6120a08484848403611ef0565b50505050565b600754600160a01b900460ff161580156120c95750600654600160a01b900460ff165b80156120ee57506001600160a01b0383166000908152600f602052604090205460ff16155b801561211357506001600160a01b0382166000908152600f602052604090205460ff16155b156121875760065460405163090ec10b60e31b81526001600160a01b03858116600483015284811660248301526044820184905290911690634876085890606401600060405180830381600087803b15801561216e57600080fd5b505af1158015612182573d6000803e3d6000fd5b505050505b6001600160a01b0383166121ad5760405162461bcd60e51b8152600401610aff90613903565b6001600160a01b0382166121d35760405162461bcd60e51b8152600401610aff90613948565b306000908152602081905260409020546009546007549082101590600160a01b900460ff1615801561221d5750600d546001600160a01b0316600090815260208190526040812054115b80156122265750805b801561224a57506001600160a01b03841660009081526010602052604090205460ff165b156122575761225761279f565b6000806000600760149054906101000a900460ff1615801561229257506001600160a01b0388166000908152600f602052604090205460ff16155b80156122b757506001600160a01b0387166000908152600f602052604090205460ff16155b156124d7576001600160a01b03881660009081526010602052604090205460ff161561235d576007546103e8906122f990600160b81b900461ffff168861398b565b612303919061387b565b6007549093506103e89061232290600160e81b900461ffff168861398b565b61232c919061387b565b6008549092506103e89061234c90640100000000900461ffff168861398b565b612356919061387b565b905061245f565b6001600160a01b03871660009081526010602052604090205460ff16156123eb576007546103e89061239a90600160a81b900461ffff168861398b565b6123a4919061387b565b6007549093506103e8906123c390600160d81b900461ffff168861398b565b6123cd919061387b565b6008549092506103e89061234c9062010000900461ffff168861398b565b6007546103e89061240790600160c81b900461ffff168861398b565b612411919061387b565b6008549093506103e8906124299061ffff168861398b565b612433919061387b565b6008549092506103e89061245290600160301b900461ffff168861398b565b61245c919061387b565b90505b600061246b838561389d565b9050801561247e5761247e893083612e4a565b8115612491576124918961dead84612e4a565b818361249d868a6139a2565b6124a791906139a2565b6124b191906139a2565b9650836011546124c1919061389d565b6011556012546124d290849061389d565b601255505b6124e2888888612e4a565b600754600160a01b900460ff166125ed576001600160a01b0388166000908152600e602052604090205460ff1661256457600b5486106125645760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2065786365656473207472616e73666572206c696d69740000006044820152606401610aff565b6001600160a01b0387166000908152600e602052604090205460ff166125ed57600a546001600160a01b038816600090815260208190526040902054106125ed5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a2065786365656473206d61782077616c6c6574206c696d6974006044820152606401610aff565b5050505050505050565b6001600160a01b03821660009081526010602052604090205481151560ff90911615150361268d5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610aff565b6001600160a01b0382166000818152601060209081526040808320805486151560ff199182168117909255600e84529382902080549094168117909355519182527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9101610e67565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261279a908490612f9e565b505050565b6007805460ff60a01b1916600160a01b17905530600090815260208190526040812054905060006012546011546127d6919061389d565b90508015806127e457508082105b156127f0575050612e3b565b60006002601154612801919061387b565b90506000600c60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612858573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061287c91906138b0565b6007546001600160a01b03908116911614612902576007546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156128d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128fd91906138ea565b612904565b475b600854909150600090600160e01b900460ff1615612c0e5760006012548461292c919061389d565b9050801561293d5761293d81613070565b600c54604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015612987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ab91906138b0565b6007546001600160a01b03908116911614612a3b576007546040516370a0823160e01b815230600482015285916001600160a01b0316906370a0823190602401602060405180830381865afa158015612a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2c91906138ea565b612a3691906139a2565b612a45565b612a4584476139a2565b905060008260125483612a58919061398b565b612a62919061387b565b9050612a6e81836139a2565b93508015612c0657600c60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aed91906138b0565b6007546001600160a01b03918216911603612ba657600854604051600091600160401b90046001600160a01b03169083908381818185875af1925050503d8060008114612b56576040519150601f19603f3d011682016040523d82523d6000602084013e612b5b565b606091505b505090508015612ba0576040805160008152602081018490527f6f92bce3e91466137aa4d5474fe565c002872fb18ed6af4a856959be0a81277a910160405180910390a15b50612c06565b600854600754612bcb916001600160a01b0391821691600160401b9091041683612748565b6040805160008152602081018390527f6f92bce3e91466137aa4d5474fe565c002872fb18ed6af4a856959be0a81277a910160405180910390a15b505050612d96565b8215612c1d57612c1d83613070565b600c60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9491906138b0565b6007546001600160a01b03908116911614612d24576007546040516370a0823160e01b815230600482015283916001600160a01b0316906370a0823190602401602060405180830381865afa158015612cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d1591906138ea565b612d1f91906139a2565b612d2e565b612d2e82476139a2565b60125490915015612d9657612d593060088054906101000a90046001600160a01b03166012546120a6565b60125460408051918252600060208301527f6f92bce3e91466137aa4d5474fe565c002872fb18ed6af4a856959be0a81277a910160405180910390a15b600083118015612da65750600081115b15612def57612db5838261323f565b60408051848152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b600060128190556011556005546001600160a01b031615612e3557612e3530612e206005546001600160a01b031690565b306000908152602081905260409020546120a6565b50505050505b6007805460ff60a01b19169055565b6001600160a01b038316612e705760405162461bcd60e51b8152600401610aff90613903565b6001600160a01b038216612e965760405162461bcd60e51b8152600401610aff90613948565b6001600160a01b03831660009081526020819052604090205481811015612f0e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610aff565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612f4590849061389d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f9191815260200190565b60405180910390a36120a0565b6000612ff3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166134079092919063ffffffff16565b80519091501561279a578080602001905181019061301191906138cd565b61279a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610aff565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106130a5576130a56139b5565b6001600160a01b0392831660209182029290920101526007548251911690829060019081106130d6576130d66139b5565b6001600160a01b03928316602091820292909201810191909152600c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561312f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315391906138b0565b6001600160a01b03168160018151811061316f5761316f6139b5565b60200260200101516001600160a01b0316036131f457600c5460405163791ac94760e01b81526001600160a01b039091169063791ac947906131be908590600090869030904290600401613a0f565b600060405180830381600087803b1580156131d857600080fd5b505af11580156131ec573d6000803e3d6000fd5b505050505050565b600c54604051637274ca1b60e11b8152731ccfe8c40ef259566433716002e379dfffbf5a3e9163e4e99436916131be916001600160a01b031690869060009087904290600401613a4b565b600c60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613292573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b691906138b0565b6007546001600160a01b0391821691160361336557600c5460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613339573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061335e9190613a8a565b5050505050565b600c5460075460405162e8e33760e81b81523060048201526001600160a01b039182166024820152604481018590526064810184905260006084820181905260a482015261dead60c48201524260e482015291169063e8e3370090610104016060604051808303816000875af11580156133e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335e9190613a8a565b6060613416848460008561341e565b949350505050565b60608247101561347f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610aff565b6001600160a01b0385163b6134d65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aff565b600080866001600160a01b031685876040516134f29190613ab8565b60006040518083038185875af1925050503d806000811461352f576040519150601f19603f3d011682016040523d82523d6000602084013e613534565b606091505b509150915061354482828661354f565b979650505050505050565b6060831561355e575081610d88565b82511561356e5782518084602001fd5b8160405162461bcd60e51b8152600401610aff91906135ac565b60005b838110156135a357818101518382015260200161358b565b50506000910152565b60208152600082518060208401526135cb816040850160208701613588565b601f01601f19169190910160400192915050565b6001600160a01b03811681146116d857600080fd5b6000806040838503121561360757600080fd5b8235613612816135df565b946020939093013593505050565b803561ffff8116811461363257600080fd5b919050565b60008060006060848603121561364c57600080fd5b61365584613620565b925061366360208501613620565b915061367160408501613620565b90509250925092565b60006020828403121561368c57600080fd5b5035919050565b6000806000606084860312156136a857600080fd5b83356136b3816135df565b925060208401356136c3816135df565b929592945050506040919091013590565b80151581146116d857600080fd5b600080604083850312156136f557600080fd5b8235613700816135df565b91506020830135613710816136d4565b809150509250929050565b60006020828403121561372d57600080fd5b8135610d88816136d4565b60006020828403121561374a57600080fd5b8135610d88816135df565b6000806040838503121561376857600080fd5b8235613773816135df565b91506020830135613710816135df565b600181811c9082168061379757607f821691505b6020821081036137b757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b61ffff818116838216019080821115613823576138236137f2565b5092915050565b6020808252600f908201526e73656c6c20666565203c3d2032302560881b604082015260600190565b6020808252600e908201526d62757920666565203c3d2032302560901b604082015260600190565b60008261389857634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610acf57610acf6137f2565b6000602082840312156138c257600080fd5b8151610d88816135df565b6000602082840312156138df57600080fd5b8151610d88816136d4565b6000602082840312156138fc57600080fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8082028115828204841417610acf57610acf6137f2565b81810381811115610acf57610acf6137f2565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015613a045781516001600160a01b0316875295820195908201906001016139df565b509495945050505050565b85815284602082015260a060408201526000613a2e60a08301866139cb565b6001600160a01b0394909416606083015250608001529392505050565b60018060a01b038616815284602082015283604082015260a060608201526000613a7860a08301856139cb565b90508260808301529695505050505050565b600080600060608486031215613a9f57600080fd5b8351925060208401519150604084015190509250925092565b60008251613aca818460208701613588565b919091019291505056fea26469706673582212204a181bb7fbaa60949088fab62eec0b77e4117e8802cd677fcf68a1045c6bb91264736f6c63430008120033

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

000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000052b7d2dcc80cd2e400000000000000000000000000000000000000000000000052b7d2dcc80cd2e400000000000000000000000000000000000000000000000052b7d2dcc80cd2e40000000000000000000000000000005c2d262058c9b81e2b858396e26c2c70f36bd5c10000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000005d73f4b0d6e65323af1955c5f7ceb9a8fa2f3d8e00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d446f6c6c617253717565657a650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034453510000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): DollarSqueeze
Arg [1] : _symbol (string): DSQ
Arg [2] : __decimals (uint8): 18
Arg [3] : _totalSupply (uint256): 100000000000000000000000000
Arg [4] : _maxWallet (uint256): 100000000000000000000000000
Arg [5] : _maxTransactionAmount (uint256): 100000000000000000000000000
Arg [6] : _accounts (address[4]): 0x5c2d262058C9b81E2b858396e26C2c70f36bD5C1,0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,0x5d73f4B0D6e65323af1955C5f7CEB9A8Fa2F3d8E
Arg [7] : _isMarketingFeeBaseToken (bool): True
Arg [8] : _fees (uint16[9]): 80,10,0,50,50,0,20,20,0

-----Encoded View---------------
24 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000280
Arg [1] : 00000000000000000000000000000000000000000000000000000000000002c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000
Arg [4] : 00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000
Arg [5] : 00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000
Arg [6] : 0000000000000000000000005c2d262058c9b81e2b858396e26c2c70f36bd5c1
Arg [7] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [8] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [9] : 0000000000000000000000005d73f4b0d6e65323af1955c5f7ceb9a8fa2f3d8e
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000050
Arg [12] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [16] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [20] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [21] : 446f6c6c617253717565657a6500000000000000000000000000000000000000
Arg [22] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [23] : 4453510000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

39735:20823:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13802:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16153:201;;;;;;;;;;-1:-1:-1;16153:201:0;;;;;:::i;:::-;;:::i;:::-;;;1291:14:1;;1284:22;1266:41;;1254:2;1239:18;16153:201:0;1126:187:1;49008:798:0;;;;;;;;;;-1:-1:-1;49008:798:0;;;;;:::i;:::-;;:::i;:::-;;14922:108;;;;;;;;;;-1:-1:-1;15010:12:0;;14922:108;;;1961:25:1;;;1949:2;1934:18;14922:108:0;1815:177:1;47394:238:0;;;;;;;;;;-1:-1:-1;47394:238:0;;;;;:::i;:::-;;:::i;40527:29::-;;;;;;;;;;-1:-1:-1;40527:29:0;;;;-1:-1:-1;;;40527:29:0;;;;;;;;;2356:6:1;2344:19;;;2326:38;;2314:2;2299:18;40527:29:0;2182:188:1;16934:295:0;;;;;;;;;;-1:-1:-1;16934:295:0;;;;;:::i;:::-;;:::i;52219:323::-;;;;;;;;;;-1:-1:-1;52219:323:0;;;;;:::i;:::-;;:::i;46036:103::-;;;;;;;;;;-1:-1:-1;46036:103:0;;;;;:::i;:::-;;:::i;45936:92::-;;;;;;;;;;-1:-1:-1;46011:9:0;;-1:-1:-1;;;46011:9:0;;;;45936:92;;3764:4:1;3752:17;;;3734:36;;3722:2;3707:18;45936:92:0;3592:184:1;17638:240:0;;;;;;;;;;-1:-1:-1;17638:240:0;;;;;:::i;:::-;;:::i;50550:531::-;;;;;;;;;;-1:-1:-1;50550:531:0;;;;;:::i;:::-;;:::i;40911:49::-;;;;;;;;;;-1:-1:-1;40911:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;40604:35;;;;;;;;;;-1:-1:-1;40604:35:0;;;;-1:-1:-1;;;40604:35:0;;;;;;46630:756;;;;;;;;;;-1:-1:-1;46630:756:0;;;;;:::i;:::-;;:::i;15093:127::-;;;;;;;;;;-1:-1:-1;15093:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;15194:18:0;15167:7;15194:18;;;;;;;;;;;;15093:127;25660:103;;;;;;;;;;;;;:::i;51089:299::-;;;;;;;;;;-1:-1:-1;51089:299:0;;;;;:::i;:::-;;:::i;40567:30::-;;;;;;;;;;-1:-1:-1;40567:30:0;;;;-1:-1:-1;;;40567:30:0;;-1:-1:-1;;;;;40567:30:0;;;;;;-1:-1:-1;;;;;4197:32:1;;;4179:51;;4167:2;4152:18;40567:30:0;4033:203:1;49814:728:0;;;;;;;;;;-1:-1:-1;49814:728:0;;;;;:::i;:::-;;:::i;39982:25::-;;;;;;;;;;-1:-1:-1;39982:25:0;;;;-1:-1:-1;;;;;39982:25:0;;;40385:29;;;;;;;;;;-1:-1:-1;40385:29:0;;;;-1:-1:-1;;;40385:29:0;;;;;;39855:120;;;;;;;;;;;;39932:42;39855:120;;40158:31;;;;;;;;;;-1:-1:-1;40158:31:0;;;;-1:-1:-1;;;;;40158:31:0;;;40806:23;;;;;;;;;;-1:-1:-1;40806:23:0;;;;-1:-1:-1;;;;;40806:23:0;;;40421:34;;;;;;;;;;-1:-1:-1;40421:34:0;;;;;;;;60313:207;;;;;;;;;;-1:-1:-1;60313:207:0;;;;;:::i;:::-;;:::i;25009:87::-;;;;;;;;;;-1:-1:-1;25082:6:0;;-1:-1:-1;;;;;25082:6:0;25009:87;;46147:475;;;;;;;;;;-1:-1:-1;46147:475:0;;;;;:::i;:::-;;:::i;40348:30::-;;;;;;;;;;-1:-1:-1;40348:30:0;;;;-1:-1:-1;;;40348:30:0;;;;;;14021:104;;;;;;;;;;;;;:::i;48204:796::-;;;;;;;;;;-1:-1:-1;48204:796:0;;;;;:::i;:::-;;:::i;51396:163::-;;;;;;;;;;-1:-1:-1;51396:163:0;;;;;:::i;:::-;;:::i;40305:34::-;;;;;;;;;;-1:-1:-1;40305:34:0;;;;-1:-1:-1;;;40305:34:0;;;;;;18381:438;;;;;;;;;;-1:-1:-1;18381:438:0;;;;;:::i;:::-;;:::i;15426:193::-;;;;;;;;;;-1:-1:-1;15426:193:0;;;;;:::i;:::-;;:::i;47640:349::-;;;;;;;;;;-1:-1:-1;47640:349:0;;;;;:::i;:::-;;:::i;40464:25::-;;;;;;;;;;-1:-1:-1;40464:25:0;;;;;;;;;;;40967:57;;;;;;;;;;-1:-1:-1;40967:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;40719:35;;;;;;;;;;;;;;;;40763:36;;;;;;;;;;-1:-1:-1;40763:36:0;;;;-1:-1:-1;;;;;40763:36:0;;;40014:26;;;;;;;;;;-1:-1:-1;40014:26:0;;;;-1:-1:-1;;;40014:26:0;;;;;;15682:151;;;;;;;;;;-1:-1:-1;15682:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;15798:18:0;;;15771:7;15798:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15682:151;51977:234;;;;;;;;;;-1:-1:-1;51977:234:0;;;;;:::i;:::-;;:::i;60123:184::-;;;;;;;;;;;;;:::i;40496:24::-;;;;;;;;;;-1:-1:-1;40496:24:0;;;;;;;;;;;40838:66;;;;;;;;;;-1:-1:-1;40838:66:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;40269:29;;;;;;;;;;-1:-1:-1;40269:29:0;;;;-1:-1:-1;;;40269:29:0;;;;;;25918:201;;;;;;;;;;-1:-1:-1;25918:201:0;;;;;:::i;:::-;;:::i;40232:30::-;;;;;;;;;;-1:-1:-1;40232:30:0;;;;-1:-1:-1;;;40232:30:0;;;;;;40688:24;;;;;;;;;;;;;;;;40648:33;;;;;;;;;;;;;;;;13802:100;13856:13;13889:5;13882:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13802:100;:::o;16153:201::-;16236:4;11690:10;16292:32;11690:10;16308:7;16317:6;16292:8;:32::i;:::-;16342:4;16335:11;;;16153:201;;;;;:::o;49008:798::-;25082:6;;-1:-1:-1;;;;;25082:6:0;11690:10;25229:23;25221:68;;;;-1:-1:-1;;;25221:68:0;;;;;;;:::i;:::-;;;;;;;;;49242:11:::1;::::0;49223:16:::1;::::0;49257:3:::1;::::0;49242:11:::1;::::0;;;::::1;::::0;::::1;::::0;49203:36:::1;::::0;-1:-1:-1;;;49223:16:0;;::::1;;49203:17:::0;:36:::1;:::i;:::-;:50;;;;:::i;:::-;:57;;;;49181:122;;;;-1:-1:-1::0;;;49181:122:0::1;;;;;;;:::i;:::-;49359:10;::::0;49341:15:::1;::::0;49373:3:::1;::::0;49359:10:::1;::::0;;;::::1;::::0;::::1;::::0;49322:34:::1;::::0;-1:-1:-1;;;49341:15:0;;::::1;;49322:16:::0;:34:::1;:::i;:::-;:47;;;;:::i;:::-;:54;;;;49314:81;;;;-1:-1:-1::0;;;49314:81:0::1;;;;;;;:::i;:::-;49461:15;::::0;49438:20:::1;::::0;49480:3:::1;::::0;49461:15:::1;-1:-1:-1::0;;;49461:15:0;;::::1;::::0;::::1;::::0;49414:44:::1;::::0;-1:-1:-1;;;49438:20:0;;::::1;;49414:21:::0;:44:::1;:::i;:::-;:62;;;;:::i;:::-;:69;;;;49406:96;;;;-1:-1:-1::0;;;49406:96:0::1;;;;;;;:::i;:::-;49518:128;::::0;;7046:6:1;7079:15;;;7061:34;;7131:15;;;7126:2;7111:18;;7104:43;7183:15;;7163:18;;;7156:43;49518:128:0;;::::1;::::0;;;;7024:2:1;49518:128:0;;::::1;49657:16;:36:::0;;-1:-1:-1;;;;49704:34:0;-1:-1:-1;;;49657:36:0::1;::::0;;::::1;;-1:-1:-1::0;;;;49704:34:0;;-1:-1:-1;;;49704:34:0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;49754:20:::1;:44:::0;;-1:-1:-1;;49754:44:0::1;::::0;;;::::1;;::::0;;49008:798::o;47394:238::-;25082:6;;-1:-1:-1;;;;;25082:6:0;11690:10;25229:23;25221:68;;;;-1:-1:-1;;;25221:68:0;;;;;;;:::i;:::-;47505:5:::1;47489:13;15010:12:::0;;;14922:108;47489:13:::1;:21;;;;:::i;:::-;47477:10;:33;;47469:79;;;::::0;-1:-1:-1;;;47469:79:0;;7634:2:1;47469:79:0::1;::::0;::::1;7616:21:1::0;7673:2;7653:18;;;7646:30;7712:34;7692:18;;;7685:62;-1:-1:-1;;;7763:18:1;;;7756:31;7804:19;;47469:79:0::1;7432:397:1::0;47469:79:0::1;47564:27;::::0;1961:25:1;;;47564:27:0::1;::::0;1949:2:1;1934:18;47564:27:0::1;;;;;;;47602:9;:22:::0;47394:238::o;16934:295::-;17065:4;11690:10;17123:38;17139:4;11690:10;17154:6;17123:15;:38::i;:::-;17172:27;17182:4;17188:2;17192:6;17172:9;:27::i;:::-;17217:4;17210:11;;;16934:295;;;;;;:::o;52219:323::-;25082:6;;-1:-1:-1;;;;;25082:6:0;11690:10;25229:23;25221:68;;;;-1:-1:-1;;;25221:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;52349:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:49;::::1;;:43;::::0;;::::1;:49;;::::0;52341:69:::1;;;::::0;-1:-1:-1;;;52341:69:0;;8036:2:1;52341:69:0::1;::::0;::::1;8018:21:1::0;8075:1;8055:18;;;8048:29;-1:-1:-1;;;8093:18:1;;;8086:37;8140:18;;52341:69:0::1;7834:330:1::0;52341:69:0::1;-1:-1:-1::0;;;;;52421:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:50;;-1:-1:-1;;52421:50:0::1;::::0;::::1;;::::0;;::::1;::::0;;;52487:47;;1266:41:1;;;52487:47:0::1;::::0;1239:18:1;52487:47:0::1;;;;;;;;52219:323:::0;;:::o;46036:103::-;25082:6;;-1:-1:-1;;;;;25082:6:0;11690:10;25229:23;25221:68;;;;-1:-1:-1;;;25221:68:0;;;;;;;:::i;:::-;46106:14:::1;:25:::0;;;::::1;;-1:-1:-1::0;;;46106:25:0::1;-1:-1:-1::0;;;;46106:25:0;;::::1;::::0;;;::::1;::::0;;46036:103::o;17638:240::-;11690:10;17726:4;17807:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;17807:27:0;;;;;;;;;;17726:4;;11690:10;17782:66;;11690:10;;17807:27;;:40;;17837:10;;17807:40;:::i;:::-;17782:8;:66::i;50550:531::-;25082:6;;-1:-1:-1;;;;;25082:6:0;11690:10;25229:23;25221:68;;;;-1:-1:-1;;;25221:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50701:30:0;::::1;50693:70;;;::::0;-1:-1:-1;;;50693:70:0;;8501:2:1;50693:70:0::1;::::0;::::1;8483:21:1::0;8540:2;8520:18;;;8513:30;8579:29;8559:18;;;8552:57;8626:18;;50693:70:0::1;8299:351:1::0;50693:70:0::1;50801:16;-1:-1:-1::0;;;;;50779:65:0::1;;50819:24;50779:65;;;;1291:14:1::0;1284:22;1266:41;;1254:2;1239:18;;1126:187;50779:65:0::1;;;;;;;;50855:15;:34:::0;;-1:-1:-1;;;;;;50900:50:0;-1:-1:-1;;;;;;;;50855:34:0;;;::::1;::::0;;::::1;-1:-1:-1::0;;;;50900:50:0;;-1:-1:-1;;;50900:50:0;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;50961:35:0;;;:17:::1;:35;::::0;;;;;;;:42;;-1:-1:-1;;50961:42:0;;::::1;-1:-1:-1::0;50961:42:0;;::::1;::::0;;;51014:34:::1;:52:::0;;;;;:59;;;;::::1;::::0;;::::1;::::0;;50550:531::o;46630:756::-;25082:6;;-1:-1:-1;;;;;25082:6:0;11690:10;25229:23;25221:68;;;;-1:-1:-1;;;25221:68:0;;;;;;;:::i;:::-;46753:10:::1;::::0;-1:-1:-1;;;;;46753:10:0;;::::1;46731:33:::0;;::::1;::::0;46709:118:::1;;;::::0;-1:-1:-1;;;46709:118:0;;8857:2:1;46709:118:0::1;::::0;::::1;8839:21:1::0;8896:2;8876:18;;;8869:30;8935:34;8915:18;;;8908:62;-1:-1:-1;;;8986:18:1;;;8979:33;9029:19;;46709:118:0::1;8655:399:1::0;46709:118:0::1;46843:33;::::0;-1:-1:-1;;;;;46843:33:0;::::1;::::0;::::1;::::0;;;::::1;46887:10;:43:::0;;-1:-1:-1;;;;;;46887:43:0::1;-1:-1:-1::0;;;;;46887:43:0;::::1;::::0;;::::1;::::0;;;46941:49:::1;::::0;46958:4:::1;::::0;-1:-1:-1;;46941:8:0::1;:49::i;:::-;47024:10;;;;;;;;;-1:-1:-1::0;;;;;47024:10:0::1;-1:-1:-1::0;;;;;47024:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47004:16;::::0;-1:-1:-1;;;;;47004:16:0;;::::1;:37:::0;::::1;;47001:138;;47064:16;::::0;47098:10:::1;::::0;47057:58:::1;::::0;-1:-1:-1;;;47057:58:0;;-1:-1:-1;;;;;47098:10:0;;::::1;47057:58;::::0;::::1;9489:51:1::0;-1:-1:-1;;9556:18:1;;;9549:34;47064:16:0;::::1;::::0;47057:32:::1;::::0;9462:18:1;;47057:58:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;47001:138;47190:10;::::0;:20:::1;::::0;;-1:-1:-1;;;47190:20:0;;;;47152:17:::1;::::0;-1:-1:-1;;;;;47190:10:0::1;::::0;:18:::1;::::0;:20:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:10;:20:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47265:16;::::0;47172:120:::1;::::0;-1:-1:-1;;;47172:120:0;;47245:4:::1;47172:120;::::0;::::1;10056:34:1::0;-1:-1:-1;;;;;47265:16:0;;::::1;10106:18:1::0;;;10099:43;47172:50:0;::::1;::::0;::::1;::::0;9991:18:1;;47172:120:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47303:8;:20:::0;;-1:-1:-1;;;;;;47303:20:0::1;-1:-1:-1::0;;;;;47303:20:0;::::1;::::0;;::::1;::::0;;;;;-1:-1:-1;47334:44:0::1;::::0;-1:-1:-1;47334:28:0::1;:44::i;:::-;46698:688;46630:756:::0;:::o;25660:103::-;25082:6;;-1:-1:-1;;;;;25082:6:0;11690:10;25229:23;25221:68;;;;-1:-1:-1;;;25221:68:0;;;;;;;:::i;:::-;25725:30:::1;25752:1;25725:18;:30::i;:::-;25660:103::o:0;51089:299::-;25082:6;;-1:-1:-1;;;;;25082:6:0;11690:10;25229:23;25221:68;;;;-1:-1:-1;;;25221:68:0;;;;;;;:::i;:::-;51235:1:::1;51213:19;:23;51205:58;;;::::0;-1:-1:-1;;;51205:58:0;;10355:2:1;51205:58:0::1;::::0;::::1;10337:21:1::0;10394:2;10374:18;;;10367:30;-1:-1:-1;;;10413:18:1;;;10406:52;10475:18;;51205:58:0::1;10153:346:1::0;51205:58:0::1;51279:45;::::0;1961:25:1;;;51279:45:0::1;::::0;1949:2:1;1934:18;51279:45:0::1;;;;;;;51335:18;:40:::0;51089:299::o;49814:728::-;25082:6;;-1:-1:-1;;;;;25082:6:0;11690:10;25229:23;25221:68;;;;-1:-1:-1;;;25221:68:0;;;;;;;:::i;:::-;50023:16:::1;::::0;50043:3:::1;::::0;50023:16:::1;-1:-1:-1::0;;;50023:16:0;::::1;::::0;::::1;::::0;49989:31:::1;::::0;-1:-1:-1;;;50004:16:0;;::::1;;49989:12:::0;:31:::1;:::i;:::-;:50;;;;:::i;:::-;:57;;;;49967:122;;;;-1:-1:-1::0;;;49967:122:0::1;;;;;;;:::i;:::-;50140:15;::::0;50159:3:::1;::::0;50140:15:::1;-1:-1:-1::0;;;50140:15:0;::::1;::::0;::::1;::::0;50108:29:::1;::::0;-1:-1:-1;;;50122:15:0;;::::1;;50108:11:::0;:29:::1;:::i;:::-;:47;;;;:::i;:::-;:54;;;;50100:81;;;;-1:-1:-1::0;;;50100:81:0::1;;;;;;;:::i;:::-;50242:20;::::0;50219::::1;::::0;50266:3:::1;::::0;50242:20:::1;::::0;;::::1;::::0;50200:39:::1;::::0;-1:-1:-1;;;50219:20:0;;::::1;;50200:16:::0;:39:::1;:::i;:::-;:62;;;;:::i;:::-;:69;;;;50192:96;;;;-1:-1:-1::0;;;50192:96:0::1;;;;;;;:::i;:::-;50304:108;::::0;;7046:6:1;7079:15;;;7061:34;;7131:15;;;7126:2;7111:18;;7104:43;7183:15;;7163:18;;;7156:43;50304:108:0;;::::1;::::0;;;;7024:2:1;50304:108:0;;::::1;50423:11;:26:::0;;-1:-1:-1;;50460:24:0;50423:26;::::1;::::0;;::::1;;-1:-1:-1::0;;50460:24:0;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;50500:34:0::1;-1:-1:-1::0;;;50500:34:0;;;::::1;;::::0;;;::::1;::::0;;49814:728::o;60313:207::-;25082:6;;-1:-1:-1;;;;;25082:6:0;11690:10;25229:23;25221:68;;;;-1:-1:-1;;;25221:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;60388:22:0;::::1;60396:4;60388:22:::0;60380:46:::1;;;::::0;-1:-1:-1;;;60380:46:0;;10706:2:1;60380:46:0::1;::::0;::::1;10688:21:1::0;10745:2;10725:18;;;10718:30;-1:-1:-1;;;10764:18:1;;;10757:41;10815:18;;60380:46:0::1;10504:335:1::0;60380:46:0::1;60437:75;60464:7;25082:6:::0;;-1:-1:-1;;;;;25082:6:0;;25009:87;60464:7:::1;60473:38;::::0;-1:-1:-1;;;60473:38:0;;60505:4:::1;60473:38;::::0;::::1;4179:51:1::0;-1:-1:-1;;;;;60473:23:0;::::1;::::0;::::1;::::0;4152:18:1;;60473:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;60437:26:0;::::1;::::0;:75;:26:::1;:75::i;:::-;60313:207:::0;:::o;46147:475::-;25082:6;;-1:-1:-1;;;;;25082:6:0;11690:10;25229:23;25221:68;;;;-1:-1:-1;;;25221:68:0;;;;;;;:::i;:::-;46233:16:::1;:36:::0;;-1:-1:-1;;;;;;46233:36:0::1;-1:-1:-1::0;;;;;46233:36:0;;::::1;::::0;;;::::1;::::0;;;46309:10:::1;::::0;:20:::1;::::0;;-1:-1:-1;;;46309:20:0;;;;:10;;;::::1;::::0;:18:::1;::::0;:20:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:10;:20:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46384:16;::::0;46291:120:::1;::::0;-1:-1:-1;;;46291:120:0;;46364:4:::1;46291:120;::::0;::::1;10056:34:1::0;-1:-1:-1;;;;;46384:16:0;;::::1;10106:18:1::0;;;10099:43;46291:50:0;::::1;::::0;::::1;::::0;9991:18:1;;46291:120:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46280:8;:131:::0;;-1:-1:-1;;;;;;46280:131:0::1;-1:-1:-1::0;;;;;46280:131:0;;::::1;;::::0;;46445:10:::1;::::0;:17:::1;::::0;;-1:-1:-1;;;46445:17:0;;;;:10;;;::::1;::::0;:15:::1;::::0;:17:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:10;:17:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46425:16;::::0;-1:-1:-1;;;;;46425:16:0;;::::1;:37:::0;::::1;;46422:138;;46485:16;::::0;46519:10:::1;::::0;46478:58:::1;::::0;-1:-1:-1;;;46478:58:0;;-1:-1:-1;;;;;46519:10:0;;::::1;46478:58;::::0;::::1;9489:51:1::0;-1:-1:-1;;9556:18:1;;;9549:34;46485:16:0;::::1;::::0;46478:32:::1;::::0;9462:18:1;;46478:58:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46422:138;46599:8;::::0;46570:44:::1;::::0;-1:-1:-1;;;;;46599:8:0::1;::::0;46570:28:::1;:44::i;14021:104::-:0;14077:13;14110:7;14103:14;;;;;:::i;48204:796::-;25082:6;;-1:-1:-1;;;;;25082:6:0;11690:10;25229:23;25221:68;;;;-1:-1:-1;;;25221:68:0;;;;;;;:::i;:::-;48438:11:::1;::::0;48419:16:::1;::::0;48453:3:::1;::::0;48438:11:::1;::::0;;;::::1;::::0;::::1;::::0;48399:36:::1;::::0;-1:-1:-1;;;48419:16:0;;::::1;;48399:17:::0;:36:::1;:::i;:::-;:50;;;;:::i;:::-;:57;;;;48377:122;;;;-1:-1:-1::0;;;48377:122:0::1;;;;;;;:::i;:::-;48555:10;::::0;48537:15:::1;::::0;48569:3:::1;::::0;48555:10:::1;::::0;;;::::1;::::0;::::1;::::0;48518:34:::1;::::0;-1:-1:-1;;;48537:15:0;;::::1;;48518:16:::0;:34:::1;:::i;:::-;:47;;;;:::i;:::-;:54;;;;48510:81;;;;-1:-1:-1::0;;;48510:81:0::1;;;;;;;:::i;:::-;48657:15;::::0;48676:3:::1;::::0;48657:15:::1;-1:-1:-1::0;;;48657:15:0;::::1;::::0;::::1;::::0;48610:44:::1;::::0;48634:20:::1;48610:21:::0;:44:::1;:::i;:::-;:62;;;;:::i;:::-;:69;;;;48602:96;;;;-1:-1:-1::0;;;48602:96:0::1;;;;;;;:::i;:::-;48714:128;::::0;;7046:6:1;7079:15;;;7061:34;;7131:15;;;7126:2;7111:18;;7104:43;7183:15;;7163:18;;;7156:43;48714:128:0;;::::1;::::0;;;;7024:2:1;48714:128:0;;::::1;48853:16;:36:::0;;-1:-1:-1;;;;48900:34:0;-1:-1:-1;;;48853:36:0::1;::::0;;::::1;;-1:-1:-1::0;;;;48900:34:0;;-1:-1:-1;;;48900:34:0;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;48947:44:0::1;-1:-1:-1::0;;;48947:44:0;;;::::1;;::::0;;;::::1;::::0;;48204:796::o;51396:163::-;25082:6;;-1:-1:-1;;;;;25082:6:0;11690:10;25229:23;25221:68;;;;-1:-1:-1;;;25221:68:0;;;;;;;:::i;:::-;51510:41:::1;51539:4;51545:5;51510:28;:41::i;18381:438::-:0;11690:10;18474:4;18557:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;18557:27:0;;;;;;;;;;18474:4;;11690:10;18603:35;;;;18595:85;;;;-1:-1:-1;;;18595:85:0;;11235:2:1;18595:85:0;;;11217:21:1;11274:2;11254:18;;;11247:30;11313:34;11293:18;;;11286:62;-1:-1:-1;;;11364:18:1;;;11357:35;11409:19;;18595:85:0;11033:401:1;18595:85:0;18716:60;18725:5;18732:7;18760:15;18741:16;:34;18716:8;:60::i;:::-;-1:-1:-1;18807:4:0;;18381:438;-1:-1:-1;;;;18381:438:0:o;15426:193::-;15505:4;11690:10;15561:28;11690:10;15578:2;15582:6;15561:9;:28::i;47640:349::-;25082:6;;-1:-1:-1;;;;;25082:6:0;11690:10;25229:23;25221:68;;;;-1:-1:-1;;;25221:68:0;;;;;;;:::i;:::-;47807:5:::1;47791:13;15010:12:::0;;;14922:108;47791:13:::1;:21;;;;:::i;:::-;47768;:44;;47760:101;;;::::0;-1:-1:-1;;;47760:101:0;;11641:2:1;47760:101:0::1;::::0;::::1;11623:21:1::0;11680:2;11660:18;;;11653:30;11719:34;11699:18;;;11692:62;-1:-1:-1;;;11770:18:1;;;11763:42;11822:19;;47760:101:0::1;11439:408:1::0;47760:101:0::1;47877:49;::::0;1961:25:1;;;47877:49:0::1;::::0;1949:2:1;1934:18;47877:49:0::1;;;;;;;47937:20;:44:::0;47640:349::o;51977:234::-;25082:6;;-1:-1:-1;;;;;25082:6:0;11690:10;25229:23;25221:68;;;;-1:-1:-1;;;25221:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;52067:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;:34;::::1;;:26;::::0;;::::1;:34;;::::0;52059:54:::1;;;::::0;-1:-1:-1;;;52059:54:0;;8036:2:1;52059:54:0::1;::::0;::::1;8018:21:1::0;8075:1;8055:18;;;8048:29;-1:-1:-1;;;8093:18:1;;;8086:37;8140:18;;52059:54:0::1;7834:330:1::0;52059:54:0::1;-1:-1:-1::0;;;;;52124:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;;:33;;-1:-1:-1;;52124:33:0::1;::::0;::::1;;::::0;;::::1;::::0;;;52173:30;;1266:41:1;;;52173:30:0::1;::::0;1239:18:1;52173:30:0::1;1126:187:1::0;60123:184:0;25082:6;;-1:-1:-1;;;;;25082:6:0;11690:10;25229:23;25221:68;;;;-1:-1:-1;;;25221:68:0;;;;;;;:::i;:::-;60177:12:::1;60201:7;25082:6:::0;;-1:-1:-1;;;;;25082:6:0;;25009:87;60201:7:::1;-1:-1:-1::0;;;;;60193:21:0::1;60222;60193:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60176:72;;;60267:7;60259:40;;;::::0;-1:-1:-1;;;60259:40:0;;12264:2:1;60259:40:0::1;::::0;::::1;12246:21:1::0;12303:2;12283:18;;;12276:30;-1:-1:-1;;;12322:18:1;;;12315:50;12382:18;;60259:40:0::1;12062:344:1::0;25918:201:0;25082:6;;-1:-1:-1;;;;;25082:6:0;11690:10;25229:23;25221:68;;;;-1:-1:-1;;;25221:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26007:22:0;::::1;25999:73;;;::::0;-1:-1:-1;;;25999:73:0;;12613:2:1;25999:73:0::1;::::0;::::1;12595:21:1::0;12652:2;12632:18;;;12625:30;12691:34;12671:18;;;12664:62;-1:-1:-1;;;12742:18:1;;;12735:36;12788:19;;25999:73:0::1;12411:402:1::0;25999:73:0::1;26083:28;26102:8;26083:18;:28::i;22017:380::-:0;-1:-1:-1;;;;;22153:19:0;;22145:68;;;;-1:-1:-1;;;22145:68:0;;13020:2:1;22145:68:0;;;13002:21:1;13059:2;13039:18;;;13032:30;13098:34;13078:18;;;13071:62;-1:-1:-1;;;13149:18:1;;;13142:34;13193:19;;22145:68:0;12818:400:1;22145:68:0;-1:-1:-1;;;;;22232:21:0;;22224:68;;;;-1:-1:-1;;;22224:68:0;;13425:2:1;22224:68:0;;;13407:21:1;13464:2;13444:18;;;13437:30;13503:34;13483:18;;;13476:62;-1:-1:-1;;;13554:18:1;;;13547:32;13596:19;;22224:68:0;13223:398:1;22224:68:0;-1:-1:-1;;;;;22305:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;22357:32;;1961:25:1;;;22357:32:0;;1934:18:1;22357:32:0;;;;;;;22017:380;;;:::o;22684:453::-;-1:-1:-1;;;;;15798:18:0;;;22819:24;15798:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;22886:37:0;;22882:248;;22968:6;22948:16;:26;;22940:68;;;;-1:-1:-1;;;22940:68:0;;13828:2:1;22940:68:0;;;13810:21:1;13867:2;13847:18;;;13840:30;13906:31;13886:18;;;13879:59;13955:18;;22940:68:0;13626:353:1;22940:68:0;23052:51;23061:5;23068:7;23096:6;23077:16;:25;23052:8;:51::i;:::-;22808:329;22684:453;;;:::o;52550:3026::-;52693:16;;-1:-1:-1;;;52693:16:0;;;;52692:17;:48;;;;-1:-1:-1;52726:14:0;;-1:-1:-1;;;52726:14:0;;;;52692:48;:89;;;;-1:-1:-1;;;;;;52758:23:0;;;;;;:17;:23;;;;;;;;52757:24;52692:89;:128;;;;-1:-1:-1;;;;;;52799:21:0;;;;;;:17;:21;;;;;;;;52798:22;52692:128;52674:245;;;52859:10;;52847:60;;-1:-1:-1;;;52847:60:0;;-1:-1:-1;;;;;14242:15:1;;;52847:60:0;;;14224:34:1;14294:15;;;14274:18;;;14267:43;14326:18;;;14319:34;;;52859:10:0;;;;52847:42;;14159:18:1;;52847:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52674:245;-1:-1:-1;;;;;52937:18:0;;52929:68;;;;-1:-1:-1;;;52929:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;53016:16:0;;53008:64;;;;-1:-1:-1;;;53008:64:0;;;;;;;:::i;:::-;53132:4;53083:28;15194:18;;;;;;;;;;;53217;;53288:16;;53180:55;;;;;-1:-1:-1;;;53288:16:0;;;;53287:17;:57;;;;-1:-1:-1;53331:8:0;;-1:-1:-1;;;;;53331:8:0;53343:1;15194:18;;;;;;;;;;;53321:23;53287:57;:97;;;;;53361:23;53287:97;:143;;;;-1:-1:-1;;;;;;53401:29:0;;;;;;:25;:29;;;;;;;;53287:143;53269:209;;;53457:9;:7;:9::i;:::-;53490:21;53522;53554:16;53684;;;;;;;;;;;53683:17;:58;;;;-1:-1:-1;;;;;;53718:23:0;;;;;;:17;:23;;;;;;;;53717:24;53683:58;:97;;;;-1:-1:-1;;;;;;53759:21:0;;;;;;:17;:21;;;;;;;;53758:22;53683:97;53665:1363;;;-1:-1:-1;;;;;53831:31:0;;;;;;:25;:31;;;;;;;;53827:748;;;53908:15;;53926:4;;53899:24;;-1:-1:-1;;;53908:15:0;;;;53899:6;:24;:::i;:::-;:31;;;;:::i;:::-;53974:15;;53883:47;;-1:-1:-1;53992:4:0;;53965:24;;-1:-1:-1;;;53974:15:0;;;;53965:6;:24;:::i;:::-;:31;;;;:::i;:::-;54035:10;;53949:47;;-1:-1:-1;54048:4:0;;54026:19;;54035:10;;;;;54026:6;:19;:::i;:::-;:26;;;;:::i;:::-;54015:37;;53827:748;;;-1:-1:-1;;;;;54112:29:0;;;;;;:25;:29;;;;;;;;54108:467;;;54187:16;;54206:4;;54178:25;;-1:-1:-1;;;54187:16:0;;;;54178:6;:25;:::i;:::-;:32;;;;:::i;:::-;54254:16;;54162:48;;-1:-1:-1;54273:4:0;;54245:25;;-1:-1:-1;;;54254:16:0;;;;54245:6;:25;:::i;:::-;:32;;;;:::i;:::-;54316:11;;54229:48;;-1:-1:-1;54330:4:0;;54307:20;;54316:11;;;;;54307:6;:20;:::i;54108:467::-;54400:20;;54423:4;;54391:29;;-1:-1:-1;;;54400:20:0;;;;54391:6;:29;:::i;:::-;:36;;;;:::i;:::-;54471:20;;54375:52;;-1:-1:-1;54494:4:0;;54462:29;;54471:20;;54462:6;:29;:::i;:::-;:36;;;;:::i;:::-;54537:15;;54446:52;;-1:-1:-1;54555:4:0;;54528:24;;-1:-1:-1;;;54537:15:0;;;;54528:6;:24;:::i;:::-;:31;;;;:::i;:::-;54517:42;;54108:467;54589:17;54609:29;54625:13;54609;:29;:::i;:::-;54589:49;-1:-1:-1;54657:13:0;;54653:66;;54672:47;54688:4;54702;54709:9;54672:15;:47::i;:::-;54737:12;;54734:65;;54751:48;54767:4;54781:6;54790:8;54751:15;:48::i;:::-;54864:8;54848:13;54823:22;54832:13;54823:6;:22;:::i;:::-;:38;;;;:::i;:::-;:49;;;;:::i;:::-;54814:58;;54931:13;54909:19;;:35;;;;:::i;:::-;54887:19;:57;54981:19;;:35;;55003:13;;54981:35;:::i;:::-;54959:19;:57;-1:-1:-1;53665:1363:0;55038:33;55054:4;55060:2;55064:6;55038:15;:33::i;:::-;55087:16;;-1:-1:-1;;;55087:16:0;;;;55082:487;;-1:-1:-1;;;;;55125:40:0;;;;;;:34;:40;;;;;;;;55120:214;;55225:20;;55216:6;:29;55186:132;;;;-1:-1:-1;;;55186:132:0;;15682:2:1;55186:132:0;;;15664:21:1;15721:2;15701:18;;;15694:30;15760:31;15740:18;;;15733:59;15809:18;;55186:132:0;15480:353:1;55186:132:0;-1:-1:-1;;;;;55353:38:0;;;;;;:34;:38;;;;;;;;55348:210;;55458:9;;-1:-1:-1;;;;;15194:18:0;;15167:7;15194:18;;;;;;;;;;;55442:25;55412:130;;;;-1:-1:-1;;;55412:130:0;;16040:2:1;55412:130:0;;;16022:21:1;16079:2;16059:18;;;16052:30;16118:33;16098:18;;;16091:61;16169:18;;55412:130:0;15838:355:1;55412:130:0;52663:2913;;;;;52550:3026;;;:::o;51567:402::-;-1:-1:-1;;;;;51672:31:0;;;;;;:25;:31;;;;;;:40;;;:31;;;;:40;;;51650:146;;;;-1:-1:-1;;;51650:146:0;;16400:2:1;51650:146:0;;;16382:21:1;16439:2;16419:18;;;16412:30;16478:34;16458:18;;;16451:62;16549:26;16529:18;;;16522:54;16593:19;;51650:146:0;16198:420:1;51650:146:0;-1:-1:-1;;;;;51807:31:0;;;;;;:25;:31;;;;;;;;:39;;;;;-1:-1:-1;;51807:39:0;;;;;;;;51857:34;:40;;;;;;:48;;;;;;;;;;51921:40;1266:41:1;;;51921:40:0;;1239:18:1;51921:40:0;1126:187:1;26279:191:0;26372:6;;;-1:-1:-1;;;;;26389:17:0;;;-1:-1:-1;;;;;;26389:17:0;;;;;;;26422:40;;26372:6;;;26389:17;26372:6;;26422:40;;26353:16;;26422:40;26342:128;26279:191;:::o;26536:211::-;26680:58;;;-1:-1:-1;;;;;9507:32:1;;26680:58:0;;;9489:51:1;9556:18;;;;9549:34;;;26680:58:0;;;;;;;;;;9462:18:1;;;;26680:58:0;;;;;;;;-1:-1:-1;;;;;26680:58:0;-1:-1:-1;;;26680:58:0;;;26653:86;;26673:5;;26653:19;:86::i;:::-;26536:211;;;:::o;55584:2896::-;48118:16;:23;;-1:-1:-1;;;;48118:23:0;-1:-1:-1;;;48118:23:0;;;55678:4:::1;-1:-1:-1::0;15194:18:0;;;;;;;;;;;55634:50:::1;;55695:24;55744:19;;55722;;:41;;;;:::i;:::-;55695:68:::0;-1:-1:-1;55778:21:0;;;:59:::1;;;55821:16;55803:15;:34;55778:59;55774:98;;;55854:7;;;;55774:98;55933:26;55984:1;55962:19;;:23;;;;:::i;:::-;55933:52;;55996:31;56048:10;;;;;;;;;-1:-1:-1::0;;;;;56048:10:0::1;-1:-1:-1::0;;;;;56048:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56030:16;::::0;-1:-1:-1;;;;;56030:16:0;;::::1;:35:::0;::::1;;:124;;56112:16;::::0;56105:49:::1;::::0;-1:-1:-1;;;56105:49:0;;56148:4:::1;56105:49;::::0;::::1;4179:51:1::0;-1:-1:-1;;;;;56112:16:0;;::::1;::::0;56105:34:::1;::::0;4152:18:1;;56105:49:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56030:124;;;56068:21;56030:124;56209:23;::::0;55996:158;;-1:-1:-1;56165:29:0::1;::::0;-1:-1:-1;;;56209:23:0;::::1;;;56205:1864;;;56249:21;56290:19;;56271:18;:38;;;;:::i;:::-;56249:60:::0;-1:-1:-1;56327:15:0;;56324:74:::1;;56361:37;56384:13;56361:22;:37::i;:::-;56458:10;::::0;:17:::1;::::0;;-1:-1:-1;;;56458:17:0;;;;56413:24:::1;::::0;-1:-1:-1;;;;;56458:10:0::1;::::0;:15:::1;::::0;:17:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:10;:17:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56440:16;::::0;-1:-1:-1;;;;;56440:16:0;;::::1;:35:::0;::::1;;:180;;56552:16;::::0;56545:49:::1;::::0;-1:-1:-1;;;56545:49:0;;56588:4:::1;56545:49;::::0;::::1;4179:51:1::0;56597:23:0;;-1:-1:-1;;;;;56552:16:0::1;::::0;56545:34:::1;::::0;4152:18:1;;56545:49:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:75;;;;:::i;:::-;56440:180;;;56478:47;56502:23:::0;56478:21:::1;:47;:::i;:::-;56413:207;;56635:29;56727:13;56704:19;;56668:16;:55;;;;:::i;:::-;56667:73;;;;:::i;:::-;56635:105:::0;-1:-1:-1;56779:40:0::1;56635:105:::0;56779:16;:40:::1;:::i;:::-;56755:64:::0;-1:-1:-1;56837:23:0;;56834:682:::1;;56901:10;;;;;;;;;-1:-1:-1::0;;;;;56901:10:0::1;-1:-1:-1::0;;;;;56901:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56883:16;::::0;-1:-1:-1;;;;;56883:35:0;;::::1;:16:::0;::::1;:35:::0;56880:602:::1;;56983:15;::::0;56975:63:::1;::::0;56959:12:::1;::::0;-1:-1:-1;;;56983:15:0;::::1;-1:-1:-1::0;;;;;56983:15:0::1;::::0;57012:21;;56959:12;56975:63;56959:12;56975:63;57012:21;56983:15;56975:63:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56958:80;;;57064:7;57061:134;;;57128:43;::::0;;57146:1:::1;16805:25:1::0;;16861:2;16846:18;;16839:34;;;57128:43:0::1;::::0;16778:18:1;57128:43:0::1;;;;;;;57061:134;56919:295;56880:602;;;57305:15;::::0;57248:16:::1;::::0;57241:150:::1;::::0;-1:-1:-1;;;;;57248:16:0;;::::1;::::0;-1:-1:-1;;;57305:15:0;;::::1;;57347:21:::0;57241:37:::1;:150::i;:::-;57419:43;::::0;;57437:1:::1;16805:25:1::0;;16861:2;16846:18;;16839:34;;;57419:43:0::1;::::0;16778:18:1;57419:43:0::1;;;;;;;56880:602;56234:1295;;;56205:1864;;;57553:20:::0;;57550:84:::1;;57592:42;57615:18;57592:22;:42::i;:::-;57691:10;;;;;;;;;-1:-1:-1::0;;;;;57691:10:0::1;-1:-1:-1::0;;;;;57691:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;57673:16;::::0;-1:-1:-1;;;;;57673:16:0;;::::1;:35:::0;::::1;;:180;;57785:16;::::0;57778:49:::1;::::0;-1:-1:-1;;;57778:49:0;;57821:4:::1;57778:49;::::0;::::1;4179:51:1::0;57830:23:0;;-1:-1:-1;;;;;57785:16:0::1;::::0;57778:34:::1;::::0;4152:18:1;;57778:49:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:75;;;;:::i;:::-;57673:180;;;57711:47;57735:23:::0;57711:21:::1;:47;:::i;:::-;57871:19;::::0;57649:204;;-1:-1:-1;57871:21:0;57868:187:::1;;57912:62;57930:4;57937:15;::::0;::::1;;;;;;-1:-1:-1::0;;;;;57937:15:0::1;57954:19;;57912:9;:62::i;:::-;58016:19;::::0;57998:41:::1;::::0;;16805:25:1;;;58037:1:0::1;16861:2:1::0;16846:18;;16839:34;57998:41:0::1;::::0;16778:18:1;57998:41:0::1;;;;;;;57868:187;58106:1;58085:18;:22;:51;;;;;58135:1;58111:21;:25;58085:51;58081:216;;;58153:55;58166:18;58186:21;58153:12;:55::i;:::-;58228:57;::::0;;16805:25:1;;;16861:2;16846:18;;16839:34;;;58228:57:0::1;::::0;16778:18:1;58228:57:0::1;;;;;;;58081:216;58329:1;58307:19;:23:::0;;;58341:19:::1;:23:::0;25082:6;;-1:-1:-1;;;;;25082:6:0;58378:19;58375:96:::1;;58412:59;58430:4;58437:7;25082:6:::0;;-1:-1:-1;;;;;25082:6:0;;25009:87;58437:7:::1;58464:4;15167:7:::0;15194:18;;;;;;;;;;;58412:9:::1;:59::i;:::-;55623:2857;;;;;48152:1;48164:16:::0;:24;;-1:-1:-1;;;;48164:24:0;;;55584:2896::o;19298:671::-;-1:-1:-1;;;;;19429:18:0;;19421:68;;;;-1:-1:-1;;;19421:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19508:16:0;;19500:64;;;;-1:-1:-1;;;19500:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19650:15:0;;19628:19;19650:15;;;;;;;;;;;19684:21;;;;19676:72;;;;-1:-1:-1;;;19676:72:0;;17600:2:1;19676:72:0;;;17582:21:1;17639:2;17619:18;;;17612:30;17678:34;17658:18;;;17651:62;-1:-1:-1;;;17729:18:1;;;17722:36;17775:19;;19676:72:0;17398:402:1;19676:72:0;-1:-1:-1;;;;;19784:15:0;;;:9;:15;;;;;;;;;;;19802:20;;;19784:38;;19844:13;;;;;;;;:23;;19816:6;;19784:9;19844:23;;19816:6;;19844:23;:::i;:::-;;;;;;;;19900:2;-1:-1:-1;;;;;19885:26:0;19894:4;-1:-1:-1;;;;;19885:26:0;;19904:6;19885:26;;;;1961:25:1;;1949:2;1934:18;;1815:177;19885:26:0;;;;;;;;19924:37;26536:211;29109:716;29533:23;29559:69;29587:4;29559:69;;;;;;;;;;;;;;;;;29567:5;-1:-1:-1;;;;;29559:27:0;;;:69;;;;;:::i;:::-;29643:17;;29533:95;;-1:-1:-1;29643:21:0;29639:179;;29740:10;29729:30;;;;;;;;;;;;:::i;:::-;29721:85;;;;-1:-1:-1;;;29721:85:0;;18007:2:1;29721:85:0;;;17989:21:1;18046:2;18026:18;;;18019:30;18085:34;18065:18;;;18058:62;-1:-1:-1;;;18136:18:1;;;18129:40;18186:19;;29721:85:0;17805:406:1;58488:836:0;58584:16;;;58598:1;58584:16;;;;;;;;58560:21;;58584:16;;;;;;;;;;-1:-1:-1;58584:16:0;58560:40;;58629:4;58611;58616:1;58611:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;58611:23:0;;;:7;;;;;;;;;:23;58655:16;;58645:7;;58655:16;;;58645:4;;58655:16;;58645:7;;;;;;:::i;:::-;-1:-1:-1;;;;;58645:26:0;;;:7;;;;;;;;;;:26;;;;58705:10;;:17;;;-1:-1:-1;;;58705:17:0;;;;:10;;;;;:15;;:17;;;;;58645:7;;58705:17;;;;;:10;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;58694:28:0;:4;58699:1;58694:7;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;58694:28:0;;58690:627;;58738:10;;:249;;-1:-1:-1;;;58738:249:0;;-1:-1:-1;;;;;58738:10:0;;;;:61;;:249;;58818:11;;58738:10;;58902:4;;58933;;58957:15;;58738:249;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46698:688:::1;46630:756:::0;:::o;58690:627::-;59118:10;;59018:287;;-1:-1:-1;;;59018:287:0;;39932:42;;59018:69;;:287;;-1:-1:-1;;;;;59118:10:0;;59152:11;;59118:10;;59244:4;;59271:15;;59018:287;;;:::i;59332:785::-;59457:10;;;;;;;;;-1:-1:-1;;;;;59457:10:0;-1:-1:-1;;;;;59457:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;59437:16;;-1:-1:-1;;;;;59437:37:0;;;:16;;:37;59433:665;;59490:10;;:289;;-1:-1:-1;;;59490:289:0;;59567:4;59490:289;;;20461:34:1;20511:18;;;20504:34;;;59490:10:0;20554:18:1;;;20547:34;;;20597:18;;;20590:34;59723:6:0;20640:19:1;;;20633:44;59749:15:0;20693:19:1;;;20686:35;-1:-1:-1;;;;;59490:10:0;;;;:26;;59524:15;;20395:19:1;;59490:289:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;46698:688:::1;46630:756:::0;:::o;59433:665::-;59809:10;;59883:16;;59809:277;;-1:-1:-1;;;59809:277:0;;59859:4;59809:277;;;21440:34:1;-1:-1:-1;;;;;59883:16:0;;;21490:18:1;;;21483:43;21542:18;;;21535:34;;;21585:18;;;21578:34;;;59809:10:0;21628:19:1;;;21621:35;;;21672:19;;;21665:35;60030:6:0;21716:19:1;;;21709:44;60056:15:0;21769:19:1;;;21762:35;59809:10:0;;;:23;;21374:19:1;;59809:277:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3886:229::-;4023:12;4055:52;4077:6;4085:4;4091:1;4094:12;4055:21;:52::i;:::-;4048:59;3886:229;-1:-1:-1;;;;3886:229:0:o;5006:510::-;5176:12;5234:5;5209:21;:30;;5201:81;;;;-1:-1:-1;;;5201:81:0;;22010:2:1;5201:81:0;;;21992:21:1;22049:2;22029:18;;;22022:30;22088:34;22068:18;;;22061:62;-1:-1:-1;;;22139:18:1;;;22132:36;22185:19;;5201:81:0;21808:402:1;5201:81:0;-1:-1:-1;;;;;1436:19:0;;;5293:60;;;;-1:-1:-1;;;5293:60:0;;22417:2:1;5293:60:0;;;22399:21:1;22456:2;22436:18;;;22429:30;22495:31;22475:18;;;22468:59;22544:18;;5293:60:0;22215:353:1;5293:60:0;5367:12;5381:23;5408:6;-1:-1:-1;;;;;5408:11:0;5427:5;5434:4;5408:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5366:73;;;;5457:51;5474:7;5483:10;5495:12;5457:16;:51::i;:::-;5450:58;5006:510;-1:-1:-1;;;;;;;5006:510:0:o;7692:712::-;7842:12;7871:7;7867:530;;;-1:-1:-1;7902:10:0;7895:17;;7867:530;8016:17;;:21;8012:374;;8214:10;8208:17;8275:15;8262:10;8258:2;8254:19;8247:44;8012:374;8357:12;8350:20;;-1:-1:-1;;;8350:20:0;;;;;;;;:::i;14:250:1:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:1;238:16;;231:27;14:250::o;269:396::-;418:2;407:9;400:21;381:4;450:6;444:13;493:6;488:2;477:9;473:18;466:34;509:79;581:6;576:2;565:9;561:18;556:2;548:6;544:15;509:79;:::i;:::-;649:2;628:15;-1:-1:-1;;624:29:1;609:45;;;;656:2;605:54;;269:396;-1:-1:-1;;269:396:1:o;670:131::-;-1:-1:-1;;;;;745:31:1;;735:42;;725:70;;791:1;788;781:12;806:315;874:6;882;935:2;923:9;914:7;910:23;906:32;903:52;;;951:1;948;941:12;903:52;990:9;977:23;1009:31;1034:5;1009:31;:::i;:::-;1059:5;1111:2;1096:18;;;;1083:32;;-1:-1:-1;;;806:315:1:o;1318:159::-;1385:20;;1445:6;1434:18;;1424:29;;1414:57;;1467:1;1464;1457:12;1414:57;1318:159;;;:::o;1482:328::-;1556:6;1564;1572;1625:2;1613:9;1604:7;1600:23;1596:32;1593:52;;;1641:1;1638;1631:12;1593:52;1664:28;1682:9;1664:28;:::i;:::-;1654:38;;1711:37;1744:2;1733:9;1729:18;1711:37;:::i;:::-;1701:47;;1767:37;1800:2;1789:9;1785:18;1767:37;:::i;:::-;1757:47;;1482:328;;;;;:::o;1997:180::-;2056:6;2109:2;2097:9;2088:7;2084:23;2080:32;2077:52;;;2125:1;2122;2115:12;2077:52;-1:-1:-1;2148:23:1;;1997:180;-1:-1:-1;1997:180:1:o;2375:456::-;2452:6;2460;2468;2521:2;2509:9;2500:7;2496:23;2492:32;2489:52;;;2537:1;2534;2527:12;2489:52;2576:9;2563:23;2595:31;2620:5;2595:31;:::i;:::-;2645:5;-1:-1:-1;2702:2:1;2687:18;;2674:32;2715:33;2674:32;2715:33;:::i;:::-;2375:456;;2767:7;;-1:-1:-1;;;2821:2:1;2806:18;;;;2793:32;;2375:456::o;2836:118::-;2922:5;2915:13;2908:21;2901:5;2898:32;2888:60;;2944:1;2941;2934:12;2959:382;3024:6;3032;3085:2;3073:9;3064:7;3060:23;3056:32;3053:52;;;3101:1;3098;3091:12;3053:52;3140:9;3127:23;3159:31;3184:5;3159:31;:::i;:::-;3209:5;-1:-1:-1;3266:2:1;3251:18;;3238:32;3279:30;3238:32;3279:30;:::i;:::-;3328:7;3318:17;;;2959:382;;;;;:::o;3346:241::-;3402:6;3455:2;3443:9;3434:7;3430:23;3426:32;3423:52;;;3471:1;3468;3461:12;3423:52;3510:9;3497:23;3529:28;3551:5;3529:28;:::i;3781:247::-;3840:6;3893:2;3881:9;3872:7;3868:23;3864:32;3861:52;;;3909:1;3906;3899:12;3861:52;3948:9;3935:23;3967:31;3992:5;3967:31;:::i;4709:388::-;4777:6;4785;4838:2;4826:9;4817:7;4813:23;4809:32;4806:52;;;4854:1;4851;4844:12;4806:52;4893:9;4880:23;4912:31;4937:5;4912:31;:::i;:::-;4962:5;-1:-1:-1;5019:2:1;5004:18;;4991:32;5032:33;4991:32;5032:33;:::i;5102:380::-;5181:1;5177:12;;;;5224;;;5245:61;;5299:4;5291:6;5287:17;5277:27;;5245:61;5352:2;5344:6;5341:14;5321:18;5318:38;5315:161;;5398:10;5393:3;5389:20;5386:1;5379:31;5433:4;5430:1;5423:15;5461:4;5458:1;5451:15;5315:161;;5102:380;;;:::o;5487:356::-;5689:2;5671:21;;;5708:18;;;5701:30;5767:34;5762:2;5747:18;;5740:62;5834:2;5819:18;;5487:356::o;5848:127::-;5909:10;5904:3;5900:20;5897:1;5890:31;5940:4;5937:1;5930:15;5964:4;5961:1;5954:15;5980:168;6047:6;6073:10;;;6085;;;6069:27;;6108:11;;;6105:37;;;6122:18;;:::i;:::-;6105:37;5980:168;;;;:::o;6153:339::-;6355:2;6337:21;;;6394:2;6374:18;;;6367:30;-1:-1:-1;;;6428:2:1;6413:18;;6406:45;6483:2;6468:18;;6153:339::o;6497:338::-;6699:2;6681:21;;;6738:2;6718:18;;;6711:30;-1:-1:-1;;;6772:2:1;6757:18;;6750:44;6826:2;6811:18;;6497:338::o;7210:217::-;7250:1;7276;7266:132;;7320:10;7315:3;7311:20;7308:1;7301:31;7355:4;7352:1;7345:15;7383:4;7380:1;7373:15;7266:132;-1:-1:-1;7412:9:1;;7210:217::o;8169:125::-;8234:9;;;8255:10;;;8252:36;;;8268:18;;:::i;9059:251::-;9129:6;9182:2;9170:9;9161:7;9157:23;9153:32;9150:52;;;9198:1;9195;9188:12;9150:52;9230:9;9224:16;9249:31;9274:5;9249:31;:::i;9594:245::-;9661:6;9714:2;9702:9;9693:7;9689:23;9685:32;9682:52;;;9730:1;9727;9720:12;9682:52;9762:9;9756:16;9781:28;9803:5;9781:28;:::i;10844:184::-;10914:6;10967:2;10955:9;10946:7;10942:23;10938:32;10935:52;;;10983:1;10980;10973:12;10935:52;-1:-1:-1;11006:16:1;;10844:184;-1:-1:-1;10844:184:1:o;14364:401::-;14566:2;14548:21;;;14605:2;14585:18;;;14578:30;14644:34;14639:2;14624:18;;14617:62;-1:-1:-1;;;14710:2:1;14695:18;;14688:35;14755:3;14740:19;;14364:401::o;14770:399::-;14972:2;14954:21;;;15011:2;14991:18;;;14984:30;15050:34;15045:2;15030:18;;15023:62;-1:-1:-1;;;15116:2:1;15101:18;;15094:33;15159:3;15144:19;;14770:399::o;15174:168::-;15247:9;;;15278;;15295:15;;;15289:22;;15275:37;15265:71;;15316:18;;:::i;15347:128::-;15414:9;;;15435:11;;;15432:37;;;15449:18;;:::i;18348:127::-;18409:10;18404:3;18400:20;18397:1;18390:31;18440:4;18437:1;18430:15;18464:4;18461:1;18454:15;18480:461;18533:3;18571:5;18565:12;18598:6;18593:3;18586:19;18624:4;18653:2;18648:3;18644:12;18637:19;;18690:2;18683:5;18679:14;18711:1;18721:195;18735:6;18732:1;18729:13;18721:195;;;18800:13;;-1:-1:-1;;;;;18796:39:1;18784:52;;18856:12;;;;18891:15;;;;18832:1;18750:9;18721:195;;;-1:-1:-1;18932:3:1;;18480:461;-1:-1:-1;;;;;18480:461:1:o;18946:582::-;19245:6;19234:9;19227:25;19288:6;19283:2;19272:9;19268:18;19261:34;19331:3;19326:2;19315:9;19311:18;19304:31;19208:4;19352:57;19404:3;19393:9;19389:19;19381:6;19352:57;:::i;:::-;-1:-1:-1;;;;;19445:32:1;;;;19440:2;19425:18;;19418:60;-1:-1:-1;19509:3:1;19494:19;19487:35;19344:65;18946:582;-1:-1:-1;;;18946:582:1:o;19533:::-;19861:1;19857;19852:3;19848:11;19844:19;19836:6;19832:32;19821:9;19814:51;19901:6;19896:2;19885:9;19881:18;19874:34;19944:6;19939:2;19928:9;19924:18;19917:34;19987:3;19982:2;19971:9;19967:18;19960:31;19795:4;20008:57;20060:3;20049:9;20045:19;20037:6;20008:57;:::i;:::-;20000:65;;20102:6;20096:3;20085:9;20081:19;20074:35;19533:582;;;;;;;;:::o;20732:306::-;20820:6;20828;20836;20889:2;20877:9;20868:7;20864:23;20860:32;20857:52;;;20905:1;20902;20895:12;20857:52;20934:9;20928:16;20918:26;;20984:2;20973:9;20969:18;20963:25;20953:35;;21028:2;21017:9;21013:18;21007:25;20997:35;;20732:306;;;;;:::o;22573:287::-;22702:3;22740:6;22734:13;22756:66;22815:6;22810:3;22803:4;22795:6;22791:17;22756:66;:::i;:::-;22838:16;;;;;22573:287;-1:-1:-1;;22573:287:1:o

Swarm Source

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