ETH Price: $3,272.08 (+0.70%)
Gas: 1 Gwei

Token

Adapto (ADPT)
 

Overview

Max Total Supply

200 ADPT

Holders

25

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
thedefisquad.eth
Balance
0.23971807439971288 ADPT

Value
$0.00
0x74BC89a9e831ab5f33b90607Dd9eB5E01452A064
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:
Adapto

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-26
*/

/**

    https://t.me/adaptotoken

**/

// SPDX-License-Identifier: MIT

pragma solidity =0.8.17;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

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

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

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

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

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

interface IUniswapV2Router {
    function factory() external pure returns (address);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IDAIReceiver {
    function initialize(address) external;
    function withdraw() external;
    function withdrawUnsupportedAsset(address, uint256) external;
}

contract DAIReceiver is IDAIReceiver, Ownable {
    address public dai;
    address public token;

    constructor() Ownable() {
        token = msg.sender;
    }

    function initialize(address _dai) public onlyOwner {
        require(dai == address(0x0), "Already initialized");
        dai = _dai;
    }

    function withdraw() public {
        require(msg.sender == token, "Caller is not token");
        IERC20(dai).transfer(token, IERC20(dai).balanceOf(address(this)));
    }

    function withdrawUnsupportedAsset(address _token, uint256 _amount) public onlyOwner {
        if(_token == address(0x0))
            payable(owner()).transfer(_amount);
        else
            IERC20(_token).transfer(owner(), _amount);
    }
}

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

    IUniswapV2Router private _uniswapV2Router;

    DAIReceiver private _receiver;

    mapping (address => uint) private _cooldown;

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

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

    uint256 private constant _tSupply = 200 * (10**18);

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

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

    uint256 public constant FEE_DIVISOR = 1000000;

    uint256 private _totalFees;
    uint256 private _fee;

    uint256 public buyFee = 42069;
    uint256 private _previousBuyFee = buyFee;

    uint256 public sellFee = 42069;
    uint256 private _previousSellFee = sellFee;

    uint256 private _tokensForFees;
    uint256 private _swapTokensAtAmount = 0;

    address payable private _feeCollectorWallet;

    address private _uniswapV2Pair;
    address constant private DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant private ZERO = 0x0000000000000000000000000000000000000000;
    address constant private DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F;

    enum TransactionType {
        BUY,
        SELL,
        TRANSFER
    }

    event Initialize(uint256 initializeBlock);
    event OpenTrading(uint256 tradingOpenBlock, uint256 _blocksToBlacklist);
    event SetMaxBuyAmount(uint256 newMaxBuyAmount);
    event SetMaxSellAmount(uint256 newMaxSellAmount);
    event SetMaxWalletAmount(uint256 newMaxWalletAmount);
    event SetSwapTokensAtAmount(uint256 newSwapTokensAtAmount);
    event SetBuyFee(uint256 buyFee);
	event SetSellFee(uint256 sellFee);
    
    constructor (address[] memory liquidityProviders, address[] memory liquidityProviders2) ERC20("Adapto", "ADPT") {
        _uniswapV2Router = IUniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _approve(address(this), address(_uniswapV2Router), _tSupply);
        IERC20(DAI).approve(address(_uniswapV2Router), IERC20(DAI).balanceOf(address(this)));
        _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), DAI);
        IERC20(_uniswapV2Pair).approve(address(_uniswapV2Router), type(uint).max);

        _receiver = new DAIReceiver();
        _receiver.initialize(DAI);
        _receiver.transferOwnership(owner());

        _feeCollectorWallet = payable(owner());

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[address(_receiver)] = true;
        _isExcludedFromFees[DEAD] = true;

        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[address(_receiver)] = true;
        _isExcludedMaxTransactionAmount[DEAD] = true;

        for (uint i = 0; i < liquidityProviders.length; i++) {
            _mint(liquidityProviders[i], _tSupply.mul(1).div(100));
        }

        for (uint i = 0; i < liquidityProviders2.length; i++) {
            _mint(liquidityProviders2[i], _tSupply.mul(5).div(1000));
        }

        _mint(owner(), _tSupply.mul(875).div(1000));
    }

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

        bool takeFee = true;
        TransactionType txType = (from == _uniswapV2Pair) ? TransactionType.BUY : (to == _uniswapV2Pair) ? TransactionType.SELL : TransactionType.TRANSFER;
        if (from != owner() && to != owner() && to != ZERO && to != DEAD && !_swapping) {
            require(!_isBlacklisted[from] && !_isBlacklisted[to], "Blacklisted.");

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

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

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

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

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

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

    function _swapBack(uint256 contractBalance) internal {
        if (contractBalance == 0 || _tokensForFees == 0) return;

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

        _swapTokensForTokens(contractBalance); 

        _receiver.withdraw();
        
        _tokensForFees = 0;

        IERC20(DAI).transfer(_feeCollectorWallet, IERC20(DAI).balanceOf(address(this)));
    }         

    function _swapTokensForTokens(uint256 tokenAmount) internal {         
        address[] memory path = new address[](2);         
        path[0] = address(this);         
        path[1] = DAI;         
        _approve(address(this), address(_uniswapV2Router), tokenAmount);         
        _uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(_receiver),
            block.timestamp
        );         
    }
        
    function _sendETHToFee(uint256 amount) internal {
        _feeCollectorWallet.transfer(amount);
    }

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

    function initialize() public onlyOwner {
        require(!initialized, "Contract is already initialized");
        swapEnabled = true;
        cooldownEnabled = true;
        maxBuyAmount = _tSupply.mul(2).div(100);
        maxSellAmount = _tSupply.mul(2).div(100);
        maxWalletAmount = _tSupply.mul(2).div(100);
        _swapTokensAtAmount = _tSupply.mul(5).div(10000);
        initialized = true;
        emit Initialize(block.number);
    }

    function openTrading(uint256 blocks) public onlyOwner {
        require(!tradingOpen, "Trading is already open");
        require(blocks <= 10, "Invalid blocks count.");
        tradingOpen = true;
        tradingOpenBlock = block.number;
        _blocksToBlacklist = blocks;
        emit OpenTrading(tradingOpenBlock, _blocksToBlacklist);
    }

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

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

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

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

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

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

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

    function setExcludedFromFees(address[] memory accounts, bool isEx) public onlyOwner {
        for (uint i = 0; i < accounts.length; i++) _isExcludedFromFees[accounts[i]] = isEx;
    }
    
    function setExcludeFromMaxTransaction(address[] memory accounts, bool isEx) public onlyOwner {
        for (uint i = 0; i < accounts.length; i++) _isExcludedMaxTransactionAmount[accounts[i]] = isEx;
    }
    
    function setBlacklisted(address[] memory accounts, bool isBL) public onlyOwner {
        for (uint i = 0; i < accounts.length; i++) {
            if((accounts[i] != _uniswapV2Pair) && (accounts[i] != address(_uniswapV2Router)) && (accounts[i] != address(this))) _isBlacklisted[accounts[i]] = isBL;
        }
    }

    function setBuyFee(uint256 _buyFee) public onlyOwner {
        require(_buyFee <= 120000, "Must keep buy taxes below 12%");
        buyFee = _buyFee;
        emit SetBuyFee(buyFee);
    }

    function setSellFee(uint256 _sellFee) public onlyOwner {
        require(_sellFee <= 120000, "Must keep sell taxes below 12%");
        sellFee = _sellFee;
        emit SetSellFee(sellFee);
    }

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

    function _removeAllFee() internal {
        if (buyFee == 0 && sellFee == 0) return;

        _previousBuyFee = buyFee;
        _previousSellFee = sellFee;
        
        buyFee = 0;
        sellFee = 0;
    }
    
    function _restoreAllFee() internal {
        buyFee = _previousBuyFee;
        sellFee = _previousSellFee;
    }
        
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee, TransactionType txType) internal {
        if (!takeFee) _removeAllFee();
        else amount = _takeFees(sender, amount, txType);

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

    function _takeFees(address sender, uint256 amount, TransactionType txType) internal returns (uint256) {
        if(!tradingOpen || (tradingOpenBlock + _blocksToBlacklist >= block.number)) _setBot();
        else if (txType == TransactionType.SELL) _setSell();
        else _setBuy();
        
        uint256 fees;
        if (_totalFees > 0) {
            fees = amount.mul(_totalFees).div(FEE_DIVISOR);
            _tokensForFees += fees * _fee / _totalFees;
        }

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

        return amount -= fees;
    }

    function _setBot() internal {
        _fee = 900000;
        _totalFees = _fee;
    }

    function _setSell() internal {
        _fee = sellFee;
        _totalFees = _fee;
    }

    function _setBuy() internal {
        _fee = buyFee;
        _totalFees = _fee;
    }
    
    function unclog() public onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        _swapTokensForTokens(contractBalance);
    }
    
    function distributeFees() public onlyOwner {
        uint256 contractETHBalance = address(this).balance;
        _sendETHToFee(contractETHBalance);
    }

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

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

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

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

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address[]","name":"liquidityProviders","type":"address[]"},{"internalType":"address[]","name":"liquidityProviders2","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"initializeBlock","type":"uint256"}],"name":"Initialize","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tradingOpenBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_blocksToBlacklist","type":"uint256"}],"name":"OpenTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyFee","type":"uint256"}],"name":"SetBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxBuyAmount","type":"uint256"}],"name":"SetMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxSellAmount","type":"uint256"}],"name":"SetMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxWalletAmount","type":"uint256"}],"name":"SetMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellFee","type":"uint256"}],"name":"SetSellFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newSwapTokensAtAmount","type":"uint256"}],"name":"SetSwapTokensAtAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocks","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isBL","type":"bool"}],"name":"setBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocks","type":"uint256"}],"name":"setCooldownBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"setExcludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"feeCollectorWallet","type":"address"}],"name":"setFeeCollectorWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setFeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuyAmount","type":"uint256"}],"name":"setMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSellAmount","type":"uint256"}],"name":"setMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setTransferFeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpenBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFeesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unclog","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tkn","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600c805466ffffffff00000019166601010000000000179055680ad78ebc5ac6200000600d819055600e819055600f55600060108190556011819055600160125561a455601581905560168190556017819055601855601a553480156200006a57600080fd5b5060405162003f9538038062003f958339810160408190526200008d9162000ab9565b6040518060400160405280600681526020016541646170746f60d01b815250604051806040016040528060048152602001631051141560e21b8152508160039081620000da919062000bb1565b506004620000e9828262000bb1565b50505062000106620001006200074d60201b60201c565b62000751565b600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d90811790915562000146903090680ad78ebc5ac6200000620007a3565b6006546040516370a0823160e01b8152306004820152736b175474e89094c44da98b954eedeac495271d0f9163095ea7b3916001600160a01b039091169083906370a0823190602401602060405180830381865afa158015620001ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d3919062000c7d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156200021f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000245919062000c97565b50600660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c0919062000cc2565b6040516364e329cb60e11b8152306004820152736b175474e89094c44da98b954eedeac495271d0f60248201526001600160a01b03919091169063c9c65396906044016020604051808303816000875af115801562000323573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000349919062000cc2565b601c80546001600160a01b0319166001600160a01b0392831690811790915560065460405163095ea7b360e01b81529216600483015260001960248301529063095ea7b3906044016020604051808303816000875af1158015620003b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d7919062000c97565b50604051620003e690620009cb565b604051809103906000f08015801562000403573d6000803e3d6000fd5b50600780546001600160a01b0319166001600160a01b0392909216918217905560405163189acdbd60e31b8152736b175474e89094c44da98b954eedeac495271d0f600482015263c4d66de890602401600060405180830381600087803b1580156200046e57600080fd5b505af115801562000483573d6000803e3d6000fd5b50506007546001600160a01b0316915063f2fde38b9050620004ad6005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015620004ef57600080fd5b505af115801562000504573d6000803e3d6000fd5b5050505062000518620008cf60201b60201c565b601b80546001600160a01b0319166001600160a01b039283161790556005805482166000908152600960209081526040808320805460ff199081166001908117909255308086528386208054831684179055600780548916875284872080548416851790557f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb1930750037858054841685179055965488168652600a9094528285208054821683179055928452818420805484168217905593549094168252928120805484168317905561dead81527f20677881080440a9b3c87e826370bb5d9c2f74efd4dede686d52d77a6a09f8bb80549093169091179091555b825181101562000692576200067d83828151811062000631576200063162000ce0565b6020026020010151620006776064620006636001680ad78ebc5ac6200000620008de60201b6200186e1790919060201c565b620008f560201b620018811790919060201c565b62000903565b80620006898162000d0c565b9150506200060e565b5060005b81518110156200070157620006ec828281518110620006b957620006b962000ce0565b6020026020010151620006776103e8620006636005680ad78ebc5ac6200000620008de60201b6200186e1790919060201c565b80620006f88162000d0c565b91505062000696565b5062000745620007196005546001600160a01b031690565b620006776103e86200066361036b680ad78ebc5ac6200000620008de60201b6200186e1790919060201c565b505062000d7b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383166200080b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b0382166200086e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000802565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b031690565b6000620008ec828462000d28565b90505b92915050565b6000620008ec828462000d42565b6001600160a01b0382166200095b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000802565b80600260008282546200096f919062000d65565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b610663806200393283390190565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b038116811462000a0757600080fd5b919050565b600082601f83011262000a1e57600080fd5b815160206001600160401b038083111562000a3d5762000a3d620009d9565b8260051b604051601f19603f8301168101818110848211171562000a655762000a65620009d9565b60405293845285810183019383810192508785111562000a8457600080fd5b83870191505b8482101562000aae5762000a9e82620009ef565b8352918301919083019062000a8a565b979650505050505050565b6000806040838503121562000acd57600080fd5b82516001600160401b038082111562000ae557600080fd5b62000af38683870162000a0c565b9350602085015191508082111562000b0a57600080fd5b5062000b198582860162000a0c565b9150509250929050565b600181811c9082168062000b3857607f821691505b60208210810362000b5957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620009c657600081815260208120601f850160051c8101602086101562000b885750805b601f850160051c820191505b8181101562000ba95782815560010162000b94565b505050505050565b81516001600160401b0381111562000bcd5762000bcd620009d9565b62000be58162000bde845462000b23565b8462000b5f565b602080601f83116001811462000c1d576000841562000c045750858301515b600019600386901b1c1916600185901b17855562000ba9565b600085815260208120601f198616915b8281101562000c4e5788860151825594840194600190910190840162000c2d565b508582101562000c6d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000c9057600080fd5b5051919050565b60006020828403121562000caa57600080fd5b8151801515811462000cbb57600080fd5b9392505050565b60006020828403121562000cd557600080fd5b620008ec82620009ef565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820162000d215762000d2162000cf6565b5060010190565b8082028115828204841417620008ef57620008ef62000cf6565b60008262000d6057634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620008ef57620008ef62000cf6565b612ba78062000d8b6000396000f3fe6080604052600436106102af5760003560e01c80638da5cb5b11610166578063d1633649116100d3578063effb3c531161008f578063f5648a4f1161006c578063f5648a4f1461082a578063f5a6682f1461083f578063fe575a871461085f578063ffb54a991461089857005b8063effb3c53146107c9578063f2fde38b146107ea578063f34eb0b81461080a57005b8063d163364914610709578063dd62ed3e14610729578063dd77b7e614610749578063e01af92c14610769578063e1baae1f14610789578063e99c9d09146107a957005b8063a9059cbb11610122578063a9059cbb1461065c578063a985ceef1461067c578063aa4bde281461069e578063afa4f3b2146106b4578063bb57ad20146106d4578063cb963728146106e957005b80638da5cb5b146105a557806395d89b41146105cd5780639e93ad8e146105e2578063a457c2d7146105f9578063a64e4f8a14610619578063a901dd921461063c57005b8063395093511161021c57806370a08231116101d85780637ff5aa2b116101b55780637ff5aa2b1461053a5780638129fc1c1461055a57806388e765ff1461056f5780638b4cee081461058557005b806370a08231146104da578063715018a614610510578063751039fc1461052557005b8063395093511461043857806347062402146104585780635932ead11461046e57806366d602ae1461048e57806367c45349146104a45780636ddd1713146104b957005b8063158ef93e1161026b578063158ef93e1461039757806318160ddd146103b157806323b872dd146103c657806327a14fc2146103e65780632b14ca5614610406578063313ce5671461041c57005b806306fdde03146102b8578063095ea7b3146102e35780630cc835a3146103135780630e23500e14610333578063105222f91461035757806314626dc61461037757005b366102b657005b005b3480156102c457600080fd5b506102cd6108b7565b6040516102da91906126f4565b60405180910390f35b3480156102ef57600080fd5b506103036102fe36600461275e565b610949565b60405190151581526020016102da565b34801561031f57600080fd5b506102b661032e366004612788565b610963565b34801561033f57600080fd5b5061034960105481565b6040519081526020016102da565b34801561036357600080fd5b506102b66103723660046127d0565b6109ff565b34801561038357600080fd5b506102b6610392366004612788565b610a73565b3480156103a357600080fd5b50600c546103039060ff1681565b3480156103bd57600080fd5b50600254610349565b3480156103d257600080fd5b506103036103e13660046128a7565b610ac9565b3480156103f257600080fd5b506102b6610401366004612788565b610aed565b34801561041257600080fd5b5061034960175481565b34801561042857600080fd5b50604051601281526020016102da565b34801561044457600080fd5b5061030361045336600461275e565b610bbf565b34801561046457600080fd5b5061034960155481565b34801561047a57600080fd5b506102b66104893660046128e3565b610be1565b34801561049a57600080fd5b50610349600e5481565b3480156104b057600080fd5b506102b6610c09565b3480156104c557600080fd5b50600c54610303906301000000900460ff1681565b3480156104e657600080fd5b506103496104f5366004612900565b6001600160a01b031660009081526020819052604090205490565b34801561051c57600080fd5b506102b6610c2d565b34801561053157600080fd5b506102b6610c41565b34801561054657600080fd5b506102b6610555366004612900565b610c70565b34801561056657600080fd5b506102b6610d5c565b34801561057b57600080fd5b50610349600d5481565b34801561059157600080fd5b506102b66105a0366004612788565b610e86565b3480156105b157600080fd5b506005546040516001600160a01b0390911681526020016102da565b3480156105d957600080fd5b506102cd610f16565b3480156105ee57600080fd5b50610349620f424081565b34801561060557600080fd5b5061030361061436600461275e565b610f25565b34801561062557600080fd5b50600c546103039065010000000000900460ff1681565b34801561064857600080fd5b506102b66106573660046128e3565b610fa0565b34801561066857600080fd5b5061030361067736600461275e565b610fca565b34801561068857600080fd5b50600c5461030390640100000000900460ff1681565b3480156106aa57600080fd5b50610349600f5481565b3480156106c057600080fd5b506102b66106cf366004612788565b610fd8565b3480156106e057600080fd5b506102b6611117565b3480156106f557600080fd5b506102b6610704366004612900565b611129565b34801561071557600080fd5b506102b6610724366004612788565b61130c565b34801561073557600080fd5b5061034961074436600461291b565b611408565b34801561075557600080fd5b506102b66107643660046128e3565b611433565b34801561077557600080fd5b506102b66107843660046128e3565b61145c565b34801561079557600080fd5b506102b66107a43660046127d0565b611482565b3480156107b557600080fd5b506102b66107c4366004612788565b6115af565b3480156107d557600080fd5b50600c5461030390600160301b900460ff1681565b3480156107f657600080fd5b506102b6610805366004612900565b611675565b34801561081657600080fd5b506102b6610825366004612788565b6116eb565b34801561083657600080fd5b506102b66117aa565b34801561084b57600080fd5b506102b661085a3660046127d0565b6117ff565b34801561086b57600080fd5b5061030361087a366004612900565b6001600160a01b03166000908152600b602052604090205460ff1690565b3480156108a457600080fd5b50600c5461030390610100900460ff1681565b6060600380546108c69061294e565b80601f01602080910402602001604051908101604052809291908181526020018280546108f29061294e565b801561093f5780601f106109145761010080835404028352916020019161093f565b820191906000526020600020905b81548152906001019060200180831161092257829003601f168201915b5050505050905090565b60003361095781858561188d565b60019150505b92915050565b61096b6119b1565b6201d4c08111156109c35760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f772031322500000060448201526064015b60405180910390fd5b60158190556040518181527f4164afd9904b0eee72326020b7f2a0de2e3f5b8998738fbacf09229b66e5fd80906020015b60405180910390a150565b610a076119b1565b60005b8251811015610a6e578160096000858481518110610a2a57610a2a612988565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610a66816129b4565b915050610a0a565b505050565b610a7b6119b1565b600a811115610ac45760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b210313637b1b5b99031b7bab73a1760591b60448201526064016109ba565b601255565b600033610ad7858285611a0b565b610ae2858585611a7f565b506001949350505050565b610af56119b1565b610b156103e8610b0f6001610b0960025490565b9061186e565b90611881565b811015610b8a5760405162461bcd60e51b815260206004820152603960248201527f4d61782077616c6c657420616d6f756e742063616e6e6f74206265206c6f776560448201527f72207468616e20302e312520746f74616c20737570706c792e0000000000000060648201526084016109ba565b600f8190556040518181527f0176e9211818debdc4483c2bb0972798b7eb106239c8e465d4f1cee4ce5ae6e7906020016109f4565b600033610957818585610bd28383611408565b610bdc91906129cd565b61188d565b610be96119b1565b600c80549115156401000000000264ff0000000019909216919091179055565b610c116119b1565b30600090815260208190526040902054610c2a81612108565b50565b610c356119b1565b610c3f600061221e565b565b610c496119b1565b680ad78ebc5ac6200000600d819055600e819055600f55600c805464ff0000000019169055565b610c786119b1565b6001600160a01b038116610cde5760405162461bcd60e51b815260206004820152602760248201527f5f666565436f6c6c6563746f7257616c6c657420616464726573732063616e6e60448201526606f7420626520360cc1b60648201526084016109ba565b601b80546001600160a01b039081166000908152600960208181526040808420805460ff19908116909155865486168552600a80845282862080548316905587546001600160a01b03191698871698891788559785529282528084208054841660019081179091559554909416835294909452208054909216179055565b610d646119b1565b600c5460ff1615610db75760405162461bcd60e51b815260206004820152601f60248201527f436f6e747261637420697320616c726561647920696e697469616c697a65640060448201526064016109ba565b600c805464ffff0000001916640101000000179055610de56064610b0f680ad78ebc5ac6200000600261186e565b600d55610e016064610b0f680ad78ebc5ac6200000600261186e565b600e55610e1d6064610b0f680ad78ebc5ac6200000600261186e565b600f55610e3a612710610b0f680ad78ebc5ac6200000600561186e565b601a55600c805460ff191660011790556040517fc43e48cf47e9fa186d0f4096c61d1fcb54159799f935a2aa32e5589688ee36e190610e7c9043815260200190565b60405180910390a1565b610e8e6119b1565b6201d4c0811115610ee15760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f7720313225000060448201526064016109ba565b60178190556040518181527f74ee7e999ca1ca5e528cb19e41c5e12b09ef7ec7f52723b917fec754ce950472906020016109f4565b6060600480546108c69061294e565b60003381610f338286611408565b905083811015610f935760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109ba565b610ae2828686840361188d565b610fa86119b1565b600c8054911515650100000000000265ff000000000019909216919091179055565b600033610957818585611a7f565b610fe06119b1565b610ff5620186a0610b0f6001610b0960025490565b8110156110625760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016109ba565b6110766103e8610b0f6005610b0960025490565b8111156110e25760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016109ba565b601a8190556040518181527f09e89af7cbd8410d0ad2a74ab3cc8d9ddeef8ab1177f0f8a1984d355bb9d78f1906020016109f4565b61111f6119b1565b47610c2a81612270565b6111316119b1565b306001600160a01b038216036111895760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f74207769746864726177206f776e20746f6b656e0000000000000060448201526064016109ba565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156111d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f491906129e0565b1161122d5760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b60448201526064016109ba565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611274573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129891906129e0565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156112e8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6e91906129f9565b6113146119b1565b600c54610100900460ff161561136c5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720697320616c7265616479206f70656e00000000000000000060448201526064016109ba565b600a8111156113b55760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b210313637b1b5b99031b7bab73a1760591b60448201526064016109ba565b600c805461ff00191661010017905543601081905560118290556040517f8d3438059bb853597d71f33faf1d080795f797da60ef1c460fe5849903c24adb916109f4918490918252602082015260400190565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61143b6119b1565b600c8054911515600160301b0266ff00000000000019909216919091179055565b6114646119b1565b600c805491151563010000000263ff00000019909216919091179055565b61148a6119b1565b60005b8251811015610a6e57601c5483516001600160a01b03909116908490839081106114b9576114b9612988565b60200260200101516001600160a01b03161415801561150a575060065483516001600160a01b03909116908490839081106114f6576114f6612988565b60200260200101516001600160a01b031614155b80156115415750306001600160a01b031683828151811061152d5761152d612988565b60200260200101516001600160a01b031614155b1561159d5781600b600085848151811061155d5761155d612988565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055505b806115a7816129b4565b91505061148d565b6115b76119b1565b6115cb6103e8610b0f6001610b0960025490565b8110156116405760405162461bcd60e51b815260206004820152603760248201527f4d61782073656c6c20616d6f756e742063616e6e6f74206265206c6f7765722060448201527f7468616e20302e312520746f74616c20737570706c792e00000000000000000060648201526084016109ba565b600e8190556040518181527fa37090cc2feed4f3799a43ad59e5dab1cb6e70a7c1be92b72dbf9610550d5ac8906020016109f4565b61167d6119b1565b6001600160a01b0381166116e25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109ba565b610c2a8161221e565b6116f36119b1565b6117076103e8610b0f6001610b0960025490565b8110156117755760405162461bcd60e51b815260206004820152603660248201527f4d61782062757920616d6f756e742063616e6e6f74206265206c6f77657220746044820152753430b71018171892903a37ba30b61039bab838363c9760511b60648201526084016109ba565b600d8190556040518181527f3a0b1f960db2351f13a6a83576ad81b35de3396cf92b9150216f2a6eea641d9a906020016109f4565b6117b26119b1565b604051600090339047908381818185875af1925050503d80600081146117f4576040519150601f19603f3d011682016040523d82523d6000602084013e6117f9565b606091505b50505050565b6118076119b1565b60005b8251811015610a6e5781600a600085848151811061182a5761182a612988565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611866816129b4565b91505061180a565b600061187a8284612a16565b9392505050565b600061187a8284612a2d565b6001600160a01b0383166118ef5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109ba565b6001600160a01b0382166119505760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109ba565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610c3f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109ba565b6000611a178484611408565b905060001981146117f95781811015611a725760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016109ba565b6117f9848484840361188d565b6001600160a01b038316611aa55760405162461bcd60e51b81526004016109ba90612a4f565b6001600160a01b038216611acb5760405162461bcd60e51b81526004016109ba90612a94565b60008111611b2d5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016109ba565b601c546001906000906001600160a01b03868116911614611b6b57601c546001600160a01b03858116911614611b64576002611b6e565b6001611b6e565b60005b9050611b826005546001600160a01b031690565b6001600160a01b0316856001600160a01b031614158015611bb157506005546001600160a01b03858116911614155b8015611bc557506001600160a01b03841615155b8015611bdc57506001600160a01b03841661dead14155b8015611bf15750600c5462010000900460ff16155b15611f88576001600160a01b0385166000908152600b602052604090205460ff16158015611c3857506001600160a01b0384166000908152600b602052604090205460ff16155b611c735760405162461bcd60e51b815260206004820152600c60248201526b213630b1b5b634b9ba32b21760a11b60448201526064016109ba565b600c54640100000000900460ff1615611d86576006546001600160a01b03858116911614801590611cb25750601c546001600160a01b03858116911614155b15611d8657601254611cc49043612ad7565b32600090815260086020526040902054108015611d045750601254611ce99043612ad7565b6001600160a01b038516600090815260086020526040902054105b611d615760405162461bcd60e51b815260206004820152602860248201527f5472616e736665722064656c617920656e61626c65642e20547279206167616960448201526737103630ba32b91760c11b60648201526084016109ba565b3260009081526008602052604080822043908190556001600160a01b03871683529120555b6000816002811115611d9a57611d9a612aea565b148015611db557506006546001600160a01b03858116911614155b8015611dda57506001600160a01b0384166000908152600a602052604090205460ff16155b15611eca57600d54831115611e435760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178426044820152683abca0b6b7bab73a1760b91b60648201526084016109ba565b600f5483611e66866001600160a01b031660009081526020819052604090205490565b611e7091906129cd565b1115611eca5760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b60648201526084016109ba565b6001816002811115611ede57611ede612aea565b148015611ef957506006546001600160a01b03868116911614155b8015611f1e57506001600160a01b0385166000908152600a602052604090205460ff16155b15611f8857600e54831115611f885760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785360448201526932b63620b6b7bab73a1760b11b60648201526084016109ba565b6001600160a01b03851660009081526009602052604090205460ff1680611fc757506001600160a01b03841660009081526009602052604090205460ff165b80611fde5750600c5465010000000000900460ff16155b8061200f5750600c54600160301b900460ff1615801561200f5750600281600281111561200d5761200d612aea565b145b1561201957600091505b3060009081526020819052604081205490506000601a548211801561204f5750600183600281111561204d5761204d612aea565b145b90508080156120675750600c546301000000900460ff165b801561207c5750600c5462010000900460ff16155b80156120a157506001600160a01b03871660009081526009602052604090205460ff16155b80156120c657506001600160a01b03861660009081526009602052604090205460ff16155b156120f257600c805462ff00001916620100001790556120e5826122ae565b600c805462ff0000191690555b6120ff8787878787612458565b50505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061213d5761213d612988565b60200260200101906001600160a01b031690816001600160a01b031681525050736b175474e89094c44da98b954eedeac495271d0f8160018151811061218557612185612988565b6001600160a01b0392831660209182029290920101526006546121ab913091168461188d565b600654600754604051635c11d79560e01b81526001600160a01b0392831692635c11d795926121e892879260009288929116904290600401612b00565b600060405180830381600087803b15801561220257600080fd5b505af1158015612216573d6000803e3d6000fd5b505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601b546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156122aa573d6000803e3d6000fd5b5050565b8015806122bb5750601954155b156122c35750565b601a546122d190600561186e565b8111156122e957601a546122e690600561186e565b90505b6122f281612108565b600760009054906101000a90046001600160a01b03166001600160a01b0316633ccfd60b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561234257600080fd5b505af1158015612356573d6000803e3d6000fd5b505060006019555050601b546040516370a0823160e01b8152306004820152736b175474e89094c44da98b954eedeac495271d0f9163a9059cbb916001600160a01b039091169083906370a0823190602401602060405180830381865afa1580156123c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e991906129e0565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612434573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa91906129f9565b8161246a576124656124a0565b612478565b6124758584836124ce565b92505b6124838585856125ca565b8161249957612499601654601555601854601755565b5050505050565b6015541580156124b05750601754155b156124b757565b601580546016556017805460185560009182905555565b600c54600090610100900460ff1615806124f75750436011546010546124f491906129cd565b10155b156125125761250d620dbba06014819055601355565b61254b565b600182600281111561252657612526612aea565b0361253b5761250d6017546014819055601355565b61254b6015546014819055601355565b601354600090156125a657612572620f4240610b0f6013548761186e90919063ffffffff16565b9050601354601454826125859190612a16565b61258f9190612a2d565b601960008282546125a091906129cd565b90915550505b80156125b7576125b78530836125ca565b6125c18185612ad7565b95945050505050565b6001600160a01b0383166125f05760405162461bcd60e51b81526004016109ba90612a4f565b6001600160a01b0382166126165760405162461bcd60e51b81526004016109ba90612a94565b6001600160a01b0383166000908152602081905260409020548181101561268e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109ba565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36117f9565b600060208083528351808285015260005b8181101561272157858101830151858201604001528201612705565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461275957600080fd5b919050565b6000806040838503121561277157600080fd5b61277a83612742565b946020939093013593505050565b60006020828403121561279a57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b8015158114610c2a57600080fd5b8035612759816127b7565b600080604083850312156127e357600080fd5b823567ffffffffffffffff808211156127fb57600080fd5b818501915085601f83011261280f57600080fd5b8135602082821115612823576128236127a1565b8160051b604051601f19603f83011681018181108682111715612848576128486127a1565b60405292835281830193508481018201928984111561286657600080fd5b948201945b8386101561288b5761287c86612742565b8552948201949382019361286b565b965061289a90508782016127c5565b9450505050509250929050565b6000806000606084860312156128bc57600080fd5b6128c584612742565b92506128d360208501612742565b9150604084013590509250925092565b6000602082840312156128f557600080fd5b813561187a816127b7565b60006020828403121561291257600080fd5b61187a82612742565b6000806040838503121561292e57600080fd5b61293783612742565b915061294560208401612742565b90509250929050565b600181811c9082168061296257607f821691505b60208210810361298257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016129c6576129c661299e565b5060010190565b8082018082111561095d5761095d61299e565b6000602082840312156129f257600080fd5b5051919050565b600060208284031215612a0b57600080fd5b815161187a816127b7565b808202811582820484141761095d5761095d61299e565b600082612a4a57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561095d5761095d61299e565b634e487b7160e01b600052602160045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b505784516001600160a01b031683529383019391830191600101612b2b565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220c056a01b792b0367f0fffc9393a43b8f73aa0a7a01bb5321cdbd79146d7c96e064736f6c63430008110033608060405234801561001057600080fd5b5061001a33610031565b600280546001600160a01b03191633179055610081565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6105d3806100906000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063c4d66de81161005b578063c4d66de8146100db578063f2fde38b146100ee578063f4b9fa7514610101578063fc0c546a1461011457600080fd5b80633ccfd60b1461008d57806370c8b17314610097578063715018a6146100aa5780638da5cb5b146100b2575b600080fd5b610095610127565b005b6100956100a5366004610516565b610267565b61009561034d565b6000546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b6100956100e9366004610540565b610361565b6100956100fc366004610540565b6103da565b6001546100bf906001600160a01b031681565b6002546100bf906001600160a01b031681565b6002546001600160a01b0316331461017c5760405162461bcd60e51b815260206004820152601360248201527221b0b63632b91034b9903737ba103a37b5b2b760691b60448201526064015b60405180910390fd5b6001546002546040516370a0823160e01b81523060048201526001600160a01b039283169263a9059cbb92169083906370a0823190602401602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610562565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610240573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610264919061057b565b50565b61026f610450565b6001600160a01b0382166102bb57600080546040516001600160a01b039091169183156108fc02918491818181858888f193505050501580156102b6573d6000803e3d6000fd5b505050565b816001600160a01b031663a9059cbb6102dc6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015610329573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b6919061057b565b610355610450565b61035f60006104aa565b565b610369610450565b6001546001600160a01b0316156103b85760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610173565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6103e2610450565b6001600160a01b0381166104475760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610173565b610264816104aa565b6000546001600160a01b0316331461035f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610173565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461051157600080fd5b919050565b6000806040838503121561052957600080fd5b610532836104fa565b946020939093013593505050565b60006020828403121561055257600080fd5b61055b826104fa565b9392505050565b60006020828403121561057457600080fd5b5051919050565b60006020828403121561058d57600080fd5b8151801515811461055b57600080fdfea26469706673582212209bc8920a21054af12907b82500d3014caaae50a55ee2aeb54fc099a4975104b064736f6c63430008110033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000006bddceb6468161a265b44df0ec24ac53902acabc0000000000000000000000007beec514cfddf974b70dabed6b51fba15c0443760000000000000000000000006d698c5c7bdd288025fe2624175b7a09fc6ceade00000000000000000000000010121aca5ce3b959d6b0930d1d7fcce6669dfc4b0000000000000000000000004831f57e6d1f692ae597e0a765f5469422ce74f1000000000000000000000000e0f383cca99839849191516fca8559069ebdcd67000000000000000000000000b37cfa4000d924b02e31377d3cdce013247b48fd000000000000000000000000237c4724eb8fc06c04b2f28db2cde7ba358b39de000000000000000000000000bd3b896bbaecc5ed9ced8b10ce28cba576fbd54d000000000000000000000000ab0400a974b0cb1065fd57f6eb7403ad46984bec0000000000000000000000000000000000000000000000000000000000000005000000000000000000000000bcd5d017c302ea2a8475b3e94d21dc5d4d537f4b0000000000000000000000002f4821f2f5481ff63d9eb4072742bd27fc261d2e000000000000000000000000a5154fc14801f4cf4860bb191fba67a423b355f100000000000000000000000027adc5f14f8d52191b119b324896eb14e34f15d4000000000000000000000000bf72e2e1e6e8d5cef96ca83acdee2eeb4a6af607

Deployed Bytecode

0x6080604052600436106102af5760003560e01c80638da5cb5b11610166578063d1633649116100d3578063effb3c531161008f578063f5648a4f1161006c578063f5648a4f1461082a578063f5a6682f1461083f578063fe575a871461085f578063ffb54a991461089857005b8063effb3c53146107c9578063f2fde38b146107ea578063f34eb0b81461080a57005b8063d163364914610709578063dd62ed3e14610729578063dd77b7e614610749578063e01af92c14610769578063e1baae1f14610789578063e99c9d09146107a957005b8063a9059cbb11610122578063a9059cbb1461065c578063a985ceef1461067c578063aa4bde281461069e578063afa4f3b2146106b4578063bb57ad20146106d4578063cb963728146106e957005b80638da5cb5b146105a557806395d89b41146105cd5780639e93ad8e146105e2578063a457c2d7146105f9578063a64e4f8a14610619578063a901dd921461063c57005b8063395093511161021c57806370a08231116101d85780637ff5aa2b116101b55780637ff5aa2b1461053a5780638129fc1c1461055a57806388e765ff1461056f5780638b4cee081461058557005b806370a08231146104da578063715018a614610510578063751039fc1461052557005b8063395093511461043857806347062402146104585780635932ead11461046e57806366d602ae1461048e57806367c45349146104a45780636ddd1713146104b957005b8063158ef93e1161026b578063158ef93e1461039757806318160ddd146103b157806323b872dd146103c657806327a14fc2146103e65780632b14ca5614610406578063313ce5671461041c57005b806306fdde03146102b8578063095ea7b3146102e35780630cc835a3146103135780630e23500e14610333578063105222f91461035757806314626dc61461037757005b366102b657005b005b3480156102c457600080fd5b506102cd6108b7565b6040516102da91906126f4565b60405180910390f35b3480156102ef57600080fd5b506103036102fe36600461275e565b610949565b60405190151581526020016102da565b34801561031f57600080fd5b506102b661032e366004612788565b610963565b34801561033f57600080fd5b5061034960105481565b6040519081526020016102da565b34801561036357600080fd5b506102b66103723660046127d0565b6109ff565b34801561038357600080fd5b506102b6610392366004612788565b610a73565b3480156103a357600080fd5b50600c546103039060ff1681565b3480156103bd57600080fd5b50600254610349565b3480156103d257600080fd5b506103036103e13660046128a7565b610ac9565b3480156103f257600080fd5b506102b6610401366004612788565b610aed565b34801561041257600080fd5b5061034960175481565b34801561042857600080fd5b50604051601281526020016102da565b34801561044457600080fd5b5061030361045336600461275e565b610bbf565b34801561046457600080fd5b5061034960155481565b34801561047a57600080fd5b506102b66104893660046128e3565b610be1565b34801561049a57600080fd5b50610349600e5481565b3480156104b057600080fd5b506102b6610c09565b3480156104c557600080fd5b50600c54610303906301000000900460ff1681565b3480156104e657600080fd5b506103496104f5366004612900565b6001600160a01b031660009081526020819052604090205490565b34801561051c57600080fd5b506102b6610c2d565b34801561053157600080fd5b506102b6610c41565b34801561054657600080fd5b506102b6610555366004612900565b610c70565b34801561056657600080fd5b506102b6610d5c565b34801561057b57600080fd5b50610349600d5481565b34801561059157600080fd5b506102b66105a0366004612788565b610e86565b3480156105b157600080fd5b506005546040516001600160a01b0390911681526020016102da565b3480156105d957600080fd5b506102cd610f16565b3480156105ee57600080fd5b50610349620f424081565b34801561060557600080fd5b5061030361061436600461275e565b610f25565b34801561062557600080fd5b50600c546103039065010000000000900460ff1681565b34801561064857600080fd5b506102b66106573660046128e3565b610fa0565b34801561066857600080fd5b5061030361067736600461275e565b610fca565b34801561068857600080fd5b50600c5461030390640100000000900460ff1681565b3480156106aa57600080fd5b50610349600f5481565b3480156106c057600080fd5b506102b66106cf366004612788565b610fd8565b3480156106e057600080fd5b506102b6611117565b3480156106f557600080fd5b506102b6610704366004612900565b611129565b34801561071557600080fd5b506102b6610724366004612788565b61130c565b34801561073557600080fd5b5061034961074436600461291b565b611408565b34801561075557600080fd5b506102b66107643660046128e3565b611433565b34801561077557600080fd5b506102b66107843660046128e3565b61145c565b34801561079557600080fd5b506102b66107a43660046127d0565b611482565b3480156107b557600080fd5b506102b66107c4366004612788565b6115af565b3480156107d557600080fd5b50600c5461030390600160301b900460ff1681565b3480156107f657600080fd5b506102b6610805366004612900565b611675565b34801561081657600080fd5b506102b6610825366004612788565b6116eb565b34801561083657600080fd5b506102b66117aa565b34801561084b57600080fd5b506102b661085a3660046127d0565b6117ff565b34801561086b57600080fd5b5061030361087a366004612900565b6001600160a01b03166000908152600b602052604090205460ff1690565b3480156108a457600080fd5b50600c5461030390610100900460ff1681565b6060600380546108c69061294e565b80601f01602080910402602001604051908101604052809291908181526020018280546108f29061294e565b801561093f5780601f106109145761010080835404028352916020019161093f565b820191906000526020600020905b81548152906001019060200180831161092257829003601f168201915b5050505050905090565b60003361095781858561188d565b60019150505b92915050565b61096b6119b1565b6201d4c08111156109c35760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f772031322500000060448201526064015b60405180910390fd5b60158190556040518181527f4164afd9904b0eee72326020b7f2a0de2e3f5b8998738fbacf09229b66e5fd80906020015b60405180910390a150565b610a076119b1565b60005b8251811015610a6e578160096000858481518110610a2a57610a2a612988565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610a66816129b4565b915050610a0a565b505050565b610a7b6119b1565b600a811115610ac45760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b210313637b1b5b99031b7bab73a1760591b60448201526064016109ba565b601255565b600033610ad7858285611a0b565b610ae2858585611a7f565b506001949350505050565b610af56119b1565b610b156103e8610b0f6001610b0960025490565b9061186e565b90611881565b811015610b8a5760405162461bcd60e51b815260206004820152603960248201527f4d61782077616c6c657420616d6f756e742063616e6e6f74206265206c6f776560448201527f72207468616e20302e312520746f74616c20737570706c792e0000000000000060648201526084016109ba565b600f8190556040518181527f0176e9211818debdc4483c2bb0972798b7eb106239c8e465d4f1cee4ce5ae6e7906020016109f4565b600033610957818585610bd28383611408565b610bdc91906129cd565b61188d565b610be96119b1565b600c80549115156401000000000264ff0000000019909216919091179055565b610c116119b1565b30600090815260208190526040902054610c2a81612108565b50565b610c356119b1565b610c3f600061221e565b565b610c496119b1565b680ad78ebc5ac6200000600d819055600e819055600f55600c805464ff0000000019169055565b610c786119b1565b6001600160a01b038116610cde5760405162461bcd60e51b815260206004820152602760248201527f5f666565436f6c6c6563746f7257616c6c657420616464726573732063616e6e60448201526606f7420626520360cc1b60648201526084016109ba565b601b80546001600160a01b039081166000908152600960208181526040808420805460ff19908116909155865486168552600a80845282862080548316905587546001600160a01b03191698871698891788559785529282528084208054841660019081179091559554909416835294909452208054909216179055565b610d646119b1565b600c5460ff1615610db75760405162461bcd60e51b815260206004820152601f60248201527f436f6e747261637420697320616c726561647920696e697469616c697a65640060448201526064016109ba565b600c805464ffff0000001916640101000000179055610de56064610b0f680ad78ebc5ac6200000600261186e565b600d55610e016064610b0f680ad78ebc5ac6200000600261186e565b600e55610e1d6064610b0f680ad78ebc5ac6200000600261186e565b600f55610e3a612710610b0f680ad78ebc5ac6200000600561186e565b601a55600c805460ff191660011790556040517fc43e48cf47e9fa186d0f4096c61d1fcb54159799f935a2aa32e5589688ee36e190610e7c9043815260200190565b60405180910390a1565b610e8e6119b1565b6201d4c0811115610ee15760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f7720313225000060448201526064016109ba565b60178190556040518181527f74ee7e999ca1ca5e528cb19e41c5e12b09ef7ec7f52723b917fec754ce950472906020016109f4565b6060600480546108c69061294e565b60003381610f338286611408565b905083811015610f935760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109ba565b610ae2828686840361188d565b610fa86119b1565b600c8054911515650100000000000265ff000000000019909216919091179055565b600033610957818585611a7f565b610fe06119b1565b610ff5620186a0610b0f6001610b0960025490565b8110156110625760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016109ba565b6110766103e8610b0f6005610b0960025490565b8111156110e25760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016109ba565b601a8190556040518181527f09e89af7cbd8410d0ad2a74ab3cc8d9ddeef8ab1177f0f8a1984d355bb9d78f1906020016109f4565b61111f6119b1565b47610c2a81612270565b6111316119b1565b306001600160a01b038216036111895760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f74207769746864726177206f776e20746f6b656e0000000000000060448201526064016109ba565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156111d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f491906129e0565b1161122d5760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b60448201526064016109ba565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611274573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129891906129e0565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156112e8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6e91906129f9565b6113146119b1565b600c54610100900460ff161561136c5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720697320616c7265616479206f70656e00000000000000000060448201526064016109ba565b600a8111156113b55760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b210313637b1b5b99031b7bab73a1760591b60448201526064016109ba565b600c805461ff00191661010017905543601081905560118290556040517f8d3438059bb853597d71f33faf1d080795f797da60ef1c460fe5849903c24adb916109f4918490918252602082015260400190565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61143b6119b1565b600c8054911515600160301b0266ff00000000000019909216919091179055565b6114646119b1565b600c805491151563010000000263ff00000019909216919091179055565b61148a6119b1565b60005b8251811015610a6e57601c5483516001600160a01b03909116908490839081106114b9576114b9612988565b60200260200101516001600160a01b03161415801561150a575060065483516001600160a01b03909116908490839081106114f6576114f6612988565b60200260200101516001600160a01b031614155b80156115415750306001600160a01b031683828151811061152d5761152d612988565b60200260200101516001600160a01b031614155b1561159d5781600b600085848151811061155d5761155d612988565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055505b806115a7816129b4565b91505061148d565b6115b76119b1565b6115cb6103e8610b0f6001610b0960025490565b8110156116405760405162461bcd60e51b815260206004820152603760248201527f4d61782073656c6c20616d6f756e742063616e6e6f74206265206c6f7765722060448201527f7468616e20302e312520746f74616c20737570706c792e00000000000000000060648201526084016109ba565b600e8190556040518181527fa37090cc2feed4f3799a43ad59e5dab1cb6e70a7c1be92b72dbf9610550d5ac8906020016109f4565b61167d6119b1565b6001600160a01b0381166116e25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109ba565b610c2a8161221e565b6116f36119b1565b6117076103e8610b0f6001610b0960025490565b8110156117755760405162461bcd60e51b815260206004820152603660248201527f4d61782062757920616d6f756e742063616e6e6f74206265206c6f77657220746044820152753430b71018171892903a37ba30b61039bab838363c9760511b60648201526084016109ba565b600d8190556040518181527f3a0b1f960db2351f13a6a83576ad81b35de3396cf92b9150216f2a6eea641d9a906020016109f4565b6117b26119b1565b604051600090339047908381818185875af1925050503d80600081146117f4576040519150601f19603f3d011682016040523d82523d6000602084013e6117f9565b606091505b50505050565b6118076119b1565b60005b8251811015610a6e5781600a600085848151811061182a5761182a612988565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611866816129b4565b91505061180a565b600061187a8284612a16565b9392505050565b600061187a8284612a2d565b6001600160a01b0383166118ef5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109ba565b6001600160a01b0382166119505760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109ba565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610c3f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109ba565b6000611a178484611408565b905060001981146117f95781811015611a725760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016109ba565b6117f9848484840361188d565b6001600160a01b038316611aa55760405162461bcd60e51b81526004016109ba90612a4f565b6001600160a01b038216611acb5760405162461bcd60e51b81526004016109ba90612a94565b60008111611b2d5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016109ba565b601c546001906000906001600160a01b03868116911614611b6b57601c546001600160a01b03858116911614611b64576002611b6e565b6001611b6e565b60005b9050611b826005546001600160a01b031690565b6001600160a01b0316856001600160a01b031614158015611bb157506005546001600160a01b03858116911614155b8015611bc557506001600160a01b03841615155b8015611bdc57506001600160a01b03841661dead14155b8015611bf15750600c5462010000900460ff16155b15611f88576001600160a01b0385166000908152600b602052604090205460ff16158015611c3857506001600160a01b0384166000908152600b602052604090205460ff16155b611c735760405162461bcd60e51b815260206004820152600c60248201526b213630b1b5b634b9ba32b21760a11b60448201526064016109ba565b600c54640100000000900460ff1615611d86576006546001600160a01b03858116911614801590611cb25750601c546001600160a01b03858116911614155b15611d8657601254611cc49043612ad7565b32600090815260086020526040902054108015611d045750601254611ce99043612ad7565b6001600160a01b038516600090815260086020526040902054105b611d615760405162461bcd60e51b815260206004820152602860248201527f5472616e736665722064656c617920656e61626c65642e20547279206167616960448201526737103630ba32b91760c11b60648201526084016109ba565b3260009081526008602052604080822043908190556001600160a01b03871683529120555b6000816002811115611d9a57611d9a612aea565b148015611db557506006546001600160a01b03858116911614155b8015611dda57506001600160a01b0384166000908152600a602052604090205460ff16155b15611eca57600d54831115611e435760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178426044820152683abca0b6b7bab73a1760b91b60648201526084016109ba565b600f5483611e66866001600160a01b031660009081526020819052604090205490565b611e7091906129cd565b1115611eca5760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b60648201526084016109ba565b6001816002811115611ede57611ede612aea565b148015611ef957506006546001600160a01b03868116911614155b8015611f1e57506001600160a01b0385166000908152600a602052604090205460ff16155b15611f8857600e54831115611f885760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785360448201526932b63620b6b7bab73a1760b11b60648201526084016109ba565b6001600160a01b03851660009081526009602052604090205460ff1680611fc757506001600160a01b03841660009081526009602052604090205460ff165b80611fde5750600c5465010000000000900460ff16155b8061200f5750600c54600160301b900460ff1615801561200f5750600281600281111561200d5761200d612aea565b145b1561201957600091505b3060009081526020819052604081205490506000601a548211801561204f5750600183600281111561204d5761204d612aea565b145b90508080156120675750600c546301000000900460ff165b801561207c5750600c5462010000900460ff16155b80156120a157506001600160a01b03871660009081526009602052604090205460ff16155b80156120c657506001600160a01b03861660009081526009602052604090205460ff16155b156120f257600c805462ff00001916620100001790556120e5826122ae565b600c805462ff0000191690555b6120ff8787878787612458565b50505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061213d5761213d612988565b60200260200101906001600160a01b031690816001600160a01b031681525050736b175474e89094c44da98b954eedeac495271d0f8160018151811061218557612185612988565b6001600160a01b0392831660209182029290920101526006546121ab913091168461188d565b600654600754604051635c11d79560e01b81526001600160a01b0392831692635c11d795926121e892879260009288929116904290600401612b00565b600060405180830381600087803b15801561220257600080fd5b505af1158015612216573d6000803e3d6000fd5b505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601b546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156122aa573d6000803e3d6000fd5b5050565b8015806122bb5750601954155b156122c35750565b601a546122d190600561186e565b8111156122e957601a546122e690600561186e565b90505b6122f281612108565b600760009054906101000a90046001600160a01b03166001600160a01b0316633ccfd60b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561234257600080fd5b505af1158015612356573d6000803e3d6000fd5b505060006019555050601b546040516370a0823160e01b8152306004820152736b175474e89094c44da98b954eedeac495271d0f9163a9059cbb916001600160a01b039091169083906370a0823190602401602060405180830381865afa1580156123c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e991906129e0565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612434573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa91906129f9565b8161246a576124656124a0565b612478565b6124758584836124ce565b92505b6124838585856125ca565b8161249957612499601654601555601854601755565b5050505050565b6015541580156124b05750601754155b156124b757565b601580546016556017805460185560009182905555565b600c54600090610100900460ff1615806124f75750436011546010546124f491906129cd565b10155b156125125761250d620dbba06014819055601355565b61254b565b600182600281111561252657612526612aea565b0361253b5761250d6017546014819055601355565b61254b6015546014819055601355565b601354600090156125a657612572620f4240610b0f6013548761186e90919063ffffffff16565b9050601354601454826125859190612a16565b61258f9190612a2d565b601960008282546125a091906129cd565b90915550505b80156125b7576125b78530836125ca565b6125c18185612ad7565b95945050505050565b6001600160a01b0383166125f05760405162461bcd60e51b81526004016109ba90612a4f565b6001600160a01b0382166126165760405162461bcd60e51b81526004016109ba90612a94565b6001600160a01b0383166000908152602081905260409020548181101561268e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109ba565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36117f9565b600060208083528351808285015260005b8181101561272157858101830151858201604001528201612705565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461275957600080fd5b919050565b6000806040838503121561277157600080fd5b61277a83612742565b946020939093013593505050565b60006020828403121561279a57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b8015158114610c2a57600080fd5b8035612759816127b7565b600080604083850312156127e357600080fd5b823567ffffffffffffffff808211156127fb57600080fd5b818501915085601f83011261280f57600080fd5b8135602082821115612823576128236127a1565b8160051b604051601f19603f83011681018181108682111715612848576128486127a1565b60405292835281830193508481018201928984111561286657600080fd5b948201945b8386101561288b5761287c86612742565b8552948201949382019361286b565b965061289a90508782016127c5565b9450505050509250929050565b6000806000606084860312156128bc57600080fd5b6128c584612742565b92506128d360208501612742565b9150604084013590509250925092565b6000602082840312156128f557600080fd5b813561187a816127b7565b60006020828403121561291257600080fd5b61187a82612742565b6000806040838503121561292e57600080fd5b61293783612742565b915061294560208401612742565b90509250929050565b600181811c9082168061296257607f821691505b60208210810361298257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016129c6576129c661299e565b5060010190565b8082018082111561095d5761095d61299e565b6000602082840312156129f257600080fd5b5051919050565b600060208284031215612a0b57600080fd5b815161187a816127b7565b808202811582820484141761095d5761095d61299e565b600082612a4a57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561095d5761095d61299e565b634e487b7160e01b600052602160045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b505784516001600160a01b031683529383019391830191600101612b2b565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220c056a01b792b0367f0fffc9393a43b8f73aa0a7a01bb5321cdbd79146d7c96e064736f6c63430008110033

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000006bddceb6468161a265b44df0ec24ac53902acabc0000000000000000000000007beec514cfddf974b70dabed6b51fba15c0443760000000000000000000000006d698c5c7bdd288025fe2624175b7a09fc6ceade00000000000000000000000010121aca5ce3b959d6b0930d1d7fcce6669dfc4b0000000000000000000000004831f57e6d1f692ae597e0a765f5469422ce74f1000000000000000000000000e0f383cca99839849191516fca8559069ebdcd67000000000000000000000000b37cfa4000d924b02e31377d3cdce013247b48fd000000000000000000000000237c4724eb8fc06c04b2f28db2cde7ba358b39de000000000000000000000000bd3b896bbaecc5ed9ced8b10ce28cba576fbd54d000000000000000000000000ab0400a974b0cb1065fd57f6eb7403ad46984bec0000000000000000000000000000000000000000000000000000000000000005000000000000000000000000bcd5d017c302ea2a8475b3e94d21dc5d4d537f4b0000000000000000000000002f4821f2f5481ff63d9eb4072742bd27fc261d2e000000000000000000000000a5154fc14801f4cf4860bb191fba67a423b355f100000000000000000000000027adc5f14f8d52191b119b324896eb14e34f15d4000000000000000000000000bf72e2e1e6e8d5cef96ca83acdee2eeb4a6af607

-----Decoded View---------------
Arg [0] : liquidityProviders (address[]): 0x6BDdCeb6468161a265b44dF0eC24Ac53902AcAbC,0x7Beec514CfDdf974B70DaBEd6B51fBA15c044376,0x6D698C5c7bdd288025fe2624175B7A09FC6ceAde,0x10121AcA5Ce3b959D6b0930D1D7fCce6669dfc4b,0x4831F57e6D1f692AE597E0A765f5469422ce74f1,0xE0f383cCa99839849191516Fca8559069EBdcd67,0xb37CFa4000d924b02e31377d3CDCE013247b48FD,0x237c4724EB8fC06C04b2f28db2Cde7bA358B39DE,0xbD3B896bbaEcc5Ed9cEd8b10CE28cBa576FBD54d,0xAb0400a974b0CB1065FD57f6eB7403Ad46984BeC
Arg [1] : liquidityProviders2 (address[]): 0xBCd5d017c302eA2A8475B3E94D21dC5D4D537F4b,0x2f4821f2f5481fF63D9eb4072742Bd27fC261D2E,0xa5154fc14801f4cF4860BB191fBa67A423b355f1,0x27Adc5F14F8D52191b119B324896EB14E34f15D4,0xbf72e2E1E6E8d5Cef96ca83acDEe2EEb4A6af607

-----Encoded View---------------
19 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [3] : 0000000000000000000000006bddceb6468161a265b44df0ec24ac53902acabc
Arg [4] : 0000000000000000000000007beec514cfddf974b70dabed6b51fba15c044376
Arg [5] : 0000000000000000000000006d698c5c7bdd288025fe2624175b7a09fc6ceade
Arg [6] : 00000000000000000000000010121aca5ce3b959d6b0930d1d7fcce6669dfc4b
Arg [7] : 0000000000000000000000004831f57e6d1f692ae597e0a765f5469422ce74f1
Arg [8] : 000000000000000000000000e0f383cca99839849191516fca8559069ebdcd67
Arg [9] : 000000000000000000000000b37cfa4000d924b02e31377d3cdce013247b48fd
Arg [10] : 000000000000000000000000237c4724eb8fc06c04b2f28db2cde7ba358b39de
Arg [11] : 000000000000000000000000bd3b896bbaecc5ed9ced8b10ce28cba576fbd54d
Arg [12] : 000000000000000000000000ab0400a974b0cb1065fd57f6eb7403ad46984bec
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [14] : 000000000000000000000000bcd5d017c302ea2a8475b3e94d21dc5d4d537f4b
Arg [15] : 0000000000000000000000002f4821f2f5481ff63d9eb4072742bd27fc261d2e
Arg [16] : 000000000000000000000000a5154fc14801f4cf4860bb191fba67a423b355f1
Arg [17] : 00000000000000000000000027adc5f14f8d52191b119b324896eb14e34f15d4
Arg [18] : 000000000000000000000000bf72e2e1e6e8d5cef96ca83acdee2eeb4a6af607


Deployed Bytecode Sourcemap

28513:14496:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15953:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18304:201;;;;;;;;;;-1:-1:-1;18304:201:0;;;;;:::i;:::-;;:::i;:::-;;;1169:14:1;;1162:22;1144:41;;1132:2;1117:18;18304:201:0;1004:187:1;39748:191:0;;;;;;;;;;-1:-1:-1;39748:191:0;;;;;:::i;:::-;;:::i;29380:35::-;;;;;;;;;;;;;;;;;;;1527:25:1;;;1515:2;1500:18;29380:35:0;1381:177:1;39008:185:0;;;;;;;;;;-1:-1:-1;39008:185:0;;;;;:::i;:::-;;:::i;40154:160::-;;;;;;;;;;-1:-1:-1;40154:160:0;;;;;:::i;:::-;;:::i;28927:23::-;;;;;;;;;;-1:-1:-1;28927:23:0;;;;;;;;17073:108;;;;;;;;;;-1:-1:-1;17161:12:0;;17073:108;;19085:295;;;;;;;;;;-1:-1:-1;19085:295:0;;;;;:::i;:::-;;:::i;37725:308::-;;;;;;;;;;-1:-1:-1;37725:308:0;;;;;:::i;:::-;;:::i;29712:30::-;;;;;;;;;;;;;;;;16915:93;;;;;;;;;;-1:-1:-1;16915:93:0;;16998:2;3622:36:1;;3610:2;3595:18;16915:93:0;3480:184:1;19789:238:0;;;;;;;;;;-1:-1:-1;19789:238:0;;;;;:::i;:::-;;:::i;29627:29::-;;;;;;;;;;;;;;;;36709:99;;;;;;;;;;-1:-1:-1;36709:99:0;;;;;:::i;:::-;;:::i;29284:39::-;;;;;;;;;;;;;;;;41919:152;;;;;;;;;;;;;:::i;29016:31::-;;;;;;;;;;-1:-1:-1;29016:31:0;;;;;;;;;;;17244:127;;;;;;;;;;-1:-1:-1;17244:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;17345:18:0;17318:7;17345:18;;;;;;;;;;;;17244:127;2716:103;;;;;;;;;;;;;:::i;42742:189::-;;;;;;;;;;;;;:::i;38509:491::-;;;;;;;;;;-1:-1:-1;38509:491:0;;;;;:::i;:::-;;:::i;35883:458::-;;;;;;;;;;;;;:::i;29239:38::-;;;;;;;;;;;;;;;;39947:199;;;;;;;;;;-1:-1:-1;39947:199:0;;;;;:::i;:::-;;:::i;2068:87::-;;;;;;;;;;-1:-1:-1;2141:6:0;;2068:87;;-1:-1:-1;;;;;2141:6:0;;;4252:51:1;;4240:2;4225:18;2068:87:0;4106:203:1;16172:104:0;;;;;;;;;;;;;:::i;29511:45::-;;;;;;;;;;;;29549:7;29511:45;;20530:436;;;;;;;;;;-1:-1:-1;20530:436:0;;;;;:::i;:::-;;:::i;29096:30::-;;;;;;;;;;-1:-1:-1;29096:30:0;;;;;;;;;;;36915:91;;;;;;;;;;-1:-1:-1;36915:91:0;;;;;:::i;:::-;;:::i;17577:193::-;;;;;;;;;;-1:-1:-1;17577:193:0;;;;;:::i;:::-;;:::i;29054:35::-;;;;;;;;;;-1:-1:-1;29054:35:0;;;;;;;;;;;29330:41;;;;;;;;;;;;;;;;38045:456;;;;;;;;;;-1:-1:-1;38045:456:0;;;;;:::i;:::-;;:::i;42083:156::-;;;;;;;;;;;;;:::i;42413:321::-;;;;;;;;;;-1:-1:-1;42413:321:0;;;;;:::i;:::-;;:::i;36349:352::-;;;;;;;;;;-1:-1:-1;36349:352:0;;;;;:::i;:::-;;:::i;17833:151::-;;;;;;;;;;-1:-1:-1;17833:151:0;;;;;:::i;:::-;;:::i;37014:107::-;;;;;;;;;;-1:-1:-1;37014:107:0;;;;;:::i;:::-;;:::i;36816:91::-;;;;;;;;;;-1:-1:-1;36816:91:0;;;;;:::i;:::-;;:::i;39423:317::-;;;;;;;;;;-1:-1:-1;39423:317:0;;;;;:::i;:::-;;:::i;37421:292::-;;;;;;;;;;-1:-1:-1;37421:292:0;;;;;:::i;:::-;;:::i;29133:38::-;;;;;;;;;;-1:-1:-1;29133:38:0;;;;-1:-1:-1;;;29133:38:0;;;;;;2974:201;;;;;;;;;;-1:-1:-1;2974:201:0;;;;;:::i;:::-;;:::i;37129:284::-;;;;;;;;;;-1:-1:-1;37129:284:0;;;;;:::i;:::-;;:::i;42247:158::-;;;;;;;;;;;;;:::i;39205:206::-;;;;;;;;;;-1:-1:-1;39205:206:0;;;;;:::i;:::-;;:::i;35759:116::-;;;;;;;;;;-1:-1:-1;35759:116:0;;;;;:::i;:::-;-1:-1:-1;;;;;35845:22:0;35821:4;35845:22;;;:14;:22;;;;;;;;;35759:116;28957:23;;;;;;;;;;-1:-1:-1;28957:23:0;;;;;;;;;;;15953:100;16007:13;16040:5;16033:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15953:100;:::o;18304:201::-;18387:4;785:10;18443:32;785:10;18459:7;18468:6;18443:8;:32::i;:::-;18493:4;18486:11;;;18304:201;;;;;:::o;39748:191::-;1954:13;:11;:13::i;:::-;39831:6:::1;39820:7;:17;;39812:59;;;::::0;-1:-1:-1;;;39812:59:0;;5166:2:1;39812:59:0::1;::::0;::::1;5148:21:1::0;5205:2;5185:18;;;5178:30;5244:31;5224:18;;;5217:59;5293:18;;39812:59:0::1;;;;;;;;;39882:6;:16:::0;;;39914:17:::1;::::0;1527:25:1;;;39914:17:0::1;::::0;1515:2:1;1500:18;39914:17:0::1;;;;;;;;39748:191:::0;:::o;39008:185::-;1954:13;:11;:13::i;:::-;39108:6:::1;39103:82;39124:8;:15;39120:1;:19;39103:82;;;39181:4;39146:19;:32;39166:8;39175:1;39166:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;39146:32:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;39146:32:0;:39;;-1:-1:-1;;39146:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39141:3;::::1;::::0;::::1;:::i;:::-;;;;39103:82;;;;39008:185:::0;;:::o;40154:160::-;1954:13;:11;:13::i;:::-;40243:2:::1;40233:6;:12;;40225:46;;;::::0;-1:-1:-1;;;40225:46:0;;5928:2:1;40225:46:0::1;::::0;::::1;5910:21:1::0;5967:2;5947:18;;;5940:30;-1:-1:-1;;;5986:18:1;;;5979:51;6047:18;;40225:46:0::1;5726:345:1::0;40225:46:0::1;40282:15;:24:::0;40154:160::o;19085:295::-;19216:4;785:10;19274:38;19290:4;785:10;19305:6;19274:15;:38::i;:::-;19323:27;19333:4;19339:2;19343:6;19323:9;:27::i;:::-;-1:-1:-1;19368:4:0;;19085:295;-1:-1:-1;;;;19085:295:0:o;37725:308::-;1954:13;:11;:13::i;:::-;37836:30:::1;37861:4;37836:20;37854:1;37836:13;17161:12:::0;;;17073:108;37836:13:::1;:17:::0;::::1;:20::i;:::-;:24:::0;::::1;:30::i;:::-;37815:16;:52;;37807:122;;;::::0;-1:-1:-1;;;37807:122:0;;6278:2:1;37807:122:0::1;::::0;::::1;6260:21:1::0;6317:2;6297:18;;;6290:30;6356:34;6336:18;;;6329:62;6427:27;6407:18;;;6400:55;6472:19;;37807:122:0::1;6076:421:1::0;37807:122:0::1;37940:15;:34:::0;;;37990:35:::1;::::0;1527:25:1;;;37990:35:0::1;::::0;1515:2:1;1500:18;37990:35:0::1;1381:177:1::0;19789:238:0;19877:4;785:10;19933:64;785:10;19949:7;19986:10;19958:25;785:10;19949:7;19958:9;:25::i;:::-;:38;;;;:::i;:::-;19933:8;:64::i;36709:99::-;1954:13;:11;:13::i;:::-;36777:15:::1;:23:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;36777:23:0;;::::1;::::0;;;::::1;::::0;;36709:99::o;41919:152::-;1954:13;:11;:13::i;:::-;42009:4:::1;41965:23;17345:18:::0;;;;;;;;;;;42026:37:::1;17345:18:::0;42026:20:::1;:37::i;:::-;41954:117;41919:152::o:0;2716:103::-;1954:13;:11;:13::i;:::-;2781:30:::1;2808:1;2781:18;:30::i;:::-;2716:103::o:0;42742:189::-;1954:13;:11;:13::i;:::-;29216:14:::1;42794:12;:23:::0;;;42828:13:::1;:24:::0;;;42863:15:::1;:26:::0;42900:15:::1;:23:::0;;-1:-1:-1;;42900:23:0::1;::::0;;42742:189::o;38509:491::-;1954:13;:11;:13::i;:::-;-1:-1:-1;;;;;38604:26:0;::::1;38596:78;;;::::0;-1:-1:-1;;;38596:78:0;;6834:2:1;38596:78:0::1;::::0;::::1;6816:21:1::0;6873:2;6853:18;;;6846:30;6912:34;6892:18;;;6885:62;-1:-1:-1;;;6963:18:1;;;6956:37;7010:19;;38596:78:0::1;6632:403:1::0;38596:78:0::1;38705:19;::::0;;-1:-1:-1;;;;;38705:19:0;;::::1;38728:5;38685:40:::0;;;:19:::1;:40;::::0;;;;;;;:48;;-1:-1:-1;;38685:48:0;;::::1;::::0;;;38776:19;;;::::1;38744:52:::0;;:31:::1;:52:::0;;;;;;:60;;;::::1;::::0;;38815:49;;-1:-1:-1;;;;;;38815:49:0::1;::::0;;::::1;::::0;;::::1;::::0;;38875:40;;;;;;;;;:47;;;::::1;-1:-1:-1::0;38875:47:0;;::::1;::::0;;;38965:19;;;;::::1;38933:52:::0;;;;;;;:59;;;;::::1;;::::0;;38509:491::o;35883:458::-;1954:13;:11;:13::i;:::-;35942:11:::1;::::0;::::1;;35941:12;35933:56;;;::::0;-1:-1:-1;;;35933:56:0;;7242:2:1;35933:56:0::1;::::0;::::1;7224:21:1::0;7281:2;7261:18;;;7254:30;7320:33;7300:18;;;7293:61;7371:18;;35933:56:0::1;7040:355:1::0;35933:56:0::1;36000:11;:18:::0;;-1:-1:-1;;36029:22:0;;;;;36077:24:::1;36097:3;36077:15;29216:14;36090:1;36077:12;:15::i;:24::-;36062:12;:39:::0;36128:24:::1;36148:3;36128:15;29216:14;36141:1;36128:12;:15::i;:24::-;36112:13;:40:::0;36181:24:::1;36201:3;36181:15;29216:14;36194:1;36181:12;:15::i;:24::-;36163:15;:42:::0;36238:26:::1;36258:5;36238:15;29216:14;36251:1;36238:12;:15::i;:26::-;36216:19;:48:::0;36275:11:::1;:18:::0;;-1:-1:-1;;36275:18:0::1;36289:4;36275:18;::::0;;36309:24:::1;::::0;::::1;::::0;::::1;::::0;36320:12:::1;1527:25:1::0;;1515:2;1500:18;;1381:177;36309:24:0::1;;;;;;;;35883:458::o:0;39947:199::-;1954:13;:11;:13::i;:::-;40033:6:::1;40021:8;:18;;40013:61;;;::::0;-1:-1:-1;;;40013:61:0;;7602:2:1;40013:61:0::1;::::0;::::1;7584:21:1::0;7641:2;7621:18;;;7614:30;7680:32;7660:18;;;7653:60;7730:18;;40013:61:0::1;7400:354:1::0;40013:61:0::1;40085:7;:18:::0;;;40119:19:::1;::::0;1527:25:1;;;40119:19:0::1;::::0;1515:2:1;1500:18;40119:19:0::1;1381:177:1::0;16172:104:0;16228:13;16261:7;16254:14;;;;;:::i;20530:436::-;20623:4;785:10;20623:4;20706:25;785:10;20723:7;20706:9;:25::i;:::-;20679:52;;20770:15;20750:16;:35;;20742:85;;;;-1:-1:-1;;;20742:85:0;;7961:2:1;20742:85:0;;;7943:21:1;8000:2;7980:18;;;7973:30;8039:34;8019:18;;;8012:62;-1:-1:-1;;;8090:18:1;;;8083:35;8135:19;;20742:85:0;7759:401:1;20742:85:0;20863:60;20872:5;20879:7;20907:15;20888:16;:34;20863:8;:60::i;36915:91::-;1954:13;:11;:13::i;:::-;36979:11:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;36979:19:0;;::::1;::::0;;;::::1;::::0;;36915:91::o;17577:193::-;17656:4;785:10;17712:28;785:10;17729:2;17733:6;17712:9;:28::i;38045:456::-;1954:13;:11;:13::i;:::-;38163:32:::1;38188:6;38163:20;38181:1;38163:13;17161:12:::0;;;17073:108;38163:32:::1;38140:18;:56;;38132:122;;;::::0;-1:-1:-1;;;38132:122:0;;8367:2:1;38132:122:0::1;::::0;::::1;8349:21:1::0;8406:2;8386:18;;;8379:30;8445:34;8425:18;;;8418:62;-1:-1:-1;;;8496:18:1;;;8489:51;8557:19;;38132:122:0::1;8165:417:1::0;38132:122:0::1;38296:30;38321:4;38296:20;38314:1;38296:13;17161:12:::0;;;17073:108;38296:30:::1;38273:18;:54;;38265:119;;;::::0;-1:-1:-1;;;38265:119:0;;8789:2:1;38265:119:0::1;::::0;::::1;8771:21:1::0;8828:2;8808:18;;;8801:30;8867:34;8847:18;;;8840:62;-1:-1:-1;;;8918:18:1;;;8911:50;8978:19;;38265:119:0::1;8587:416:1::0;38265:119:0::1;38395:19;:40:::0;;;38451:42:::1;::::0;1527:25:1;;;38451:42:0::1;::::0;1515:2:1;1500:18;38451:42:0::1;1381:177:1::0;42083:156:0;1954:13;:11;:13::i;:::-;42166:21:::1;42198:33;42166:21:::0;42198:13:::1;:33::i;42413:321::-:0;1954:13;:11;:13::i;:::-;42506:4:::1;-1:-1:-1::0;;;;;42491:20:0;::::1;::::0;42483:58:::1;;;::::0;-1:-1:-1;;;42483:58:0;;9210:2:1;42483:58:0::1;::::0;::::1;9192:21:1::0;9249:2;9229:18;;;9222:30;9288:27;9268:18;;;9261:55;9333:18;;42483:58:0::1;9008:349:1::0;42483:58:0::1;42560:36;::::0;-1:-1:-1;;;42560:36:0;;42590:4:::1;42560:36;::::0;::::1;4252:51:1::0;42599:1:0::1;::::0;-1:-1:-1;;;;;42560:21:0;::::1;::::0;::::1;::::0;4225:18:1;;42560:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;42552:62;;;::::0;-1:-1:-1;;;42552:62:0;;9753:2:1;42552:62:0::1;::::0;::::1;9735:21:1::0;9792:1;9772:18;;;9765:29;-1:-1:-1;;;9810:18:1;;;9803:39;9859:18;;42552:62:0::1;9551:332:1::0;42552:62:0::1;42639:36;::::0;-1:-1:-1;;;42639:36:0;;42669:4:::1;42639:36;::::0;::::1;4252:51:1::0;42625:11:0::1;::::0;-1:-1:-1;;;;;42639:21:0;::::1;::::0;::::1;::::0;4225:18:1;;42639:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42686:40;::::0;-1:-1:-1;;;42686:40:0;;42707:10:::1;42686:40;::::0;::::1;10062:51:1::0;10129:18;;;10122:34;;;42625:50:0;;-1:-1:-1;;;;;;42686:20:0;::::1;::::0;::::1;::::0;10035:18:1;;42686:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;36349:352::-:0;1954:13;:11;:13::i;:::-;36423:11:::1;::::0;::::1;::::0;::::1;;;36422:12;36414:48;;;::::0;-1:-1:-1;;;36414:48:0;;10619:2:1;36414:48:0::1;::::0;::::1;10601:21:1::0;10658:2;10638:18;;;10631:30;10697:25;10677:18;;;10670:53;10740:18;;36414:48:0::1;10417:347:1::0;36414:48:0::1;36491:2;36481:6;:12;;36473:46;;;::::0;-1:-1:-1;;;36473:46:0;;5928:2:1;36473:46:0::1;::::0;::::1;5910:21:1::0;5967:2;5947:18;;;5940:30;-1:-1:-1;;;5986:18:1;;;5979:51;6047:18;;36473:46:0::1;5726:345:1::0;36473:46:0::1;36530:11;:18:::0;;-1:-1:-1;;36530:18:0::1;;;::::0;;36578:12:::1;36559:16;:31:::0;;;36601:18:::1;:27:::0;;;36644:49:::1;::::0;::::1;::::0;::::1;::::0;36622:6;;10943:25:1;;;10999:2;10984:18;;10977:34;10931:2;10916:18;;10769:248;17833:151:0;-1:-1:-1;;;;;17949:18:0;;;17922:7;17949:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17833:151::o;37014:107::-;1954:13;:11;:13::i;:::-;37086:19:::1;:27:::0;;;::::1;;-1:-1:-1::0;;;37086:27:0::1;-1:-1:-1::0;;37086:27:0;;::::1;::::0;;;::::1;::::0;;37014:107::o;36816:91::-;1954:13;:11;:13::i;:::-;36880:11:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;36880:19:0;;::::1;::::0;;;::::1;::::0;;36816:91::o;39423:317::-;1954:13;:11;:13::i;:::-;39518:6:::1;39513:220;39534:8;:15;39530:1;:19;39513:220;;;39590:14;::::0;39575:11;;-1:-1:-1;;;;;39590:14:0;;::::1;::::0;39575:8;;39584:1;;39575:11;::::1;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;39575:29:0::1;;;39574:77;;;;-1:-1:-1::0;39633:16:0::1;::::0;39610:11;;-1:-1:-1;;;;;39633:16:0;;::::1;::::0;39610:8;;39619:1;;39610:11;::::1;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;39610:40:0::1;;;39574:77;:111;;;;;39679:4;-1:-1:-1::0;;;;;39656:28:0::1;:8;39665:1;39656:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;39656:28:0::1;;;39574:111;39571:150;;;39717:4;39687:14;:27;39702:8;39711:1;39702:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;39687:27:0::1;-1:-1:-1::0;;;;;39687:27:0::1;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;39571:150;39551:3:::0;::::1;::::0;::::1;:::i;:::-;;;;39513:220;;37421:292:::0;1954:13;:11;:13::i;:::-;37526:30:::1;37551:4;37526:20;37544:1;37526:13;17161:12:::0;;;17073:108;37526:30:::1;37507:14;:50;;37499:118;;;::::0;-1:-1:-1;;;37499:118:0;;11224:2:1;37499:118:0::1;::::0;::::1;11206:21:1::0;11263:2;11243:18;;;11236:30;11302:34;11282:18;;;11275:62;11373:25;11353:18;;;11346:53;11416:19;;37499:118:0::1;11022:419:1::0;37499:118:0::1;37628:13;:30:::0;;;37674:31:::1;::::0;1527:25:1;;;37674:31:0::1;::::0;1515:2:1;1500:18;37674:31:0::1;1381:177:1::0;2974:201:0;1954:13;:11;:13::i;:::-;-1:-1:-1;;;;;3063:22:0;::::1;3055:73;;;::::0;-1:-1:-1;;;3055:73:0;;11648:2:1;3055:73:0::1;::::0;::::1;11630:21:1::0;11687:2;11667:18;;;11660:30;11726:34;11706:18;;;11699:62;-1:-1:-1;;;11777:18:1;;;11770:36;11823:19;;3055:73:0::1;11446:402:1::0;3055:73:0::1;3139:28;3158:8;3139:18;:28::i;37129:284::-:0;1954:13;:11;:13::i;:::-;37231:30:::1;37256:4;37231:20;37249:1;37231:13;17161:12:::0;;;17073:108;37231:30:::1;37213:13;:49;;37205:116;;;::::0;-1:-1:-1;;;37205:116:0;;12055:2:1;37205:116:0::1;::::0;::::1;12037:21:1::0;12094:2;12074:18;;;12067:30;12133:34;12113:18;;;12106:62;-1:-1:-1;;;12184:18:1;;;12177:52;12246:19;;37205:116:0::1;11853:418:1::0;37205:116:0::1;37332:12;:28:::0;;;37376:29:::1;::::0;1527:25:1;;;37376:29:0::1;::::0;1515:2:1;1500:18;37376:29:0::1;1381:177:1::0;42247:158:0;1954:13;:11;:13::i;:::-;42339:58:::1;::::0;42303:12:::1;::::0;42347:10:::1;::::0;42371:21:::1;::::0;42303:12;42339:58;42303:12;42339:58;42371:21;42347:10;42339:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;42247:158:0:o;39205:206::-;1954:13;:11;:13::i;:::-;39314:6:::1;39309:94;39330:8;:15;39326:1;:19;39309:94;;;39399:4;39352:31;:44;39384:8;39393:1;39384:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;39352:44:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;39352:44:0;:51;;-1:-1:-1;;39352:51:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39347:3;::::1;::::0;::::1;:::i;:::-;;;;39309:94;;7058:98:::0;7116:7;7143:5;7147:1;7143;:5;:::i;:::-;7136:12;7058:98;-1:-1:-1;;;7058:98:0:o;7457:::-;7515:7;7542:5;7546:1;7542;:5;:::i;24557:380::-;-1:-1:-1;;;;;24693:19:0;;24685:68;;;;-1:-1:-1;;;24685:68:0;;13083:2:1;24685:68:0;;;13065:21:1;13122:2;13102:18;;;13095:30;13161:34;13141:18;;;13134:62;-1:-1:-1;;;13212:18:1;;;13205:34;13256:19;;24685:68:0;12881:400:1;24685:68:0;-1:-1:-1;;;;;24772:21:0;;24764:68;;;;-1:-1:-1;;;24764:68:0;;13488:2:1;24764:68:0;;;13470:21:1;13527:2;13507:18;;;13500:30;13566:34;13546:18;;;13539:62;-1:-1:-1;;;13617:18:1;;;13610:32;13659:19;;24764:68:0;13286:398:1;24764:68:0;-1:-1:-1;;;;;24845:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24897:32;;1527:25:1;;;24897:32:0;;1500:18:1;24897:32:0;;;;;;;24557:380;;;:::o;2233:132::-;2141:6;;-1:-1:-1;;;;;2141:6:0;785:10;2297:23;2289:68;;;;-1:-1:-1;;;2289:68:0;;13891:2:1;2289:68:0;;;13873:21:1;;;13910:18;;;13903:30;13969:34;13949:18;;;13942:62;14021:18;;2289:68:0;13689:356:1;25228:453:0;25363:24;25390:25;25400:5;25407:7;25390:9;:25::i;:::-;25363:52;;-1:-1:-1;;25430:16:0;:37;25426:248;;25512:6;25492:16;:26;;25484:68;;;;-1:-1:-1;;;25484:68:0;;14252:2:1;25484:68:0;;;14234:21:1;14291:2;14271:18;;;14264:30;14330:31;14310:18;;;14303:59;14379:18;;25484:68:0;14050:353:1;25484:68:0;25596:51;25605:5;25612:7;25640:6;25621:16;:25;25596:8;:51::i;32288:2349::-;-1:-1:-1;;;;;32386:12:0;;32378:62;;;;-1:-1:-1;;;32378:62:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32459:10:0;;32451:58;;;;-1:-1:-1;;;32451:58:0;;;;;;;:::i;:::-;32537:1;32528:6;:10;32520:64;;;;-1:-1:-1;;;32520:64:0;;15420:2:1;32520:64:0;;;15402:21:1;15459:2;15439:18;;;15432:30;15498:34;15478:18;;;15471:62;-1:-1:-1;;;15549:18:1;;;15542:39;15598:19;;32520:64:0;15218:405:1;32520:64:0;32661:14;;32612:4;;32597:12;;-1:-1:-1;;;;;32653:22:0;;;32661:14;;32653:22;32652:121;;32708:14;;-1:-1:-1;;;;;32702:20:0;;;32708:14;;32702:20;32701:72;;32749:24;32652:121;;32701:72;32726:20;32652:121;;;32679:19;32652:121;32627:146;;32796:7;2141:6;;-1:-1:-1;;;;;2141:6:0;;2068:87;32796:7;-1:-1:-1;;;;;32788:15:0;:4;-1:-1:-1;;;;;32788:15:0;;;:32;;;;-1:-1:-1;2141:6:0;;-1:-1:-1;;;;;32807:13:0;;;2141:6;;32807:13;;32788:32;:46;;;;-1:-1:-1;;;;;;32824:10:0;;;;32788:46;:60;;;;-1:-1:-1;;;;;;32838:10:0;;30006:42;32838:10;;32788:60;:74;;;;-1:-1:-1;32853:9:0;;;;;;;32852:10;32788:74;32784:1227;;;-1:-1:-1;;;;;32888:20:0;;;;;;:14;:20;;;;;;;;32887:21;:44;;;;-1:-1:-1;;;;;;32913:18:0;;;;;;:14;:18;;;;;;;;32912:19;32887:44;32879:69;;;;-1:-1:-1;;;32879:69:0;;15830:2:1;32879:69:0;;;15812:21:1;15869:2;15849:18;;;15842:30;-1:-1:-1;;;15888:18:1;;;15881:42;15940:18;;32879:69:0;15628:336:1;32879:69:0;32969:15;;;;;;;32965:433;;;33023:16;;-1:-1:-1;;;;;33009:31:0;;;33023:16;;33009:31;;;;:64;;-1:-1:-1;33058:14:0;;-1:-1:-1;;;;;33044:29:0;;;33058:14;;33044:29;;33009:64;33005:378;;;33144:15;;33129:30;;:12;:30;:::i;:::-;33116:9;33106:20;;;;:9;:20;;;;;;:53;:103;;;;-1:-1:-1;33194:15:0;;33179:30;;:12;:30;:::i;:::-;-1:-1:-1;;;;;33163:13:0;;;;;;:9;:13;;;;;;:46;33106:103;33098:156;;;;-1:-1:-1;;;33098:156:0;;16304:2:1;33098:156:0;;;16286:21:1;16343:2;16323:18;;;16316:30;16382:34;16362:18;;;16355:62;-1:-1:-1;;;16433:18:1;;;16426:38;16481:19;;33098:156:0;16102:404:1;33098:156:0;33287:9;33277:20;;;;:9;:20;;;;;;33300:12;33277:35;;;;-1:-1:-1;;;;;33335:13:0;;;;;;:28;33005:378;33428:19;33418:6;:29;;;;;;;;:::i;:::-;;:64;;;;-1:-1:-1;33465:16:0;;-1:-1:-1;;;;;33451:31:0;;;33465:16;;33451:31;;33418:64;:104;;;;-1:-1:-1;;;;;;33487:35:0;;;;;;:31;:35;;;;;;;;33486:36;33418:104;33414:330;;;33561:12;;33551:6;:22;;33543:76;;;;-1:-1:-1;;;33543:76:0;;16845:2:1;33543:76:0;;;16827:21:1;16884:2;16864:18;;;16857:30;16923:34;16903:18;;;16896:62;-1:-1:-1;;;16974:18:1;;;16967:39;17023:19;;33543:76:0;16643:405:1;33543:76:0;33672:15;;33662:6;33646:13;33656:2;-1:-1:-1;;;;;17345:18:0;17318:7;17345:18;;;;;;;;;;;;17244:127;33646:13;:22;;;;:::i;:::-;:41;;33638:90;;;;-1:-1:-1;;;33638:90:0;;17255:2:1;33638:90:0;;;17237:21:1;17294:2;17274:18;;;17267:30;17333:34;17313:18;;;17306:62;-1:-1:-1;;;17384:18:1;;;17377:34;17428:19;;33638:90:0;17053:400:1;33638:90:0;33786:20;33776:6;:30;;;;;;;;:::i;:::-;;:67;;;;-1:-1:-1;33826:16:0;;-1:-1:-1;;;;;33810:33:0;;;33826:16;;33810:33;;33776:67;:109;;;;-1:-1:-1;;;;;;33848:37:0;;;;;;:31;:37;;;;;;;;33847:38;33776:109;33772:228;;;33924:13;;33914:6;:23;;33906:78;;;;-1:-1:-1;;;33906:78:0;;17660:2:1;33906:78:0;;;17642:21:1;17699:2;17679:18;;;17672:30;17738:34;17718:18;;;17711:62;-1:-1:-1;;;17789:18:1;;;17782:40;17839:19;;33906:78:0;17458:406:1;33906:78:0;-1:-1:-1;;;;;34026:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;34055:23:0;;;;;;:19;:23;;;;;;;;34026:52;:68;;;-1:-1:-1;34083:11:0;;;;;;;34082:12;34026:68;:132;;;-1:-1:-1;34100:19:0;;-1:-1:-1;;;34100:19:0;;;;34099:20;:58;;;;-1:-1:-1;34133:24:0;34123:6;:34;;;;;;;;:::i;:::-;;34099:58;34023:152;;;34170:5;34160:15;;34023:152;34232:4;34188:23;17345:18;;;;;;;;;;;34188:50;;34249:12;34283:19;;34265:15;:37;34264:75;;;;-1:-1:-1;34318:20:0;34308:6;:30;;;;;;;;:::i;:::-;;34264:75;34249:90;;34356:7;:22;;;;-1:-1:-1;34367:11:0;;;;;;;34356:22;:36;;;;-1:-1:-1;34383:9:0;;;;;;;34382:10;34356:36;:66;;;;-1:-1:-1;;;;;;34397:25:0;;;;;;:19;:25;;;;;;;;34396:26;34356:66;:94;;;;-1:-1:-1;;;;;;34427:23:0;;;;;;:19;:23;;;;;;;;34426:24;34356:94;34352:216;;;34467:9;:16;;-1:-1:-1;;34467:16:0;;;;;34498:26;34508:15;34498:9;:26::i;:::-;34539:9;:17;;-1:-1:-1;;34539:17:0;;;34352:216;34580:49;34595:4;34601:2;34605:6;34613:7;34622:6;34580:14;:49::i;:::-;32367:2270;;;;32288:2349;;;:::o;35111:521::-;35215:16;;;35229:1;35215:16;;;;;;;;35191:21;;35215:16;;;;;;;;;;-1:-1:-1;35215:16:0;35191:40;;35269:4;35251;35256:1;35251:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;35251:23:0;;;-1:-1:-1;;;;;35251:23:0;;;;;30167:42;35294:4;35299:1;35294:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35294:13:0;;;:7;;;;;;;;;:13;35359:16;;35327:63;;35344:4;;35359:16;35378:11;35327:8;:63::i;:::-;35410:16;;35564:9;;35410:205;;-1:-1:-1;;;35410:205:0;;-1:-1:-1;;;;;35410:16:0;;;;:70;;:205;;35495:11;;35410:16;;35537:4;;35564:9;;;35589:15;;35410:205;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35171:461;35111:521;:::o;3335:191::-;3428:6;;;-1:-1:-1;;;;;3445:17:0;;;-1:-1:-1;;;;;;3445:17:0;;;;;;;3478:40;;3428:6;;;3445:17;3428:6;;3478:40;;3409:16;;3478:40;3398:128;3335:191;:::o;35648:103::-;35707:19;;:36;;-1:-1:-1;;;;;35707:19:0;;;;:36;;;;;35736:6;;35707:19;:36;:19;:36;35736:6;35707:19;:36;;;;;;;;;;;;;;;;;;;;;35648:103;:::o;34645:449::-;34713:20;;;:43;;-1:-1:-1;34737:14:0;;:19;34713:43;34709:56;;;34645:449;:::o;34709:56::-;34799:19;;:26;;34823:1;34799:23;:26::i;:::-;34781:15;:44;34777:94;;;34845:19;;:26;;34869:1;34845:23;:26::i;:::-;34827:44;;34777:94;34884:37;34905:15;34884:20;:37::i;:::-;34935:9;;;;;;;;;-1:-1:-1;;;;;34935:9:0;-1:-1:-1;;;;;34935:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34993:1:0;34976:14;:18;-1:-1:-1;;35028:19:0;;35049:36;;-1:-1:-1;;;35049:36:0;;35079:4;35049:36;;;4252:51:1;30167:42:0;;35007:20;;-1:-1:-1;;;;;35028:19:0;;;;30167:42;;35049:21;;4225:18:1;;35049:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35007:79;;-1:-1:-1;;;;;;35007:79:0;;;;;;;-1:-1:-1;;;;;10080:32:1;;;35007:79:0;;;10062:51:1;10129:18;;;10122:34;10035:18;;35007:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;40684:334::-;40822:7;40817:87;;40831:15;:13;:15::i;:::-;40817:87;;;40871:33;40881:6;40889;40897;40871:9;:33::i;:::-;40862:42;;40817:87;40917:42;40933:6;40941:9;40952:6;40917:15;:42::i;:::-;40985:7;40980:30;;40994:16;40608:15;;40599:6;:24;40644:16;;40634:7;:26;40553:115;40994:16;40684:334;;;;;:::o;40322:219::-;40371:6;;:11;:27;;;;-1:-1:-1;40386:7:0;;:12;40371:27;40367:40;;;40322:219::o;40367:40::-;40437:6;;;40419:15;:24;40473:7;;;40454:16;:26;-1:-1:-1;40501:10:0;;;;40522:11;40322:219::o;41026:591::-;41143:11;;41119:7;;41143:11;;;;;41142:12;;:71;;;41200:12;41178:18;;41159:16;;:37;;;;:::i;:::-;:53;;41142:71;41139:172;;;41215:9;41671:6;41664:4;:13;;;41688:10;:17;41625:88;41215:9;41139:172;;;41254:20;41244:6;:30;;;;;;;;:::i;:::-;;41240:71;;41276:10;41768:7;;41761:4;:14;;;41786:10;:17;41721:90;41240:71;41302:9;41865:6;;41858:4;:13;;;41882:10;:17;41819:88;41302:9;41359:10;;41332:12;;41359:14;41355:150;;41397:39;29549:7;41397:22;41408:10;;41397:6;:10;;:22;;;;:::i;:39::-;41390:46;;41483:10;;41476:4;;41469;:11;;;;:::i;:::-;:24;;;;:::i;:::-;41451:14;;:42;;;;;;;:::i;:::-;;;;-1:-1:-1;;41355:150:0;41521:8;;41517:58;;41531:44;41547:6;41563:4;41570;41531:15;:44::i;:::-;41595:14;41605:4;41595:14;;:::i;:::-;;41026:591;-1:-1:-1;;;;;41026:591:0:o;21436:840::-;-1:-1:-1;;;;;21567:18:0;;21559:68;;;;-1:-1:-1;;;21559:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21646:16:0;;21638:64;;;;-1:-1:-1;;;21638:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21788:15:0;;21766:19;21788:15;;;;;;;;;;;21822:21;;;;21814:72;;;;-1:-1:-1;;;21814:72:0;;19343:2:1;21814:72:0;;;19325:21:1;19382:2;19362:18;;;19355:30;19421:34;19401:18;;;19394:62;-1:-1:-1;;;19472:18:1;;;19465:36;19518:19;;21814:72:0;19141:402:1;21814:72:0;-1:-1:-1;;;;;21922:15:0;;;:9;:15;;;;;;;;;;;21940:20;;;21922:38;;22140:13;;;;;;;;;;:23;;;;;;22192:26;;1527:25:1;;;22140:13:0;;22192:26;;1500:18:1;22192:26:0;;;;;;;22231:37;39008:185;14:548:1;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:1;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:1:o;1196:180::-;1255:6;1308:2;1296:9;1287:7;1283:23;1279:32;1276:52;;;1324:1;1321;1314:12;1276:52;-1:-1:-1;1347:23:1;;1196:180;-1:-1:-1;1196:180:1:o;1563:127::-;1624:10;1619:3;1615:20;1612:1;1605:31;1655:4;1652:1;1645:15;1679:4;1676:1;1669:15;1695:118;1781:5;1774:13;1767:21;1760:5;1757:32;1747:60;;1803:1;1800;1793:12;1818:128;1883:20;;1912:28;1883:20;1912:28;:::i;1951:1191::-;2041:6;2049;2102:2;2090:9;2081:7;2077:23;2073:32;2070:52;;;2118:1;2115;2108:12;2070:52;2158:9;2145:23;2187:18;2228:2;2220:6;2217:14;2214:34;;;2244:1;2241;2234:12;2214:34;2282:6;2271:9;2267:22;2257:32;;2327:7;2320:4;2316:2;2312:13;2308:27;2298:55;;2349:1;2346;2339:12;2298:55;2385:2;2372:16;2407:4;2430:2;2426;2423:10;2420:36;;;2436:18;;:::i;:::-;2482:2;2479:1;2475:10;2514:2;2508:9;2577:2;2573:7;2568:2;2564;2560:11;2556:25;2548:6;2544:38;2632:6;2620:10;2617:22;2612:2;2600:10;2597:18;2594:46;2591:72;;;2643:18;;:::i;:::-;2679:2;2672:22;2729:18;;;2763:15;;;;-1:-1:-1;2805:11:1;;;2801:20;;;2833:19;;;2830:39;;;2865:1;2862;2855:12;2830:39;2889:11;;;;2909:148;2925:6;2920:3;2917:15;2909:148;;;2991:23;3010:3;2991:23;:::i;:::-;2979:36;;2942:12;;;;3035;;;;2909:148;;;3076:6;-1:-1:-1;3101:35:1;;-1:-1:-1;3117:18:1;;;3101:35;:::i;:::-;3091:45;;;;;;1951:1191;;;;;:::o;3147:328::-;3224:6;3232;3240;3293:2;3281:9;3272:7;3268:23;3264:32;3261:52;;;3309:1;3306;3299:12;3261:52;3332:29;3351:9;3332:29;:::i;:::-;3322:39;;3380:38;3414:2;3403:9;3399:18;3380:38;:::i;:::-;3370:48;;3465:2;3454:9;3450:18;3437:32;3427:42;;3147:328;;;;;:::o;3669:241::-;3725:6;3778:2;3766:9;3757:7;3753:23;3749:32;3746:52;;;3794:1;3791;3784:12;3746:52;3833:9;3820:23;3852:28;3874:5;3852:28;:::i;3915:186::-;3974:6;4027:2;4015:9;4006:7;4002:23;3998:32;3995:52;;;4043:1;4040;4033:12;3995:52;4066:29;4085:9;4066:29;:::i;4314:260::-;4382:6;4390;4443:2;4431:9;4422:7;4418:23;4414:32;4411:52;;;4459:1;4456;4449:12;4411:52;4482:29;4501:9;4482:29;:::i;:::-;4472:39;;4530:38;4564:2;4553:9;4549:18;4530:38;:::i;:::-;4520:48;;4314:260;;;;;:::o;4579:380::-;4658:1;4654:12;;;;4701;;;4722:61;;4776:4;4768:6;4764:17;4754:27;;4722:61;4829:2;4821:6;4818:14;4798:18;4795:38;4792:161;;4875:10;4870:3;4866:20;4863:1;4856:31;4910:4;4907:1;4900:15;4938:4;4935:1;4928:15;4792:161;;4579:380;;;:::o;5322:127::-;5383:10;5378:3;5374:20;5371:1;5364:31;5414:4;5411:1;5404:15;5438:4;5435:1;5428:15;5454:127;5515:10;5510:3;5506:20;5503:1;5496:31;5546:4;5543:1;5536:15;5570:4;5567:1;5560:15;5586:135;5625:3;5646:17;;;5643:43;;5666:18;;:::i;:::-;-1:-1:-1;5713:1:1;5702:13;;5586:135::o;6502:125::-;6567:9;;;6588:10;;;6585:36;;;6601:18;;:::i;9362:184::-;9432:6;9485:2;9473:9;9464:7;9460:23;9456:32;9453:52;;;9501:1;9498;9491:12;9453:52;-1:-1:-1;9524:16:1;;9362:184;-1:-1:-1;9362:184:1:o;10167:245::-;10234:6;10287:2;10275:9;10266:7;10262:23;10258:32;10255:52;;;10303:1;10300;10293:12;10255:52;10335:9;10329:16;10354:28;10376:5;10354:28;:::i;12486:168::-;12559:9;;;12590;;12607:15;;;12601:22;;12587:37;12577:71;;12628:18;;:::i;12659:217::-;12699:1;12725;12715:132;;12769:10;12764:3;12760:20;12757:1;12750:31;12804:4;12801:1;12794:15;12832:4;12829:1;12822:15;12715:132;-1:-1:-1;12861:9:1;;12659:217::o;14408:401::-;14610:2;14592:21;;;14649:2;14629:18;;;14622:30;14688:34;14683:2;14668:18;;14661:62;-1:-1:-1;;;14754:2:1;14739:18;;14732:35;14799:3;14784:19;;14408:401::o;14814:399::-;15016:2;14998:21;;;15055:2;15035:18;;;15028:30;15094:34;15089:2;15074:18;;15067:62;-1:-1:-1;;;15160:2:1;15145:18;;15138:33;15203:3;15188:19;;14814:399::o;15969:128::-;16036:9;;;16057:11;;;16054:37;;;16071:18;;:::i;16511:127::-;16572:10;16567:3;16563:20;16560:1;16553:31;16603:4;16600:1;16593:15;16627:4;16624:1;16617:15;17869:980;18131:4;18179:3;18168:9;18164:19;18210:6;18199:9;18192:25;18236:2;18274:6;18269:2;18258:9;18254:18;18247:34;18317:3;18312:2;18301:9;18297:18;18290:31;18341:6;18376;18370:13;18407:6;18399;18392:22;18445:3;18434:9;18430:19;18423:26;;18484:2;18476:6;18472:15;18458:29;;18505:1;18515:195;18529:6;18526:1;18523:13;18515:195;;;18594:13;;-1:-1:-1;;;;;18590:39:1;18578:52;;18685:15;;;;18650:12;;;;18626:1;18544:9;18515:195;;;-1:-1:-1;;;;;;;18766:32:1;;;;18761:2;18746:18;;18739:60;-1:-1:-1;;;18830:3:1;18815:19;18808:35;18727:3;17869:980;-1:-1:-1;;;17869:980:1:o

Swarm Source

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