ETH Price: $2,520.77 (+1.73%)

Token

Orca Bot (OB)
 

Overview

Max Total Supply

100,000,000 OB

Holders

27

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
329,796.45276038997084309 OB

Value
$0.00
0x3EA855779010d85E3d21C2eAC35Be056E174519c
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:
OrcaBot

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
File 1 of 1 : OrcaBot.sol
/**
 * This is the ERC20 token for the Orca Bot, a Telegram Signals Bot
 *
 *  telegram: https://t.me/OrcaBotxyz
 *  website: https://www.orcabot.xyz/
 *  twitter: 
 *
      o__ __o                                         o__ __o                  o     
     /v     v\                                       <|     v\                <|>    
    />       <\                                      / \     <\               < >    
  o/           \o   \o__ __o      __o__    o__ __o/  \o/     o/    o__ __o     |     
 <|             |>   |     |>    />  \    /v     |    |__  _<|    /v     v\    o__/_ 
  \\           //   / \   < >  o/        />     / \   |       \  />       <\   |     
    \         /     \o/       <|         \      \o/  <o>      /  \         /   |     
     o       o       |         \\         o      |    |      o    o       o    o     
     <\__ __/>      / \         _\o__</   <\__  / \  / \  __/>    <\__ __/>    <\__                
 */

// SPDX-License-Identifier: MIT
pragma solidity >=0.7.0 <0.9.0;

/**
 * @notice Simple ERC20 implementation from Solady.
 * @author Solady (https://github.com/vectorized/solady/blob/main/src/tokens/ERC20.sol)
 * @notice EIP-2612 has been removed due to concerns of userbase not being familiar with the security risks of signatures.
 * @notice Hooks removed since they could be called twice during tax events.
 * @notice Burn is removed as there is no intended use.
 */
abstract contract ERC20 {
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                       CUSTOM ERRORS                        */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The total supply has overflowed.
    error TotalSupplyOverflow();

    /// @dev The allowance has overflowed.
    error AllowanceOverflow();

    /// @dev The allowance has underflowed.
    error AllowanceUnderflow();

    /// @dev Insufficient balance.
    error InsufficientBalance();

    /// @dev Insufficient allowance.
    error InsufficientAllowance();

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                           EVENTS                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Emitted when `amount` tokens is transferred from `from` to `to`.
    event Transfer(address indexed from, address indexed to, uint256 amount);

    /// @dev Emitted when `amount` tokens is approved by `owner` to be used by `spender`.
    event Approval(address indexed owner, address indexed spender, uint256 amount);

    /// @dev `keccak256(bytes("Transfer(address,address,uint256)"))`.
    uint256 private constant _TRANSFER_EVENT_SIGNATURE =
        0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef;

    /// @dev `keccak256(bytes("Approval(address,address,uint256)"))`.
    uint256 private constant _APPROVAL_EVENT_SIGNATURE =
        0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                          STORAGE                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The storage slot for the total supply.
    uint256 private constant _TOTAL_SUPPLY_SLOT = 0x05345cdf77eb68f44c;

    /// @dev The balance slot of `owner` is given by:
    /// ```
    ///     mstore(0x0c, _BALANCE_SLOT_SEED)
    ///     mstore(0x00, owner)
    ///     let balanceSlot := keccak256(0x0c, 0x20)
    /// ```
    uint256 private constant _BALANCE_SLOT_SEED = 0x87a211a2;

    /// @dev The allowance slot of (`owner`, `spender`) is given by:
    /// ```
    ///     mstore(0x20, spender)
    ///     mstore(0x0c, _ALLOWANCE_SLOT_SEED)
    ///     mstore(0x00, owner)
    ///     let allowanceSlot := keccak256(0x0c, 0x34)
    /// ```
    uint256 private constant _ALLOWANCE_SLOT_SEED = 0x7f5e9f20;

    /// @dev The nonce slot of `owner` is given by:
    /// ```
    ///     mstore(0x0c, _NONCES_SLOT_SEED)
    ///     mstore(0x00, owner)
    ///     let nonceSlot := keccak256(0x0c, 0x20)
    /// ```
    uint256 private constant _NONCES_SLOT_SEED = 0x38377508;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                       ERC20 METADATA                       */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Returns the name of the token.
    function name() public view virtual returns (string memory);

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

    /// @dev Returns the decimals places of the token.
    function decimals() public view virtual returns (uint8) {
        return 18;
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                           ERC20                            */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Returns the amount of tokens in existence.
    function totalSupply() public view virtual returns (uint256 result) {
        /// @solidity memory-safe-assembly
        assembly {
            result := sload(_TOTAL_SUPPLY_SLOT)
        }
    }

    /// @dev Returns the amount of tokens owned by `owner`.
    function balanceOf(address owner) public view virtual returns (uint256 result) {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x0c, _BALANCE_SLOT_SEED)
            mstore(0x00, owner)
            result := sload(keccak256(0x0c, 0x20))
        }
    }

    /// @dev Returns the amount of tokens that `spender` can spend on behalf of `owner`.
    function allowance(address owner, address spender)
        public
        view
        virtual
        returns (uint256 result)
    {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x20, spender)
            mstore(0x0c, _ALLOWANCE_SLOT_SEED)
            mstore(0x00, owner)
            result := sload(keccak256(0x0c, 0x34))
        }
    }

    /// @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
    ///
    /// Emits a {Approval} event.
    function approve(address spender, uint256 amount) public virtual returns (bool) {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute the allowance slot and store the amount.
            mstore(0x20, spender)
            mstore(0x0c, _ALLOWANCE_SLOT_SEED)
            mstore(0x00, caller())
            sstore(keccak256(0x0c, 0x34), amount)
            // Emit the {Approval} event.
            mstore(0x00, amount)
            log3(0x00, 0x20, _APPROVAL_EVENT_SIGNATURE, caller(), shr(96, mload(0x2c)))
        }
        return true;
    }

    /// @dev Atomically increases the allowance granted to `spender` by the caller.
    ///
    /// Emits a {Approval} event.
    function increaseAllowance(address spender, uint256 difference) public virtual returns (bool) {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute the allowance slot and load its value.
            mstore(0x20, spender)
            mstore(0x0c, _ALLOWANCE_SLOT_SEED)
            mstore(0x00, caller())
            let allowanceSlot := keccak256(0x0c, 0x34)
            let allowanceBefore := sload(allowanceSlot)
            // Add to the allowance.
            let allowanceAfter := add(allowanceBefore, difference)
            // Revert upon overflow.
            if lt(allowanceAfter, allowanceBefore) {
                mstore(0x00, 0xf9067066) // `AllowanceOverflow()`.
                revert(0x1c, 0x04)
            }
            // Store the updated allowance.
            sstore(allowanceSlot, allowanceAfter)
            // Emit the {Approval} event.
            mstore(0x00, allowanceAfter)
            log3(0x00, 0x20, _APPROVAL_EVENT_SIGNATURE, caller(), shr(96, mload(0x2c)))
        }
        return true;
    }

    /// @dev Atomically decreases the allowance granted to `spender` by the caller.
    ///
    /// Emits a {Approval} event.
    function decreaseAllowance(address spender, uint256 difference) public virtual returns (bool) {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute the allowance slot and load its value.
            mstore(0x20, spender)
            mstore(0x0c, _ALLOWANCE_SLOT_SEED)
            mstore(0x00, caller())
            let allowanceSlot := keccak256(0x0c, 0x34)
            let allowanceBefore := sload(allowanceSlot)
            // Revert if will underflow.
            if lt(allowanceBefore, difference) {
                mstore(0x00, 0x8301ab38) // `AllowanceUnderflow()`.
                revert(0x1c, 0x04)
            }
            // Subtract and store the updated allowance.
            let allowanceAfter := sub(allowanceBefore, difference)
            sstore(allowanceSlot, allowanceAfter)
            // Emit the {Approval} event.
            mstore(0x00, allowanceAfter)
            log3(0x00, 0x20, _APPROVAL_EVENT_SIGNATURE, caller(), shr(96, mload(0x2c)))
        }
        return true;
    }

    /// @dev Transfer `amount` tokens from the caller to `to`.
    ///
    /// Requirements:
    /// - `from` must at least have `amount`.
    ///
    /// Emits a {Transfer} event.
    function transfer(address to, uint256 amount) public virtual returns (bool) {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute the balance slot and load its value.
            mstore(0x0c, _BALANCE_SLOT_SEED)
            mstore(0x00, caller())
            let fromBalanceSlot := keccak256(0x0c, 0x20)
            let fromBalance := sload(fromBalanceSlot)
            // Revert if insufficient balance.
            if gt(amount, fromBalance) {
                mstore(0x00, 0xf4d678b8) // `InsufficientBalance()`.
                revert(0x1c, 0x04)
            }
            // Subtract and store the updated balance.
            sstore(fromBalanceSlot, sub(fromBalance, amount))
            // Compute the balance slot of `to`.
            mstore(0x00, to)
            let toBalanceSlot := keccak256(0x0c, 0x20)
            // Add and store the updated balance of `to`.
            // Will not overflow because the sum of all user balances
            // cannot exceed the maximum uint256 value.
            sstore(toBalanceSlot, add(sload(toBalanceSlot), amount))
            // Emit the {Transfer} event.
            mstore(0x20, amount)
            log3(0x20, 0x20, _TRANSFER_EVENT_SIGNATURE, caller(), shr(96, mload(0x0c)))
        }
        return true;
    }

    /// @dev Transfers `amount` tokens from `from` to `to`.
    ///
    /// Note: Does not update the allowance if it is the maximum uint256 value.
    ///
    /// Requirements:
    /// - `from` must at least have `amount`.
    /// - The caller must have at least `amount` of allowance to transfer the tokens of `from`.
    ///
    /// Emits a {Transfer} event.
    function transferFrom(address from, address to, uint256 amount) public virtual returns (bool) {
        /// @solidity memory-safe-assembly
        assembly {
            let from_ := shl(96, from)
            // Compute the allowance slot and load its value.
            mstore(0x20, caller())
            mstore(0x0c, or(from_, _ALLOWANCE_SLOT_SEED))
            let allowanceSlot := keccak256(0x0c, 0x34)
            let allowance_ := sload(allowanceSlot)
            // If the allowance is not the maximum uint256 value.
            if iszero(eq(allowance_, not(0))) {
                // Revert if the amount to be transferred exceeds the allowance.
                if gt(amount, allowance_) {
                    mstore(0x00, 0x13be252b) // `InsufficientAllowance()`.
                    revert(0x1c, 0x04)
                }
                // Subtract and store the updated allowance.
                sstore(allowanceSlot, sub(allowance_, amount))
            }
            // Compute the balance slot and load its value.
            mstore(0x0c, or(from_, _BALANCE_SLOT_SEED))
            let fromBalanceSlot := keccak256(0x0c, 0x20)
            let fromBalance := sload(fromBalanceSlot)
            // Revert if insufficient balance.
            if gt(amount, fromBalance) {
                mstore(0x00, 0xf4d678b8) // `InsufficientBalance()`.
                revert(0x1c, 0x04)
            }
            // Subtract and store the updated balance.
            sstore(fromBalanceSlot, sub(fromBalance, amount))
            // Compute the balance slot of `to`.
            mstore(0x00, to)
            let toBalanceSlot := keccak256(0x0c, 0x20)
            // Add and store the updated balance of `to`.
            // Will not overflow because the sum of all user balances
            // cannot exceed the maximum uint256 value.
            sstore(toBalanceSlot, add(sload(toBalanceSlot), amount))
            // Emit the {Transfer} event.
            mstore(0x20, amount)
            log3(0x20, 0x20, _TRANSFER_EVENT_SIGNATURE, shr(96, from_), shr(96, mload(0x0c)))
        }
        return true;
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                  INTERNAL MINT FUNCTIONS                   */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Mints `amount` tokens to `to`, increasing the total supply.
    ///
    /// Emits a {Transfer} event.
    function _mint(address to, uint256 amount) internal virtual {
        /// @solidity memory-safe-assembly
        assembly {
            let totalSupplyBefore := sload(_TOTAL_SUPPLY_SLOT)
            let totalSupplyAfter := add(totalSupplyBefore, amount)
            // Revert if the total supply overflows.
            if lt(totalSupplyAfter, totalSupplyBefore) {
                mstore(0x00, 0xe5cfe957) // `TotalSupplyOverflow()`.
                revert(0x1c, 0x04)
            }
            // Store the updated total supply.
            sstore(_TOTAL_SUPPLY_SLOT, totalSupplyAfter)
            // Compute the balance slot and load its value.
            mstore(0x0c, _BALANCE_SLOT_SEED)
            mstore(0x00, to)
            let toBalanceSlot := keccak256(0x0c, 0x20)
            // Add and store the updated balance.
            sstore(toBalanceSlot, add(sload(toBalanceSlot), amount))
            // Emit the {Transfer} event.
            mstore(0x20, amount)
            log3(0x20, 0x20, _TRANSFER_EVENT_SIGNATURE, 0, shr(96, mload(0x0c)))
        }
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                INTERNAL TRANSFER FUNCTIONS                 */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Moves `amount` of tokens from `from` to `to`.
    function _transfer(address from, address to, uint256 amount) internal virtual {
        /// @solidity memory-safe-assembly
        assembly {
            let from_ := shl(96, from)
            // Compute the balance slot and load its value.
            mstore(0x0c, or(from_, _BALANCE_SLOT_SEED))
            let fromBalanceSlot := keccak256(0x0c, 0x20)
            let fromBalance := sload(fromBalanceSlot)
            // Revert if insufficient balance.
            if gt(amount, fromBalance) {
                mstore(0x00, 0xf4d678b8) // `InsufficientBalance()`.
                revert(0x1c, 0x04)
            }
            // Subtract and store the updated balance.
            sstore(fromBalanceSlot, sub(fromBalance, amount))
            // Compute the balance slot of `to`.
            mstore(0x00, to)
            let toBalanceSlot := keccak256(0x0c, 0x20)
            // Add and store the updated balance of `to`.
            // Will not overflow because the sum of all user balances
            // cannot exceed the maximum uint256 value.
            sstore(toBalanceSlot, add(sload(toBalanceSlot), amount))
            // Emit the {Transfer} event.
            mstore(0x20, amount)
            log3(0x20, 0x20, _TRANSFER_EVENT_SIGNATURE, shr(96, from_), shr(96, mload(0x0c)))
        }
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                INTERNAL ALLOWANCE FUNCTIONS                */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Updates the allowance of `owner` for `spender` based on spent `amount`.
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute the allowance slot and load its value.
            mstore(0x20, spender)
            mstore(0x0c, _ALLOWANCE_SLOT_SEED)
            mstore(0x00, owner)
            let allowanceSlot := keccak256(0x0c, 0x34)
            let allowance_ := sload(allowanceSlot)
            // If the allowance is not the maximum uint256 value.
            if iszero(eq(allowance_, not(0))) {
                // Revert if the amount to be transferred exceeds the allowance.
                if gt(amount, allowance_) {
                    mstore(0x00, 0x13be252b) // `InsufficientAllowance()`.
                    revert(0x1c, 0x04)
                }
                // Subtract and store the updated allowance.
                sstore(allowanceSlot, sub(allowance_, amount))
            }
        }
    }

    /// @dev Sets `amount` as the allowance of `spender` over the tokens of `owner`.
    ///
    /// Emits a {Approval} event.
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        /// @solidity memory-safe-assembly
        assembly {
            let owner_ := shl(96, owner)
            // Compute the allowance slot and store the amount.
            mstore(0x20, spender)
            mstore(0x0c, or(owner_, _ALLOWANCE_SLOT_SEED))
            sstore(keccak256(0x0c, 0x34), amount)
            // Emit the {Approval} event.
            mstore(0x00, amount)
            log3(0x00, 0x20, _APPROVAL_EVENT_SIGNATURE, shr(96, owner_), shr(96, mload(0x2c)))
        }
    }
}

/**
 * @notice Simple single owner authorization mixin.
 * @author Solady (https://github.com/vectorized/solady/blob/main/src/auth/Ownable.sol)
 */
abstract contract Ownable {
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                       CUSTOM ERRORS                        */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The caller is not authorized to call the function.
    error Unauthorized();

    /// @dev The `newOwner` cannot be the zero address.
    error NewOwnerIsZeroAddress();

    /// @dev The `pendingOwner` does not have a valid handover request.
    error NoHandoverRequest();

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                           EVENTS                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The ownership is transferred from `oldOwner` to `newOwner`.
    /// This event is intentionally kept the same as OpenZeppelin's Ownable to be
    /// compatible with indexers and [EIP-173](https://eips.ethereum.org/EIPS/eip-173),
    /// despite it not being as lightweight as a single argument event.
    event OwnershipTransferred(address indexed oldOwner, address indexed newOwner);

    /// @dev An ownership handover to `pendingOwner` has been requested.
    event OwnershipHandoverRequested(address indexed pendingOwner);

    /// @dev The ownership handover to `pendingOwner` has been canceled.
    event OwnershipHandoverCanceled(address indexed pendingOwner);

    /// @dev `keccak256(bytes("OwnershipTransferred(address,address)"))`.
    uint256 private constant _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE =
        0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0;

    /// @dev `keccak256(bytes("OwnershipHandoverRequested(address)"))`.
    uint256 private constant _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE =
        0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d;

    /// @dev `keccak256(bytes("OwnershipHandoverCanceled(address)"))`.
    uint256 private constant _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE =
        0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                          STORAGE                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The owner slot is given by: `not(_OWNER_SLOT_NOT)`.
    /// It is intentionally chosen to be a high value
    /// to avoid collision with lower slots.
    /// The choice of manual storage layout is to enable compatibility
    /// with both regular and upgradeable contracts.
    uint256 private constant _OWNER_SLOT_NOT = 0x8b78c6d8;

    /// The ownership handover slot of `newOwner` is given by:
    /// ```
    ///     mstore(0x00, or(shl(96, user), _HANDOVER_SLOT_SEED))
    ///     let handoverSlot := keccak256(0x00, 0x20)
    /// ```
    /// It stores the expiry timestamp of the two-step ownership handover.
    uint256 private constant _HANDOVER_SLOT_SEED = 0x389a75e1;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                     INTERNAL FUNCTIONS                     */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Initializes the owner directly without authorization guard.
    /// This function must be called upon initialization,
    /// regardless of whether the contract is upgradeable or not.
    /// This is to enable generalization to both regular and upgradeable contracts,
    /// and to save gas in case the initial owner is not the caller.
    /// For performance reasons, this function will not check if there
    /// is an existing owner.
    function _initializeOwner(address newOwner) internal virtual {
        /// @solidity memory-safe-assembly
        assembly {
            // Clean the upper 96 bits.
            newOwner := shr(96, shl(96, newOwner))
            // Store the new value.
            sstore(not(_OWNER_SLOT_NOT), newOwner)
            // Emit the {OwnershipTransferred} event.
            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner)
        }
    }

    /// @dev Sets the owner directly without authorization guard.
    function _setOwner(address newOwner) internal virtual {
        /// @solidity memory-safe-assembly
        assembly {
            let ownerSlot := not(_OWNER_SLOT_NOT)
            // Clean the upper 96 bits.
            newOwner := shr(96, shl(96, newOwner))
            // Emit the {OwnershipTransferred} event.
            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner)
            // Store the new value.
            sstore(ownerSlot, newOwner)
        }
    }

    /// @dev Throws if the sender is not the owner.
    function _checkOwner() internal view virtual {
        /// @solidity memory-safe-assembly
        assembly {
            // If the caller is not the stored owner, revert.
            if iszero(eq(caller(), sload(not(_OWNER_SLOT_NOT)))) {
                mstore(0x00, 0x82b42900) // `Unauthorized()`.
                revert(0x1c, 0x04)
            }
        }
    }

    /// @dev Returns how long a two-step ownership handover is valid for in seconds.
    /// Override to return a different value if needed.
    /// Made internal to conserve bytecode. Wrap it in a public function if needed.
    function _ownershipHandoverValidFor() internal view virtual returns (uint64) {
        return 48 * 3600;
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                  PUBLIC UPDATE FUNCTIONS                   */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Allows the owner to transfer the ownership to `newOwner`.
    function transferOwnership(address newOwner) public payable virtual onlyOwner {
        /// @solidity memory-safe-assembly
        assembly {
            if iszero(shl(96, newOwner)) {
                mstore(0x00, 0x7448fbae) // `NewOwnerIsZeroAddress()`.
                revert(0x1c, 0x04)
            }
        }
        _setOwner(newOwner);
    }

    /// @dev Allows the owner to renounce their ownership.
    function renounceOwnership() public payable virtual onlyOwner {
        _setOwner(address(0));
    }

    /// @dev Request a two-step ownership handover to the caller.
    /// The request will automatically expire in 48 hours (172800 seconds) by default.
    function requestOwnershipHandover() public payable virtual {
        unchecked {
            uint256 expires = block.timestamp + _ownershipHandoverValidFor();
            /// @solidity memory-safe-assembly
            assembly {
                // Compute and set the handover slot to `expires`.
                mstore(0x0c, _HANDOVER_SLOT_SEED)
                mstore(0x00, caller())
                sstore(keccak256(0x0c, 0x20), expires)
                // Emit the {OwnershipHandoverRequested} event.
                log2(0, 0, _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE, caller())
            }
        }
    }

    /// @dev Cancels the two-step ownership handover to the caller, if any.
    function cancelOwnershipHandover() public payable virtual {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute and set the handover slot to 0.
            mstore(0x0c, _HANDOVER_SLOT_SEED)
            mstore(0x00, caller())
            sstore(keccak256(0x0c, 0x20), 0)
            // Emit the {OwnershipHandoverCanceled} event.
            log2(0, 0, _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE, caller())
        }
    }

    /// @dev Allows the owner to complete the two-step ownership handover to `pendingOwner`.
    /// Reverts if there is no existing ownership handover requested by `pendingOwner`.
    function completeOwnershipHandover(address pendingOwner) public payable virtual onlyOwner {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute and set the handover slot to 0.
            mstore(0x0c, _HANDOVER_SLOT_SEED)
            mstore(0x00, pendingOwner)
            let handoverSlot := keccak256(0x0c, 0x20)
            // If the handover does not exist, or has expired.
            if gt(timestamp(), sload(handoverSlot)) {
                mstore(0x00, 0x6f5e8818) // `NoHandoverRequest()`.
                revert(0x1c, 0x04)
            }
            // Set the handover slot to 0.
            sstore(handoverSlot, 0)
        }
        _setOwner(pendingOwner);
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                   PUBLIC READ FUNCTIONS                    */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Returns the owner of the contract.
    function owner() public view virtual returns (address result) {
        /// @solidity memory-safe-assembly
        assembly {
            result := sload(not(_OWNER_SLOT_NOT))
        }
    }

    /// @dev Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`.
    function ownershipHandoverExpiresAt(address pendingOwner)
        public
        view
        virtual
        returns (uint256 result)
    {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute the handover slot.
            mstore(0x0c, _HANDOVER_SLOT_SEED)
            mstore(0x00, pendingOwner)
            // Load the handover slot.
            result := sload(keccak256(0x0c, 0x20))
        }
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                         MODIFIERS                          */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Marks a function as only callable by the owner.
    modifier onlyOwner() virtual {
        _checkOwner();
        _;
    }
}

/**
 * @notice Interface for UniV2 router.
 */
interface IDexRouter {
	function factory() external pure returns (address);
	function WETH() external pure returns (address);
	function addLiquidityETH(address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external payable returns (uint amountToken, uint amountETH, uint liquidity);
	function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
}

/**
 * @notice The Orca Bot utility token.
 * @author OrcaBot
 */
contract OrcaBot is ERC20, Ownable {

	struct FeeSettings {
		uint8 buyLiqFee;
		uint8 buyDevFee;
		uint8 sellLiqFee;
		uint8 sellDevFee;
	}

    //* will be active once stuff deployed
	bool public autoLiqActive = true;
	bool public swapActive = true;

    //* reentrancy prevention
	bool private _inSwap = false;

	address public autoliqReceiver;
	address public devFeeReceiver;
	address private _pair;
	bool public limited;
	uint256 public launchBlock;
	uint256 private _maxTx;
	uint256 private _maxWallet;
	uint256 private _swapTrigger;
	uint256 private _swapAmount;
	FeeSettings public fees;
	address private _router;
	mapping (address => bool) private _taxExempt;
	mapping (address => bool) private _silicon;

	error ExceedsLimits();
	error ReentrantSwap();

	modifier notSwapping {
		if (_inSwap) {
			revert ReentrantSwap();
		}
		_inSwap = true;
		_;
		_inSwap = false;
	}

	constructor(address router) {
		// Init the owner.
		_initializeOwner(msg.sender);
		/**
		 * Init the total supply.
		 * See implementation in ERC20 contract above.
		 * This is only called in this constructor.
		 * It cannot be called againt.
		 */
		_mint(msg.sender, 100_000_000 ether);
		_router = router;
		// Approve for contract swaps and initial liq add.
		_approve(address(this), router, type(uint256).max);
		_approve(msg.sender, router, type(uint256).max);
		// Initial fees.
		_taxExempt[msg.sender] = true;
		_taxExempt[address(this)] = true;
        //!todo set
		fees.buyDevFee = 2;
		fees.buyLiqFee = 0;
		fees.sellDevFee = 2;
		fees.sellLiqFee = 1;
		// Initial swapback value.
		_swapAmount = totalSupply(); //* it is like this because when it's bigger than the balance of the sc then automatically just puts the swapAmount as the contract balance 
		_swapTrigger = totalSupply() / 1000; //* 0.1%

        //* additional changes..
        autoliqReceiver = owner();
        devFeeReceiver = address(0x5b40a93e6466B5b1D7A8B10D4a3519793f40Dd5a); //* team multisig      

        _maxTx = 5_000_000; //* 5%
        _maxWallet = 10_000_000; //* 10 % in our case 
	}

	function name() public pure override returns (string memory) {
		return "Orca Bot";
	}

    function symbol() public pure override returns (string memory) {
		return "OB";
	}

	function release(address pair) external onlyOwner {
		require(launchBlock == 0, "Already launched!");
		launchBlock = block.number;
		_pair = pair;
	}

	/**
	 * @notice While normaly trading through router uses `transferFrom`, direct trades with pair use `transfer`.
	 * Thus, limits and tax status must be checked on both.
	 * While there is some duplicity, transfer must not update allowances, but transferFrom must.
	 */
	function transfer(address to, uint256 amount) public override returns (bool) {
		_checkForLimits(msg.sender, to, amount);

		// Transfer with fee.
		bool isEitherBot = _silicon[msg.sender] || _silicon[to];
		if (isEitherBot || _hasFee(msg.sender, to)) {
			uint256 fee = _feeAmount(msg.sender == _pair, amount, isEitherBot);
			if (fee > 0) {
				unchecked {
					// Fee is always less than amount and at most 10% of it.
					amount = amount - fee;
				}
				super._transfer(msg.sender, address(this), fee);
			}
			if (to == _pair) {
				_checkPerformSwap();
			}
		}

		// Base class ERC20 checks for balance.
		return super.transfer(to, amount);
	}

	function transferFrom(address from, address to, uint256 amount) public override returns (bool) {
		_checkForLimits(from, to, amount);

		// Transfer from with fee.
		bool isEitherBot = _silicon[from] || _silicon[to];
		if (isEitherBot || _hasFee(from, to)) {
			_transferFrom(from, to, amount, isEitherBot);
			return true;
		}

		// Regular non taxed transferFrom. Straight from base class.
		// Base class ERC20 checks for allowance and balance of sender.
		// It also updates the allowance.
		return super.transferFrom(from, to, amount);
	}

	function _transferFrom(address from, address to, uint256 amount, bool isEitherBot) private {
		/**
		 * In the case of a transfer from with fees, we deal here with approval.
		 * Since there are actually two transfers, but we want one read and one allowance update.
		 */
		uint256 allowed = allowance(from, msg.sender);
		if (allowance(from, msg.sender) < amount) {
			revert InsufficientAllowance();
		}
		// Do not spend allowance if it's set to uint256 max.
		if (allowed != type(uint256).max) {
			_spendAllowance(from, msg.sender, amount);
		}

		uint256 fee = _feeAmount(from == _pair, amount, isEitherBot);
		if (fee > 0) {
			unchecked {
				// Fee is always less than amount and at most 10% of it.
				amount = amount - fee;
			}
			/**
			 * Fee is a separate transfer event.
			 * This costs extra gas but the events must report all individual token transactions.
			 * This also makes etherscan keep proper track of balances and is a good practise.
			 */
			super._transfer(from, address(this), fee);
		}
		if (to == _pair) {
			_checkPerformSwap();
		}
		super._transfer(from, to, amount);
	}

	/**
	 * @dev Wallet and tx limitations for launch.
	 */
	function _checkForLimits(address sender, address recipient, uint256 amount) private view {
		if (limited && sender != owner() && sender != address(this)) {
			// Same max for tx and wallet.
			bool recipientImmune = _isImmuneToWalletLimit(recipient);
			if (amount > _maxTx || (!recipientImmune && balanceOf(recipient) + amount > _maxWallet)) {
				revert ExceedsLimits();
			}
		}
	}

	/**
	 * @dev Check whether transaction is subject to AMM trading fee.
	 */
	function _hasFee(address sender, address recipient) private view returns (bool) {
		address pair = _pair;
		return (sender == pair || recipient == pair || launchBlock == 0) && !_taxExempt[sender] && !_taxExempt[recipient];
	}

	/**
	 * @dev Calculate fee amount for an AMM trade.
	 */
	function _feeAmount(bool isBuy, uint256 amount, bool isEitherBot) private view returns (uint256) {
		if (amount == 0) {
			return 0;
		}
		uint256 feePct = _getFeePct(isBuy, isEitherBot);
		if (feePct > 0) {
			return amount * feePct / 100;
		}
		return 0;
	}

	/**
	 * @dev Check whether to perform a contract swap.
	 */
	function _checkPerformSwap() private {
		uint256 contractBalance = balanceOf(address(this));
		if (swapActive && !_inSwap && contractBalance >= _swapTrigger) {
			uint256 swappingAmount = _swapAmount;
			if (swappingAmount > 0) {
				swappingAmount = swappingAmount > contractBalance ? contractBalance : swappingAmount;
				_swapAndLiq(swappingAmount);
			}
		}
	}

	/**
	 * @dev Calculate trade fee percent.
	 */
	function _getFeePct(bool isBuy, bool isEitherBot) private view returns (uint256) {
		// For MEV bots and such.
		if (isEitherBot) {
			return isBuy ? 25 : 80;
		}
		// Before launch.
		if (launchBlock == 0) {
			return isBuy ? 25 : 66;
		}
		// Buy fees.
		if (isBuy) {
			return fees.buyDevFee + fees.buyLiqFee;
		}
		// Sell fees.
		return fees.sellDevFee + fees.sellLiqFee;
	}

	/**
	 * @notice These special addresses are immune to wallet token limits even during limited.
	 */
	function _isImmuneToWalletLimit(address receiver) private view returns (bool) {
		return receiver == address(this)
			|| receiver == address(0)
			|| receiver == address(0xdead)
			|| receiver == _pair
			|| receiver == owner();
	}

	function _swapAndLiq(uint256 swapAmount) private notSwapping {
		// If this is active, sales that lead to swaps will add some liquidity from the taxed tokens.
		if (autoLiqActive) {
			uint256 total = fees.sellDevFee + fees.sellLiqFee;
			uint256 forLiquidity = (swapAmount * fees.sellLiqFee / total) / 2;
			uint256 balanceBefore = address(this).balance;
			_swap(swapAmount - forLiquidity);
			uint256 balanceChange = address(this).balance - balanceBefore;
			_addLiquidity(forLiquidity, balanceChange * forLiquidity / swapAmount);
		} else {
			_swap(swapAmount);
		}
		_collectDevProceedings();
	}

	receive() external payable {}

	function _swap(uint256 amount) private {
		address[] memory path = new address[](2);
		path[0] = address(this);
		IDexRouter router = IDexRouter(_router);
		path[1] = router.WETH();
		router.swapExactTokensForETHSupportingFeeOnTransferTokens(
			amount,
			0,
			path,
			address(this),
			block.timestamp
		);
	}

	function _addLiquidity(uint256 tokens, uint256 eth) private {
		IDexRouter(_router).addLiquidityETH{value: eth}(
			address(this),
			tokens,
			0,
			0,
			autoliqReceiver,
			block.timestamp
		);
	}

	/**
	 * @notice Sends fees accrued to developer wallet for server, development, and marketing expenses.
	 */
	function _collectDevProceedings() private {
		devFeeReceiver.call{value: address(this).balance}("");
	}

	/**
	 * @notice Control automated malicious value subtracting bots such as MEV so they cannot profit out of the token.
	 */
	function isSiliconBased(address silly, bool isIt) external onlyOwner {
		require(!isIt || launchBlock == 0 || block.number - launchBlock < 50000, "Can only be done during launch.");
		_silicon[silly] = isIt;
	}

	function manySuchCases(address[] calldata malevolent) external onlyOwner {
		require(launchBlock == 0 || block.number - launchBlock < 50000, "Can only be done during launch.");
		for (uint256 i = 0; i < malevolent.length; i++) {
			_silicon[malevolent[i]] = true;
		}
	}

	/**
	 * @notice Whether the transactions and wallets are limited or not.
	 */
	function setIsLimited(bool isIt) external onlyOwner {
		limited = isIt;
	}

    /**
	 * @notice Change address of router in case I get it wrong lol. Only doable in first block 
	 */
	function changeRouterAddress(address router) external onlyOwner {
		require(launchBlock == 0 || block.number - launchBlock < 50000, "Can only be done during launch.");
        _router = router;
	}

    function getRouterAddress() external view returns (address){
        return _router;
    }

	function setBuyConfig(uint8 buyLiqFee, uint8 buyDevFee) external onlyOwner {
		require(buyLiqFee + buyDevFee < 11, "Cannot set above 10%");
		fees.buyLiqFee = buyLiqFee;
		fees.buyDevFee = buyDevFee;
	}

	function SetSellConfig(uint8 sellLiqFee, uint8 sellDevFee) external onlyOwner {
		require(sellLiqFee + sellDevFee < 11, "Cannot set above 10%");
		fees.sellLiqFee = sellLiqFee;
		fees.sellDevFee = sellDevFee;
	}

	function setAutoliqActive(bool isActive) external onlyOwner {
		autoLiqActive = isActive;
	}

	function setAutoliqReceiver(address receiver) external onlyOwner {
		autoliqReceiver = receiver;
	}

	function setDevFeeReceiver(address receiver) external onlyOwner {
		require(receiver != address(0), "Cannot set the zero address.");
		devFeeReceiver = receiver;
	}

	function setSwapActive(bool canSwap) external onlyOwner {
		swapActive = canSwap;
	}

	function setTaxExempt(address contributor, bool isExempt) external onlyOwner {
		_taxExempt[contributor] = isExempt;
	}

	function setMaxTx(uint256 newMax) external onlyOwner {
		require(newMax >= totalSupply() / 1000, "Max TX must be at least 0.1%!");
		_maxTx = newMax;
	}

    function setMaxWallet(uint256 newMax) external onlyOwner {
		require(_maxWallet >= totalSupply() / 1000, "Max amount allowed per wallet must be at least 0.1%!");
		_maxWallet = newMax;
	}

	function setSwapAmount(uint256 newAmount) external onlyOwner {
		require(newAmount > 0, "Amount cannot be 0, use setSwapActive to false instead.");
		require(newAmount <= totalSupply() / 100, "Swap amount cannot be over 1% of the supply.");
		_swapAmount = newAmount;
	}

	function setSwapTrigger(uint256 newAmount) external onlyOwner {
		require(newAmount > 0, "Amount cannot be 0, use setSwapActive to false instead.");
		_swapTrigger = newAmount;
	}

	function thisIsWhat(uint256 wahoo, uint256 bading) external view returns (uint256) {
		return wahoo + bading;
	}
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AllowanceOverflow","type":"error"},{"inputs":[],"name":"AllowanceUnderflow","type":"error"},{"inputs":[],"name":"ExceedsLimits","type":"error"},{"inputs":[],"name":"InsufficientAllowance","type":"error"},{"inputs":[],"name":"InsufficientBalance","type":"error"},{"inputs":[],"name":"NewOwnerIsZeroAddress","type":"error"},{"inputs":[],"name":"NoHandoverRequest","type":"error"},{"inputs":[],"name":"ReentrantSwap","type":"error"},{"inputs":[],"name":"TotalSupplyOverflow","type":"error"},{"inputs":[],"name":"Unauthorized","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":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"inputs":[{"internalType":"uint8","name":"sellLiqFee","type":"uint8"},{"internalType":"uint8","name":"sellDevFee","type":"uint8"}],"name":"SetSellConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"result","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":[],"name":"autoLiqActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoliqReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"changeRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"completeOwnershipHandover","outputs":[],"stateMutability":"payable","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":"difference","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fees","outputs":[{"internalType":"uint8","name":"buyLiqFee","type":"uint8"},{"internalType":"uint8","name":"buyDevFee","type":"uint8"},{"internalType":"uint8","name":"sellLiqFee","type":"uint8"},{"internalType":"uint8","name":"sellDevFee","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"difference","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"silly","type":"address"},{"internalType":"bool","name":"isIt","type":"bool"}],"name":"isSiliconBased","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"malevolent","type":"address[]"}],"name":"manySuchCases","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"result","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"ownershipHandoverExpiresAt","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"requestOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bool","name":"isActive","type":"bool"}],"name":"setAutoliqActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"setAutoliqReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"buyLiqFee","type":"uint8"},{"internalType":"uint8","name":"buyDevFee","type":"uint8"}],"name":"setBuyConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"setDevFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isIt","type":"bool"}],"name":"setIsLimited","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"canSwap","type":"bool"}],"name":"setSwapActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTrigger","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contributor","type":"address"},{"internalType":"bool","name":"isExempt","type":"bool"}],"name":"setTaxExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"wahoo","type":"uint256"},{"internalType":"uint256","name":"bading","type":"uint256"}],"name":"thisIsWhat","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000805462ffffff19166101011790553480156200002157600080fd5b50604051620022fb380380620022fb833981016040819052620000449162000297565b6200004f3362000188565b62000066336a52b7d2dcc80cd2e4000000620001c4565b600980546001600160a01b0319166001600160a01b03831617905562000090308260001962000244565b6200009f338260001962000244565b336000908152600a60205260408082208054600160ff19918216811790925530845291909220805490911690911790556008805463ffffffff19166302010200179055620000f46805345cdf77eb68f44c5490565b6007556103e86200010c6805345cdf77eb68f44c5490565b620001189190620002c9565b600655638b78c6d81954600080546001600160a01b03929092166301000000026301000000600160b81b031990921691909117905550600180546001600160a01b031916735b40a93e6466b5b1d7a8b10d4a3519793f40dd5a179055624c4b4060045562989680600555620002ec565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b6805345cdf77eb68f44c5481810181811015620001e95763e5cfe9576000526004601cfd5b806805345cdf77eb68f44c5550506387a211a2600c52816000526020600c208181540181555080602052600c5160601c60007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a35050565b8260601b82602052637f5e9f208117600c52816034600c205581600052602c5160601c8160601c7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560206000a350505050565b600060208284031215620002aa57600080fd5b81516001600160a01b0381168114620002c257600080fd5b9392505050565b600082620002e757634e487b7160e01b600052601260045260246000fd5b500490565b611fff80620002fc6000396000f3fe6080604052600436106102605760003560e01c8063715018a611610144578063b28f7cf5116100b6578063dab84ee71161007a578063dab84ee71461075b578063dd62ed3e1461077b578063e632313c146107b1578063f04e283e146107d1578063f2fde38b146107e4578063fee81cf4146107f757600080fd5b8063b28f7cf5146106c8578063bc337182146106e8578063d00efb2f14610708578063d54f7d5e1461071e578063d6dacb441461073c57600080fd5b80639af1d35a116101085780639af1d35a146105be5780639b98657114610621578063a44e49bb14610641578063a457c2d714610661578063a52e73a414610681578063a9059cbb146106a857600080fd5b8063715018a61461051d578063860a32ec146105255780638da5cb5b146105465780638f270f491461057357806395d89b411461059357600080fd5b806325692962116101dd57806339509351116101a157806339509351146104625780633c47034e1461048257806354d1f13d146104a25780635d0044ca146104aa5780636ac4af51146104ca57806370a08231146104ea57600080fd5b806325692962146103de5780632c646927146103e6578063313ce5671461040657806331a362de14610422578063385ddcd91461044257600080fd5b8063095ea7b311610224578063095ea7b31461033757806318160ddd14610357578063191655871461037e5780631dc610401461039e57806323b872dd146103be57600080fd5b80630178c38f1461026c57806301960dc71461029b57806304db6e68146102bd57806306fdde03146102dd578063089591a11461031757600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506000546102869060ff1681565b60405190151581526020015b60405180910390f35b3480156102a757600080fd5b506102bb6102b6366004611b46565b61082a565b005b3480156102c957600080fd5b506102bb6102d8366004611b74565b610860565b3480156102e957600080fd5b5060408051808201909152600881526713dc98d848109bdd60c21b60208201525b6040516102929190611b91565b34801561032357600080fd5b506102bb610332366004611b74565b6108c3565b34801561034357600080fd5b50610286610352366004611bdf565b6108f7565b34801561036357600080fd5b506805345cdf77eb68f44c545b604051908152602001610292565b34801561038a57600080fd5b506102bb610399366004611b74565b61094b565b3480156103aa57600080fd5b506102bb6103b9366004611c20565b6109bd565b3480156103ca57600080fd5b506102866103d9366004611c55565b6109f0565b6102bb610a80565b3480156103f257600080fd5b506102bb610401366004611ca7565b610ad0565b34801561041257600080fd5b5060405160128152602001610292565b34801561042e57600080fd5b506102bb61043d366004611ca7565b610b5d565b34801561044e57600080fd5b506102bb61045d366004611cd1565b610bdc565b34801561046e57600080fd5b5061028661047d366004611bdf565b610c02565b34801561048e57600080fd5b506102bb61049d366004611b74565b610c74565b6102bb610cf4565b3480156104b657600080fd5b506102bb6104c5366004611b46565b610d30565b3480156104d657600080fd5b506102bb6104e5366004611cd1565b610dc9565b3480156104f657600080fd5b50610370610505366004611b74565b6387a211a2600c908152600091909152602090205490565b6102bb610de4565b34801561053157600080fd5b5060025461028690600160a01b900460ff1681565b34801561055257600080fd5b50638b78c6d819545b6040516001600160a01b039091168152602001610292565b34801561057f57600080fd5b506102bb61058e366004611cec565b610df8565b34801561059f57600080fd5b5060408051808201909152600281526127a160f11b602082015261030a565b3480156105ca57600080fd5b506008546105f49060ff808216916101008104821691620100008204811691630100000090041684565b6040805160ff95861681529385166020850152918416918301919091529091166060820152608001610292565b34801561062d57600080fd5b5061037061063c366004611d61565b610eb0565b34801561064d57600080fd5b506102bb61065c366004611cd1565b610ebc565b34801561066d57600080fd5b5061028661067c366004611bdf565b610ede565b34801561068d57600080fd5b5060005461055b90630100000090046001600160a01b031681565b3480156106b457600080fd5b506102866106c3366004611bdf565b610f51565b3480156106d457600080fd5b506102bb6106e3366004611c20565b611012565b3480156106f457600080fd5b506102bb610703366004611b46565b611087565b34801561071457600080fd5b5061037060035481565b34801561072a57600080fd5b506009546001600160a01b031661055b565b34801561074857600080fd5b5060005461028690610100900460ff1681565b34801561076757600080fd5b5060015461055b906001600160a01b031681565b34801561078757600080fd5b50610370610796366004611d83565b602052637f5e9f20600c908152600091909152603490205490565b3480156107bd57600080fd5b506102bb6107cc366004611b46565b611101565b6102bb6107df366004611b74565b6111af565b6102bb6107f2366004611b74565b6111ef565b34801561080357600080fd5b50610370610812366004611b74565b63389a75e1600c908152600091909152602090205490565b610832611216565b6000811161085b5760405162461bcd60e51b815260040161085290611dbc565b60405180910390fd5b600655565b610868611216565b6003541580610885575061c350600354436108839190611e2f565b105b6108a15760405162461bcd60e51b815260040161085290611e42565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6108cb611216565b600080546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b600082602052637f5e9f20600c5233600052816034600c205581600052602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560206000a35060015b92915050565b610953611216565b600354156109975760405162461bcd60e51b8152602060048201526011602482015270416c7265616479206c61756e636865642160781b6044820152606401610852565b43600355600280546001600160a01b0319166001600160a01b0392909216919091179055565b6109c5611216565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b60006109fd848484611231565b6001600160a01b0384166000908152600b602052604081205460ff1680610a3c57506001600160a01b0384166000908152600b602052604090205460ff165b90508080610a4f5750610a4f85856112e5565b15610a6a57610a6085858584611371565b6001915050610a79565b610a75858585611435565b9150505b9392505050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610ad8611216565b600b610ae48284611e79565b60ff1610610b2b5760405162461bcd60e51b815260206004820152601460248201527343616e6e6f74207365742061626f76652031302560601b6044820152606401610852565b6008805463ffff000019166201000060ff9485160263ff00000019161763010000009290931691909102919091179055565b610b65611216565b600b610b718284611e79565b60ff1610610bb85760405162461bcd60e51b815260206004820152601460248201527343616e6e6f74207365742061626f76652031302560601b6044820152606401610852565b6008805460ff9283166101000261ffff199091169290931691909117919091179055565b610be4611216565b60028054911515600160a01b0260ff60a01b19909216919091179055565b600082602052637f5e9f20600c52336000526034600c20805483810181811015610c345763f90670666000526004601cfd5b80835580600052505050602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560206000a350600192915050565b610c7c611216565b6001600160a01b038116610cd25760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742073657420746865207a65726f20616464726573732e000000006044820152606401610852565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b610d38611216565b6103e8610d4c6805345cdf77eb68f44c5490565b610d569190611e92565b6005541015610dc45760405162461bcd60e51b815260206004820152603460248201527f4d617820616d6f756e7420616c6c6f776564207065722077616c6c6574206d756044820152737374206265206174206c6561737420302e31252160601b6064820152608401610852565b600555565b610dd1611216565b6000805460ff1916911515919091179055565b610dec611216565b610df660006114f3565b565b610e00611216565b6003541580610e1d575061c35060035443610e1b9190611e2f565b105b610e395760405162461bcd60e51b815260040161085290611e42565b60005b81811015610eab576001600b6000858585818110610e5c57610e5c611eb4565b9050602002016020810190610e719190611b74565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610ea381611eca565b915050610e3c565b505050565b6000610a798284611ee3565b610ec4611216565b600080549115156101000261ff0019909216919091179055565b600082602052637f5e9f20600c52336000526034600c20805483811015610f0d57638301ab386000526004601cfd5b8381039050808255806000525050602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560206000a350600192915050565b6000610f5e338484611231565b336000908152600b602052604081205460ff1680610f9457506001600160a01b0384166000908152600b602052604090205460ff165b90508080610fa75750610fa733856112e5565b1561100057600254600090610fc8906001600160a01b031633148584611531565b90508015610fe0578084039350610fe0333083611580565b6002546001600160a01b0390811690861603610ffe57610ffe6115fb565b505b61100a848461166a565b949350505050565b61101a611216565b8015806110275750600354155b80611040575061c3506003544361103e9190611e2f565b105b61105c5760405162461bcd60e51b815260040161085290611e42565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b61108f611216565b6103e86110a36805345cdf77eb68f44c5490565b6110ad9190611e92565b8110156110fc5760405162461bcd60e51b815260206004820152601d60248201527f4d6178205458206d757374206265206174206c6561737420302e3125210000006044820152606401610852565b600455565b611109611216565b600081116111295760405162461bcd60e51b815260040161085290611dbc565b606461113c6805345cdf77eb68f44c5490565b6111469190611e92565b8111156111aa5760405162461bcd60e51b815260206004820152602c60248201527f5377617020616d6f756e742063616e6e6f74206265206f766572203125206f6660448201526b103a34329039bab838363c9760a11b6064820152608401610852565b600755565b6111b7611216565b63389a75e1600c52806000526020600c2080544211156111df57636f5e88186000526004601cfd5b600090556111ec816114f3565b50565b6111f7611216565b8060601b61120d57637448fbae6000526004601cfd5b6111ec816114f3565b638b78c6d819543314610df6576382b429006000526004601cfd5b600254600160a01b900460ff1680156112625750638b78c6d819546001600160a01b0316836001600160a01b031614155b801561127757506001600160a01b0383163014155b15610eab576000611287836116e5565b90506004548211806112c15750801580156112c157506005546387a211a2600c908152600085905260209020546112bf908490611ee3565b115b156112df5760405163d758a25760e01b815260040160405180910390fd5b50505050565b6002546000906001600160a01b039081169084168114806113175750806001600160a01b0316836001600160a01b0316145b806113225750600354155b801561134757506001600160a01b0384166000908152600a602052604090205460ff16155b801561100a575050506001600160a01b03166000908152600a602052604090205460ff1615919050565b336020818152637f5e9f20600c8181526000888152603480832054959094529181529087905220548311156113b9576040516313be252b60e01b815260040160405180910390fd5b60001981146113cd576113cd853385611751565b6002546000906113ec906001600160a01b038881169116148585611531565b90508015611404578084039350611404863083611580565b6002546001600160a01b0390811690861603611422576114226115fb565b61142d868686611580565b505050505050565b60008360601b33602052637f5e9f208117600c526034600c2080546000198114611475578085111561146f576313be252b6000526004601cfd5b84810382555b50506387a211a28117600c526020600c2080548085111561149e5763f4d678b86000526004601cfd5b84810382555050836000526020600c208381540181555082602052600c5160601c8160601c7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a3506001949350505050565b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b60008260000361154357506000610a79565b600061154f8584611794565b905080156115755760646115638286611ef6565b61156d9190611e92565b915050610a79565b506000949350505050565b8260601b6387a211a28117600c526020600c208054808411156115ab5763f4d678b86000526004601cfd5b83810382555050826000526020600c208281540181555081602052600c5160601c8160601c7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a350505050565b6387a211a2600c9081523060009081526020909120549054610100900460ff168015611630575060005462010000900460ff16155b801561163e57506006548110155b156111ec57600754801561166657818111611659578061165b565b815b905061166681611812565b5050565b60006387a211a2600c52336000526020600c208054808411156116955763f4d678b86000526004601cfd5b83810382555050826000526020600c208281540181555081602052600c5160601c337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a350600192915050565b60006001600160a01b03821630148061170557506001600160a01b038216155b8061171a57506001600160a01b03821661dead145b8061173257506002546001600160a01b038381169116145b80610945575050638b78c6d819546001600160a01b0391821691161490565b81602052637f5e9f20600c52826000526034600c208054600019811461178d5780831115611787576313be252b6000526004601cfd5b82810382555b5050505050565b600081156117b557826117a85760506117ab565b60195b60ff169050610945565b6003546000036117cb57826117a85760426117ab565b82156117e9576008546117ab9060ff80821691610100900416611e79565b6008546118089060ff6201000082048116916301000000900416611e79565b60ff169392505050565b60005462010000900460ff161561183c576040516310040f0d60e31b815260040160405180910390fd5b6000805462ff0000198116620100001790915560ff16156118fa576008546000906118799060ff6201000082048116916301000000900416611e79565b60085460ff9182169250600091600291849161189c916201000090041686611ef6565b6118a69190611e92565b6118b09190611e92565b9050476118c56118c08386611e2f565b61191a565b60006118d18247611e2f565b90506118f183866118e28285611ef6565b6118ec9190611e92565b611a5a565b50505050611903565b6119038161191a565b61190b611af9565b506000805462ff000019169055565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061194f5761194f611eb4565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b815290519190931692839263ad5c4648926004808401938290030181865afa1580156119a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cc9190611f0d565b826001815181106119df576119df611eb4565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81529082169063791ac94790611a23908690600090879030904290600401611f2a565b600060405180830381600087803b158015611a3d57600080fd5b505af1158015611a51573d6000803e3d6000fd5b50505050505050565b6009546000805460405163f305d71960e01b815230600482015260248101869052604481018390526064810192909252630100000090046001600160a01b0390811660848301524260a48301529091169063f305d71990839060c40160606040518083038185885af1158015611ad4573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061178d9190611f9b565b6001546040516001600160a01b03909116904790600081818185875af1925050503d8060008114610eab576040519150601f19603f3d011682016040523d82523d6000602084013e505050565b600060208284031215611b5857600080fd5b5035919050565b6001600160a01b03811681146111ec57600080fd5b600060208284031215611b8657600080fd5b8135610a7981611b5f565b600060208083528351808285015260005b81811015611bbe57858101830151858201604001528201611ba2565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215611bf257600080fd5b8235611bfd81611b5f565b946020939093013593505050565b80358015158114611c1b57600080fd5b919050565b60008060408385031215611c3357600080fd5b8235611c3e81611b5f565b9150611c4c60208401611c0b565b90509250929050565b600080600060608486031215611c6a57600080fd5b8335611c7581611b5f565b92506020840135611c8581611b5f565b929592945050506040919091013590565b803560ff81168114611c1b57600080fd5b60008060408385031215611cba57600080fd5b611cc383611c96565b9150611c4c60208401611c96565b600060208284031215611ce357600080fd5b610a7982611c0b565b60008060208385031215611cff57600080fd5b823567ffffffffffffffff80821115611d1757600080fd5b818501915085601f830112611d2b57600080fd5b813581811115611d3a57600080fd5b8660208260051b8501011115611d4f57600080fd5b60209290920196919550909350505050565b60008060408385031215611d7457600080fd5b50508035926020909101359150565b60008060408385031215611d9657600080fd5b8235611da181611b5f565b91506020830135611db181611b5f565b809150509250929050565b60208082526037908201527f416d6f756e742063616e6e6f7420626520302c2075736520736574537761704160408201527f637469766520746f2066616c736520696e73746561642e000000000000000000606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561094557610945611e19565b6020808252601f908201527f43616e206f6e6c7920626520646f6e6520647572696e67206c61756e63682e00604082015260600190565b60ff818116838216019081111561094557610945611e19565b600082611eaf57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201611edc57611edc611e19565b5060010190565b8082018082111561094557610945611e19565b808202811582820484141761094557610945611e19565b600060208284031215611f1f57600080fd5b8151610a7981611b5f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611f7a5784516001600160a01b031683529383019391830191600101611f55565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611fb057600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122051f2bf86eaa7740b37a14be9a025707c915532925266173f029c42f6f30e76fd64736f6c634300081400330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x6080604052600436106102605760003560e01c8063715018a611610144578063b28f7cf5116100b6578063dab84ee71161007a578063dab84ee71461075b578063dd62ed3e1461077b578063e632313c146107b1578063f04e283e146107d1578063f2fde38b146107e4578063fee81cf4146107f757600080fd5b8063b28f7cf5146106c8578063bc337182146106e8578063d00efb2f14610708578063d54f7d5e1461071e578063d6dacb441461073c57600080fd5b80639af1d35a116101085780639af1d35a146105be5780639b98657114610621578063a44e49bb14610641578063a457c2d714610661578063a52e73a414610681578063a9059cbb146106a857600080fd5b8063715018a61461051d578063860a32ec146105255780638da5cb5b146105465780638f270f491461057357806395d89b411461059357600080fd5b806325692962116101dd57806339509351116101a157806339509351146104625780633c47034e1461048257806354d1f13d146104a25780635d0044ca146104aa5780636ac4af51146104ca57806370a08231146104ea57600080fd5b806325692962146103de5780632c646927146103e6578063313ce5671461040657806331a362de14610422578063385ddcd91461044257600080fd5b8063095ea7b311610224578063095ea7b31461033757806318160ddd14610357578063191655871461037e5780631dc610401461039e57806323b872dd146103be57600080fd5b80630178c38f1461026c57806301960dc71461029b57806304db6e68146102bd57806306fdde03146102dd578063089591a11461031757600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506000546102869060ff1681565b60405190151581526020015b60405180910390f35b3480156102a757600080fd5b506102bb6102b6366004611b46565b61082a565b005b3480156102c957600080fd5b506102bb6102d8366004611b74565b610860565b3480156102e957600080fd5b5060408051808201909152600881526713dc98d848109bdd60c21b60208201525b6040516102929190611b91565b34801561032357600080fd5b506102bb610332366004611b74565b6108c3565b34801561034357600080fd5b50610286610352366004611bdf565b6108f7565b34801561036357600080fd5b506805345cdf77eb68f44c545b604051908152602001610292565b34801561038a57600080fd5b506102bb610399366004611b74565b61094b565b3480156103aa57600080fd5b506102bb6103b9366004611c20565b6109bd565b3480156103ca57600080fd5b506102866103d9366004611c55565b6109f0565b6102bb610a80565b3480156103f257600080fd5b506102bb610401366004611ca7565b610ad0565b34801561041257600080fd5b5060405160128152602001610292565b34801561042e57600080fd5b506102bb61043d366004611ca7565b610b5d565b34801561044e57600080fd5b506102bb61045d366004611cd1565b610bdc565b34801561046e57600080fd5b5061028661047d366004611bdf565b610c02565b34801561048e57600080fd5b506102bb61049d366004611b74565b610c74565b6102bb610cf4565b3480156104b657600080fd5b506102bb6104c5366004611b46565b610d30565b3480156104d657600080fd5b506102bb6104e5366004611cd1565b610dc9565b3480156104f657600080fd5b50610370610505366004611b74565b6387a211a2600c908152600091909152602090205490565b6102bb610de4565b34801561053157600080fd5b5060025461028690600160a01b900460ff1681565b34801561055257600080fd5b50638b78c6d819545b6040516001600160a01b039091168152602001610292565b34801561057f57600080fd5b506102bb61058e366004611cec565b610df8565b34801561059f57600080fd5b5060408051808201909152600281526127a160f11b602082015261030a565b3480156105ca57600080fd5b506008546105f49060ff808216916101008104821691620100008204811691630100000090041684565b6040805160ff95861681529385166020850152918416918301919091529091166060820152608001610292565b34801561062d57600080fd5b5061037061063c366004611d61565b610eb0565b34801561064d57600080fd5b506102bb61065c366004611cd1565b610ebc565b34801561066d57600080fd5b5061028661067c366004611bdf565b610ede565b34801561068d57600080fd5b5060005461055b90630100000090046001600160a01b031681565b3480156106b457600080fd5b506102866106c3366004611bdf565b610f51565b3480156106d457600080fd5b506102bb6106e3366004611c20565b611012565b3480156106f457600080fd5b506102bb610703366004611b46565b611087565b34801561071457600080fd5b5061037060035481565b34801561072a57600080fd5b506009546001600160a01b031661055b565b34801561074857600080fd5b5060005461028690610100900460ff1681565b34801561076757600080fd5b5060015461055b906001600160a01b031681565b34801561078757600080fd5b50610370610796366004611d83565b602052637f5e9f20600c908152600091909152603490205490565b3480156107bd57600080fd5b506102bb6107cc366004611b46565b611101565b6102bb6107df366004611b74565b6111af565b6102bb6107f2366004611b74565b6111ef565b34801561080357600080fd5b50610370610812366004611b74565b63389a75e1600c908152600091909152602090205490565b610832611216565b6000811161085b5760405162461bcd60e51b815260040161085290611dbc565b60405180910390fd5b600655565b610868611216565b6003541580610885575061c350600354436108839190611e2f565b105b6108a15760405162461bcd60e51b815260040161085290611e42565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6108cb611216565b600080546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b600082602052637f5e9f20600c5233600052816034600c205581600052602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560206000a35060015b92915050565b610953611216565b600354156109975760405162461bcd60e51b8152602060048201526011602482015270416c7265616479206c61756e636865642160781b6044820152606401610852565b43600355600280546001600160a01b0319166001600160a01b0392909216919091179055565b6109c5611216565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b60006109fd848484611231565b6001600160a01b0384166000908152600b602052604081205460ff1680610a3c57506001600160a01b0384166000908152600b602052604090205460ff165b90508080610a4f5750610a4f85856112e5565b15610a6a57610a6085858584611371565b6001915050610a79565b610a75858585611435565b9150505b9392505050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610ad8611216565b600b610ae48284611e79565b60ff1610610b2b5760405162461bcd60e51b815260206004820152601460248201527343616e6e6f74207365742061626f76652031302560601b6044820152606401610852565b6008805463ffff000019166201000060ff9485160263ff00000019161763010000009290931691909102919091179055565b610b65611216565b600b610b718284611e79565b60ff1610610bb85760405162461bcd60e51b815260206004820152601460248201527343616e6e6f74207365742061626f76652031302560601b6044820152606401610852565b6008805460ff9283166101000261ffff199091169290931691909117919091179055565b610be4611216565b60028054911515600160a01b0260ff60a01b19909216919091179055565b600082602052637f5e9f20600c52336000526034600c20805483810181811015610c345763f90670666000526004601cfd5b80835580600052505050602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560206000a350600192915050565b610c7c611216565b6001600160a01b038116610cd25760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742073657420746865207a65726f20616464726573732e000000006044820152606401610852565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b610d38611216565b6103e8610d4c6805345cdf77eb68f44c5490565b610d569190611e92565b6005541015610dc45760405162461bcd60e51b815260206004820152603460248201527f4d617820616d6f756e7420616c6c6f776564207065722077616c6c6574206d756044820152737374206265206174206c6561737420302e31252160601b6064820152608401610852565b600555565b610dd1611216565b6000805460ff1916911515919091179055565b610dec611216565b610df660006114f3565b565b610e00611216565b6003541580610e1d575061c35060035443610e1b9190611e2f565b105b610e395760405162461bcd60e51b815260040161085290611e42565b60005b81811015610eab576001600b6000858585818110610e5c57610e5c611eb4565b9050602002016020810190610e719190611b74565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610ea381611eca565b915050610e3c565b505050565b6000610a798284611ee3565b610ec4611216565b600080549115156101000261ff0019909216919091179055565b600082602052637f5e9f20600c52336000526034600c20805483811015610f0d57638301ab386000526004601cfd5b8381039050808255806000525050602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560206000a350600192915050565b6000610f5e338484611231565b336000908152600b602052604081205460ff1680610f9457506001600160a01b0384166000908152600b602052604090205460ff165b90508080610fa75750610fa733856112e5565b1561100057600254600090610fc8906001600160a01b031633148584611531565b90508015610fe0578084039350610fe0333083611580565b6002546001600160a01b0390811690861603610ffe57610ffe6115fb565b505b61100a848461166a565b949350505050565b61101a611216565b8015806110275750600354155b80611040575061c3506003544361103e9190611e2f565b105b61105c5760405162461bcd60e51b815260040161085290611e42565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b61108f611216565b6103e86110a36805345cdf77eb68f44c5490565b6110ad9190611e92565b8110156110fc5760405162461bcd60e51b815260206004820152601d60248201527f4d6178205458206d757374206265206174206c6561737420302e3125210000006044820152606401610852565b600455565b611109611216565b600081116111295760405162461bcd60e51b815260040161085290611dbc565b606461113c6805345cdf77eb68f44c5490565b6111469190611e92565b8111156111aa5760405162461bcd60e51b815260206004820152602c60248201527f5377617020616d6f756e742063616e6e6f74206265206f766572203125206f6660448201526b103a34329039bab838363c9760a11b6064820152608401610852565b600755565b6111b7611216565b63389a75e1600c52806000526020600c2080544211156111df57636f5e88186000526004601cfd5b600090556111ec816114f3565b50565b6111f7611216565b8060601b61120d57637448fbae6000526004601cfd5b6111ec816114f3565b638b78c6d819543314610df6576382b429006000526004601cfd5b600254600160a01b900460ff1680156112625750638b78c6d819546001600160a01b0316836001600160a01b031614155b801561127757506001600160a01b0383163014155b15610eab576000611287836116e5565b90506004548211806112c15750801580156112c157506005546387a211a2600c908152600085905260209020546112bf908490611ee3565b115b156112df5760405163d758a25760e01b815260040160405180910390fd5b50505050565b6002546000906001600160a01b039081169084168114806113175750806001600160a01b0316836001600160a01b0316145b806113225750600354155b801561134757506001600160a01b0384166000908152600a602052604090205460ff16155b801561100a575050506001600160a01b03166000908152600a602052604090205460ff1615919050565b336020818152637f5e9f20600c8181526000888152603480832054959094529181529087905220548311156113b9576040516313be252b60e01b815260040160405180910390fd5b60001981146113cd576113cd853385611751565b6002546000906113ec906001600160a01b038881169116148585611531565b90508015611404578084039350611404863083611580565b6002546001600160a01b0390811690861603611422576114226115fb565b61142d868686611580565b505050505050565b60008360601b33602052637f5e9f208117600c526034600c2080546000198114611475578085111561146f576313be252b6000526004601cfd5b84810382555b50506387a211a28117600c526020600c2080548085111561149e5763f4d678b86000526004601cfd5b84810382555050836000526020600c208381540181555082602052600c5160601c8160601c7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a3506001949350505050565b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b60008260000361154357506000610a79565b600061154f8584611794565b905080156115755760646115638286611ef6565b61156d9190611e92565b915050610a79565b506000949350505050565b8260601b6387a211a28117600c526020600c208054808411156115ab5763f4d678b86000526004601cfd5b83810382555050826000526020600c208281540181555081602052600c5160601c8160601c7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a350505050565b6387a211a2600c9081523060009081526020909120549054610100900460ff168015611630575060005462010000900460ff16155b801561163e57506006548110155b156111ec57600754801561166657818111611659578061165b565b815b905061166681611812565b5050565b60006387a211a2600c52336000526020600c208054808411156116955763f4d678b86000526004601cfd5b83810382555050826000526020600c208281540181555081602052600c5160601c337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a350600192915050565b60006001600160a01b03821630148061170557506001600160a01b038216155b8061171a57506001600160a01b03821661dead145b8061173257506002546001600160a01b038381169116145b80610945575050638b78c6d819546001600160a01b0391821691161490565b81602052637f5e9f20600c52826000526034600c208054600019811461178d5780831115611787576313be252b6000526004601cfd5b82810382555b5050505050565b600081156117b557826117a85760506117ab565b60195b60ff169050610945565b6003546000036117cb57826117a85760426117ab565b82156117e9576008546117ab9060ff80821691610100900416611e79565b6008546118089060ff6201000082048116916301000000900416611e79565b60ff169392505050565b60005462010000900460ff161561183c576040516310040f0d60e31b815260040160405180910390fd5b6000805462ff0000198116620100001790915560ff16156118fa576008546000906118799060ff6201000082048116916301000000900416611e79565b60085460ff9182169250600091600291849161189c916201000090041686611ef6565b6118a69190611e92565b6118b09190611e92565b9050476118c56118c08386611e2f565b61191a565b60006118d18247611e2f565b90506118f183866118e28285611ef6565b6118ec9190611e92565b611a5a565b50505050611903565b6119038161191a565b61190b611af9565b506000805462ff000019169055565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061194f5761194f611eb4565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b815290519190931692839263ad5c4648926004808401938290030181865afa1580156119a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cc9190611f0d565b826001815181106119df576119df611eb4565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81529082169063791ac94790611a23908690600090879030904290600401611f2a565b600060405180830381600087803b158015611a3d57600080fd5b505af1158015611a51573d6000803e3d6000fd5b50505050505050565b6009546000805460405163f305d71960e01b815230600482015260248101869052604481018390526064810192909252630100000090046001600160a01b0390811660848301524260a48301529091169063f305d71990839060c40160606040518083038185885af1158015611ad4573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061178d9190611f9b565b6001546040516001600160a01b03909116904790600081818185875af1925050503d8060008114610eab576040519150601f19603f3d011682016040523d82523d6000602084013e505050565b600060208284031215611b5857600080fd5b5035919050565b6001600160a01b03811681146111ec57600080fd5b600060208284031215611b8657600080fd5b8135610a7981611b5f565b600060208083528351808285015260005b81811015611bbe57858101830151858201604001528201611ba2565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215611bf257600080fd5b8235611bfd81611b5f565b946020939093013593505050565b80358015158114611c1b57600080fd5b919050565b60008060408385031215611c3357600080fd5b8235611c3e81611b5f565b9150611c4c60208401611c0b565b90509250929050565b600080600060608486031215611c6a57600080fd5b8335611c7581611b5f565b92506020840135611c8581611b5f565b929592945050506040919091013590565b803560ff81168114611c1b57600080fd5b60008060408385031215611cba57600080fd5b611cc383611c96565b9150611c4c60208401611c96565b600060208284031215611ce357600080fd5b610a7982611c0b565b60008060208385031215611cff57600080fd5b823567ffffffffffffffff80821115611d1757600080fd5b818501915085601f830112611d2b57600080fd5b813581811115611d3a57600080fd5b8660208260051b8501011115611d4f57600080fd5b60209290920196919550909350505050565b60008060408385031215611d7457600080fd5b50508035926020909101359150565b60008060408385031215611d9657600080fd5b8235611da181611b5f565b91506020830135611db181611b5f565b809150509250929050565b60208082526037908201527f416d6f756e742063616e6e6f7420626520302c2075736520736574537761704160408201527f637469766520746f2066616c736520696e73746561642e000000000000000000606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561094557610945611e19565b6020808252601f908201527f43616e206f6e6c7920626520646f6e6520647572696e67206c61756e63682e00604082015260600190565b60ff818116838216019081111561094557610945611e19565b600082611eaf57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201611edc57611edc611e19565b5060010190565b8082018082111561094557610945611e19565b808202811582820484141761094557610945611e19565b600060208284031215611f1f57600080fd5b8151610a7981611b5f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611f7a5784516001600160a01b031683529383019391830191600101611f55565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611fb057600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122051f2bf86eaa7740b37a14be9a025707c915532925266173f029c42f6f30e76fd64736f6c63430008140033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


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.