ETH Price: $3,342.01 (-3.42%)
 

Overview

Max Total Supply

100,000,000 FIGHT

Holders

28

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
FIGHTTRUMP

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-07-15
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

/*
    website  : https://fighttrump.xyz
    twitter  : https://x.com/truthtrumpceo
    telegram : https://t.me/fighttrumpchannel
*/

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

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

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

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

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

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

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

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

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

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}.
     *
     * 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 default value returned by this function, unless
     * it's 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);
    }

    function _transferStandard(
        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];

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

contract Ownable is Context {
    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

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

    function functionCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                0,
                "Address: low-level call failed"
            );
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

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

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(
        bytes memory returndata,
        string memory errorMessage
    ) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

library SafeERC20 {
    using Address for address;

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

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

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(
            data,
            "SafeERC20: low-level call failed"
        );
        if (returndata.length > 0) {
            require(
                abi.decode(returndata, (bool)),
                "SafeERC20: ERC20 operation did not succeed"
            );
        }
    }

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.approve.selector, spender, value)
        );
    }
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapETHForExactTokens(
        uint amountOut,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function getAmountsOut(
        uint amountIn,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}

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

contract FIGHTTRUMP is ERC20, Ownable {
    mapping(address => bool) public exemptFromFees;
    mapping(address => bool) public exemptFromLimits;

    bool public tradingActive;

    mapping(address => bool) public isAMMPair;

    uint256 public maxTransaction;
    uint256 public maxWallet;
    uint256 public maxTax;

    address public taxReceiverAddress;

    uint256 public buyTotalTax = 0;
    uint256 public sellTotalTax = 0;
    uint256 private reduceAt = 20;
    uint256 private initialTax = 4200;
    uint256 private buyCount = 0;

    bool public limitsInEffect = true;

    bool public swapEnabled = false;
    bool private swapping;

    address public lpPair;
    IDexRouter public dexRouter;

    uint256 public constant FEE_DIVISOR = 10000;

    // events

    event UpdatedMaxTransaction(uint256 newMax);
    event UpdatedMaxWallet(uint256 newMax);
    event SetExemptFromFees(address _address, bool _isExempt);
    event SetExemptFromLimits(address _address, bool _isExempt);
    event RemovedLimits();
    event UpdatedBuyTax(uint256 newAmt);
    event UpdatedSellTax(uint256 newAmt);

    // constructor

    constructor(address payable _wallet) ERC20("FIGHT TRUMP", "FIGHT") {
        address newOwner = msg.sender;
        _mint(newOwner, 100_000_000 * (10 ** decimals()));

        address _v2Router;

        // @dev assumes WETH pair
        if (block.chainid == 1) {
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if (block.chainid == 5) {
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if (block.chainid == 97) {
            _v2Router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
        } else if (block.chainid == 42161) {
            _v2Router = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506;
        } else if (block.chainid == 8453) {
            _v2Router = 0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24;
        } else {
            revert("Chain not configured");
        }

        dexRouter = IDexRouter(_v2Router);

        maxTransaction = (totalSupply() * 20) / 1000;
        maxWallet = (totalSupply() * 20) / 1000;
        maxTax = (totalSupply() * 10) / 1000;

        taxReceiverAddress = _wallet;

        exemptFromLimits[msg.sender] = true;
        exemptFromLimits[address(this)] = true;
        exemptFromLimits[taxReceiverAddress] = true;

        exemptFromFees[msg.sender] = true;
        exemptFromFees[address(this)] = true;
        exemptFromFees[taxReceiverAddress] = true;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        checkFightTrumpLimits(from, to, amount);

        if (!swapEnabled || swapping) return;

        amount -= handleFightTrumpTax(from, to, amount);

        super._transfer(from, to, amount);
    }

    function checkFightTrumpLimits(address from, address to, uint256 amount) internal {
        if (!tradingActive) {
            require(
                exemptFromFees[from] || exemptFromFees[to],
                "Trading is not active."
            );
        }

        if (!swapEnabled || swapping) {
            super._transfer(from, to, amount);
            return;
        }

        if (limitsInEffect) {
            // buy
            if (isAMMPair[from] && !exemptFromLimits[to]) {
                require(
                    amount <= maxTransaction,
                    "Buy transfer amount exceeded."
                );
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "Unable to exceed Max Wallet"
                );
                buyCount++;
            }
            // sell
            else if (isAMMPair[to] && !exemptFromLimits[from]) {
                require(
                    amount <= maxTransaction,
                    "Sell transfer amount exceeds the maxTransactionAmt."
                );
            } else if (!exemptFromLimits[to]) {
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "Unable to exceed Max Wallet"
                );
            }
        }
    }

    function handleFightTrumpTax(
        address from,
        address to,
        uint256 amount
    ) internal returns (uint256) {
        if (
            swapEnabled && !swapping && isAMMPair[to] && !exemptFromFees[from]
        ) {
            swapping = true;
            swapBack(amount);
            swapping = false;
        }

        bool takeFee = true;
        if (exemptFromFees[from]) {
            takeFee = false;
        }

        uint256 tax = amount;

        // on sell
        if (takeFee) {
            tax = 0;
            if (isAMMPair[to]) {
                tax =
                    (amount *
                        (buyCount > reduceAt ? sellTotalTax : initialTax)) /
                    FEE_DIVISOR;
            }
            // on buy
            else if (isAMMPair[from]) {
                tax =
                    (amount *
                        (buyCount > reduceAt ? buyTotalTax : initialTax)) /
                    FEE_DIVISOR;
            }
            if (tax > 0) {
                super._transfer(from, address(this), tax);
            }
            return tax;
        } else {
            super._transferStandard(from, address(this), tax);
            return 0;
        }

    }

    function swapTokensForETH(uint256 tokenAmt) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = address(dexRouter.WETH());

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmt,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack(uint256 tokens) private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 tokensToSwap;

        if (contractBalance > 0 && contractBalance < maxTax) {
            tokensToSwap = contractBalance;
        } else {
            if (tokens > maxTax) {
                tokensToSwap = maxTax;
            } else {
                tokensToSwap = tokens;
            }
        }

        if (contractBalance > 0) swapTokensForETH(tokensToSwap);

        uint256 contractETHBalance = address(this).balance;
        sendETH(contractETHBalance);
    }

    function sendETH(uint256 amount) private {
        payable(taxReceiverAddress).transfer(amount);
    }

    // owner functions
    function setExemptFromFees(
        address _address,
        bool _isExempt
    ) external onlyOwner {
        require(_address != address(0), "Zero Address");
        exemptFromFees[_address] = _isExempt;
        emit SetExemptFromFees(_address, _isExempt);
    }

    function setExemptFromLimits(
        address _address,
        bool _isExempt
    ) external onlyOwner {
        require(_address != address(0), "Zero Address");
        if (!_isExempt) {
            require(_address != lpPair, "Cannot remove pair");
        }
        exemptFromLimits[_address] = _isExempt;
        emit SetExemptFromLimits(_address, _isExempt);
    }

    function updateMaxTransaction(uint256 newNumInTokens) external onlyOwner {
        require(
            newNumInTokens >= ((totalSupply() * 5) / 1000) / (10 ** decimals()),
            "Too low"
        );
        maxTransaction = newNumInTokens * (10 ** decimals());
        emit UpdatedMaxTransaction(maxTransaction);
    }

    function updateMaxWallet(uint256 newNumInTokens) external onlyOwner {
        require(
            newNumInTokens >=
                ((totalSupply() * 15) / 1000) / (10 ** decimals()),
            "Too low"
        );
        maxWallet = newNumInTokens * (10 ** decimals());
        emit UpdatedMaxWallet(maxWallet);
    }

    function updateBuyTax(uint256 _taxWithTwoDecimals) external onlyOwner {
        buyTotalTax = _taxWithTwoDecimals;
        require(buyTotalTax <= 1200, "Keep tax below 12%");
        emit UpdatedBuyTax(buyTotalTax);
    }

    function updateSellTax(uint256 _taxWithTwoDecimals) external onlyOwner {
        sellTotalTax = _taxWithTwoDecimals;
        require(sellTotalTax <= 1200, "Keep tax below 12%");
        emit UpdatedSellTax(sellTotalTax);
    }

    function createLP() external onlyOwner {
        require(!tradingActive, "trading is already open");
        lpPair = IDexFactory(dexRouter.factory()).createPair(
            address(this),
            dexRouter.WETH()
        );

        isAMMPair[lpPair] = true;

        exemptFromLimits[lpPair] = true;

        _approve(address(this), address(dexRouter), type(uint256).max);
        _approve(address(msg.sender), address(dexRouter), totalSupply());

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );
        IERC20(lpPair).approve(address(dexRouter), type(uint).max);
    }

    function enableFT() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        maxTransaction = totalSupply();
        maxWallet = totalSupply();
        emit RemovedLimits();
    }

    function rescueStuckEth() external {
        require(msg.sender == owner());
        require(address(this).balance > 0, "Token: no ETH to clear");
        payable(msg.sender).transfer(address(this).balance);
    }

    function rescueTokens(address _token, address _to) external onlyOwner {
        require(_token != address(0), "_token address cannot be 0");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        SafeERC20.safeTransfer(IERC20(_token), _to, _contractBalance);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"_wallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedMaxTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedSellTax","type":"event"},{"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":"buyTotalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createLP","outputs":[],"stateMutability":"nonpayable","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":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAMMPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromLimits","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":"taxReceiverAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"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":[{"internalType":"uint256","name":"_taxWithTwoDecimals","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNumInTokens","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNumInTokens","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxWithTwoDecimals","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600e819055600f81905560146010556110686011556012556013805461ffff191660011790553480156200003957600080fd5b5060405162002fc438038062002fc48339810160408190526200005c9162000451565b6040518060400160405280600b81526020016a04649474854205452554d560ac1b81525060405180604001604052806005815260200164119251d21560da1b8152508160039081620000af919062000527565b506004620000be828262000527565b5050506000620000d36200038560201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350336200014b81620001356012600a62000708565b62000145906305f5e10062000719565b62000389565b600046600103620001725750737a250d5630b4cf539739df2c5dacb4c659f2488d62000255565b46600503620001975750737a250d5630b4cf539739df2c5dacb4c659f2488d62000255565b46606103620001bc575073d99d1c33f9fc3444f8101754abc46c52416550d162000255565b4661a4b103620001e25750731b02da8cb0d097eb8d57a175b88c7d8b4799750662000255565b4661210503620002085750734752ba5dbc23f44d87826276bf6fd6b1c372ad2462000255565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b601480546001600160a01b0319166001600160a01b0383161790556103e86200027d60025490565b6200028a90601462000719565b62000296919062000733565b600a556103e8620002a660025490565b620002b390601462000719565b620002bf919062000733565b600b556103e8620002cf60025490565b620002dc90600a62000719565b620002e8919062000733565b600c555050600d80546001600160a01b0319166001600160a01b03928316178155336000818152600760209081526040808320805460ff1990811660019081179092553080865283862080548316841790558754891686528386208054831684179055958552600690935281842080548416821790559383528083208054831685179055935490941681529190912080549092161790556200076c565b3390565b6001600160a01b038216620003e15760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200024c565b8060026000828254620003f5919062000756565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b6000602082840312156200046457600080fd5b81516001600160a01b03811681146200047c57600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620004ae57607f821691505b602082108103620004cf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200044c57600081815260208120601f850160051c81016020861015620004fe5750805b601f850160051c820191505b818110156200051f578281556001016200050a565b505050505050565b81516001600160401b0381111562000543576200054362000483565b6200055b8162000554845462000499565b84620004d5565b602080601f8311600181146200059357600084156200057a5750858301515b600019600386901b1c1916600185901b1785556200051f565b600085815260208120601f198616915b82811015620005c457888601518255948401946001909101908401620005a3565b5085821015620005e35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200064a5781600019048211156200062e576200062e620005f3565b808516156200063c57918102915b93841c93908002906200060e565b509250929050565b600082620006635750600162000702565b81620006725750600062000702565b81600181146200068b57600281146200069657620006b6565b600191505062000702565b60ff841115620006aa57620006aa620005f3565b50506001821b62000702565b5060208310610133831016604e8410600b8410161715620006db575081810a62000702565b620006e7838362000609565b8060001904821115620006fe57620006fe620005f3565b0290505b92915050565b60006200047c60ff84168362000652565b8082028115828204841417620007025762000702620005f3565b6000826200075157634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620007025762000702620005f3565b612848806200077c6000396000f3fe60806040526004361061023f5760003560e01c80636ddd17131161012e578063a457c2d7116100ab578063dd62ed3e1161006f578063dd62ed3e146106ba578063e27a55fe146106da578063f2fde38b146106f0578063f7f23a0c14610710578063f8b45b051461072557600080fd5b8063a457c2d71461061a578063a9059cbb1461063a578063b0249cc61461065a578063bbc0c7421461068a578063c3f70b52146106a457600080fd5b80638d3e6e40116100f25780638d3e6e40146105815780638da5cb5b146105b157806395d89b41146105cf5780639e93ad8e146105e4578063a13d1a2b146105fa57600080fd5b80636ddd1713146104e257806370a0823114610501578063715018a614610537578063751039fc1461054c57806377b27d1f1461056157600080fd5b8063313ce567116101bc5780634a62bb65116101805780634a62bb651461044c5780635431c94e146104665780635a90a49e146104865780635df6e68e146104b65780636d8813c5146104cc57600080fd5b8063313ce567146103b457806339509351146103d05780633b611e00146103f0578063436d334014610405578063452ed4f11461042557600080fd5b806312185a391161020357806312185a391461032057806318160ddd146103405780631c499ab01461035f5780631d9154771461037f57806323b872dd1461039457600080fd5b80630517d13d1461024b57806306fdde031461026d5780630758d92414610298578063095ea7b3146102d0578063114ca2ed1461030057600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5061026b6102663660046122f2565b61073b565b005b34801561027957600080fd5b50610282610830565b60405161028f919061232f565b60405180910390f35b3480156102a457600080fd5b506014546102b8906001600160a01b031681565b6040516001600160a01b03909116815260200161028f565b3480156102dc57600080fd5b506102f06102eb366004612377565b6108c2565b604051901515815260200161028f565b34801561030c57600080fd5b50600d546102b8906001600160a01b031681565b34801561032c57600080fd5b5061026b61033b3660046122f2565b6108dc565b34801561034c57600080fd5b506002545b60405190815260200161028f565b34801561036b57600080fd5b5061026b61037a3660046122f2565b610985565b34801561038b57600080fd5b5061026b610a6a565b3480156103a057600080fd5b506102f06103af3660046123a3565b610ab2565b3480156103c057600080fd5b506040516012815260200161028f565b3480156103dc57600080fd5b506102f06103eb366004612377565b610ad8565b3480156103fc57600080fd5b5061026b610afa565b34801561041157600080fd5b5061026b6104203660046122f2565b610b89565b34801561043157600080fd5b506013546102b890630100000090046001600160a01b031681565b34801561045857600080fd5b506013546102f09060ff1681565b34801561047257600080fd5b5061026b6104813660046123e4565b610c32565b34801561049257600080fd5b506102f06104a136600461241d565b60066020526000908152604090205460ff1681565b3480156104c257600080fd5b50610351600e5481565b3480156104d857600080fd5b50610351600c5481565b3480156104ee57600080fd5b506013546102f090610100900460ff1681565b34801561050d57600080fd5b5061035161051c36600461241d565b6001600160a01b031660009081526020819052604090205490565b34801561054357600080fd5b5061026b610d2f565b34801561055857600080fd5b5061026b610da3565b34801561056d57600080fd5b5061026b61057c366004612448565b610e0e565b34801561058d57600080fd5b506102f061059c36600461241d565b60076020526000908152604090205460ff1681565b3480156105bd57600080fd5b506005546001600160a01b03166102b8565b3480156105db57600080fd5b50610282610ee1565b3480156105f057600080fd5b5061035161271081565b34801561060657600080fd5b5061026b610615366004612448565b610ef0565b34801561062657600080fd5b506102f0610635366004612377565b61101a565b34801561064657600080fd5b506102f0610655366004612377565b6110a0565b34801561066657600080fd5b506102f061067536600461241d565b60096020526000908152604090205460ff1681565b34801561069657600080fd5b506008546102f09060ff1681565b3480156106b057600080fd5b50610351600a5481565b3480156106c657600080fd5b506103516106d53660046123e4565b6110ae565b3480156106e657600080fd5b50610351600f5481565b3480156106fc57600080fd5b5061026b61070b36600461241d565b6110d9565b34801561071c57600080fd5b5061026b6111c4565b34801561073157600080fd5b50610351600b5481565b6005546001600160a01b0316331461076e5760405162461bcd60e51b815260040161076590612476565b60405180910390fd5b61077a6012600a6125a5565b6103e861078660025490565b6107919060056125b4565b61079b91906125cb565b6107a591906125cb565b8110156107de5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610765565b6107ea6012600a6125a5565b6107f490826125b4565b600a8190556040519081527f76a9278644b7300961aa0e7e86f10934585987f1daf1c6ecc971c18376691574906020015b60405180910390a150565b60606003805461083f906125ed565b80601f016020809104026020016040519081016040528092919081815260200182805461086b906125ed565b80156108b85780601f1061088d576101008083540402835291602001916108b8565b820191906000526020600020905b81548152906001019060200180831161089b57829003601f168201915b5050505050905090565b6000336108d081858561159d565b60019150505b92915050565b6005546001600160a01b031633146109065760405162461bcd60e51b815260040161076590612476565b600f8190556104b08111156109525760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772031322560701b6044820152606401610765565b7fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c97600f5460405161082591815260200190565b6005546001600160a01b031633146109af5760405162461bcd60e51b815260040161076590612476565b6109bb6012600a6125a5565b6103e86109c760025490565b6109d290600f6125b4565b6109dc91906125cb565b6109e691906125cb565b811015610a1f5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610765565b610a2b6012600a6125a5565b610a3590826125b4565b600b8190556040519081527f3046ad62de8b70d396246aaed19ff2559ff20df8706520cbde58320766c4276290602001610825565b6005546001600160a01b03163314610a945760405162461bcd60e51b815260040161076590612476565b6008805460ff191660011790556013805461ff001916610100179055565b600033610ac08582856116c1565b610acb85858561173b565b60019150505b9392505050565b6000336108d0818585610aeb83836110ae565b610af59190612627565b61159d565b6005546001600160a01b03163314610b1157600080fd5b60004711610b5a5760405162461bcd60e51b81526020600482015260166024820152752a37b5b2b71d1037379022aa24103a379031b632b0b960511b6044820152606401610765565b60405133904780156108fc02916000818181858888f19350505050158015610b86573d6000803e3d6000fd5b50565b6005546001600160a01b03163314610bb35760405162461bcd60e51b815260040161076590612476565b600e8190556104b0811115610bff5760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772031322560701b6044820152606401610765565b7f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece0508600e5460405161082591815260200190565b6005546001600160a01b03163314610c5c5760405162461bcd60e51b815260040161076590612476565b6001600160a01b038216610cb25760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610765565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1d919061263a565b9050610d2a838383611791565b505050565b6005546001600160a01b03163314610d595760405162461bcd60e51b815260040161076590612476565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610dcd5760405162461bcd60e51b815260040161076590612476565b6013805460ff19169055600254600a55600254600b556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314610e385760405162461bcd60e51b815260040161076590612476565b6001600160a01b038216610e7d5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610765565b6001600160a01b038216600081815260066020908152604091829020805460ff19168515159081179091558251938452908301527f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d91015b60405180910390a15050565b60606004805461083f906125ed565b6005546001600160a01b03163314610f1a5760405162461bcd60e51b815260040161076590612476565b6001600160a01b038216610f5f5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610765565b80610fbe576013546001600160a01b036301000000909104811690831603610fbe5760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b6044820152606401610765565b6001600160a01b038216600081815260076020908152604091829020805460ff19168515159081179091558251938452908301527f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce9101610ed5565b6000338161102882866110ae565b9050838110156110885760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610765565b611095828686840361159d565b506001949350505050565b6000336108d081858561173b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146111035760405162461bcd60e51b815260040161076590612476565b6001600160a01b0381166111685760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610765565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111ee5760405162461bcd60e51b815260040161076590612476565b60085460ff16156112415760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610765565b601460009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611294573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b89190612653565b6001600160a01b031663c9c6539630601460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561131a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133e9190612653565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561138b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113af9190612653565b601380546301000000600160b81b03191663010000006001600160a01b0393841681029190911780835581900483166000908152600960209081526040808320805460ff1990811660019081179092559554949094048616835260079091529020805490921617905560145461142a9130911660001961159d565b6014546114459033906001600160a01b0316610af560025490565b6014546001600160a01b031663f305d7194730611477816001600160a01b031660009081526020819052604090205490565b60008061148c6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156114f4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906115199190612670565b505060135460145460405163095ea7b360e01b81526001600160a01b0391821660048201526000196024820152630100000090920416915063095ea7b3906044016020604051808303816000875af1158015611579573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061269e565b6001600160a01b0383166115ff5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610765565b6001600160a01b0382166116605760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610765565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006116cd84846110ae565b9050600019811461173557818110156117285760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610765565b611735848484840361159d565b50505050565b6117468383836117e3565b601354610100900460ff161580611765575060135462010000900460ff165b1561176f57505050565b61177a838383611b19565b61178490826126bb565b9050610d2a838383611cb9565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610d2a908490611de4565b60085460ff16611871576001600160a01b03831660009081526006602052604090205460ff168061182c57506001600160a01b03821660009081526006602052604090205460ff165b6118715760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610765565b601354610100900460ff161580611890575060135462010000900460ff165b156118a057610d2a838383611cb9565b60135460ff1615610d2a576001600160a01b03831660009081526009602052604090205460ff1680156118ec57506001600160a01b03821660009081526007602052604090205460ff16155b156119d157600a548111156119435760405162461bcd60e51b815260206004820152601d60248201527f427579207472616e7366657220616d6f756e742065786365656465642e0000006044820152606401610765565b600b546001600160a01b0383166000908152602081905260409020546119699083612627565b11156119b75760405162461bcd60e51b815260206004820152601b60248201527f556e61626c6520746f20657863656564204d61782057616c6c657400000000006044820152606401610765565b601280549060006119c7836126ce565b9190505550505050565b6001600160a01b03821660009081526009602052604090205460ff168015611a1257506001600160a01b03831660009081526007602052604090205460ff16155b15611a8557600a54811115610d2a5760405162461bcd60e51b815260206004820152603360248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152721036b0bc2a3930b739b0b1ba34b7b720b6ba1760691b6064820152608401610765565b6001600160a01b03821660009081526007602052604090205460ff16610d2a57600b546001600160a01b038316600090815260208190526040902054611acb9083612627565b1115610d2a5760405162461bcd60e51b815260206004820152601b60248201527f556e61626c6520746f20657863656564204d61782057616c6c657400000000006044820152606401610765565b601354600090610100900460ff168015611b3c575060135462010000900460ff16155b8015611b6057506001600160a01b03831660009081526009602052604090205460ff165b8015611b8557506001600160a01b03841660009081526006602052604090205460ff16155b15611bb1576013805462ff0000191662010000179055611ba482611eb6565b6013805462ff0000191690555b6001600160a01b03841660009081526006602052604090205460019060ff1615611bd9575060005b828115611ca357506001600160a01b03841660009081526009602052604081205460ff1615611c375761271060105460125411611c1857601154611c1c565b600f545b611c2690866125b4565b611c3091906125cb565b9050611c89565b6001600160a01b03861660009081526009602052604090205460ff1615611c895761271060105460125411611c6e57601154611c72565b600e545b611c7c90866125b4565b611c8691906125cb565b90505b8015611c9a57611c9a863083611cb9565b9150610ad19050565b611cae863083611f12565b600092505050610ad1565b6001600160a01b038316611cdf5760405162461bcd60e51b8152600401610765906126e7565b6001600160a01b038216611d055760405162461bcd60e51b81526004016107659061272c565b6001600160a01b03831660009081526020819052604090205481811015611d7d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610765565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a3611735565b6000611e39826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611fe39092919063ffffffff16565b805190915015610d2a5780806020019051810190611e57919061269e565b610d2a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610765565b30600090815260208190526040812054908115801590611ed75750600c5482105b15611ee3575080611ef9565b600c54831115611ef65750600c54611ef9565b50815b8115611f0857611f0881611ffa565b476117358161213b565b6001600160a01b038316611f385760405162461bcd60e51b8152600401610765906126e7565b6001600160a01b038216611f5e5760405162461bcd60e51b81526004016107659061272c565b6001600160a01b038084166000908152602081905260408082208054858103909155928516825281208054849290611f97908490612627565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611dd791815260200190565b6060611ff28484600085612179565b949350505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061202f5761202f61276f565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612088573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ac9190612653565b816001815181106120bf576120bf61276f565b6001600160a01b03928316602091820292909201015260145460405163791ac94760e01b815291169063791ac94790612105908590600090869030904290600401612785565b600060405180830381600087803b15801561211f57600080fd5b505af1158015612133573d6000803e3d6000fd5b505050505050565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612175573d6000803e3d6000fd5b5050565b6060824710156121da5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610765565b600080866001600160a01b031685876040516121f691906127f6565b60006040518083038185875af1925050503d8060008114612233576040519150601f19603f3d011682016040523d82523d6000602084013e612238565b606091505b509150915061224987838387612254565b979650505050505050565b606083156122c35782516000036122bc576001600160a01b0385163b6122bc5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610765565b5081611ff2565b611ff283838151156122d85781518083602001fd5b8060405162461bcd60e51b8152600401610765919061232f565b60006020828403121561230457600080fd5b5035919050565b60005b8381101561232657818101518382015260200161230e565b50506000910152565b602081526000825180602084015261234e81604085016020870161230b565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610b8657600080fd5b6000806040838503121561238a57600080fd5b823561239581612362565b946020939093013593505050565b6000806000606084860312156123b857600080fd5b83356123c381612362565b925060208401356123d381612362565b929592945050506040919091013590565b600080604083850312156123f757600080fd5b823561240281612362565b9150602083013561241281612362565b809150509250929050565b60006020828403121561242f57600080fd5b8135610ad181612362565b8015158114610b8657600080fd5b6000806040838503121561245b57600080fd5b823561246681612362565b915060208301356124128161243a565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156124fc5781600019048211156124e2576124e26124ab565b808516156124ef57918102915b93841c93908002906124c6565b509250929050565b600082612513575060016108d6565b81612520575060006108d6565b816001811461253657600281146125405761255c565b60019150506108d6565b60ff841115612551576125516124ab565b50506001821b6108d6565b5060208310610133831016604e8410600b841016171561257f575081810a6108d6565b61258983836124c1565b806000190482111561259d5761259d6124ab565b029392505050565b6000610ad160ff841683612504565b80820281158282048414176108d6576108d66124ab565b6000826125e857634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061260157607f821691505b60208210810361262157634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156108d6576108d66124ab565b60006020828403121561264c57600080fd5b5051919050565b60006020828403121561266557600080fd5b8151610ad181612362565b60008060006060848603121561268557600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156126b057600080fd5b8151610ad18161243a565b818103818111156108d6576108d66124ab565b6000600182016126e0576126e06124ab565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127d55784516001600160a01b0316835293830193918301916001016127b0565b50506001600160a01b03969096166060850152505050608001529392505050565b6000825161280881846020870161230b565b919091019291505056fea26469706673582212207f08189f330023d2e70d118a3a4cc43ef88dd099fae3a9e3264276c6ccbd2ce564736f6c63430008130033000000000000000000000000dd8efb620cfa630346e575703571426aedbfd58e

Deployed Bytecode

0x60806040526004361061023f5760003560e01c80636ddd17131161012e578063a457c2d7116100ab578063dd62ed3e1161006f578063dd62ed3e146106ba578063e27a55fe146106da578063f2fde38b146106f0578063f7f23a0c14610710578063f8b45b051461072557600080fd5b8063a457c2d71461061a578063a9059cbb1461063a578063b0249cc61461065a578063bbc0c7421461068a578063c3f70b52146106a457600080fd5b80638d3e6e40116100f25780638d3e6e40146105815780638da5cb5b146105b157806395d89b41146105cf5780639e93ad8e146105e4578063a13d1a2b146105fa57600080fd5b80636ddd1713146104e257806370a0823114610501578063715018a614610537578063751039fc1461054c57806377b27d1f1461056157600080fd5b8063313ce567116101bc5780634a62bb65116101805780634a62bb651461044c5780635431c94e146104665780635a90a49e146104865780635df6e68e146104b65780636d8813c5146104cc57600080fd5b8063313ce567146103b457806339509351146103d05780633b611e00146103f0578063436d334014610405578063452ed4f11461042557600080fd5b806312185a391161020357806312185a391461032057806318160ddd146103405780631c499ab01461035f5780631d9154771461037f57806323b872dd1461039457600080fd5b80630517d13d1461024b57806306fdde031461026d5780630758d92414610298578063095ea7b3146102d0578063114ca2ed1461030057600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5061026b6102663660046122f2565b61073b565b005b34801561027957600080fd5b50610282610830565b60405161028f919061232f565b60405180910390f35b3480156102a457600080fd5b506014546102b8906001600160a01b031681565b6040516001600160a01b03909116815260200161028f565b3480156102dc57600080fd5b506102f06102eb366004612377565b6108c2565b604051901515815260200161028f565b34801561030c57600080fd5b50600d546102b8906001600160a01b031681565b34801561032c57600080fd5b5061026b61033b3660046122f2565b6108dc565b34801561034c57600080fd5b506002545b60405190815260200161028f565b34801561036b57600080fd5b5061026b61037a3660046122f2565b610985565b34801561038b57600080fd5b5061026b610a6a565b3480156103a057600080fd5b506102f06103af3660046123a3565b610ab2565b3480156103c057600080fd5b506040516012815260200161028f565b3480156103dc57600080fd5b506102f06103eb366004612377565b610ad8565b3480156103fc57600080fd5b5061026b610afa565b34801561041157600080fd5b5061026b6104203660046122f2565b610b89565b34801561043157600080fd5b506013546102b890630100000090046001600160a01b031681565b34801561045857600080fd5b506013546102f09060ff1681565b34801561047257600080fd5b5061026b6104813660046123e4565b610c32565b34801561049257600080fd5b506102f06104a136600461241d565b60066020526000908152604090205460ff1681565b3480156104c257600080fd5b50610351600e5481565b3480156104d857600080fd5b50610351600c5481565b3480156104ee57600080fd5b506013546102f090610100900460ff1681565b34801561050d57600080fd5b5061035161051c36600461241d565b6001600160a01b031660009081526020819052604090205490565b34801561054357600080fd5b5061026b610d2f565b34801561055857600080fd5b5061026b610da3565b34801561056d57600080fd5b5061026b61057c366004612448565b610e0e565b34801561058d57600080fd5b506102f061059c36600461241d565b60076020526000908152604090205460ff1681565b3480156105bd57600080fd5b506005546001600160a01b03166102b8565b3480156105db57600080fd5b50610282610ee1565b3480156105f057600080fd5b5061035161271081565b34801561060657600080fd5b5061026b610615366004612448565b610ef0565b34801561062657600080fd5b506102f0610635366004612377565b61101a565b34801561064657600080fd5b506102f0610655366004612377565b6110a0565b34801561066657600080fd5b506102f061067536600461241d565b60096020526000908152604090205460ff1681565b34801561069657600080fd5b506008546102f09060ff1681565b3480156106b057600080fd5b50610351600a5481565b3480156106c657600080fd5b506103516106d53660046123e4565b6110ae565b3480156106e657600080fd5b50610351600f5481565b3480156106fc57600080fd5b5061026b61070b36600461241d565b6110d9565b34801561071c57600080fd5b5061026b6111c4565b34801561073157600080fd5b50610351600b5481565b6005546001600160a01b0316331461076e5760405162461bcd60e51b815260040161076590612476565b60405180910390fd5b61077a6012600a6125a5565b6103e861078660025490565b6107919060056125b4565b61079b91906125cb565b6107a591906125cb565b8110156107de5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610765565b6107ea6012600a6125a5565b6107f490826125b4565b600a8190556040519081527f76a9278644b7300961aa0e7e86f10934585987f1daf1c6ecc971c18376691574906020015b60405180910390a150565b60606003805461083f906125ed565b80601f016020809104026020016040519081016040528092919081815260200182805461086b906125ed565b80156108b85780601f1061088d576101008083540402835291602001916108b8565b820191906000526020600020905b81548152906001019060200180831161089b57829003601f168201915b5050505050905090565b6000336108d081858561159d565b60019150505b92915050565b6005546001600160a01b031633146109065760405162461bcd60e51b815260040161076590612476565b600f8190556104b08111156109525760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772031322560701b6044820152606401610765565b7fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c97600f5460405161082591815260200190565b6005546001600160a01b031633146109af5760405162461bcd60e51b815260040161076590612476565b6109bb6012600a6125a5565b6103e86109c760025490565b6109d290600f6125b4565b6109dc91906125cb565b6109e691906125cb565b811015610a1f5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610765565b610a2b6012600a6125a5565b610a3590826125b4565b600b8190556040519081527f3046ad62de8b70d396246aaed19ff2559ff20df8706520cbde58320766c4276290602001610825565b6005546001600160a01b03163314610a945760405162461bcd60e51b815260040161076590612476565b6008805460ff191660011790556013805461ff001916610100179055565b600033610ac08582856116c1565b610acb85858561173b565b60019150505b9392505050565b6000336108d0818585610aeb83836110ae565b610af59190612627565b61159d565b6005546001600160a01b03163314610b1157600080fd5b60004711610b5a5760405162461bcd60e51b81526020600482015260166024820152752a37b5b2b71d1037379022aa24103a379031b632b0b960511b6044820152606401610765565b60405133904780156108fc02916000818181858888f19350505050158015610b86573d6000803e3d6000fd5b50565b6005546001600160a01b03163314610bb35760405162461bcd60e51b815260040161076590612476565b600e8190556104b0811115610bff5760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772031322560701b6044820152606401610765565b7f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece0508600e5460405161082591815260200190565b6005546001600160a01b03163314610c5c5760405162461bcd60e51b815260040161076590612476565b6001600160a01b038216610cb25760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610765565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1d919061263a565b9050610d2a838383611791565b505050565b6005546001600160a01b03163314610d595760405162461bcd60e51b815260040161076590612476565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610dcd5760405162461bcd60e51b815260040161076590612476565b6013805460ff19169055600254600a55600254600b556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314610e385760405162461bcd60e51b815260040161076590612476565b6001600160a01b038216610e7d5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610765565b6001600160a01b038216600081815260066020908152604091829020805460ff19168515159081179091558251938452908301527f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d91015b60405180910390a15050565b60606004805461083f906125ed565b6005546001600160a01b03163314610f1a5760405162461bcd60e51b815260040161076590612476565b6001600160a01b038216610f5f5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610765565b80610fbe576013546001600160a01b036301000000909104811690831603610fbe5760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b6044820152606401610765565b6001600160a01b038216600081815260076020908152604091829020805460ff19168515159081179091558251938452908301527f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce9101610ed5565b6000338161102882866110ae565b9050838110156110885760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610765565b611095828686840361159d565b506001949350505050565b6000336108d081858561173b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146111035760405162461bcd60e51b815260040161076590612476565b6001600160a01b0381166111685760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610765565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111ee5760405162461bcd60e51b815260040161076590612476565b60085460ff16156112415760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610765565b601460009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611294573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b89190612653565b6001600160a01b031663c9c6539630601460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561131a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133e9190612653565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561138b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113af9190612653565b601380546301000000600160b81b03191663010000006001600160a01b0393841681029190911780835581900483166000908152600960209081526040808320805460ff1990811660019081179092559554949094048616835260079091529020805490921617905560145461142a9130911660001961159d565b6014546114459033906001600160a01b0316610af560025490565b6014546001600160a01b031663f305d7194730611477816001600160a01b031660009081526020819052604090205490565b60008061148c6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156114f4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906115199190612670565b505060135460145460405163095ea7b360e01b81526001600160a01b0391821660048201526000196024820152630100000090920416915063095ea7b3906044016020604051808303816000875af1158015611579573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061269e565b6001600160a01b0383166115ff5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610765565b6001600160a01b0382166116605760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610765565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006116cd84846110ae565b9050600019811461173557818110156117285760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610765565b611735848484840361159d565b50505050565b6117468383836117e3565b601354610100900460ff161580611765575060135462010000900460ff165b1561176f57505050565b61177a838383611b19565b61178490826126bb565b9050610d2a838383611cb9565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610d2a908490611de4565b60085460ff16611871576001600160a01b03831660009081526006602052604090205460ff168061182c57506001600160a01b03821660009081526006602052604090205460ff165b6118715760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610765565b601354610100900460ff161580611890575060135462010000900460ff165b156118a057610d2a838383611cb9565b60135460ff1615610d2a576001600160a01b03831660009081526009602052604090205460ff1680156118ec57506001600160a01b03821660009081526007602052604090205460ff16155b156119d157600a548111156119435760405162461bcd60e51b815260206004820152601d60248201527f427579207472616e7366657220616d6f756e742065786365656465642e0000006044820152606401610765565b600b546001600160a01b0383166000908152602081905260409020546119699083612627565b11156119b75760405162461bcd60e51b815260206004820152601b60248201527f556e61626c6520746f20657863656564204d61782057616c6c657400000000006044820152606401610765565b601280549060006119c7836126ce565b9190505550505050565b6001600160a01b03821660009081526009602052604090205460ff168015611a1257506001600160a01b03831660009081526007602052604090205460ff16155b15611a8557600a54811115610d2a5760405162461bcd60e51b815260206004820152603360248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152721036b0bc2a3930b739b0b1ba34b7b720b6ba1760691b6064820152608401610765565b6001600160a01b03821660009081526007602052604090205460ff16610d2a57600b546001600160a01b038316600090815260208190526040902054611acb9083612627565b1115610d2a5760405162461bcd60e51b815260206004820152601b60248201527f556e61626c6520746f20657863656564204d61782057616c6c657400000000006044820152606401610765565b601354600090610100900460ff168015611b3c575060135462010000900460ff16155b8015611b6057506001600160a01b03831660009081526009602052604090205460ff165b8015611b8557506001600160a01b03841660009081526006602052604090205460ff16155b15611bb1576013805462ff0000191662010000179055611ba482611eb6565b6013805462ff0000191690555b6001600160a01b03841660009081526006602052604090205460019060ff1615611bd9575060005b828115611ca357506001600160a01b03841660009081526009602052604081205460ff1615611c375761271060105460125411611c1857601154611c1c565b600f545b611c2690866125b4565b611c3091906125cb565b9050611c89565b6001600160a01b03861660009081526009602052604090205460ff1615611c895761271060105460125411611c6e57601154611c72565b600e545b611c7c90866125b4565b611c8691906125cb565b90505b8015611c9a57611c9a863083611cb9565b9150610ad19050565b611cae863083611f12565b600092505050610ad1565b6001600160a01b038316611cdf5760405162461bcd60e51b8152600401610765906126e7565b6001600160a01b038216611d055760405162461bcd60e51b81526004016107659061272c565b6001600160a01b03831660009081526020819052604090205481811015611d7d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610765565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a3611735565b6000611e39826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611fe39092919063ffffffff16565b805190915015610d2a5780806020019051810190611e57919061269e565b610d2a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610765565b30600090815260208190526040812054908115801590611ed75750600c5482105b15611ee3575080611ef9565b600c54831115611ef65750600c54611ef9565b50815b8115611f0857611f0881611ffa565b476117358161213b565b6001600160a01b038316611f385760405162461bcd60e51b8152600401610765906126e7565b6001600160a01b038216611f5e5760405162461bcd60e51b81526004016107659061272c565b6001600160a01b038084166000908152602081905260408082208054858103909155928516825281208054849290611f97908490612627565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611dd791815260200190565b6060611ff28484600085612179565b949350505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061202f5761202f61276f565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612088573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ac9190612653565b816001815181106120bf576120bf61276f565b6001600160a01b03928316602091820292909201015260145460405163791ac94760e01b815291169063791ac94790612105908590600090869030904290600401612785565b600060405180830381600087803b15801561211f57600080fd5b505af1158015612133573d6000803e3d6000fd5b505050505050565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612175573d6000803e3d6000fd5b5050565b6060824710156121da5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610765565b600080866001600160a01b031685876040516121f691906127f6565b60006040518083038185875af1925050503d8060008114612233576040519150601f19603f3d011682016040523d82523d6000602084013e612238565b606091505b509150915061224987838387612254565b979650505050505050565b606083156122c35782516000036122bc576001600160a01b0385163b6122bc5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610765565b5081611ff2565b611ff283838151156122d85781518083602001fd5b8060405162461bcd60e51b8152600401610765919061232f565b60006020828403121561230457600080fd5b5035919050565b60005b8381101561232657818101518382015260200161230e565b50506000910152565b602081526000825180602084015261234e81604085016020870161230b565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610b8657600080fd5b6000806040838503121561238a57600080fd5b823561239581612362565b946020939093013593505050565b6000806000606084860312156123b857600080fd5b83356123c381612362565b925060208401356123d381612362565b929592945050506040919091013590565b600080604083850312156123f757600080fd5b823561240281612362565b9150602083013561241281612362565b809150509250929050565b60006020828403121561242f57600080fd5b8135610ad181612362565b8015158114610b8657600080fd5b6000806040838503121561245b57600080fd5b823561246681612362565b915060208301356124128161243a565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156124fc5781600019048211156124e2576124e26124ab565b808516156124ef57918102915b93841c93908002906124c6565b509250929050565b600082612513575060016108d6565b81612520575060006108d6565b816001811461253657600281146125405761255c565b60019150506108d6565b60ff841115612551576125516124ab565b50506001821b6108d6565b5060208310610133831016604e8410600b841016171561257f575081810a6108d6565b61258983836124c1565b806000190482111561259d5761259d6124ab565b029392505050565b6000610ad160ff841683612504565b80820281158282048414176108d6576108d66124ab565b6000826125e857634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061260157607f821691505b60208210810361262157634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156108d6576108d66124ab565b60006020828403121561264c57600080fd5b5051919050565b60006020828403121561266557600080fd5b8151610ad181612362565b60008060006060848603121561268557600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156126b057600080fd5b8151610ad18161243a565b818103818111156108d6576108d66124ab565b6000600182016126e0576126e06124ab565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127d55784516001600160a01b0316835293830193918301916001016127b0565b50506001600160a01b03969096166060850152505050608001529392505050565b6000825161280881846020870161230b565b919091019291505056fea26469706673582212207f08189f330023d2e70d118a3a4cc43ef88dd099fae3a9e3264276c6ccbd2ce564736f6c63430008130033

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

000000000000000000000000dd8efb620cfa630346e575703571426aedbfd58e

-----Decoded View---------------
Arg [0] : _wallet (address): 0xdD8EfB620cFa630346E575703571426AEdBFd58e

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


Deployed Bytecode Sourcemap

28380:10172:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35747:332;;;;;;;;;;-1:-1:-1;35747:332:0;;;;;:::i;:::-;;:::i;:::-;;4414:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29084:27;;;;;;;;;;-1:-1:-1;29084:27:0;;;;-1:-1:-1;;;;;29084:27:0;;;;;;-1:-1:-1;;;;;1038:32:1;;;1020:51;;1008:2;993:18;29084:27:0;855:222:1;6840:226:0;;;;;;;;;;-1:-1:-1;6840:226:0;;;;;:::i;:::-;;:::i;:::-;;;1703:14:1;;1696:22;1678:41;;1666:2;1651:18;6840:226:0;1538:187:1;28716:33:0;;;;;;;;;;-1:-1:-1;28716:33:0;;;;-1:-1:-1;;;;;28716:33:0;;;36658:230;;;;;;;;;;-1:-1:-1;36658:230:0;;;;;:::i;:::-;;:::i;5543:108::-;;;;;;;;;;-1:-1:-1;5631:12:0;;5543:108;;;2084:25:1;;;2072:2;2057:18;5543:108:0;1938:177:1;36087:330:0;;;;;;;;;;-1:-1:-1;36087:330:0;;;;;:::i;:::-;;:::i;37675:107::-;;;;;;;;;;;;;:::i;7646:295::-;;;;;;;;;;-1:-1:-1;7646:295:0;;;;;:::i;:::-;;:::i;5385:93::-;;;;;;;;;;-1:-1:-1;5385:93:0;;5468:2;2723:36:1;;2711:2;2696:18;5385:93:0;2581:184:1;8350:263:0;;;;;;;;;;-1:-1:-1;8350:263:0;;;;;:::i;:::-;;:::i;37990:217::-;;;;;;;;;;;;;:::i;36425:225::-;;;;;;;;;;-1:-1:-1;36425:225:0;;;;;:::i;:::-;;:::i;29056:21::-;;;;;;;;;;-1:-1:-1;29056:21:0;;;;;;;-1:-1:-1;;;;;29056:21:0;;;28946:33;;;;;;;;;;-1:-1:-1;28946:33:0;;;;;;;;38215:297;;;;;;;;;;-1:-1:-1;38215:297:0;;;;;:::i;:::-;;:::i;28425:46::-;;;;;;;;;;-1:-1:-1;28425:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28758:30;;;;;;;;;;;;;;;;28686:21;;;;;;;;;;;;;;;;28988:31;;;;;;;;;;-1:-1:-1;28988:31:0;;;;;;;;;;;5714:143;;;;;;;;;;-1:-1:-1;5714:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;5831:18:0;5804:7;5831:18;;;;;;;;;;;;5714:143;17202:150;;;;;;;;;;;;;:::i;37790:192::-;;;;;;;;;;;;;:::i;35079:272::-;;;;;;;;;;-1:-1:-1;35079:272:0;;;;;:::i;:::-;;:::i;28478:48::-;;;;;;;;;;-1:-1:-1;28478:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16988:79;;;;;;;;;;-1:-1:-1;17053:6:0;;-1:-1:-1;;;;;17053:6:0;16988:79;;4633:104;;;;;;;;;;;;;:::i;29120:43::-;;;;;;;;;;;;29158:5;29120:43;;35359:380;;;;;;;;;;-1:-1:-1;35359:380:0;;;;;:::i;:::-;;:::i;9116:498::-;;;;;;;;;;-1:-1:-1;9116:498:0;;;;;:::i;:::-;;:::i;6063:218::-;;;;;;;;;;-1:-1:-1;6063:218:0;;;;;:::i;:::-;;:::i;28569:41::-;;;;;;;;;;-1:-1:-1;28569:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28535:25;;;;;;;;;;-1:-1:-1;28535:25:0;;;;;;;;28619:29;;;;;;;;;;;;;;;;6344:176;;;;;;;;;;-1:-1:-1;6344:176:0;;;;;:::i;:::-;;:::i;28795:31::-;;;;;;;;;;;;;;;;17360:281;;;;;;;;;;-1:-1:-1;17360:281:0;;;;;:::i;:::-;;:::i;36896:771::-;;;;;;;;;;;;;:::i;28655:24::-;;;;;;;;;;;;;;;;35747:332;17115:6;;-1:-1:-1;;;;;17115:6:0;315:10;17115:22;17107:67;;;;-1:-1:-1;;;17107:67:0;;;;;;;:::i;:::-;;;;;;;;;35903:16:::1;5468:2:::0;35903::::1;:16;:::i;:::-;35894:4;35873:13;5631:12:::0;;;5543:108;35873:13:::1;:17;::::0;35889:1:::1;35873:17;:::i;:::-;35872:26;;;;:::i;:::-;35871:49;;;;:::i;:::-;35853:14;:67;;35831:124;;;::::0;-1:-1:-1;;;35831:124:0;;6398:2:1;35831:124:0::1;::::0;::::1;6380:21:1::0;6437:1;6417:18;;;6410:29;-1:-1:-1;;;6455:18:1;;;6448:37;6502:18;;35831:124:0::1;6196:330:1::0;35831:124:0::1;36001:16;5468:2:::0;36001::::1;:16;:::i;:::-;35983:35;::::0;:14;:35:::1;:::i;:::-;35966:14;:52:::0;;;36034:37:::1;::::0;2084:25:1;;;36034:37:0::1;::::0;2072:2:1;2057:18;36034:37:0::1;;;;;;;;35747:332:::0;:::o;4414:100::-;4468:13;4501:5;4494:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4414:100;:::o;6840:226::-;6948:4;315:10;7004:32;315:10;7020:7;7029:6;7004:8;:32::i;:::-;7054:4;7047:11;;;6840:226;;;;;:::o;36658:230::-;17115:6;;-1:-1:-1;;;;;17115:6:0;315:10;17115:22;17107:67;;;;-1:-1:-1;;;17107:67:0;;;;;;;:::i;:::-;36740:12:::1;:34:::0;;;36809:4:::1;36793:20:::0;::::1;;36785:51;;;::::0;-1:-1:-1;;;36785:51:0;;7118:2:1;36785:51:0::1;::::0;::::1;7100:21:1::0;7157:2;7137:18;;;7130:30;-1:-1:-1;;;7176:18:1;;;7169:48;7234:18;;36785:51:0::1;6916:342:1::0;36785:51:0::1;36852:28;36867:12;;36852:28;;;;2084:25:1::0;;2072:2;2057:18;;1938:177;36087:330:0;17115:6;;-1:-1:-1;;;;;17115:6:0;315:10;17115:22;17107:67;;;;-1:-1:-1;;;17107:67:0;;;;;;;:::i;:::-;36256:16:::1;5468:2:::0;36256::::1;:16;:::i;:::-;36247:4;36225:13;5631:12:::0;;;5543:108;36225:13:::1;:18;::::0;36241:2:::1;36225:18;:::i;:::-;36224:27;;;;:::i;:::-;36223:50;;;;:::i;:::-;36188:14;:85;;36166:142;;;::::0;-1:-1:-1;;;36166:142:0;;6398:2:1;36166:142:0::1;::::0;::::1;6380:21:1::0;6437:1;6417:18;;;6410:29;-1:-1:-1;;;6455:18:1;;;6448:37;6502:18;;36166:142:0::1;6196:330:1::0;36166:142:0::1;36349:16;5468:2:::0;36349::::1;:16;:::i;:::-;36331:35;::::0;:14;:35:::1;:::i;:::-;36319:9;:47:::0;;;36382:27:::1;::::0;2084:25:1;;;36382:27:0::1;::::0;2072:2:1;2057:18;36382:27:0::1;1938:177:1::0;37675:107:0;17115:6;;-1:-1:-1;;;;;17115:6:0;315:10;17115:22;17107:67;;;;-1:-1:-1;;;17107:67:0;;;;;;;:::i;:::-;37725:13:::1;:20:::0;;-1:-1:-1;;37725:20:0::1;37741:4;37725:20;::::0;;37756:11:::1;:18:::0;;-1:-1:-1;;37756:18:0::1;37725:20;37756:18;::::0;;37675:107::o;7646:295::-;7777:4;315:10;7835:38;7851:4;315:10;7866:6;7835:15;:38::i;:::-;7884:27;7894:4;7900:2;7904:6;7884:9;:27::i;:::-;7929:4;7922:11;;;7646:295;;;;;;:::o;8350:263::-;8463:4;315:10;8519:64;315:10;8535:7;8572:10;8544:25;315:10;8535:7;8544:9;:25::i;:::-;:38;;;;:::i;:::-;8519:8;:64::i;37990:217::-;17053:6;;-1:-1:-1;;;;;17053:6:0;38044:10;:21;38036:30;;;;;;38109:1;38085:21;:25;38077:60;;;;-1:-1:-1;;;38077:60:0;;7595:2:1;38077:60:0;;;7577:21:1;7634:2;7614:18;;;7607:30;-1:-1:-1;;;7653:18:1;;;7646:52;7715:18;;38077:60:0;7393:346:1;38077:60:0;38148:51;;38156:10;;38177:21;38148:51;;;;;;;;;38177:21;38156:10;38148:51;;;;;;;;;;;;;;;;;;;;;37990:217::o;36425:225::-;17115:6;;-1:-1:-1;;;;;17115:6:0;315:10;17115:22;17107:67;;;;-1:-1:-1;;;17107:67:0;;;;;;;:::i;:::-;36506:11:::1;:33:::0;;;36573:4:::1;36558:19:::0;::::1;;36550:50;;;::::0;-1:-1:-1;;;36550:50:0;;7118:2:1;36550:50:0::1;::::0;::::1;7100:21:1::0;7157:2;7137:18;;;7130:30;-1:-1:-1;;;7176:18:1;;;7169:48;7234:18;;36550:50:0::1;6916:342:1::0;36550:50:0::1;36616:26;36630:11;;36616:26;;;;2084:25:1::0;;2072:2;2057:18;;1938:177;38215:297:0;17115:6;;-1:-1:-1;;;;;17115:6:0;315:10;17115:22;17107:67;;;;-1:-1:-1;;;17107:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38304:20:0;::::1;38296:59;;;::::0;-1:-1:-1;;;38296:59:0;;7946:2:1;38296:59:0::1;::::0;::::1;7928:21:1::0;7985:2;7965:18;;;7958:30;8024:28;8004:18;;;7997:56;8070:18;;38296:59:0::1;7744:350:1::0;38296:59:0::1;38393:39;::::0;-1:-1:-1;;;38393:39:0;;38426:4:::1;38393:39;::::0;::::1;1020:51:1::0;38366:24:0::1;::::0;-1:-1:-1;;;;;38393:24:0;::::1;::::0;::::1;::::0;993:18:1;;38393:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38366:66;;38443:61;38473:6;38482:3;38487:16;38443:22;:61::i;:::-;38285:227;38215:297:::0;;:::o;17202:150::-;17115:6;;-1:-1:-1;;;;;17115:6:0;315:10;17115:22;17107:67;;;;-1:-1:-1;;;17107:67:0;;;;;;;:::i;:::-;17295:6:::1;::::0;17274:40:::1;::::0;17311:1:::1;::::0;-1:-1:-1;;;;;17295:6:0::1;::::0;17274:40:::1;::::0;17311:1;;17274:40:::1;17325:6;:19:::0;;-1:-1:-1;;;;;;17325:19:0::1;::::0;;17202:150::o;37790:192::-;17115:6;;-1:-1:-1;;;;;17115:6:0;315:10;17115:22;17107:67;;;;-1:-1:-1;;;17107:67:0;;;;;;;:::i;:::-;37844:14:::1;:22:::0;;-1:-1:-1;;37844:22:0::1;::::0;;5631:12;;37877:14:::1;:30:::0;5631:12;;37918:9:::1;:25:::0;37959:15:::1;::::0;::::1;::::0;;;::::1;37790:192::o:0;35079:272::-;17115:6;;-1:-1:-1;;;;;17115:6:0;315:10;17115:22;17107:67;;;;-1:-1:-1;;;17107:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35203:22:0;::::1;35195:47;;;::::0;-1:-1:-1;;;35195:47:0;;8490:2:1;35195:47:0::1;::::0;::::1;8472:21:1::0;8529:2;8509:18;;;8502:30;-1:-1:-1;;;8548:18:1;;;8541:42;8600:18;;35195:47:0::1;8288:336:1::0;35195:47:0::1;-1:-1:-1::0;;;;;35253:24:0;::::1;;::::0;;;:14:::1;:24;::::0;;;;;;;;:36;;-1:-1:-1;;35253:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;35305:38;;8797:51:1;;;8864:18;;;8857:50;35305:38:0::1;::::0;8770:18:1;35305:38:0::1;;;;;;;;35079:272:::0;;:::o;4633:104::-;4689:13;4722:7;4715:14;;;;;:::i;35359:380::-;17115:6;;-1:-1:-1;;;;;17115:6:0;315:10;17115:22;17107:67;;;;-1:-1:-1;;;17107:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35485:22:0;::::1;35477:47;;;::::0;-1:-1:-1;;;35477:47:0;;8490:2:1;35477:47:0::1;::::0;::::1;8472:21:1::0;8529:2;8509:18;;;8502:30;-1:-1:-1;;;8548:18:1;;;8541:42;8600:18;;35477:47:0::1;8288:336:1::0;35477:47:0::1;35540:9;35535:92;;35586:6;::::0;-1:-1:-1;;;;;35586:6:0;;;::::1;::::0;::::1;35574:18:::0;;::::1;::::0;35566:49:::1;;;::::0;-1:-1:-1;;;35566:49:0;;9120:2:1;35566:49:0::1;::::0;::::1;9102:21:1::0;9159:2;9139:18;;;9132:30;-1:-1:-1;;;9178:18:1;;;9171:48;9236:18;;35566:49:0::1;8918:342:1::0;35566:49:0::1;-1:-1:-1::0;;;;;35637:26:0;::::1;;::::0;;;:16:::1;:26;::::0;;;;;;;;:38;;-1:-1:-1;;35637:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;35691:40;;8797:51:1;;;8864:18;;;8857:50;35691:40:0::1;::::0;8770:18:1;35691:40:0::1;8629:284:1::0;9116:498:0;9234:4;315:10;9234:4;9317:25;315:10;9334:7;9317:9;:25::i;:::-;9290:52;;9395:15;9375:16;:35;;9353:122;;;;-1:-1:-1;;;9353:122:0;;9467:2:1;9353:122:0;;;9449:21:1;9506:2;9486:18;;;9479:30;9545:34;9525:18;;;9518:62;-1:-1:-1;;;9596:18:1;;;9589:35;9641:19;;9353:122:0;9265:401:1;9353:122:0;9511:60;9520:5;9527:7;9555:15;9536:16;:34;9511:8;:60::i;:::-;-1:-1:-1;9602:4:0;;9116:498;-1:-1:-1;;;;9116:498:0:o;6063:218::-;6167:4;315:10;6223:28;315:10;6240:2;6244:6;6223:9;:28::i;6344:176::-;-1:-1:-1;;;;;6485:18:0;;;6458:7;6485:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6344:176::o;17360:281::-;17115:6;;-1:-1:-1;;;;;17115:6:0;315:10;17115:22;17107:67;;;;-1:-1:-1;;;17107:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17463:22:0;::::1;17441:110;;;::::0;-1:-1:-1;;;17441:110:0;;9873:2:1;17441:110:0::1;::::0;::::1;9855:21:1::0;9912:2;9892:18;;;9885:30;9951:34;9931:18;;;9924:62;-1:-1:-1;;;10002:18:1;;;9995:36;10048:19;;17441:110:0::1;9671:402:1::0;17441:110:0::1;17588:6;::::0;17567:38:::1;::::0;-1:-1:-1;;;;;17567:38:0;;::::1;::::0;17588:6:::1;::::0;17567:38:::1;::::0;17588:6:::1;::::0;17567:38:::1;17616:6;:17:::0;;-1:-1:-1;;;;;;17616:17:0::1;-1:-1:-1::0;;;;;17616:17:0;;;::::1;::::0;;;::::1;::::0;;17360:281::o;36896:771::-;17115:6;;-1:-1:-1;;;;;17115:6:0;315:10;17115:22;17107:67;;;;-1:-1:-1;;;17107:67:0;;;;;;;:::i;:::-;36955:13:::1;::::0;::::1;;36954:14;36946:50;;;::::0;-1:-1:-1;;;36946:50:0;;10280:2:1;36946:50:0::1;::::0;::::1;10262:21:1::0;10319:2;10299:18;;;10292:30;10358:25;10338:18;;;10331:53;10401:18;;36946:50:0::1;10078:347:1::0;36946:50:0::1;37028:9;;;;;;;;;-1:-1:-1::0;;;;;37028:9:0::1;-1:-1:-1::0;;;;;37028:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37016:43:0::1;;37082:4;37102:9;;;;;;;;;-1:-1:-1::0;;;;;37102:9:0::1;-1:-1:-1::0;;;;;37102:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37016:113;::::0;-1:-1:-1;;;;;;37016:113:0::1;::::0;;;;;;-1:-1:-1;;;;;10916:15:1;;;37016:113:0::1;::::0;::::1;10898:34:1::0;10968:15;;10948:18;;;10941:43;10833:18;;37016:113:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37007:6;:122:::0;;-1:-1:-1;;;;;;37007:122:0::1;::::0;-1:-1:-1;;;;;37007:122:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;37152:6;;::::1;::::0;::::1;-1:-1:-1::0;37142:17:0;;;:9:::1;:17;::::0;;;;;;;:24;;-1:-1:-1;;37142:24:0;;::::1;-1:-1:-1::0;37142:24:0;;::::1;::::0;;;37196:6;;;;;::::1;::::0;::::1;37179:24:::0;;:16:::1;:24:::0;;;;;:31;;;;::::1;;::::0;;37255:9:::1;::::0;37223:62:::1;::::0;37240:4:::1;::::0;37255:9:::1;-1:-1:-1::0;;37223:8:0::1;:62::i;:::-;37334:9;::::0;37296:64:::1;::::0;37313:10:::1;::::0;-1:-1:-1;;;;;37334:9:0::1;37346:13;5631:12:::0;;;5543:108;37296:64:::1;37373:9;::::0;-1:-1:-1;;;;;37373:9:0::1;:25;37406:21;37451:4;37471:24;37451:4:::0;-1:-1:-1;;;;;5831:18:0;5804:7;5831:18;;;;;;;;;;;;5714:143;37471:24:::1;37510:1;37526::::0;37542:7:::1;17053:6:::0;;-1:-1:-1;;;;;17053:6:0;;16988:79;37542:7:::1;37373:217;::::0;::::1;::::0;;;-1:-1:-1;;;;;;37373:217:0;;;-1:-1:-1;;;;;11354:15:1;;;37373:217:0::1;::::0;::::1;11336:34:1::0;11386:18;;;11379:34;;;;11429:18;;;11422:34;;;;11472:18;;;11465:34;11536:15;;;11515:19;;;11508:44;37564:15:0::1;11568:19:1::0;;;11561:35;11270:19;;37373:217:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;37608:6:0::1;::::0;37632:9:::1;::::0;37601:58:::1;::::0;-1:-1:-1;;;37601:58:0;;-1:-1:-1;;;;;37632:9:0;;::::1;37601:58;::::0;::::1;12092:51:1::0;-1:-1:-1;;12159:18:1;;;12152:34;37608:6:0;;;::::1;;::::0;-1:-1:-1;37601:22:0::1;::::0;12065:18:1;;37601:58:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14011:380::-:0;-1:-1:-1;;;;;14147:19:0;;14139:68;;;;-1:-1:-1;;;14139:68:0;;12649:2:1;14139:68:0;;;12631:21:1;12688:2;12668:18;;;12661:30;12727:34;12707:18;;;12700:62;-1:-1:-1;;;12778:18:1;;;12771:34;12822:19;;14139:68:0;12447:400:1;14139:68:0;-1:-1:-1;;;;;14226:21:0;;14218:68;;;;-1:-1:-1;;;14218:68:0;;13054:2:1;14218:68:0;;;13036:21:1;13093:2;13073:18;;;13066:30;13132:34;13112:18;;;13105:62;-1:-1:-1;;;13183:18:1;;;13176:32;13225:19;;14218:68:0;12852:398:1;14218:68:0;-1:-1:-1;;;;;14299:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14351:32;;2084:25:1;;;14351:32:0;;2057:18:1;14351:32:0;;;;;;;14011:380;;;:::o;14682:502::-;14817:24;14844:25;14854:5;14861:7;14844:9;:25::i;:::-;14817:52;;-1:-1:-1;;14884:16:0;:37;14880:297;;14984:6;14964:16;:26;;14938:117;;;;-1:-1:-1;;;14938:117:0;;13457:2:1;14938:117:0;;;13439:21:1;13496:2;13476:18;;;13469:30;13535:31;13515:18;;;13508:59;13584:18;;14938:117:0;13255:353:1;14938:117:0;15099:51;15108:5;15115:7;15143:6;15124:16;:25;15099:8;:51::i;:::-;14806:378;14682:502;;;:::o;30968:334::-;31100:39;31122:4;31128:2;31132:6;31100:21;:39::i;:::-;31157:11;;;;;;;31156:12;;:24;;-1:-1:-1;31172:8:0;;;;;;;31156:24;31152:37;;;30968:334;;;:::o;31152:37::-;31211;31231:4;31237:2;31241:6;31211:19;:37::i;:::-;31201:47;;;;:::i;:::-;;;31261:33;31277:4;31283:2;31287:6;31261:15;:33::i;24684:214::-;24821:58;;;-1:-1:-1;;;;;12110:32:1;;24821:58:0;;;12092:51:1;12159:18;;;;12152:34;;;24821:58:0;;;;;;;;;;12065:18:1;;;;24821:58:0;;;;;;;;-1:-1:-1;;;;;24821:58:0;-1:-1:-1;;;24821:58:0;;;24767:123;;24801:5;;24767:19;:123::i;31310:1340::-;31408:13;;;;31403:173;;-1:-1:-1;;;;;31464:20:0;;;;;;:14;:20;;;;;;;;;:42;;-1:-1:-1;;;;;;31488:18:0;;;;;;:14;:18;;;;;;;;31464:42;31438:126;;;;-1:-1:-1;;;31438:126:0;;13948:2:1;31438:126:0;;;13930:21:1;13987:2;13967:18;;;13960:30;-1:-1:-1;;;14006:18:1;;;13999:52;14068:18;;31438:126:0;13746:346:1;31438:126:0;31593:11;;;;;;;31592:12;;:24;;-1:-1:-1;31608:8:0;;;;;;;31592:24;31588:111;;;31633:33;31649:4;31655:2;31659:6;31633:15;:33::i;31588:111::-;31715:14;;;;31711:932;;;-1:-1:-1;;;;;31770:15:0;;;;;;:9;:15;;;;;;;;:40;;;;-1:-1:-1;;;;;;31790:20:0;;;;;;:16;:20;;;;;;;;31789:21;31770:40;31766:866;;;31871:14;;31861:6;:24;;31831:127;;;;-1:-1:-1;;;31831:127:0;;14299:2:1;31831:127:0;;;14281:21:1;14338:2;14318:18;;;14311:30;14377:31;14357:18;;;14350:59;14426:18;;31831:127:0;14097:353:1;31831:127:0;32033:9;;-1:-1:-1;;;;;5831:18:0;;5804:7;5831:18;;;;;;;;;;;32007:22;;:6;:22;:::i;:::-;:35;;31977:136;;;;-1:-1:-1;;;31977:136:0;;14657:2:1;31977:136:0;;;14639:21:1;14696:2;14676:18;;;14669:30;14735:29;14715:18;;;14708:57;14782:18;;31977:136:0;14455:351:1;31977:136:0;32132:8;:10;;;:8;:10;;;:::i;:::-;;;;;;38285:227:::1;38215:297:::0;;:::o;31766:866::-;-1:-1:-1;;;;;32202:13:0;;;;;;:9;:13;;;;;;;;:40;;;;-1:-1:-1;;;;;;32220:22:0;;;;;;:16;:22;;;;;;;;32219:23;32202:40;32198:434;;;32303:14;;32293:6;:24;;32263:149;;;;-1:-1:-1;;;32263:149:0;;15153:2:1;32263:149:0;;;15135:21:1;15192:2;15172:18;;;15165:30;15231:34;15211:18;;;15204:62;-1:-1:-1;;;15282:18:1;;;15275:49;15341:19;;32263:149:0;14951:415:1;32198:434:0;-1:-1:-1;;;;;32439:20:0;;;;;;:16;:20;;;;;;;;32434:198;;32536:9;;-1:-1:-1;;;;;5831:18:0;;5804:7;5831:18;;;;;;;;;;;32510:22;;:6;:22;:::i;:::-;:35;;32480:136;;;;-1:-1:-1;;;32480:136:0;;14657:2:1;32480:136:0;;;14639:21:1;14696:2;14676:18;;;14669:30;14735:29;14715:18;;;14708:57;14782:18;;32480:136:0;14455:351:1;32658:1266:0;32819:11;;32781:7;;32819:11;;;;;:24;;;;-1:-1:-1;32835:8:0;;;;;;;32834:9;32819:24;:41;;;;-1:-1:-1;;;;;;32847:13:0;;;;;;:9;:13;;;;;;;;32819:41;:66;;;;-1:-1:-1;;;;;;32865:20:0;;;;;;:14;:20;;;;;;;;32864:21;32819:66;32801:200;;;32912:8;:15;;-1:-1:-1;;32912:15:0;;;;;32942:16;32951:6;32942:8;:16::i;:::-;32973:8;:16;;-1:-1:-1;;32973:16:0;;;32801:200;-1:-1:-1;;;;;33047:20:0;;33013:12;33047:20;;;:14;:20;;;;;;33028:4;;33047:20;;33043:68;;;-1:-1:-1;33094:5:0;33043:68;33137:6;33176:739;;;;-1:-1:-1;;;;;;33230:13:0;;33210:1;33230:13;;;:9;:13;;;;;;;;33226:445;;;29158:5;33338:8;;33327;;:19;:47;;33364:10;;33327:47;;;33349:12;;33327:47;33292:83;;:6;:83;:::i;:::-;33291:120;;;;:::i;:::-;33264:147;;33226:445;;;-1:-1:-1;;;;;33473:15:0;;;;;;:9;:15;;;;;;;;33469:202;;;29158:5;33583:8;;33572;;:19;:46;;33608:10;;33572:46;;;33594:11;;33572:46;33537:82;;:6;:82;:::i;:::-;33536:119;;;;:::i;:::-;33509:146;;33469:202;33689:7;;33685:89;;33717:41;33733:4;33747;33754:3;33717:15;:41::i;:::-;33795:3;-1:-1:-1;33788:10:0;;-1:-1:-1;33788:10:0;33176:739;33831:49;33855:4;33869;33876:3;33831:23;:49::i;:::-;33902:1;33895:8;;;;;;10084:877;-1:-1:-1;;;;;10215:18:0;;10207:68;;;;-1:-1:-1;;;10207:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10294:16:0;;10286:64;;;;-1:-1:-1;;;10286:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10436:15:0;;10414:19;10436:15;;;;;;;;;;;10484:21;;;;10462:109;;;;-1:-1:-1;;;10462:109:0;;16383:2:1;10462:109:0;;;16365:21:1;16422:2;16402:18;;;16395:30;16461:34;16441:18;;;16434:62;-1:-1:-1;;;16512:18:1;;;16505:36;16558:19;;10462:109:0;16181:402:1;10462:109:0;-1:-1:-1;;;;;10607:15:0;;;:9;:15;;;;;;;;;;;10625:20;;;10607:38;;10825:13;;;;;;;;;;:23;;;;;;10877:26;;2084:25:1;;;10825:13:0;;10877:26;;2057:18:1;10877:26:0;;;;;;;;10916:37;38215:297;25199:419;25280:23;25306:106;25348:4;25306:106;;;;;;;;;;;;;;;;;25314:5;-1:-1:-1;;;;;25306:27:0;;;:106;;;;;:::i;:::-;25427:17;;25280:132;;-1:-1:-1;25427:21:0;25423:188;;25502:10;25491:30;;;;;;;;;;;;:::i;:::-;25465:134;;;;-1:-1:-1;;;25465:134:0;;16790:2:1;25465:134:0;;;16772:21:1;16829:2;16809:18;;;16802:30;16868:34;16848:18;;;16841:62;-1:-1:-1;;;16919:18:1;;;16912:40;16969:19;;25465:134:0;16588:406:1;34331:604:0;34428:4;34384:23;5831:18;;;;;;;;;;;;34482:19;;;;;:47;;;34523:6;;34505:15;:24;34482:47;34478:281;;;-1:-1:-1;34561:15:0;34478:281;;;34622:6;;34613;:15;34609:139;;;-1:-1:-1;34664:6:0;;34609:139;;;-1:-1:-1;34726:6:0;34609:139;34775:19;;34771:55;;34796:30;34813:12;34796:16;:30::i;:::-;34868:21;34900:27;34868:21;34900:7;:27::i;12812:763::-;-1:-1:-1;;;;;12951:18:0;;12943:68;;;;-1:-1:-1;;;12943:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13030:16:0;;13022:64;;;;-1:-1:-1;;;13022:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13172:15:0;;;13150:19;13172:15;;;;;;;;;;;;;13243:20;;;13225:38;;;13450:13;;;;;;;:23;;13257:6;;13150:19;13450:23;;13257:6;;13450:23;:::i;:::-;;;;;;;;13506:2;-1:-1:-1;;;;;13491:26:0;13500:4;-1:-1:-1;;;;;13491:26:0;;13510:6;13491:26;;;;2084:25:1;;2072:2;2057:18;;1938:177;18509:229:0;18646:12;18678:52;18700:6;18708:4;18714:1;18717:12;18678:21;:52::i;:::-;18671:59;18509:229;-1:-1:-1;;;;18509:229:0:o;33932:391::-;34019:16;;;34033:1;34019:16;;;;;;;;33995:21;;34019:16;;;;;;;;;;-1:-1:-1;34019:16:0;33995:40;;34064:4;34046;34051:1;34046:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34046:23:0;;;:7;;;;;;;;;;:23;;;;34098:9;;:16;;;-1:-1:-1;;;34098:16:0;;;;:9;;;;;:14;;:16;;;;;34046:7;;34098:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34080:4;34085:1;34080:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34080:35:0;;;:7;;;;;;;;;:35;34128:9;;:187;;-1:-1:-1;;;34128:187:0;;:9;;;:60;;:187;;34203:8;;34128:9;;34242:4;;34269;;34289:15;;34128:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33984:339;33932:391;:::o;34943:104::-;35003:18;;34995:44;;-1:-1:-1;;;;;35003:18:0;;;;34995:44;;;;;35032:6;;35003:18;34995:44;35003:18;34995:44;35032:6;35003:18;34995:44;;;;;;;;;;;;;;;;;;;;;34943:104;:::o;19725:612::-;19895:12;19967:5;19942:21;:30;;19920:118;;;;-1:-1:-1;;;19920:118:0;;18450:2:1;19920:118:0;;;18432:21:1;18489:2;18469:18;;;18462:30;18528:34;18508:18;;;18501:62;-1:-1:-1;;;18579:18:1;;;18572:36;18625:19;;19920:118:0;18248:402:1;19920:118:0;20050:12;20064:23;20091:6;-1:-1:-1;;;;;20091:11:0;20110:5;20131:4;20091:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20049:97;;;;20177:152;20222:6;20247:7;20273:10;20302:12;20177:26;:152::i;:::-;20157:172;19725:612;-1:-1:-1;;;;;;;19725:612:0:o;22855:644::-;23040:12;23069:7;23065:427;;;23097:10;:17;23118:1;23097:22;23093:290;;-1:-1:-1;;;;;17755:19:0;;;23307:60;;;;-1:-1:-1;;;23307:60:0;;19149:2:1;23307:60:0;;;19131:21:1;19188:2;19168:18;;;19161:30;19227:31;19207:18;;;19200:59;19276:18;;23307:60:0;18947:353:1;23307:60:0;-1:-1:-1;23404:10:0;23397:17;;23065:427;23447:33;23455:10;23467:12;24227:17;;:21;24223:388;;24459:10;24453:17;24516:15;24503:10;24499:2;24495:19;24488:44;24223:388;24586:12;24579:20;;-1:-1:-1;;;24579:20:0;;;;;;;;:::i;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:250::-;284:1;294:113;308:6;305:1;302:13;294:113;;;384:11;;;378:18;365:11;;;358:39;330:2;323:10;294:113;;;-1:-1:-1;;441:1:1;423:16;;416:27;199:250::o;454:396::-;603:2;592:9;585:21;566:4;635:6;629:13;678:6;673:2;662:9;658:18;651:34;694:79;766:6;761:2;750:9;746:18;741:2;733:6;729:15;694:79;:::i;:::-;834:2;813:15;-1:-1:-1;;809:29:1;794:45;;;;841:2;790:54;;454:396;-1:-1:-1;;454:396:1:o;1082:131::-;-1:-1:-1;;;;;1157:31:1;;1147:42;;1137:70;;1203:1;1200;1193:12;1218:315;1286:6;1294;1347:2;1335:9;1326:7;1322:23;1318:32;1315:52;;;1363:1;1360;1353:12;1315:52;1402:9;1389:23;1421:31;1446:5;1421:31;:::i;:::-;1471:5;1523:2;1508:18;;;;1495:32;;-1:-1:-1;;;1218:315:1:o;2120:456::-;2197:6;2205;2213;2266:2;2254:9;2245:7;2241:23;2237:32;2234:52;;;2282:1;2279;2272:12;2234:52;2321:9;2308:23;2340:31;2365:5;2340:31;:::i;:::-;2390:5;-1:-1:-1;2447:2:1;2432:18;;2419:32;2460:33;2419:32;2460:33;:::i;:::-;2120:456;;2512:7;;-1:-1:-1;;;2566:2:1;2551:18;;;;2538:32;;2120:456::o;2770:388::-;2838:6;2846;2899:2;2887:9;2878:7;2874:23;2870:32;2867:52;;;2915:1;2912;2905:12;2867:52;2954:9;2941:23;2973:31;2998:5;2973:31;:::i;:::-;3023:5;-1:-1:-1;3080:2:1;3065:18;;3052:32;3093:33;3052:32;3093:33;:::i;:::-;3145:7;3135:17;;;2770:388;;;;;:::o;3163:247::-;3222:6;3275:2;3263:9;3254:7;3250:23;3246:32;3243:52;;;3291:1;3288;3281:12;3243:52;3330:9;3317:23;3349:31;3374:5;3349:31;:::i;3415:118::-;3501:5;3494:13;3487:21;3480:5;3477:32;3467:60;;3523:1;3520;3513:12;3538:382;3603:6;3611;3664:2;3652:9;3643:7;3639:23;3635:32;3632:52;;;3680:1;3677;3670:12;3632:52;3719:9;3706:23;3738:31;3763:5;3738:31;:::i;:::-;3788:5;-1:-1:-1;3845:2:1;3830:18;;3817:32;3858:30;3817:32;3858:30;:::i;3925:356::-;4127:2;4109:21;;;4146:18;;;4139:30;4205:34;4200:2;4185:18;;4178:62;4272:2;4257:18;;3925:356::o;4286:127::-;4347:10;4342:3;4338:20;4335:1;4328:31;4378:4;4375:1;4368:15;4402:4;4399:1;4392:15;4418:422;4507:1;4550:5;4507:1;4564:270;4585:7;4575:8;4572:21;4564:270;;;4644:4;4640:1;4636:6;4632:17;4626:4;4623:27;4620:53;;;4653:18;;:::i;:::-;4703:7;4693:8;4689:22;4686:55;;;4723:16;;;;4686:55;4802:22;;;;4762:15;;;;4564:270;;;4568:3;4418:422;;;;;:::o;4845:806::-;4894:5;4924:8;4914:80;;-1:-1:-1;4965:1:1;4979:5;;4914:80;5013:4;5003:76;;-1:-1:-1;5050:1:1;5064:5;;5003:76;5095:4;5113:1;5108:59;;;;5181:1;5176:130;;;;5088:218;;5108:59;5138:1;5129:10;;5152:5;;;5176:130;5213:3;5203:8;5200:17;5197:43;;;5220:18;;:::i;:::-;-1:-1:-1;;5276:1:1;5262:16;;5291:5;;5088:218;;5390:2;5380:8;5377:16;5371:3;5365:4;5362:13;5358:36;5352:2;5342:8;5339:16;5334:2;5328:4;5325:12;5321:35;5318:77;5315:159;;;-1:-1:-1;5427:19:1;;;5459:5;;5315:159;5506:34;5531:8;5525:4;5506:34;:::i;:::-;5576:6;5572:1;5568:6;5564:19;5555:7;5552:32;5549:58;;;5587:18;;:::i;:::-;5625:20;;4845:806;-1:-1:-1;;;4845:806:1:o;5656:140::-;5714:5;5743:47;5784:4;5774:8;5770:19;5764:4;5743:47;:::i;5801:168::-;5874:9;;;5905;;5922:15;;;5916:22;;5902:37;5892:71;;5943:18;;:::i;5974:217::-;6014:1;6040;6030:132;;6084:10;6079:3;6075:20;6072:1;6065:31;6119:4;6116:1;6109:15;6147:4;6144:1;6137:15;6030:132;-1:-1:-1;6176:9:1;;5974:217::o;6531:380::-;6610:1;6606:12;;;;6653;;;6674:61;;6728:4;6720:6;6716:17;6706:27;;6674:61;6781:2;6773:6;6770:14;6750:18;6747:38;6744:161;;6827:10;6822:3;6818:20;6815:1;6808:31;6862:4;6859:1;6852:15;6890:4;6887:1;6880:15;6744:161;;6531:380;;;:::o;7263:125::-;7328:9;;;7349:10;;;7346:36;;;7362:18;;:::i;8099:184::-;8169:6;8222:2;8210:9;8201:7;8197:23;8193:32;8190:52;;;8238:1;8235;8228:12;8190:52;-1:-1:-1;8261:16:1;;8099:184;-1:-1:-1;8099:184:1:o;10430:251::-;10500:6;10553:2;10541:9;10532:7;10528:23;10524:32;10521:52;;;10569:1;10566;10559:12;10521:52;10601:9;10595:16;10620:31;10645:5;10620:31;:::i;11607:306::-;11695:6;11703;11711;11764:2;11752:9;11743:7;11739:23;11735:32;11732:52;;;11780:1;11777;11770:12;11732:52;11809:9;11803:16;11793:26;;11859:2;11848:9;11844:18;11838:25;11828:35;;11903:2;11892:9;11888:18;11882:25;11872:35;;11607:306;;;;;:::o;12197:245::-;12264:6;12317:2;12305:9;12296:7;12292:23;12288:32;12285:52;;;12333:1;12330;12323:12;12285:52;12365:9;12359:16;12384:28;12406:5;12384:28;:::i;13613:128::-;13680:9;;;13701:11;;;13698:37;;;13715:18;;:::i;14811:135::-;14850:3;14871:17;;;14868:43;;14891:18;;:::i;:::-;-1:-1:-1;14938:1:1;14927:13;;14811:135::o;15371:401::-;15573:2;15555:21;;;15612:2;15592:18;;;15585:30;15651:34;15646:2;15631:18;;15624:62;-1:-1:-1;;;15717:2:1;15702:18;;15695:35;15762:3;15747:19;;15371:401::o;15777:399::-;15979:2;15961:21;;;16018:2;15998:18;;;15991:30;16057:34;16052:2;16037:18;;16030:62;-1:-1:-1;;;16123:2:1;16108:18;;16101:33;16166:3;16151:19;;15777:399::o;17131:127::-;17192:10;17187:3;17183:20;17180:1;17173:31;17223:4;17220:1;17213:15;17247:4;17244:1;17237:15;17263:980;17525:4;17573:3;17562:9;17558:19;17604:6;17593:9;17586:25;17630:2;17668:6;17663:2;17652:9;17648:18;17641:34;17711:3;17706:2;17695:9;17691:18;17684:31;17735:6;17770;17764:13;17801:6;17793;17786:22;17839:3;17828:9;17824:19;17817:26;;17878:2;17870:6;17866:15;17852:29;;17899:1;17909:195;17923:6;17920:1;17917:13;17909:195;;;17988:13;;-1:-1:-1;;;;;17984:39:1;17972:52;;18079:15;;;;18044:12;;;;18020:1;17938:9;17909:195;;;-1:-1:-1;;;;;;;18160:32:1;;;;18155:2;18140:18;;18133:60;-1:-1:-1;;;18224:3:1;18209:19;18202:35;18121:3;17263:980;-1:-1:-1;;;17263:980:1:o;18655:287::-;18784:3;18822:6;18816:13;18838:66;18897:6;18892:3;18885:4;18877:6;18873:17;18838:66;:::i;:::-;18920:16;;;;;18655:287;-1:-1:-1;;18655:287:1:o

Swarm Source

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