ETH Price: $3,588.80 (+3.68%)
 

Overview

Max Total Supply

1,000,000,000 MILTON

Holders

48

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.00000000096355237 MILTON

Value
$0.00
0x03904fec0d5fd3548a5dec5006d31e810794cb9b
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:
Milton

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-10-09
*/

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

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

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

    /**
     * @dev Returns the 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: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;


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

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

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

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

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

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

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

// File: @openzeppelin/contracts/interfaces/draft-IERC6093.sol


// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;

/**
 * @dev Standard ERC20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
 */
interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a `spender` is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}

/**
 * @dev Standard ERC721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.
     * Used in balance queries.
     * @param owner Address of the current owner of a token.
     */
    error ERC721InvalidOwner(address owner);

    /**
     * @dev Indicates a `tokenId` whose `owner` is the zero address.
     * @param tokenId Identifier number of a token.
     */
    error ERC721NonexistentToken(uint256 tokenId);

    /**
     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param tokenId Identifier number of a token.
     * @param owner Address of the current owner of a token.
     */
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC721InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC721InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param tokenId Identifier number of a token.
     */
    error ERC721InsufficientApproval(address operator, uint256 tokenId);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC721InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC721InvalidOperator(address operator);
}

/**
 * @dev Standard ERC1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.
 */
interface IERC1155Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     * @param tokenId Identifier number of a token.
     */
    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC1155InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC1155InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param owner Address of the current owner of a token.
     */
    error ERC1155MissingApprovalForAll(address operator, address owner);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC1155InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC1155InvalidOperator(address operator);

    /**
     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
     * Used in batch transfers.
     * @param idsLength Length of the array of token identifiers
     * @param valuesLength Length of the array of token amounts
     */
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.20;





/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 */
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

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

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

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
     * true using the following override:
     * ```
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    /**
     * @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.
     *
     * Does not emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;


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

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

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

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

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

// File: Milton.sol


pragma solidity ^0.8.0;



contract Milton is ERC20, Ownable {
    uint256 public maxTokenAmount;
    bool public isMaxTokenAmountEnforced;
    mapping(address => bool) public whitelistedAddresses;

    event MaxTokenAmountSet(uint256 amount);
    event MaxTokenAmountEnforcementToggled(bool enforced);
    event WhitelistedAddressAdded(address indexed account);
    event WhitelistedAddressRemoved(address indexed account);

    constructor(uint256 _initialSupply, uint256 _maxTokenAmount) ERC20("Milton", "MILTON") Ownable(msg.sender) {
        _mint(msg.sender, _initialSupply);
        maxTokenAmount = _maxTokenAmount;
        isMaxTokenAmountEnforced = true; // Default max tx is active
    }

    function setMaxTokenAmount(uint256 _amount) external onlyOwner {
        maxTokenAmount = _amount;
        emit MaxTokenAmountSet(_amount);
    }

    function toggleMaxTokenAmountEnforcement() external onlyOwner {
        isMaxTokenAmountEnforced = !isMaxTokenAmountEnforced;
        emit MaxTokenAmountEnforcementToggled(isMaxTokenAmountEnforced);
    }

    function addWhitelistedAddress(address _account) external onlyOwner {
        require(!whitelistedAddresses[_account], "Address already whitelisted");
        whitelistedAddresses[_account] = true;
        emit WhitelistedAddressAdded(_account);
    }

    function removeWhitelistedAddress(address _account) external onlyOwner {
        require(whitelistedAddresses[_account], "Address not whitelisted");
        whitelistedAddresses[_account] = false;
        emit WhitelistedAddressRemoved(_account);
    }

    function transfer(address _to, uint256 _amount) public override returns (bool) {
        if (isMaxTokenAmountEnforced && !whitelistedAddresses[_msgSender()]) {
            require(_amount <= maxTokenAmount, "Exceeds max token amount per transaction");
        }
        _transfer(_msgSender(), _to, _amount); 
        return true;
    }

    function transferFrom(address _from, address _to, uint256 _amount) public override returns (bool) {
        if (isMaxTokenAmountEnforced && !whitelistedAddresses[_msgSender()]) {
            require(_amount <= maxTokenAmount, "Exceeds max token amount per transaction");
        }
        _transfer(_from, _to, _amount); 
        _approve(_from, _msgSender(), allowance(_from, _msgSender()) - _amount); // Adjust allowance
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"uint256","name":"_maxTokenAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","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":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enforced","type":"bool"}],"name":"MaxTokenAmountEnforcementToggled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxTokenAmountSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"WhitelistedAddressAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"WhitelistedAddressRemoved","type":"event"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"addWhitelistedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMaxTokenAmountEnforced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"removeWhitelistedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxTokenAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleMaxTokenAmountEnforcement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

608060405234801561000f575f80fd5b506040516120e63803806120e683398181016040528101906100319190610510565b336040518060400160405280600681526020017f4d696c746f6e00000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4d494c544f4e000000000000000000000000000000000000000000000000000081525081600390816100ad919061077f565b5080600490816100bd919061077f565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610130575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610127919061088d565b60405180910390fd5b61013f8161017860201b60201c565b50610150338361023b60201b60201c565b80600681905550600160075f6101000a81548160ff0219169083151502179055505050610963565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102ab575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016102a2919061088d565b60405180910390fd5b6102bc5f83836102c060201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610310578060025f82825461030491906108d3565b925050819055506103de565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610399578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161039093929190610915565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610425578060025f828254039250508190555061046f565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516104cc919061094a565b60405180910390a3505050565b5f80fd5b5f819050919050565b6104ef816104dd565b81146104f9575f80fd5b50565b5f8151905061050a816104e6565b92915050565b5f8060408385031215610526576105256104d9565b5b5f610533858286016104fc565b9250506020610544858286016104fc565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806105c957607f821691505b6020821081036105dc576105db610585565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261063e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610603565b6106488683610603565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61068361067e610679846104dd565b610660565b6104dd565b9050919050565b5f819050919050565b61069c83610669565b6106b06106a88261068a565b84845461060f565b825550505050565b5f90565b6106c46106b8565b6106cf818484610693565b505050565b5b818110156106f2576106e75f826106bc565b6001810190506106d5565b5050565b601f82111561073757610708816105e2565b610711846105f4565b81016020851015610720578190505b61073461072c856105f4565b8301826106d4565b50505b505050565b5f82821c905092915050565b5f6107575f198460080261073c565b1980831691505092915050565b5f61076f8383610748565b9150826002028217905092915050565b6107888261054e565b67ffffffffffffffff8111156107a1576107a0610558565b5b6107ab82546105b2565b6107b68282856106f6565b5f60209050601f8311600181146107e7575f84156107d5578287015190505b6107df8582610764565b865550610846565b601f1984166107f5866105e2565b5f5b8281101561081c578489015182556001820191506020850194506020810190506107f7565b868310156108395784890151610835601f891682610748565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6108778261084e565b9050919050565b6108878161086d565b82525050565b5f6020820190506108a05f83018461087e565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6108dd826104dd565b91506108e8836104dd565b9250828201905080821115610900576108ff6108a6565b5b92915050565b61090f816104dd565b82525050565b5f6060820190506109285f83018661087e565b6109356020830185610906565b6109426040830184610906565b949350505050565b5f60208201905061095d5f830184610906565b92915050565b611776806109705f395ff3fe608060405234801561000f575f80fd5b506004361061011f575f3560e01c80635ed9f6e0116100ab57806395d89b411161006f57806395d89b41146102e3578063a9059cbb14610301578063b839a80e14610331578063dd62ed3e1461034d578063f2fde38b1461037d5761011f565b80635ed9f6e01461026357806370a082311461026d578063715018a61461029d5780638a926d0f146102a75780638da5cb5b146102c55761011f565b806318160ddd116100f257806318160ddd146101bf57806323b872dd146101dd57806329975b431461020d578063313ce56714610229578063530cd5ab146102475761011f565b806306c933d81461012357806306fdde0314610153578063095ea7b3146101715780631227d710146101a1575b5f80fd5b61013d60048036038101906101389190611221565b610399565b60405161014a9190611266565b60405180910390f35b61015b6103b6565b60405161016891906112ef565b60405180910390f35b61018b60048036038101906101869190611342565b610446565b6040516101989190611266565b60405180910390f35b6101a9610468565b6040516101b69190611266565b60405180910390f35b6101c761047a565b6040516101d4919061138f565b60405180910390f35b6101f760048036038101906101f291906113a8565b610483565b6040516102049190611266565b60405180910390f35b61022760048036038101906102229190611221565b61057b565b005b6102316106a8565b60405161023e9190611413565b60405180910390f35b610261600480360381019061025c9190611221565b6106b0565b005b61026b6107db565b005b61028760048036038101906102829190611221565b610852565b604051610294919061138f565b60405180910390f35b6102a5610897565b005b6102af6108aa565b6040516102bc919061138f565b60405180910390f35b6102cd6108b0565b6040516102da919061143b565b60405180910390f35b6102eb6108d8565b6040516102f891906112ef565b60405180910390f35b61031b60048036038101906103169190611342565b610968565b6040516103289190611266565b60405180910390f35b61034b60048036038101906103469190611454565b610a39565b005b6103676004803603810190610362919061147f565b610a82565b604051610374919061138f565b60405180910390f35b61039760048036038101906103929190611221565b610b04565b005b6008602052805f5260405f205f915054906101000a900460ff1681565b6060600380546103c5906114ea565b80601f01602080910402602001604051908101604052809291908181526020018280546103f1906114ea565b801561043c5780601f106104135761010080835404028352916020019161043c565b820191905f5260205f20905b81548152906001019060200180831161041f57829003601f168201915b5050505050905090565b5f80610450610b88565b905061045d818585610b8f565b600191505092915050565b60075f9054906101000a900460ff1681565b5f600254905090565b5f60075f9054906101000a900460ff1680156104ed575060085f6104a5610b88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561053857600654821115610537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e9061158a565b60405180910390fd5b5b610543848484610ba1565b6105708461054f610b88565b846105618861055c610b88565b610a82565b61056b91906115d5565b610b8f565b600190509392505050565b610583610c91565b60085f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561060d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060490611652565b60405180910390fd5b600160085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fd1bba68c128cc3f427e5831b3c6f99f480b6efa6b9e80c757768f6124158cc3f60405160405180910390a250565b5f6012905090565b6106b8610c91565b60085f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610741576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610738906116ba565b60405180910390fd5b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167ff1abf01a1043b7c244d128e8595cf0c1d10743b022b03a02dffd8ca3bf729f5a60405160405180910390a250565b6107e3610c91565b60075f9054906101000a900460ff161560075f6101000a81548160ff0219169083151502179055507f932e656c5edaef822c0a1560e34f079fd638d8841f6b34bf5bc591dd3ff8e07160075f9054906101000a900460ff166040516108489190611266565b60405180910390a1565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61089f610c91565b6108a85f610d18565b565b60065481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546108e7906114ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610913906114ea565b801561095e5780601f106109355761010080835404028352916020019161095e565b820191905f5260205f20905b81548152906001019060200180831161094157829003601f168201915b5050505050905090565b5f60075f9054906101000a900460ff1680156109d2575060085f61098a610b88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610a1d57600654821115610a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a139061158a565b60405180910390fd5b5b610a2f610a28610b88565b8484610ba1565b6001905092915050565b610a41610c91565b806006819055507f8d6a58c0f0126d5628b345bf4edb71a778f763057759fe5c4be62dee5ce2660b81604051610a77919061138f565b60405180910390a150565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610b0c610c91565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b7c575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610b73919061143b565b60405180910390fd5b610b8581610d18565b50565b5f33905090565b610b9c8383836001610ddb565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c11575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610c08919061143b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c81575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610c78919061143b565b60405180910390fd5b610c8c838383610faa565b505050565b610c99610b88565b73ffffffffffffffffffffffffffffffffffffffff16610cb76108b0565b73ffffffffffffffffffffffffffffffffffffffff1614610d1657610cda610b88565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610d0d919061143b565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610e4b575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610e42919061143b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ebb575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610eb2919061143b565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610fa4578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610f9b919061138f565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ffa578060025f828254610fee91906116d8565b925050819055506110c8565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611083578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161107a9392919061170b565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361110f578060025f8282540392505081905550611159565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516111b6919061138f565b60405180910390a3505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6111f0826111c7565b9050919050565b611200816111e6565b811461120a575f80fd5b50565b5f8135905061121b816111f7565b92915050565b5f60208284031215611236576112356111c3565b5b5f6112438482850161120d565b91505092915050565b5f8115159050919050565b6112608161124c565b82525050565b5f6020820190506112795f830184611257565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6112c18261127f565b6112cb8185611289565b93506112db818560208601611299565b6112e4816112a7565b840191505092915050565b5f6020820190508181035f83015261130781846112b7565b905092915050565b5f819050919050565b6113218161130f565b811461132b575f80fd5b50565b5f8135905061133c81611318565b92915050565b5f8060408385031215611358576113576111c3565b5b5f6113658582860161120d565b92505060206113768582860161132e565b9150509250929050565b6113898161130f565b82525050565b5f6020820190506113a25f830184611380565b92915050565b5f805f606084860312156113bf576113be6111c3565b5b5f6113cc8682870161120d565b93505060206113dd8682870161120d565b92505060406113ee8682870161132e565b9150509250925092565b5f60ff82169050919050565b61140d816113f8565b82525050565b5f6020820190506114265f830184611404565b92915050565b611435816111e6565b82525050565b5f60208201905061144e5f83018461142c565b92915050565b5f60208284031215611469576114686111c3565b5b5f6114768482850161132e565b91505092915050565b5f8060408385031215611495576114946111c3565b5b5f6114a28582860161120d565b92505060206114b38582860161120d565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061150157607f821691505b602082108103611514576115136114bd565b5b50919050565b7f45786365656473206d617820746f6b656e20616d6f756e7420706572207472615f8201527f6e73616374696f6e000000000000000000000000000000000000000000000000602082015250565b5f611574602883611289565b915061157f8261151a565b604082019050919050565b5f6020820190508181035f8301526115a181611568565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6115df8261130f565b91506115ea8361130f565b9250828203905081811115611602576116016115a8565b5b92915050565b7f4164647265737320616c72656164792077686974656c697374656400000000005f82015250565b5f61163c601b83611289565b915061164782611608565b602082019050919050565b5f6020820190508181035f83015261166981611630565b9050919050565b7f41646472657373206e6f742077686974656c69737465640000000000000000005f82015250565b5f6116a4601783611289565b91506116af82611670565b602082019050919050565b5f6020820190508181035f8301526116d181611698565b9050919050565b5f6116e28261130f565b91506116ed8361130f565b9250828201905080821115611705576117046115a8565b5b92915050565b5f60608201905061171e5f83018661142c565b61172b6020830185611380565b6117386040830184611380565b94935050505056fea2646970667358221220d19a214b5036a3d0b55d941ddae1da359c19401572046d0643057315c47b3bf064736f6c634300081a00330000000000000000000000000000000000000000033b2e3c9fd0803ce8000000000000000000000000000000000000000000000002df458b2c635dcf55e00000

Deployed Bytecode

0x608060405234801561000f575f80fd5b506004361061011f575f3560e01c80635ed9f6e0116100ab57806395d89b411161006f57806395d89b41146102e3578063a9059cbb14610301578063b839a80e14610331578063dd62ed3e1461034d578063f2fde38b1461037d5761011f565b80635ed9f6e01461026357806370a082311461026d578063715018a61461029d5780638a926d0f146102a75780638da5cb5b146102c55761011f565b806318160ddd116100f257806318160ddd146101bf57806323b872dd146101dd57806329975b431461020d578063313ce56714610229578063530cd5ab146102475761011f565b806306c933d81461012357806306fdde0314610153578063095ea7b3146101715780631227d710146101a1575b5f80fd5b61013d60048036038101906101389190611221565b610399565b60405161014a9190611266565b60405180910390f35b61015b6103b6565b60405161016891906112ef565b60405180910390f35b61018b60048036038101906101869190611342565b610446565b6040516101989190611266565b60405180910390f35b6101a9610468565b6040516101b69190611266565b60405180910390f35b6101c761047a565b6040516101d4919061138f565b60405180910390f35b6101f760048036038101906101f291906113a8565b610483565b6040516102049190611266565b60405180910390f35b61022760048036038101906102229190611221565b61057b565b005b6102316106a8565b60405161023e9190611413565b60405180910390f35b610261600480360381019061025c9190611221565b6106b0565b005b61026b6107db565b005b61028760048036038101906102829190611221565b610852565b604051610294919061138f565b60405180910390f35b6102a5610897565b005b6102af6108aa565b6040516102bc919061138f565b60405180910390f35b6102cd6108b0565b6040516102da919061143b565b60405180910390f35b6102eb6108d8565b6040516102f891906112ef565b60405180910390f35b61031b60048036038101906103169190611342565b610968565b6040516103289190611266565b60405180910390f35b61034b60048036038101906103469190611454565b610a39565b005b6103676004803603810190610362919061147f565b610a82565b604051610374919061138f565b60405180910390f35b61039760048036038101906103929190611221565b610b04565b005b6008602052805f5260405f205f915054906101000a900460ff1681565b6060600380546103c5906114ea565b80601f01602080910402602001604051908101604052809291908181526020018280546103f1906114ea565b801561043c5780601f106104135761010080835404028352916020019161043c565b820191905f5260205f20905b81548152906001019060200180831161041f57829003601f168201915b5050505050905090565b5f80610450610b88565b905061045d818585610b8f565b600191505092915050565b60075f9054906101000a900460ff1681565b5f600254905090565b5f60075f9054906101000a900460ff1680156104ed575060085f6104a5610b88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561053857600654821115610537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e9061158a565b60405180910390fd5b5b610543848484610ba1565b6105708461054f610b88565b846105618861055c610b88565b610a82565b61056b91906115d5565b610b8f565b600190509392505050565b610583610c91565b60085f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561060d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060490611652565b60405180910390fd5b600160085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fd1bba68c128cc3f427e5831b3c6f99f480b6efa6b9e80c757768f6124158cc3f60405160405180910390a250565b5f6012905090565b6106b8610c91565b60085f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610741576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610738906116ba565b60405180910390fd5b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167ff1abf01a1043b7c244d128e8595cf0c1d10743b022b03a02dffd8ca3bf729f5a60405160405180910390a250565b6107e3610c91565b60075f9054906101000a900460ff161560075f6101000a81548160ff0219169083151502179055507f932e656c5edaef822c0a1560e34f079fd638d8841f6b34bf5bc591dd3ff8e07160075f9054906101000a900460ff166040516108489190611266565b60405180910390a1565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61089f610c91565b6108a85f610d18565b565b60065481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546108e7906114ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610913906114ea565b801561095e5780601f106109355761010080835404028352916020019161095e565b820191905f5260205f20905b81548152906001019060200180831161094157829003601f168201915b5050505050905090565b5f60075f9054906101000a900460ff1680156109d2575060085f61098a610b88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610a1d57600654821115610a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a139061158a565b60405180910390fd5b5b610a2f610a28610b88565b8484610ba1565b6001905092915050565b610a41610c91565b806006819055507f8d6a58c0f0126d5628b345bf4edb71a778f763057759fe5c4be62dee5ce2660b81604051610a77919061138f565b60405180910390a150565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610b0c610c91565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b7c575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610b73919061143b565b60405180910390fd5b610b8581610d18565b50565b5f33905090565b610b9c8383836001610ddb565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c11575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610c08919061143b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c81575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610c78919061143b565b60405180910390fd5b610c8c838383610faa565b505050565b610c99610b88565b73ffffffffffffffffffffffffffffffffffffffff16610cb76108b0565b73ffffffffffffffffffffffffffffffffffffffff1614610d1657610cda610b88565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610d0d919061143b565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610e4b575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610e42919061143b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ebb575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610eb2919061143b565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610fa4578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610f9b919061138f565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ffa578060025f828254610fee91906116d8565b925050819055506110c8565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611083578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161107a9392919061170b565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361110f578060025f8282540392505081905550611159565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516111b6919061138f565b60405180910390a3505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6111f0826111c7565b9050919050565b611200816111e6565b811461120a575f80fd5b50565b5f8135905061121b816111f7565b92915050565b5f60208284031215611236576112356111c3565b5b5f6112438482850161120d565b91505092915050565b5f8115159050919050565b6112608161124c565b82525050565b5f6020820190506112795f830184611257565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6112c18261127f565b6112cb8185611289565b93506112db818560208601611299565b6112e4816112a7565b840191505092915050565b5f6020820190508181035f83015261130781846112b7565b905092915050565b5f819050919050565b6113218161130f565b811461132b575f80fd5b50565b5f8135905061133c81611318565b92915050565b5f8060408385031215611358576113576111c3565b5b5f6113658582860161120d565b92505060206113768582860161132e565b9150509250929050565b6113898161130f565b82525050565b5f6020820190506113a25f830184611380565b92915050565b5f805f606084860312156113bf576113be6111c3565b5b5f6113cc8682870161120d565b93505060206113dd8682870161120d565b92505060406113ee8682870161132e565b9150509250925092565b5f60ff82169050919050565b61140d816113f8565b82525050565b5f6020820190506114265f830184611404565b92915050565b611435816111e6565b82525050565b5f60208201905061144e5f83018461142c565b92915050565b5f60208284031215611469576114686111c3565b5b5f6114768482850161132e565b91505092915050565b5f8060408385031215611495576114946111c3565b5b5f6114a28582860161120d565b92505060206114b38582860161120d565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061150157607f821691505b602082108103611514576115136114bd565b5b50919050565b7f45786365656473206d617820746f6b656e20616d6f756e7420706572207472615f8201527f6e73616374696f6e000000000000000000000000000000000000000000000000602082015250565b5f611574602883611289565b915061157f8261151a565b604082019050919050565b5f6020820190508181035f8301526115a181611568565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6115df8261130f565b91506115ea8361130f565b9250828203905081811115611602576116016115a8565b5b92915050565b7f4164647265737320616c72656164792077686974656c697374656400000000005f82015250565b5f61163c601b83611289565b915061164782611608565b602082019050919050565b5f6020820190508181035f83015261166981611630565b9050919050565b7f41646472657373206e6f742077686974656c69737465640000000000000000005f82015250565b5f6116a4601783611289565b91506116af82611670565b602082019050919050565b5f6020820190508181035f8301526116d181611698565b9050919050565b5f6116e28261130f565b91506116ed8361130f565b9250828201905080821115611705576117046115a8565b5b92915050565b5f60608201905061171e5f83018661142c565b61172b6020830185611380565b6117386040830184611380565b94935050505056fea2646970667358221220d19a214b5036a3d0b55d941ddae1da359c19401572046d0643057315c47b3bf064736f6c634300081a0033

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

0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000000000000000000000000000000000000000000002df458b2c635dcf55e00000

-----Decoded View---------------
Arg [0] : _initialSupply (uint256): 1000000000000000000000000000
Arg [1] : _maxTokenAmount (uint256): 888888888000000000000000000

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000
Arg [1] : 000000000000000000000000000000000000000002df458b2c635dcf55e00000


Deployed Bytecode Sourcemap

25864:2400:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25984:52;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13297:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15590:190;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25941:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14399:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27805:456;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26928:255;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14250:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27191:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26713:207;;;:::i;:::-;;14561:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24972:103;;;:::i;:::-;;25905:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24297:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13507:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27455:342;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26557:148;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15129:142;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25230:220;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25984:52;;;;;;;;;;;;;;;;;;;;;;:::o;13297:91::-;13342:13;13375:5;13368:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13297:91;:::o;15590:190::-;15663:4;15680:13;15696:12;:10;:12::i;:::-;15680:28;;15719:31;15728:5;15735:7;15744:5;15719:8;:31::i;:::-;15768:4;15761:11;;;15590:190;;;;:::o;25941:36::-;;;;;;;;;;;;;:::o;14399:99::-;14451:7;14478:12;;14471:19;;14399:99;:::o;27805:456::-;27897:4;27918:24;;;;;;;;;;;:63;;;;;27947:20;:34;27968:12;:10;:12::i;:::-;27947:34;;;;;;;;;;;;;;;;;;;;;;;;;27946:35;27918:63;27914:174;;;28017:14;;28006:7;:25;;27998:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;27914:174;28098:30;28108:5;28115:3;28120:7;28098:9;:30::i;:::-;28140:71;28149:5;28156:12;:10;:12::i;:::-;28203:7;28170:30;28180:5;28187:12;:10;:12::i;:::-;28170:9;:30::i;:::-;:40;;;;:::i;:::-;28140:8;:71::i;:::-;28249:4;28242:11;;27805:456;;;;;:::o;26928:255::-;24183:13;:11;:13::i;:::-;27016:20:::1;:30;27037:8;27016:30;;;;;;;;;;;;;;;;;;;;;;;;;27015:31;27007:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27122:4;27089:20;:30;27110:8;27089:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;27166:8;27142:33;;;;;;;;;;;;26928:255:::0;:::o;14250:84::-;14299:5;14324:2;14317:9;;14250:84;:::o;27191:256::-;24183:13;:11;:13::i;:::-;27281:20:::1;:30;27302:8;27281:30;;;;;;;;;;;;;;;;;;;;;;;;;27273:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27383:5;27350:20;:30;27371:8;27350:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;27430:8;27404:35;;;;;;;;;;;;27191:256:::0;:::o;26713:207::-;24183:13;:11;:13::i;:::-;26814:24:::1;;;;;;;;;;;26813:25;26786:24;;:52;;;;;;;;;;;;;;;;;;26854:58;26887:24;;;;;;;;;;;26854:58;;;;;;:::i;:::-;;;;;;;;26713:207::o:0;14561:118::-;14626:7;14653:9;:18;14663:7;14653:18;;;;;;;;;;;;;;;;14646:25;;14561:118;;;:::o;24972:103::-;24183:13;:11;:13::i;:::-;25037:30:::1;25064:1;25037:18;:30::i;:::-;24972:103::o:0;25905:29::-;;;;:::o;24297:87::-;24343:7;24370:6;;;;;;;;;;;24363:13;;24297:87;:::o;13507:95::-;13554:13;13587:7;13580:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13507:95;:::o;27455:342::-;27528:4;27549:24;;;;;;;;;;;:63;;;;;27578:20;:34;27599:12;:10;:12::i;:::-;27578:34;;;;;;;;;;;;;;;;;;;;;;;;;27577:35;27549:63;27545:174;;;27648:14;;27637:7;:25;;27629:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;27545:174;27729:37;27739:12;:10;:12::i;:::-;27753:3;27758:7;27729:9;:37::i;:::-;27785:4;27778:11;;27455:342;;;;:::o;26557:148::-;24183:13;:11;:13::i;:::-;26648:7:::1;26631:14;:24;;;;26671:26;26689:7;26671:26;;;;;;:::i;:::-;;;;;;;;26557:148:::0;:::o;15129:142::-;15209:7;15236:11;:18;15248:5;15236:18;;;;;;;;;;;;;;;:27;15255:7;15236:27;;;;;;;;;;;;;;;;15229:34;;15129:142;;;;:::o;25230:220::-;24183:13;:11;:13::i;:::-;25335:1:::1;25315:22;;:8;:22;;::::0;25311:93:::1;;25389:1;25361:31;;;;;;;;;;;:::i;:::-;;;;;;;;25311:93;25414:28;25433:8;25414:18;:28::i;:::-;25230:220:::0;:::o;4302:98::-;4355:7;4382:10;4375:17;;4302:98;:::o;20417:130::-;20502:37;20511:5;20518:7;20527:5;20534:4;20502:8;:37::i;:::-;20417:130;;;:::o;16992:308::-;17092:1;17076:18;;:4;:18;;;17072:88;;17145:1;17118:30;;;;;;;;;;;:::i;:::-;;;;;;;;17072:88;17188:1;17174:16;;:2;:16;;;17170:88;;17243:1;17214:32;;;;;;;;;;;:::i;:::-;;;;;;;;17170:88;17268:24;17276:4;17282:2;17286:5;17268:7;:24::i;:::-;16992:308;;;:::o;24462:166::-;24533:12;:10;:12::i;:::-;24522:23;;:7;:5;:7::i;:::-;:23;;;24518:103;;24596:12;:10;:12::i;:::-;24569:40;;;;;;;;;;;:::i;:::-;;;;;;;;24518:103;24462:166::o;25610:191::-;25684:16;25703:6;;;;;;;;;;;25684:25;;25729:8;25720:6;;:17;;;;;;;;;;;;;;;;;;25784:8;25753:40;;25774:8;25753:40;;;;;;;;;;;;25673:128;25610:191;:::o;21398:443::-;21528:1;21511:19;;:5;:19;;;21507:91;;21583:1;21554:32;;;;;;;;;;;:::i;:::-;;;;;;;;21507:91;21631:1;21612:21;;:7;:21;;;21608:92;;21685:1;21657:31;;;;;;;;;;;:::i;:::-;;;;;;;;21608:92;21740:5;21710:11;:18;21722:5;21710:18;;;;;;;;;;;;;;;:27;21729:7;21710:27;;;;;;;;;;;;;;;:35;;;;21760:9;21756:78;;;21807:7;21791:31;;21800:5;21791:31;;;21816:5;21791:31;;;;;;:::i;:::-;;;;;;;;21756:78;21398:443;;;;:::o;17624:1135::-;17730:1;17714:18;;:4;:18;;;17710:552;;17868:5;17852:12;;:21;;;;;;;:::i;:::-;;;;;;;;17710:552;;;17906:19;17928:9;:15;17938:4;17928:15;;;;;;;;;;;;;;;;17906:37;;17976:5;17962:11;:19;17958:117;;;18034:4;18040:11;18053:5;18009:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;17958:117;18230:5;18216:11;:19;18198:9;:15;18208:4;18198:15;;;;;;;;;;;;;;;:37;;;;17891:371;17710:552;18292:1;18278:16;;:2;:16;;;18274:435;;18460:5;18444:12;;:21;;;;;;;;;;;18274:435;;;18677:5;18660:9;:13;18670:2;18660:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;18274:435;18741:2;18726:25;;18735:4;18726:25;;;18745:5;18726:25;;;;;;:::i;:::-;;;;;;;;17624:1135;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:90::-;1210:7;1253:5;1246:13;1239:21;1228:32;;1176:90;;;:::o;1272:109::-;1353:21;1368:5;1353:21;:::i;:::-;1348:3;1341:34;1272:109;;:::o;1387:210::-;1474:4;1512:2;1501:9;1497:18;1489:26;;1525:65;1587:1;1576:9;1572:17;1563:6;1525:65;:::i;:::-;1387:210;;;;:::o;1603:99::-;1655:6;1689:5;1683:12;1673:22;;1603:99;;;:::o;1708:169::-;1792:11;1826:6;1821:3;1814:19;1866:4;1861:3;1857:14;1842:29;;1708:169;;;;:::o;1883:139::-;1972:6;1967:3;1962;1956:23;2013:1;2004:6;1999:3;1995:16;1988:27;1883:139;;;:::o;2028:102::-;2069:6;2120:2;2116:7;2111:2;2104:5;2100:14;2096:28;2086:38;;2028:102;;;:::o;2136:377::-;2224:3;2252:39;2285:5;2252:39;:::i;:::-;2307:71;2371:6;2366:3;2307:71;:::i;:::-;2300:78;;2387:65;2445:6;2440:3;2433:4;2426:5;2422:16;2387:65;:::i;:::-;2477:29;2499:6;2477:29;:::i;:::-;2472:3;2468:39;2461:46;;2228:285;2136:377;;;;:::o;2519:313::-;2632:4;2670:2;2659:9;2655:18;2647:26;;2719:9;2713:4;2709:20;2705:1;2694:9;2690:17;2683:47;2747:78;2820:4;2811:6;2747:78;:::i;:::-;2739:86;;2519:313;;;;:::o;2838:77::-;2875:7;2904:5;2893:16;;2838:77;;;:::o;2921:122::-;2994:24;3012:5;2994:24;:::i;:::-;2987:5;2984:35;2974:63;;3033:1;3030;3023:12;2974:63;2921:122;:::o;3049:139::-;3095:5;3133:6;3120:20;3111:29;;3149:33;3176:5;3149:33;:::i;:::-;3049:139;;;;:::o;3194:474::-;3262:6;3270;3319:2;3307:9;3298:7;3294:23;3290:32;3287:119;;;3325:79;;:::i;:::-;3287:119;3445:1;3470:53;3515:7;3506:6;3495:9;3491:22;3470:53;:::i;:::-;3460:63;;3416:117;3572:2;3598:53;3643:7;3634:6;3623:9;3619:22;3598:53;:::i;:::-;3588:63;;3543:118;3194:474;;;;;:::o;3674:118::-;3761:24;3779:5;3761:24;:::i;:::-;3756:3;3749:37;3674:118;;:::o;3798:222::-;3891:4;3929:2;3918:9;3914:18;3906:26;;3942:71;4010:1;3999:9;3995:17;3986:6;3942:71;:::i;:::-;3798:222;;;;:::o;4026:619::-;4103:6;4111;4119;4168:2;4156:9;4147:7;4143:23;4139:32;4136:119;;;4174:79;;:::i;:::-;4136:119;4294:1;4319:53;4364:7;4355:6;4344:9;4340:22;4319:53;:::i;:::-;4309:63;;4265:117;4421:2;4447:53;4492:7;4483:6;4472:9;4468:22;4447:53;:::i;:::-;4437:63;;4392:118;4549:2;4575:53;4620:7;4611:6;4600:9;4596:22;4575:53;:::i;:::-;4565:63;;4520:118;4026:619;;;;;:::o;4651:86::-;4686:7;4726:4;4719:5;4715:16;4704:27;;4651:86;;;:::o;4743:112::-;4826:22;4842:5;4826:22;:::i;:::-;4821:3;4814:35;4743:112;;:::o;4861:214::-;4950:4;4988:2;4977:9;4973:18;4965:26;;5001:67;5065:1;5054:9;5050:17;5041:6;5001:67;:::i;:::-;4861:214;;;;:::o;5081:118::-;5168:24;5186:5;5168:24;:::i;:::-;5163:3;5156:37;5081:118;;:::o;5205:222::-;5298:4;5336:2;5325:9;5321:18;5313:26;;5349:71;5417:1;5406:9;5402:17;5393:6;5349:71;:::i;:::-;5205:222;;;;:::o;5433:329::-;5492:6;5541:2;5529:9;5520:7;5516:23;5512:32;5509:119;;;5547:79;;:::i;:::-;5509:119;5667:1;5692:53;5737:7;5728:6;5717:9;5713:22;5692:53;:::i;:::-;5682:63;;5638:117;5433:329;;;;:::o;5768:474::-;5836:6;5844;5893:2;5881:9;5872:7;5868:23;5864:32;5861:119;;;5899:79;;:::i;:::-;5861:119;6019:1;6044:53;6089:7;6080:6;6069:9;6065:22;6044:53;:::i;:::-;6034:63;;5990:117;6146:2;6172:53;6217:7;6208:6;6197:9;6193:22;6172:53;:::i;:::-;6162:63;;6117:118;5768:474;;;;;:::o;6248:180::-;6296:77;6293:1;6286:88;6393:4;6390:1;6383:15;6417:4;6414:1;6407:15;6434:320;6478:6;6515:1;6509:4;6505:12;6495:22;;6562:1;6556:4;6552:12;6583:18;6573:81;;6639:4;6631:6;6627:17;6617:27;;6573:81;6701:2;6693:6;6690:14;6670:18;6667:38;6664:84;;6720:18;;:::i;:::-;6664:84;6485:269;6434:320;;;:::o;6760:227::-;6900:34;6896:1;6888:6;6884:14;6877:58;6969:10;6964:2;6956:6;6952:15;6945:35;6760:227;:::o;6993:366::-;7135:3;7156:67;7220:2;7215:3;7156:67;:::i;:::-;7149:74;;7232:93;7321:3;7232:93;:::i;:::-;7350:2;7345:3;7341:12;7334:19;;6993:366;;;:::o;7365:419::-;7531:4;7569:2;7558:9;7554:18;7546:26;;7618:9;7612:4;7608:20;7604:1;7593:9;7589:17;7582:47;7646:131;7772:4;7646:131;:::i;:::-;7638:139;;7365:419;;;:::o;7790:180::-;7838:77;7835:1;7828:88;7935:4;7932:1;7925:15;7959:4;7956:1;7949:15;7976:194;8016:4;8036:20;8054:1;8036:20;:::i;:::-;8031:25;;8070:20;8088:1;8070:20;:::i;:::-;8065:25;;8114:1;8111;8107:9;8099:17;;8138:1;8132:4;8129:11;8126:37;;;8143:18;;:::i;:::-;8126:37;7976:194;;;;:::o;8176:177::-;8316:29;8312:1;8304:6;8300:14;8293:53;8176:177;:::o;8359:366::-;8501:3;8522:67;8586:2;8581:3;8522:67;:::i;:::-;8515:74;;8598:93;8687:3;8598:93;:::i;:::-;8716:2;8711:3;8707:12;8700:19;;8359:366;;;:::o;8731:419::-;8897:4;8935:2;8924:9;8920:18;8912:26;;8984:9;8978:4;8974:20;8970:1;8959:9;8955:17;8948:47;9012:131;9138:4;9012:131;:::i;:::-;9004:139;;8731:419;;;:::o;9156:173::-;9296:25;9292:1;9284:6;9280:14;9273:49;9156:173;:::o;9335:366::-;9477:3;9498:67;9562:2;9557:3;9498:67;:::i;:::-;9491:74;;9574:93;9663:3;9574:93;:::i;:::-;9692:2;9687:3;9683:12;9676:19;;9335:366;;;:::o;9707:419::-;9873:4;9911:2;9900:9;9896:18;9888:26;;9960:9;9954:4;9950:20;9946:1;9935:9;9931:17;9924:47;9988:131;10114:4;9988:131;:::i;:::-;9980:139;;9707:419;;;:::o;10132:191::-;10172:3;10191:20;10209:1;10191:20;:::i;:::-;10186:25;;10225:20;10243:1;10225:20;:::i;:::-;10220:25;;10268:1;10265;10261:9;10254:16;;10289:3;10286:1;10283:10;10280:36;;;10296:18;;:::i;:::-;10280:36;10132:191;;;;:::o;10329:442::-;10478:4;10516:2;10505:9;10501:18;10493:26;;10529:71;10597:1;10586:9;10582:17;10573:6;10529:71;:::i;:::-;10610:72;10678:2;10667:9;10663:18;10654:6;10610:72;:::i;:::-;10692;10760:2;10749:9;10745:18;10736:6;10692:72;:::i;:::-;10329:442;;;;;;:::o

Swarm Source

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