ETH Price: $3,322.83 (-9.40%)

Token

Gyrowin (GYROWIN)
 

Overview

Max Total Supply

1,000,000,000 GYROWIN

Holders

67

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

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 11 : GYROWIN(rebranding).sol
// SPDX-License-Identifier: BSD-3-Clause

pragma solidity = 0.8.28;

import "@openzeppelin/[email protected]/utils/Address.sol";
import "@openzeppelin/[email protected]/token/ERC20/extensions/IERC20Permit.sol";
import "@openzeppelin/[email protected]/token/ERC20/IERC20.sol";
import "@openzeppelin/[email protected]/token/ERC20/utils/SafeERC20.sol";
import "@openzeppelin/[email protected]/utils/ReentrancyGuard.sol";

interface gyrowinInternal {
    // IUniswapV2Router
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

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

/**
 * Welcome to Gyrowin,
 * Gyrowin is a cross-chain decentralized finance and gaming platform.
 * https://gyro.win
 */
contract Gyrowin is ReentrancyGuard {

    string public constant name = "Gyrowin";
    string public constant symbol = "GYROWIN";
    uint8 public constant decimals = 18;
    
    uint256 private constant TOTAL_SUPPLY = 1 * 10 ** (decimals + 9); // 1 billion GYROWIN

    address constant private WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    gyrowinInternal constant private UNISWAP_V2_ROUTER = gyrowinInternal(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    gyrowinInternal constant private UNISWAP_V2_FACTORY = gyrowinInternal(0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f);

    event Transfer(address indexed from, address indexed to, uint256 amount);
    event TransferSent(address indexed, address indexed, uint indexed);
    event Approval(address indexed owner, address indexed spender, uint256 amount);
    event NewOwner(address newOwner);
    event NewMarketingWallet(address newWallet);
    // @notice An event thats emittied when users are able to trade token
    event TradingOpen(uint256 indexed openTime);

    // @notice Owner of the contract
    // @dev should be multisig address
    address private _admin;
    address public marketingWallet;

    bool private _initialize;

    // @notice Status of collecting marketing funds
    bool private _swapping;
    bool public clog;

    // @notice Status of trading
    bool public isTrading;
    bool private _preparedTrading;

    // @notice status of buy/sell fee
    uint256 public fee;
    bool private lockedFee;

    /**
     * @notice Construct GYROWIN token
     */
    function initialize(address _owner, address _marketingWallet) external {
        require(_owner == address(0x05803c32E393765a204e22fCF560421729cbCA42), "GYROWIN: not owner");
        require(_marketingWallet != address(0), "GYROWIN: can't be the zero address");
        require(!_initialize, "GYROWIN: initialized");
        _admin = _owner;
        marketingWallet = _marketingWallet;
        _balance[_msgSender()] = TOTAL_SUPPLY;
        clog = true;
        fee = 30;
        _initialize = true;
    }

    receive() payable external {}

    modifier onlyOwner() {
        require(_admin == _msgSender(), "GYROWIN: not owner"); _;
    }

    modifier lockSwap {
        _swapping = true;
        _;
        _swapping = false;
    }

    using SafeERC20 for IERC20;

    // @notice List token pair contract address
    mapping(address => bool) private _swapPair;

    // @notice Official record of token balances for each account
    mapping(address => uint256) private _balance;

    // @notice Allowance amounts on behalf of others
    mapping(address => mapping(address => uint256)) private _allowance;

    /**
     * @notice The totalSupply method denotes the total number of tokens created by Gyrowin
     * and does not reflect the circulating supply.
     */    
    function totalSupply() external pure returns (uint256) {
        return TOTAL_SUPPLY;
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool) {
        _approve(_msgSender(), spender, amount);

        return true;
    }

    /**
     * @notice Get the number of tokens `spender` is approved to spend on behalf of `account`
     * @param _owner The address of the account holding the funds
     * @param spender The address of the account spending the funds
     * @return The number of tokens approved
     */
    function allowance(address _owner, address spender) external view returns (uint256) {
        return _allowance[_owner][spender];
    }

    // @notice Alternative to {approve} that can be used as a mitigation for problems described in {ERC20-approve}.
    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {
        _approve(_msgSender(), spender, _allowance[_msgSender()][spender] + (addedValue));

        return true;
    }

    // @notice Alternative to {approve} that can be used as a mitigation for problems described in {ERC20-approve}.
    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
        uint256 currentAllowance = _allowance[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "GYROWIN: decreased allowance below zero");

        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

     /**
     * @notice Transfer `amount` tokens from `sender` to `recepient'
     * @param recipient The address of the destination account
     * @param amount The number of tokens to transfer
     * @return Whether or not the transfer succeeded
     */
    function transfer(address recipient, uint256 amount) external returns (bool) {
        _transfer(_msgSender(), recipient, amount);

        return true;
    }

    /**
     * @notice Transfer `amount` tokens from `src` to `dst`
     * @param sender The address of the source account
     * @param recipient The address of the destination account
     * @param amount The number of tokens to transfer
     * @return Whether or not the transfer succeeded
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool) {
        require(recipient != address(0), "GYROWIN: can't transfer to the zero address");
        require(sender != address(0), "GYROWIN: can't transfer from the zero address");
        
        _spendAllowance(sender, _msgSender(), amount);
        _transfer(sender, recipient, amount);

        return true;
    }

    /**
     * @notice Get the number of tokens held by the `account`
     * @param account The address of the account to get the balance of
     * @return The number of tokens held
     */
    function balanceOf(address account) external view returns (uint256) {
        return _balance[account];
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is 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 {
        require(_owner != address(0), "GYROWIN: can't approve to the zero address");
        require(spender != address(0), "GYROWIN: can't approve to the zero address");

        _allowance[_owner][spender] = amount;
        emit Approval(_owner, spender, amount);
    }

    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(_balance[sender] >= amount, "GYROWIN: balance is insufficient");

        if (isTrading == true) {
            // on buy
            if (_swapPair[sender]) {
                if (clog) {
                    uint256 taxAmount = amount * fee / 100;
                    // tax distribute to MK wallet
                    transferToken(sender, marketingWallet, taxAmount);
                    amount = amount - taxAmount;
                }
                transferToken(sender, recipient, amount);
            // on sell
            } else if (_swapPair[recipient]) {
                if (!_swapping && clog) {
                    uint256 taxAmount = amount * fee / 100;
                    // tax distribute to MK wallet
                    transferToken(sender, marketingWallet, taxAmount);
                    _swapFee(amount);
                    amount = amount - taxAmount;
                }
                transferToken(sender, recipient, amount);
            } else {
                transferToken(sender, recipient, amount); 
            }
        } else {
            if (sender != _admin && sender != address(this)) {
                if (_swapPair[sender] || _swapPair[recipient]) revert("GYROWIN: trading has not opened yet");
            } 
            transferToken(sender, recipient, amount); 
        }
    }

    // @notice Normal token transfer
    function transferToken(address sender, address recipient, uint256 amount) internal {
        unchecked {
            _balance[sender] -= amount;
            _balance[recipient] += amount;
        }

        emit Transfer(sender, recipient, amount);
    }

    // @notice Collecting marketing funds from early sellers to prevent a collapse caused by snipers
    function _swapFee(uint256 amount) internal lockSwap {
        if (amount > IERC20(address(this)).balanceOf(address(this))) return;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;

        _approve(address(this), address(UNISWAP_V2_ROUTER), amount);
        UNISWAP_V2_ROUTER.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            marketingWallet,
            block.timestamp
        );
    }   

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

    function renounceOwnership(address zero) external onlyOwner() {
        require(zero == address(0), "GYROWIN: invalid address");
        _admin = address(0);

        emit NewOwner(_admin);
    }

    /**
     * @notice change the owner of the contract
     * @dev only callable by the owner
     * @param account new owner address
     */
    function updateOwner(address account) external onlyOwner() {
        require(account != address(0),"GYROWIN: invalid owner address");
        _admin = account;

        emit NewOwner(_admin);
    }

    /// update marketing wallet account
    /// @dev only callable by the owner
    function updateMarketingWallet(address account) external onlyOwner() {
        require(account != address(0), "GYROWIN: can't be zero address");
        marketingWallet = account;

        emit NewMarketingWallet(marketingWallet);
    }

    /// @dev call by the owner modifier
    function owner() external view returns (address) {
        return _admin;
    }

    /**
     * @notice set pair token address
     * @dev only callable by the owner
     * @param account address of the pair
     * @param isPair check 
     */
    function setSwapPair(address account, bool isPair) external onlyOwner() {
        require(account != address(0), "GYROWIN: can't be zero address");
        if (isPair) {
            require(!_swapPair[account], "GYROWIN: already listed");
        }
        _swapPair[account] = isPair;
    }

    /**
     * @notice check if the address is right pair address
     * @param account address of the swap pair
     * @return Account is valid pair or not
     */
    function isSwapPair(address account) external view returns (bool) {
        return _swapPair[account];
    }

    function renounceClog(bool status) external onlyOwner {
        require(clog, "GYROWIN: clog done");
        clog = status;
    }

    /**
     * @notice set fees
     * @dev only callable by the owner
     * @param newFee buy and sell fee for the token
     */
    function setFee(uint256 newFee) public onlyOwner {
        require(!lockedFee, "GYROWIN: fee renounced with zero");
        require(newFee <= 30, "GYROWIN: limit the max. fee");
        fee = newFee;
        if (fee == 0) {
            // fee to zero forever
            lockedFee = true;
        }
    }

    /**
     * @dev Set when to open trading
     * @dev isTrading cannot be set false after it started
     */
    function openTrading(bool status) external onlyOwner() {
        require(!isTrading, "GYROWIN: not allowed");
        isTrading = status;

        emit TradingOpen(block.timestamp);
    }

    function prepareTrading(uint256 amountOfGYROWIN) external payable onlyOwner {
        require(!_preparedTrading, "GYROWIN: not allowed");
        require((amountOfGYROWIN <= IERC20(address(this)).balanceOf(address(this))), "GYROWIN: insufficient balance");
        _approve(address(this), address(UNISWAP_V2_ROUTER), amountOfGYROWIN);

        address pair = UNISWAP_V2_FACTORY.createPair(address(this), WETH);
        _swapPair[pair] = true;

        UNISWAP_V2_ROUTER.addLiquidityETH{value: address(this).balance}(address(this), amountOfGYROWIN, 0, 0, msg.sender, block.timestamp);

        IERC20(pair).approve(address(UNISWAP_V2_ROUTER), type(uint256).max);

        _preparedTrading = true;
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `value`.
     *
     * Does not update the allowance value in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address _owner, address spender, uint256 value) internal {
        uint256 currentAllowance = this.allowance(_owner, spender);
        if (currentAllowance != type(uint256).max) {

            require(currentAllowance >= value, "GYROWIN: insufficent allowance");

            unchecked {
                _approve(_owner, spender, currentAllowance - value);
            }
        }
    }

    /**
     * @notice rescue ETH sent to the address
     * @param amount to be retrieved from the contract
     * @param to address of the destination account
     */
    function rescueETH(uint256 amount, address payable to) external nonReentrant {
        require(to == _admin || to == marketingWallet, "not recipient");
        require(amount <= address(this).balance, "exceed amount input");
        (bool sent,) = payable(to).call{value: amount}("");
        require(sent, "Failed to send");
        emit TransferSent(address(this), to, amount);
    }

    /**
     * @notice rescue ERC20 token sent to the address
     * @param amount to be retrieved for ERC20 contract
     * @param to address of the destination account
     */
    function rescusERC20Token(address token, address to, uint256 amount) external payable nonReentrant {
        require(to == _admin || to == marketingWallet, "not recipient");
        require(amount <= IERC20(token).balanceOf(address(this)), "exceed amount input");
        IERC20(token).safeTransfer(to, amount);
        emit TransferSent(address(this), to, amount);
    }
}

File 2 of 11 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol)

pragma solidity ^0.8.20;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,
 * consider using {ReentrancyGuardTransient} instead.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant NOT_ENTERED = 1;
    uint256 private constant ENTERED = 2;

    uint256 private _status;

    /**
     * @dev Unauthorized reentrant call.
     */
    error ReentrancyGuardReentrantCall();

    constructor() {
        _status = NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be NOT_ENTERED
        if (_status == ENTERED) {
            revert ReentrancyGuardReentrantCall();
        }

        // Any calls to nonReentrant after this point will fail
        _status = ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == ENTERED;
    }
}

File 3 of 11 : SafeERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)

pragma solidity ^0.8.20;

import {IERC20} from "../IERC20.sol";
import {IERC1363} from "../../../interfaces/IERC1363.sol";
import {Address} from "../../../utils/Address.sol";

/**
 * @title SafeERC20
 * @dev Wrappers around ERC-20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    /**
     * @dev An operation with an ERC-20 token failed.
     */
    error SafeERC20FailedOperation(address token);

    /**
     * @dev Indicates a failed `decreaseAllowance` request.
     */
    error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);

    /**
     * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,
     * non-reverting calls are assumed to be successful.
     */
    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));
    }

    /**
     * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the
     * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.
     */
    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));
    }

    /**
     * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,
     * non-reverting calls are assumed to be successful.
     *
     * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the "client"
     * smart contract uses ERC-7674 to set temporary allowances, then the "client" smart contract should avoid using
     * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract
     * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.
     */
    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 oldAllowance = token.allowance(address(this), spender);
        forceApprove(token, spender, oldAllowance + value);
    }

    /**
     * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no
     * value, non-reverting calls are assumed to be successful.
     *
     * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the "client"
     * smart contract uses ERC-7674 to set temporary allowances, then the "client" smart contract should avoid using
     * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract
     * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.
     */
    function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {
        unchecked {
            uint256 currentAllowance = token.allowance(address(this), spender);
            if (currentAllowance < requestedDecrease) {
                revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);
            }
            forceApprove(token, spender, currentAllowance - requestedDecrease);
        }
    }

    /**
     * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,
     * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval
     * to be set to zero before setting it to a non-zero value, such as USDT.
     *
     * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function
     * only sets the "standard" allowance. Any temporary allowance will remain active, in addition to the value being
     * set here.
     */
    function forceApprove(IERC20 token, address spender, uint256 value) internal {
        bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));

        if (!_callOptionalReturnBool(token, approvalCall)) {
            _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));
            _callOptionalReturn(token, approvalCall);
        }
    }

    /**
     * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no
     * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when
     * targeting contracts.
     *
     * Reverts if the returned value is other than `true`.
     */
    function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {
        if (to.code.length == 0) {
            safeTransfer(token, to, value);
        } else if (!token.transferAndCall(to, value, data)) {
            revert SafeERC20FailedOperation(address(token));
        }
    }

    /**
     * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target
     * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when
     * targeting contracts.
     *
     * Reverts if the returned value is other than `true`.
     */
    function transferFromAndCallRelaxed(
        IERC1363 token,
        address from,
        address to,
        uint256 value,
        bytes memory data
    ) internal {
        if (to.code.length == 0) {
            safeTransferFrom(token, from, to, value);
        } else if (!token.transferFromAndCall(from, to, value, data)) {
            revert SafeERC20FailedOperation(address(token));
        }
    }

    /**
     * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no
     * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when
     * targeting contracts.
     *
     * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.
     * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}
     * once without retrying, and relies on the returned value to be true.
     *
     * Reverts if the returned value is other than `true`.
     */
    function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {
        if (to.code.length == 0) {
            forceApprove(token, to, value);
        } else if (!token.approveAndCall(to, value, data)) {
            revert SafeERC20FailedOperation(address(token));
        }
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     *
     * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        uint256 returnSize;
        uint256 returnValue;
        assembly ("memory-safe") {
            let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)
            // bubble errors
            if iszero(success) {
                let ptr := mload(0x40)
                returndatacopy(ptr, 0, returndatasize())
                revert(ptr, returndatasize())
            }
            returnSize := returndatasize()
            returnValue := mload(0)
        }

        if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {
            revert SafeERC20FailedOperation(address(token));
        }
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     *
     * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.
     */
    function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {
        bool success;
        uint256 returnSize;
        uint256 returnValue;
        assembly ("memory-safe") {
            success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)
            returnSize := returndatasize()
            returnValue := mload(0)
        }
        return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);
    }
}

File 4 of 11 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

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

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

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

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

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

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

File 5 of 11 : IERC20Permit.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Permit.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-20 Permit extension allowing approvals to be made via signatures, as defined in
 * https://eips.ethereum.org/EIPS/eip-2612[ERC-2612].
 *
 * Adds the {permit} method, which can be used to change an account's ERC-20 allowance (see {IERC20-allowance}) by
 * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
 * need to send a transaction, and thus is not required to hold Ether at all.
 *
 * ==== Security Considerations
 *
 * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature
 * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be
 * considered as an intention to spend the allowance in any specific way. The second is that because permits have
 * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should
 * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be
 * generally recommended is:
 *
 * ```solidity
 * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {
 *     try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}
 *     doThing(..., value);
 * }
 *
 * function doThing(..., uint256 value) public {
 *     token.safeTransferFrom(msg.sender, address(this), value);
 *     ...
 * }
 * ```
 *
 * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of
 * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also
 * {SafeERC20-safeTransferFrom}).
 *
 * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so
 * contracts should have entry points that don't rely on permit.
 */
interface IERC20Permit {
    /**
     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
     * given ``owner``'s signed approval.
     *
     * IMPORTANT: The same issues {IERC20-approve} has related to transaction
     * ordering also apply here.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `deadline` must be a timestamp in the future.
     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
     * over the EIP712-formatted function arguments.
     * - the signature must use ``owner``'s current nonce (see {nonces}).
     *
     * For more information on the signature format, see the
     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
     * section].
     *
     * CAUTION: See Security Considerations above.
     */
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    /**
     * @dev Returns the current nonce for `owner`. This value must be
     * included whenever a signature is generated for {permit}.
     *
     * Every successful call to {permit} increases ``owner``'s nonce by one. This
     * prevents a signature from being used multiple times.
     */
    function nonces(address owner) external view returns (uint256);

    /**
     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
     */
    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

File 6 of 11 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)

pragma solidity ^0.8.20;

import {Errors} from "./Errors.sol";

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev There's no code at `target` (it is not a contract).
     */
    error AddressEmptyCode(address target);

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

        (bool success, ) = recipient.call{value: amount}("");
        if (!success) {
            revert Errors.FailedCall();
        }
    }

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

    /**
     * @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`.
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        if (address(this).balance < value) {
            revert Errors.InsufficientBalance(address(this).balance, value);
        }
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

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

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

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target
     * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case
     * of an unsuccessful call.
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata
    ) internal view returns (bytes memory) {
        if (!success) {
            _revert(returndata);
        } else {
            // only check if target is a contract if the call was successful and the return data is empty
            // otherwise we already know that it was a contract
            if (returndata.length == 0 && target.code.length == 0) {
                revert AddressEmptyCode(target);
            }
            return returndata;
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the
     * revert reason or with a default {Errors.FailedCall} error.
     */
    function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {
        if (!success) {
            _revert(returndata);
        } else {
            return returndata;
        }
    }

    /**
     * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.
     */
    function _revert(bytes memory returndata) 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
            assembly ("memory-safe") {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert Errors.FailedCall();
        }
    }
}

File 7 of 11 : Errors.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)

pragma solidity ^0.8.20;

/**
 * @dev Collection of common custom errors used in multiple contracts
 *
 * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.
 * It is recommended to avoid relying on the error API for critical functionality.
 *
 * _Available since v5.1._
 */
library Errors {
    /**
     * @dev The ETH balance of the account is not enough to perform the operation.
     */
    error InsufficientBalance(uint256 balance, uint256 needed);

    /**
     * @dev A call to an address target failed. The target may have reverted.
     */
    error FailedCall();

    /**
     * @dev The deployment failed.
     */
    error FailedDeployment();

    /**
     * @dev A necessary precompile is missing.
     */
    error MissingPrecompile(address);
}

File 8 of 11 : IERC1363.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)

pragma solidity ^0.8.20;

import {IERC20} from "./IERC20.sol";
import {IERC165} from "./IERC165.sol";

/**
 * @title IERC1363
 * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].
 *
 * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract
 * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.
 */
interface IERC1363 is IERC20, IERC165 {
    /*
     * Note: the ERC-165 identifier for this interface is 0xb0202a11.
     * 0xb0202a11 ===
     *   bytes4(keccak256('transferAndCall(address,uint256)')) ^
     *   bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^
     *   bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^
     *   bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^
     *   bytes4(keccak256('approveAndCall(address,uint256)')) ^
     *   bytes4(keccak256('approveAndCall(address,uint256,bytes)'))
     */

    /**
     * @dev Moves a `value` amount of tokens from the caller's account to `to`
     * and then calls {IERC1363Receiver-onTransferReceived} on `to`.
     * @param to The address which you want to transfer to.
     * @param value The amount of tokens to be transferred.
     * @return A boolean value indicating whether the operation succeeded unless throwing.
     */
    function transferAndCall(address to, uint256 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from the caller's account to `to`
     * and then calls {IERC1363Receiver-onTransferReceived} on `to`.
     * @param to The address which you want to transfer to.
     * @param value The amount of tokens to be transferred.
     * @param data Additional data with no specified format, sent in call to `to`.
     * @return A boolean value indicating whether the operation succeeded unless throwing.
     */
    function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism
     * and then calls {IERC1363Receiver-onTransferReceived} on `to`.
     * @param from The address which you want to send tokens from.
     * @param to The address which you want to transfer to.
     * @param value The amount of tokens to be transferred.
     * @return A boolean value indicating whether the operation succeeded unless throwing.
     */
    function transferFromAndCall(address from, address to, uint256 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism
     * and then calls {IERC1363Receiver-onTransferReceived} on `to`.
     * @param from The address which you want to send tokens from.
     * @param to The address which you want to transfer to.
     * @param value The amount of tokens to be transferred.
     * @param data Additional data with no specified format, sent in call to `to`.
     * @return A boolean value indicating whether the operation succeeded unless throwing.
     */
    function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);

    /**
     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the
     * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.
     * @param spender The address which will spend the funds.
     * @param value The amount of tokens to be spent.
     * @return A boolean value indicating whether the operation succeeded unless throwing.
     */
    function approveAndCall(address spender, uint256 value) external returns (bool);

    /**
     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the
     * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.
     * @param spender The address which will spend the funds.
     * @param value The amount of tokens to be spent.
     * @param data Additional data with no specified format, sent in call to `spender`.
     * @return A boolean value indicating whether the operation succeeded unless throwing.
     */
    function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);
}

File 9 of 11 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)

pragma solidity ^0.8.20;

import {IERC165} from "../utils/introspection/IERC165.sol";

File 10 of 11 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)

pragma solidity ^0.8.20;

import {IERC20} from "../token/ERC20/IERC20.sol";

File 11 of 11 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[ERC].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "remappings": []
}

Contract Security Audit

Contract ABI

[{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newWallet","type":"address"}],"name":"NewMarketingWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"NewOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"openTime","type":"uint256"}],"name":"TradingOpen","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"","type":"address"},{"indexed":true,"internalType":"address","name":"","type":"address"},{"indexed":true,"internalType":"uint256","name":"","type":"uint256"}],"name":"TransferSent","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"clog","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_owner","type":"address"},{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSwapPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTrading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOfGYROWIN","type":"uint256"}],"name":"prepareTrading","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"renounceClog","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"zero","type":"address"}],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"to","type":"address"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescusERC20Token","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isPair","type":"bool"}],"name":"setSwapPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"updateOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052348015600e575f5ffd5b5060015f556120b2806100205f395ff3fe6080604052600436106101b2575f3560e01c80637bbe4796116100e7578063a0558c3f11610087578063aacebbe311610062578063aacebbe314610512578063dd62ed3e14610531578063ddca3f4314610575578063e796cebe1461058a575f5ffd5b8063a0558c3f146104b5578063a457c2d7146104d4578063a9059cbb146104f3575f5ffd5b80638da5cb5b116100c25780638da5cb5b1461043457806393dc34991461045157806395d89b411461046457806399bd708614610496575f5ffd5b80637bbe4796146103e35780638348a288146103f6578063880cdc3114610415575f5ffd5b8063395093511161015257806369fe0e2d1161012d57806369fe0e2d146103395780636e9087db1461035857806370a082311461037857806375f0a874146103ac575f5ffd5b806339509351146102db578063485cc955146102fa5780634a53c77014610319575f5ffd5b806323b872dd1161018d57806323b872dd146102565780632a9b807214610275578063313ce5671461029657806338bf3cfa146102bc575f5ffd5b806306fdde03146101bd578063095ea7b31461020557806318160ddd14610234575f5ffd5b366101b957005b5f5ffd5b3480156101c8575f5ffd5b506101ef6040518060400160405280600781526020016623bcb937bbb4b760c91b81525081565b6040516101fc9190611bf8565b60405180910390f35b348015610210575f5ffd5b5061022461021f366004611c41565b6105c1565b60405190151581526020016101fc565b34801561023f575f5ffd5b506102486105d7565b6040519081526020016101fc565b348015610261575f5ffd5b50610224610270366004611c6b565b6105ff565b348015610280575f5ffd5b5061029461028f366004611cb6565b6106fb565b005b3480156102a1575f5ffd5b506102aa601281565b60405160ff90911681526020016101fc565b3480156102c7575f5ffd5b506102946102d6366004611cd8565b6107ba565b3480156102e6575f5ffd5b506102246102f5366004611c41565b610882565b348015610305575f5ffd5b50610294610314366004611cf3565b6108bd565b348015610324575f5ffd5b5060025461022490600160b01b900460ff1681565b348015610344575f5ffd5b50610294610353366004611d2a565b610a2c565b348015610363575f5ffd5b5060025461022490600160b81b900460ff1681565b348015610383575f5ffd5b50610248610392366004611cd8565b6001600160a01b03165f9081526006602052604090205490565b3480156103b7575f5ffd5b506002546103cb906001600160a01b031681565b6040516001600160a01b0390911681526020016101fc565b6102946103f1366004611d2a565b610b18565b348015610401575f5ffd5b50610294610410366004611d41565b610e45565b348015610420575f5ffd5b5061029461042f366004611cd8565b610f5d565b34801561043f575f5ffd5b506001546001600160a01b03166103cb565b61029461045f366004611c6b565b61102b565b34801561046f575f5ffd5b506101ef6040518060400160405280600781526020016623aca927aba4a760c91b81525081565b3480156104a1575f5ffd5b506102946104b0366004611cb6565b61119c565b3480156104c0575f5ffd5b506102946104cf366004611d6d565b611232565b3480156104df575f5ffd5b506102246104ee366004611c41565b6113ba565b3480156104fe575f5ffd5b5061022461050d366004611c41565b61144a565b34801561051d575f5ffd5b5061029461052c366004611cd8565b611456565b34801561053c575f5ffd5b5061024861054b366004611cf3565b6001600160a01b039182165f90815260076020908152604080832093909416825291909152205490565b348015610580575f5ffd5b5061024860035481565b348015610595575f5ffd5b506102246105a4366004611cd8565b6001600160a01b03165f9081526005602052604090205460ff1690565b5f6105cd338484611524565b5060015b92915050565b5f6105e460126009611da4565b6105ef90600a611ea0565b6105fa906001611eae565b905090565b5f6001600160a01b03831661066f5760405162461bcd60e51b815260206004820152602b60248201527f4759524f57494e3a2063616e2774207472616e7366657220746f20746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b6001600160a01b0384166106db5760405162461bcd60e51b815260206004820152602d60248201527f4759524f57494e3a2063616e2774207472616e736665722066726f6d2074686560448201526c207a65726f206164647265737360981b6064820152608401610666565b6106e68433846115d1565b6106f18484846116ae565b5060019392505050565b6001546001600160a01b031633146107255760405162461bcd60e51b815260040161066690611ec5565b600254600160b81b900460ff16156107765760405162461bcd60e51b815260206004820152601460248201527311d65493d5d2538e881b9bdd08185b1b1bddd95960621b6044820152606401610666565b6002805460ff60b81b1916600160b81b8315150217905560405142907f8c4a5ff44ee79dc94833fe49997e65da03b9b0197678252a1f4869d036476525905f90a250565b6001546001600160a01b031633146107e45760405162461bcd60e51b815260040161066690611ec5565b6001600160a01b0381161561083b5760405162461bcd60e51b815260206004820152601860248201527f4759524f57494e3a20696e76616c6964206164647265737300000000000000006044820152606401610666565b600180546001600160a01b03191690556040515f81527f3edd90e7770f06fafde38004653b33870066c33bfc923ff6102acd601f85dfbc906020015b60405180910390a150565b335f8181526007602090815260408083206001600160a01b038716845290915281205490916105cd9185906108b8908690611ef1565b611524565b6001600160a01b0382167305803c32e393765a204e22fcf560421729cbca42146108f95760405162461bcd60e51b815260040161066690611ec5565b6001600160a01b03811661095a5760405162461bcd60e51b815260206004820152602260248201527f4759524f57494e3a2063616e277420626520746865207a65726f206164647265604482015261737360f01b6064820152608401610666565b600254600160a01b900460ff16156109ab5760405162461bcd60e51b815260206004820152601460248201527311d65493d5d2538e881a5b9a5d1a585b1a5e995960621b6044820152606401610666565b600180546001600160a01b038085166001600160a01b03199283161790925560028054928416929091169190911790556109e760126009611da4565b6109f290600a611ea0565b6109fd906001611eae565b335f90815260066020526040902055505060028054601e60035562ff00ff60a01b19166201000160a01b179055565b6001546001600160a01b03163314610a565760405162461bcd60e51b815260040161066690611ec5565b60045460ff1615610aa95760405162461bcd60e51b815260206004820181905260248201527f4759524f57494e3a206665652072656e6f756e6365642077697468207a65726f6044820152606401610666565b601e811115610afa5760405162461bcd60e51b815260206004820152601b60248201527f4759524f57494e3a206c696d697420746865206d61782e2066656500000000006044820152606401610666565b60038190555f819003610b15576004805460ff191660011790555b50565b6001546001600160a01b03163314610b425760405162461bcd60e51b815260040161066690611ec5565b600254600160c01b900460ff1615610b935760405162461bcd60e51b815260206004820152601460248201527311d65493d5d2538e881b9bdd08185b1b1bddd95960621b6044820152606401610666565b6040516370a0823160e01b81523060048201819052906370a0823190602401602060405180830381865afa158015610bcd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bf19190611f04565b811115610c405760405162461bcd60e51b815260206004820152601d60248201527f4759524f57494e3a20696e73756666696369656e742062616c616e63650000006044820152606401610666565b610c5f30737a250d5630b4cf539739df2c5dacb4c659f2488d83611524565b6040516364e329cb60e11b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260248201525f90735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9063c9c65396906044016020604051808303815f875af1158015610cc9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ced9190611f1b565b6001600160a01b0381165f90815260056020526040808220805460ff191660011790555163f305d71960e01b8152306004820152602481018590526044810182905260648101919091523360848201524260a4820152909150737a250d5630b4cf539739df2c5dacb4c659f2488d9063f305d71990479060c40160606040518083038185885af1158015610d83573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610da89190611f36565b505060405163095ea7b360e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d60048201525f1960248201526001600160a01b038316915063095ea7b3906044016020604051808303815f875af1158015610e09573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e2d9190611f61565b50506002805460ff60c01b1916600160c01b17905550565b6001546001600160a01b03163314610e6f5760405162461bcd60e51b815260040161066690611ec5565b6001600160a01b038216610ec55760405162461bcd60e51b815260206004820152601e60248201527f4759524f57494e3a2063616e2774206265207a65726f206164647265737300006044820152606401610666565b8015610f33576001600160a01b0382165f9081526005602052604090205460ff1615610f335760405162461bcd60e51b815260206004820152601760248201527f4759524f57494e3a20616c7265616479206c69737465640000000000000000006044820152606401610666565b6001600160a01b03919091165f908152600560205260409020805460ff1916911515919091179055565b6001546001600160a01b03163314610f875760405162461bcd60e51b815260040161066690611ec5565b6001600160a01b038116610fdd5760405162461bcd60e51b815260206004820152601e60248201527f4759524f57494e3a20696e76616c6964206f776e6572206164647265737300006044820152606401610666565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f3edd90e7770f06fafde38004653b33870066c33bfc923ff6102acd601f85dfbc90602001610877565b6110336118f5565b6001546001600160a01b038381169116148061105c57506002546001600160a01b038381169116145b6110985760405162461bcd60e51b815260206004820152600d60248201526c1b9bdd081c9958da5c1a595b9d609a1b6044820152606401610666565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156110da573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110fe9190611f04565b8111156111435760405162461bcd60e51b8152602060048201526013602482015272195e18d9595908185b5bdd5b9d081a5b9c1d5d606a1b6044820152606401610666565b6111576001600160a01b038416838361191d565b60405181906001600160a01b0384169030907ffda3a3e0e1479b43cb1c701f7576187f4c4ad80768d627387e00184302f7d88e905f90a461119760015f55565b505050565b6001546001600160a01b031633146111c65760405162461bcd60e51b815260040161066690611ec5565b600254600160b01b900460ff166112145760405162461bcd60e51b81526020600482015260126024820152714759524f57494e3a20636c6f6720646f6e6560701b6044820152606401610666565b60028054911515600160b01b0260ff60b01b19909216919091179055565b61123a6118f5565b6001546001600160a01b038281169116148061126357506002546001600160a01b038281169116145b61129f5760405162461bcd60e51b815260206004820152600d60248201526c1b9bdd081c9958da5c1a595b9d609a1b6044820152606401610666565b478211156112e55760405162461bcd60e51b8152602060048201526013602482015272195e18d9595908185b5bdd5b9d081a5b9c1d5d606a1b6044820152606401610666565b5f816001600160a01b0316836040515f6040518083038185875af1925050503d805f811461132e576040519150601f19603f3d011682016040523d82523d5f602084013e611333565b606091505b50509050806113755760405162461bcd60e51b815260206004820152600e60248201526d11985a5b1959081d1bc81cd95b9960921b6044820152606401610666565b60405183906001600160a01b0384169030907ffda3a3e0e1479b43cb1c701f7576187f4c4ad80768d627387e00184302f7d88e905f90a4506113b660015f55565b5050565b335f9081526007602090815260408083206001600160a01b03861684529091528120548281101561143d5760405162461bcd60e51b815260206004820152602760248201527f4759524f57494e3a2064656372656173656420616c6c6f77616e63652062656c6044820152666f77207a65726f60c81b6064820152608401610666565b6106f13385858403611524565b5f6105cd3384846116ae565b6001546001600160a01b031633146114805760405162461bcd60e51b815260040161066690611ec5565b6001600160a01b0381166114d65760405162461bcd60e51b815260206004820152601e60248201527f4759524f57494e3a2063616e2774206265207a65726f206164647265737300006044820152606401610666565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f1ffd90b838134c6cfb56aa815cc97adc14b6cf358dc77a5ed8d8d826981f84bd90602001610877565b6001600160a01b03831661154a5760405162461bcd60e51b815260040161066690611f7c565b6001600160a01b0382166115705760405162461bcd60e51b815260040161066690611f7c565b6001600160a01b038381165f8181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b604051636eb1769f60e11b81526001600160a01b038085166004830152831660248201525f90309063dd62ed3e90604401602060405180830381865afa15801561161d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116419190611f04565b90505f1981146116a8578181101561169b5760405162461bcd60e51b815260206004820152601e60248201527f4759524f57494e3a20696e737566666963656e7420616c6c6f77616e636500006044820152606401610666565b6116a88484848403611524565b50505050565b6001600160a01b0383165f908152600660205260409020548111156117155760405162461bcd60e51b815260206004820181905260248201527f4759524f57494e3a2062616c616e636520697320696e73756666696369656e746044820152606401610666565b600254600160b81b900460ff161515600103611833576001600160a01b0383165f9081526005602052604090205460ff16156117ac57600254600160b01b900460ff16156117a1575f60646003548361176e9190611eae565b6117789190611fc6565b6002549091506117939085906001600160a01b03168361196f565b61179d8183611fe5565b9150505b61119783838361196f565b6001600160a01b0382165f9081526005602052604090205460ff16156117a157600254600160a81b900460ff161580156117ef5750600254600160b01b900460ff165b156117a1575f6064600354836118059190611eae565b61180f9190611fc6565b60025490915061182a9085906001600160a01b03168361196f565b611793826119d0565b6001546001600160a01b0384811691161480159061185a57506001600160a01b0383163014155b156117a1576001600160a01b0383165f9081526005602052604090205460ff168061189c57506001600160a01b0382165f9081526005602052604090205460ff165b156117a15760405162461bcd60e51b815260206004820152602360248201527f4759524f57494e3a2074726164696e6720686173206e6f74206f70656e6564206044820152621e595d60ea1b6064820152608401610666565b60025f540361191757604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611197908490611b8c565b6001600160a01b038084165f81815260066020526040808220805486900390559285168082529083902080548501905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115c49085815260200190565b6002805460ff60a81b1916600160a81b1790556040516370a0823160e01b81523060048201819052906370a0823190602401602060405180830381865afa158015611a1d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a419190611f04565b8111611b7c576040805160028082526060820183525f9260208301908036833701905050905030815f81518110611a7a57611a7a611ff8565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110611ac257611ac2611ff8565b60200260200101906001600160a01b031690816001600160a01b031681525050611b0130737a250d5630b4cf539739df2c5dacb4c659f2488d84611524565b600254604051635c11d79560e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d91635c11d79591611b4d9186915f9187916001600160a01b0390911690429060040161200c565b5f604051808303815f87803b158015611b64575f5ffd5b505af1158015611b76573d5f5f3e3d5ffd5b50505050505b506002805460ff60a81b19169055565b5f5f60205f8451602086015f885af180611bab576040513d5f823e3d81fd5b50505f513d91508115611bc2578060011415611bcf565b6001600160a01b0384163b155b156116a857604051635274afe760e01b81526001600160a01b0385166004820152602401610666565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114610b15575f5ffd5b5f5f60408385031215611c52575f5ffd5b8235611c5d81611c2d565b946020939093013593505050565b5f5f5f60608486031215611c7d575f5ffd5b8335611c8881611c2d565b92506020840135611c9881611c2d565b929592945050506040919091013590565b8015158114610b15575f5ffd5b5f60208284031215611cc6575f5ffd5b8135611cd181611ca9565b9392505050565b5f60208284031215611ce8575f5ffd5b8135611cd181611c2d565b5f5f60408385031215611d04575f5ffd5b8235611d0f81611c2d565b91506020830135611d1f81611c2d565b809150509250929050565b5f60208284031215611d3a575f5ffd5b5035919050565b5f5f60408385031215611d52575f5ffd5b8235611d5d81611c2d565b91506020830135611d1f81611ca9565b5f5f60408385031215611d7e575f5ffd5b823591506020830135611d1f81611c2d565b634e487b7160e01b5f52601160045260245ffd5b60ff81811683821601908111156105d1576105d1611d90565b6001815b6001841115611df857808504811115611ddc57611ddc611d90565b6001841615611dea57908102905b60019390931c928002611dc1565b935093915050565b5f82611e0e575060016105d1565b81611e1a57505f6105d1565b8160018114611e305760028114611e3a57611e56565b60019150506105d1565b60ff841115611e4b57611e4b611d90565b50506001821b6105d1565b5060208310610133831016604e8410600b8410161715611e79575081810a6105d1565b611e855f198484611dbd565b805f1904821115611e9857611e98611d90565b029392505050565b5f611cd160ff841683611e00565b80820281158282048414176105d1576105d1611d90565b60208082526012908201527123aca927aba4a71d103737ba1037bbb732b960711b604082015260600190565b808201808211156105d1576105d1611d90565b5f60208284031215611f14575f5ffd5b5051919050565b5f60208284031215611f2b575f5ffd5b8151611cd181611c2d565b5f5f5f60608486031215611f48575f5ffd5b5050815160208301516040909301519094929350919050565b5f60208284031215611f71575f5ffd5b8151611cd181611ca9565b6020808252602a908201527f4759524f57494e3a2063616e277420617070726f766520746f20746865207a65604082015269726f206164647265737360b01b606082015260800190565b5f82611fe057634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156105d1576105d1611d90565b634e487b7160e01b5f52603260045260245ffd5b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b8181101561205c5783516001600160a01b0316835260209384019390920191600101612035565b50506001600160a01b03959095166060840152505060800152939250505056fea2646970667358221220956bcef11b0cdd44529328f368fc816313909a3fa3dd11da5d72ccd7dc9971ce64736f6c634300081c0033

Deployed Bytecode

0x6080604052600436106101b2575f3560e01c80637bbe4796116100e7578063a0558c3f11610087578063aacebbe311610062578063aacebbe314610512578063dd62ed3e14610531578063ddca3f4314610575578063e796cebe1461058a575f5ffd5b8063a0558c3f146104b5578063a457c2d7146104d4578063a9059cbb146104f3575f5ffd5b80638da5cb5b116100c25780638da5cb5b1461043457806393dc34991461045157806395d89b411461046457806399bd708614610496575f5ffd5b80637bbe4796146103e35780638348a288146103f6578063880cdc3114610415575f5ffd5b8063395093511161015257806369fe0e2d1161012d57806369fe0e2d146103395780636e9087db1461035857806370a082311461037857806375f0a874146103ac575f5ffd5b806339509351146102db578063485cc955146102fa5780634a53c77014610319575f5ffd5b806323b872dd1161018d57806323b872dd146102565780632a9b807214610275578063313ce5671461029657806338bf3cfa146102bc575f5ffd5b806306fdde03146101bd578063095ea7b31461020557806318160ddd14610234575f5ffd5b366101b957005b5f5ffd5b3480156101c8575f5ffd5b506101ef6040518060400160405280600781526020016623bcb937bbb4b760c91b81525081565b6040516101fc9190611bf8565b60405180910390f35b348015610210575f5ffd5b5061022461021f366004611c41565b6105c1565b60405190151581526020016101fc565b34801561023f575f5ffd5b506102486105d7565b6040519081526020016101fc565b348015610261575f5ffd5b50610224610270366004611c6b565b6105ff565b348015610280575f5ffd5b5061029461028f366004611cb6565b6106fb565b005b3480156102a1575f5ffd5b506102aa601281565b60405160ff90911681526020016101fc565b3480156102c7575f5ffd5b506102946102d6366004611cd8565b6107ba565b3480156102e6575f5ffd5b506102246102f5366004611c41565b610882565b348015610305575f5ffd5b50610294610314366004611cf3565b6108bd565b348015610324575f5ffd5b5060025461022490600160b01b900460ff1681565b348015610344575f5ffd5b50610294610353366004611d2a565b610a2c565b348015610363575f5ffd5b5060025461022490600160b81b900460ff1681565b348015610383575f5ffd5b50610248610392366004611cd8565b6001600160a01b03165f9081526006602052604090205490565b3480156103b7575f5ffd5b506002546103cb906001600160a01b031681565b6040516001600160a01b0390911681526020016101fc565b6102946103f1366004611d2a565b610b18565b348015610401575f5ffd5b50610294610410366004611d41565b610e45565b348015610420575f5ffd5b5061029461042f366004611cd8565b610f5d565b34801561043f575f5ffd5b506001546001600160a01b03166103cb565b61029461045f366004611c6b565b61102b565b34801561046f575f5ffd5b506101ef6040518060400160405280600781526020016623aca927aba4a760c91b81525081565b3480156104a1575f5ffd5b506102946104b0366004611cb6565b61119c565b3480156104c0575f5ffd5b506102946104cf366004611d6d565b611232565b3480156104df575f5ffd5b506102246104ee366004611c41565b6113ba565b3480156104fe575f5ffd5b5061022461050d366004611c41565b61144a565b34801561051d575f5ffd5b5061029461052c366004611cd8565b611456565b34801561053c575f5ffd5b5061024861054b366004611cf3565b6001600160a01b039182165f90815260076020908152604080832093909416825291909152205490565b348015610580575f5ffd5b5061024860035481565b348015610595575f5ffd5b506102246105a4366004611cd8565b6001600160a01b03165f9081526005602052604090205460ff1690565b5f6105cd338484611524565b5060015b92915050565b5f6105e460126009611da4565b6105ef90600a611ea0565b6105fa906001611eae565b905090565b5f6001600160a01b03831661066f5760405162461bcd60e51b815260206004820152602b60248201527f4759524f57494e3a2063616e2774207472616e7366657220746f20746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b6001600160a01b0384166106db5760405162461bcd60e51b815260206004820152602d60248201527f4759524f57494e3a2063616e2774207472616e736665722066726f6d2074686560448201526c207a65726f206164647265737360981b6064820152608401610666565b6106e68433846115d1565b6106f18484846116ae565b5060019392505050565b6001546001600160a01b031633146107255760405162461bcd60e51b815260040161066690611ec5565b600254600160b81b900460ff16156107765760405162461bcd60e51b815260206004820152601460248201527311d65493d5d2538e881b9bdd08185b1b1bddd95960621b6044820152606401610666565b6002805460ff60b81b1916600160b81b8315150217905560405142907f8c4a5ff44ee79dc94833fe49997e65da03b9b0197678252a1f4869d036476525905f90a250565b6001546001600160a01b031633146107e45760405162461bcd60e51b815260040161066690611ec5565b6001600160a01b0381161561083b5760405162461bcd60e51b815260206004820152601860248201527f4759524f57494e3a20696e76616c6964206164647265737300000000000000006044820152606401610666565b600180546001600160a01b03191690556040515f81527f3edd90e7770f06fafde38004653b33870066c33bfc923ff6102acd601f85dfbc906020015b60405180910390a150565b335f8181526007602090815260408083206001600160a01b038716845290915281205490916105cd9185906108b8908690611ef1565b611524565b6001600160a01b0382167305803c32e393765a204e22fcf560421729cbca42146108f95760405162461bcd60e51b815260040161066690611ec5565b6001600160a01b03811661095a5760405162461bcd60e51b815260206004820152602260248201527f4759524f57494e3a2063616e277420626520746865207a65726f206164647265604482015261737360f01b6064820152608401610666565b600254600160a01b900460ff16156109ab5760405162461bcd60e51b815260206004820152601460248201527311d65493d5d2538e881a5b9a5d1a585b1a5e995960621b6044820152606401610666565b600180546001600160a01b038085166001600160a01b03199283161790925560028054928416929091169190911790556109e760126009611da4565b6109f290600a611ea0565b6109fd906001611eae565b335f90815260066020526040902055505060028054601e60035562ff00ff60a01b19166201000160a01b179055565b6001546001600160a01b03163314610a565760405162461bcd60e51b815260040161066690611ec5565b60045460ff1615610aa95760405162461bcd60e51b815260206004820181905260248201527f4759524f57494e3a206665652072656e6f756e6365642077697468207a65726f6044820152606401610666565b601e811115610afa5760405162461bcd60e51b815260206004820152601b60248201527f4759524f57494e3a206c696d697420746865206d61782e2066656500000000006044820152606401610666565b60038190555f819003610b15576004805460ff191660011790555b50565b6001546001600160a01b03163314610b425760405162461bcd60e51b815260040161066690611ec5565b600254600160c01b900460ff1615610b935760405162461bcd60e51b815260206004820152601460248201527311d65493d5d2538e881b9bdd08185b1b1bddd95960621b6044820152606401610666565b6040516370a0823160e01b81523060048201819052906370a0823190602401602060405180830381865afa158015610bcd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bf19190611f04565b811115610c405760405162461bcd60e51b815260206004820152601d60248201527f4759524f57494e3a20696e73756666696369656e742062616c616e63650000006044820152606401610666565b610c5f30737a250d5630b4cf539739df2c5dacb4c659f2488d83611524565b6040516364e329cb60e11b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260248201525f90735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9063c9c65396906044016020604051808303815f875af1158015610cc9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ced9190611f1b565b6001600160a01b0381165f90815260056020526040808220805460ff191660011790555163f305d71960e01b8152306004820152602481018590526044810182905260648101919091523360848201524260a4820152909150737a250d5630b4cf539739df2c5dacb4c659f2488d9063f305d71990479060c40160606040518083038185885af1158015610d83573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610da89190611f36565b505060405163095ea7b360e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d60048201525f1960248201526001600160a01b038316915063095ea7b3906044016020604051808303815f875af1158015610e09573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e2d9190611f61565b50506002805460ff60c01b1916600160c01b17905550565b6001546001600160a01b03163314610e6f5760405162461bcd60e51b815260040161066690611ec5565b6001600160a01b038216610ec55760405162461bcd60e51b815260206004820152601e60248201527f4759524f57494e3a2063616e2774206265207a65726f206164647265737300006044820152606401610666565b8015610f33576001600160a01b0382165f9081526005602052604090205460ff1615610f335760405162461bcd60e51b815260206004820152601760248201527f4759524f57494e3a20616c7265616479206c69737465640000000000000000006044820152606401610666565b6001600160a01b03919091165f908152600560205260409020805460ff1916911515919091179055565b6001546001600160a01b03163314610f875760405162461bcd60e51b815260040161066690611ec5565b6001600160a01b038116610fdd5760405162461bcd60e51b815260206004820152601e60248201527f4759524f57494e3a20696e76616c6964206f776e6572206164647265737300006044820152606401610666565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f3edd90e7770f06fafde38004653b33870066c33bfc923ff6102acd601f85dfbc90602001610877565b6110336118f5565b6001546001600160a01b038381169116148061105c57506002546001600160a01b038381169116145b6110985760405162461bcd60e51b815260206004820152600d60248201526c1b9bdd081c9958da5c1a595b9d609a1b6044820152606401610666565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156110da573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110fe9190611f04565b8111156111435760405162461bcd60e51b8152602060048201526013602482015272195e18d9595908185b5bdd5b9d081a5b9c1d5d606a1b6044820152606401610666565b6111576001600160a01b038416838361191d565b60405181906001600160a01b0384169030907ffda3a3e0e1479b43cb1c701f7576187f4c4ad80768d627387e00184302f7d88e905f90a461119760015f55565b505050565b6001546001600160a01b031633146111c65760405162461bcd60e51b815260040161066690611ec5565b600254600160b01b900460ff166112145760405162461bcd60e51b81526020600482015260126024820152714759524f57494e3a20636c6f6720646f6e6560701b6044820152606401610666565b60028054911515600160b01b0260ff60b01b19909216919091179055565b61123a6118f5565b6001546001600160a01b038281169116148061126357506002546001600160a01b038281169116145b61129f5760405162461bcd60e51b815260206004820152600d60248201526c1b9bdd081c9958da5c1a595b9d609a1b6044820152606401610666565b478211156112e55760405162461bcd60e51b8152602060048201526013602482015272195e18d9595908185b5bdd5b9d081a5b9c1d5d606a1b6044820152606401610666565b5f816001600160a01b0316836040515f6040518083038185875af1925050503d805f811461132e576040519150601f19603f3d011682016040523d82523d5f602084013e611333565b606091505b50509050806113755760405162461bcd60e51b815260206004820152600e60248201526d11985a5b1959081d1bc81cd95b9960921b6044820152606401610666565b60405183906001600160a01b0384169030907ffda3a3e0e1479b43cb1c701f7576187f4c4ad80768d627387e00184302f7d88e905f90a4506113b660015f55565b5050565b335f9081526007602090815260408083206001600160a01b03861684529091528120548281101561143d5760405162461bcd60e51b815260206004820152602760248201527f4759524f57494e3a2064656372656173656420616c6c6f77616e63652062656c6044820152666f77207a65726f60c81b6064820152608401610666565b6106f13385858403611524565b5f6105cd3384846116ae565b6001546001600160a01b031633146114805760405162461bcd60e51b815260040161066690611ec5565b6001600160a01b0381166114d65760405162461bcd60e51b815260206004820152601e60248201527f4759524f57494e3a2063616e2774206265207a65726f206164647265737300006044820152606401610666565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f1ffd90b838134c6cfb56aa815cc97adc14b6cf358dc77a5ed8d8d826981f84bd90602001610877565b6001600160a01b03831661154a5760405162461bcd60e51b815260040161066690611f7c565b6001600160a01b0382166115705760405162461bcd60e51b815260040161066690611f7c565b6001600160a01b038381165f8181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b604051636eb1769f60e11b81526001600160a01b038085166004830152831660248201525f90309063dd62ed3e90604401602060405180830381865afa15801561161d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116419190611f04565b90505f1981146116a8578181101561169b5760405162461bcd60e51b815260206004820152601e60248201527f4759524f57494e3a20696e737566666963656e7420616c6c6f77616e636500006044820152606401610666565b6116a88484848403611524565b50505050565b6001600160a01b0383165f908152600660205260409020548111156117155760405162461bcd60e51b815260206004820181905260248201527f4759524f57494e3a2062616c616e636520697320696e73756666696369656e746044820152606401610666565b600254600160b81b900460ff161515600103611833576001600160a01b0383165f9081526005602052604090205460ff16156117ac57600254600160b01b900460ff16156117a1575f60646003548361176e9190611eae565b6117789190611fc6565b6002549091506117939085906001600160a01b03168361196f565b61179d8183611fe5565b9150505b61119783838361196f565b6001600160a01b0382165f9081526005602052604090205460ff16156117a157600254600160a81b900460ff161580156117ef5750600254600160b01b900460ff165b156117a1575f6064600354836118059190611eae565b61180f9190611fc6565b60025490915061182a9085906001600160a01b03168361196f565b611793826119d0565b6001546001600160a01b0384811691161480159061185a57506001600160a01b0383163014155b156117a1576001600160a01b0383165f9081526005602052604090205460ff168061189c57506001600160a01b0382165f9081526005602052604090205460ff165b156117a15760405162461bcd60e51b815260206004820152602360248201527f4759524f57494e3a2074726164696e6720686173206e6f74206f70656e6564206044820152621e595d60ea1b6064820152608401610666565b60025f540361191757604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611197908490611b8c565b6001600160a01b038084165f81815260066020526040808220805486900390559285168082529083902080548501905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115c49085815260200190565b6002805460ff60a81b1916600160a81b1790556040516370a0823160e01b81523060048201819052906370a0823190602401602060405180830381865afa158015611a1d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a419190611f04565b8111611b7c576040805160028082526060820183525f9260208301908036833701905050905030815f81518110611a7a57611a7a611ff8565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110611ac257611ac2611ff8565b60200260200101906001600160a01b031690816001600160a01b031681525050611b0130737a250d5630b4cf539739df2c5dacb4c659f2488d84611524565b600254604051635c11d79560e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d91635c11d79591611b4d9186915f9187916001600160a01b0390911690429060040161200c565b5f604051808303815f87803b158015611b64575f5ffd5b505af1158015611b76573d5f5f3e3d5ffd5b50505050505b506002805460ff60a81b19169055565b5f5f60205f8451602086015f885af180611bab576040513d5f823e3d81fd5b50505f513d91508115611bc2578060011415611bcf565b6001600160a01b0384163b155b156116a857604051635274afe760e01b81526001600160a01b0385166004820152602401610666565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114610b15575f5ffd5b5f5f60408385031215611c52575f5ffd5b8235611c5d81611c2d565b946020939093013593505050565b5f5f5f60608486031215611c7d575f5ffd5b8335611c8881611c2d565b92506020840135611c9881611c2d565b929592945050506040919091013590565b8015158114610b15575f5ffd5b5f60208284031215611cc6575f5ffd5b8135611cd181611ca9565b9392505050565b5f60208284031215611ce8575f5ffd5b8135611cd181611c2d565b5f5f60408385031215611d04575f5ffd5b8235611d0f81611c2d565b91506020830135611d1f81611c2d565b809150509250929050565b5f60208284031215611d3a575f5ffd5b5035919050565b5f5f60408385031215611d52575f5ffd5b8235611d5d81611c2d565b91506020830135611d1f81611ca9565b5f5f60408385031215611d7e575f5ffd5b823591506020830135611d1f81611c2d565b634e487b7160e01b5f52601160045260245ffd5b60ff81811683821601908111156105d1576105d1611d90565b6001815b6001841115611df857808504811115611ddc57611ddc611d90565b6001841615611dea57908102905b60019390931c928002611dc1565b935093915050565b5f82611e0e575060016105d1565b81611e1a57505f6105d1565b8160018114611e305760028114611e3a57611e56565b60019150506105d1565b60ff841115611e4b57611e4b611d90565b50506001821b6105d1565b5060208310610133831016604e8410600b8410161715611e79575081810a6105d1565b611e855f198484611dbd565b805f1904821115611e9857611e98611d90565b029392505050565b5f611cd160ff841683611e00565b80820281158282048414176105d1576105d1611d90565b60208082526012908201527123aca927aba4a71d103737ba1037bbb732b960711b604082015260600190565b808201808211156105d1576105d1611d90565b5f60208284031215611f14575f5ffd5b5051919050565b5f60208284031215611f2b575f5ffd5b8151611cd181611c2d565b5f5f5f60608486031215611f48575f5ffd5b5050815160208301516040909301519094929350919050565b5f60208284031215611f71575f5ffd5b8151611cd181611ca9565b6020808252602a908201527f4759524f57494e3a2063616e277420617070726f766520746f20746865207a65604082015269726f206164647265737360b01b606082015260800190565b5f82611fe057634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156105d1576105d1611d90565b634e487b7160e01b5f52603260045260245ffd5b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b8181101561205c5783516001600160a01b0316835260209384019390920191600101612035565b50506001600160a01b03959095166060840152505060800152939250505056fea2646970667358221220956bcef11b0cdd44529328f368fc816313909a3fa3dd11da5d72ccd7dc9971ce64736f6c634300081c0033

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.