ETH Price: $2,276.21 (-8.27%)
Gas: 0.94 Gwei

Token

BlockChiefs (BCHIEF)
 

Overview

Max Total Supply

3,000,000,000 BCHIEF

Holders

2

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,796,124.1272 BCHIEF

Value
$0.00
0xc245539941D4DFC10AEE2dE481723cC851227125
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:
Boceta

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-06-22
*/

// 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/utils/Address.sol


// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)

pragma solidity ^0.8.20;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev The ETH balance of the account is not enough to perform the operation.
     */
    error AddressInsufficientBalance(address account);

    /**
     * @dev There's no code at `target` (it is not a contract).
     */
    error AddressEmptyCode(address target);

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

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

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        if (address(this).balance < value) {
            revert AddressInsufficientBalance(address(this));
        }
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

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

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

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

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

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

// 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: @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: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol


pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol


pragma solidity >=0.8.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol


pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

// File: uni.sol


pragma solidity 0.8.20;








interface IUniswapV2Router02 is IUniswapV2Router01 {
     function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}



interface IBOCETA {
    function totalSupply() external view returns (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
      function allowance(address holder, address spender) external view returns (uint);
    function approve(address spender, uint amount) external returns (bool);
}

contract Boceta is IBOCETA, IERC20, Ownable {
    // Mapeamentos
    mapping (address => uint) private balances;
    mapping (address => mapping (address => uint)) private allowances;

    mapping (address => bool) public isMarketPair;
    mapping (address => bool) private isCaughtMEV;
    mapping (address => bool) private isFeeExempt;
    mapping (address => bool) private isTransferExempt;

   

    // Events
    event Burn(address indexed from, uint256 value);
    event TransferExemptSet(address indexed holder, bool exempt);
    // Variáveis de estado
    string public name = "BlockChiefs";
    string public symbol = "BCHIEF";
    uint8 public constant decimals = 18;
    uint256 public maxTransferToken;
    uint256 public maxBalanceToken;
    uint256 private _totalSupply = 3000000000 * (10 ** uint256(decimals));

    address private authority;
    address private MktgWallet = 0xdee27911E38eB3921996585e261EAB9cE4D6B421;
    address public immutable dexPair;
   

    IUniswapV2Router02 public immutable dexRouter;

    uint256 public burnFee = 2;
    uint256 public MktgFee = 2; 

    // Construtor
    constructor() Ownable(msg.sender) {
        dexRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dexPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));

        allowances[address(this)][address(dexRouter)] = type(uint).max;

        isFeeExempt[msg.sender] = true;
        isFeeExempt[MktgWallet] = true;
       

        isTransferExempt[msg.sender] = true;
        isTransferExempt[dexPair] = true;
        isTransferExempt[MktgWallet] = true;
        isTransferExempt[address(this)] = true;
      

        isMarketPair[dexPair] = true;

        balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);

        maxTransferToken = _totalSupply;
        maxBalanceToken = _totalSupply;
    }

    modifier onlyAuthority {
        require(msg.sender == authority, "ERROR: You are not the auth target!");
        _;
    }

    // Function to sub 2 uint256, reverting in case of underflow
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "Subtraction underflow");
        return a - b;
    }
    // Function allowance
    function allowance(address holder, address spender) external view override(IBOCETA, IERC20) returns (uint) {
        return allowances[holder][spender];
    }

    // Function approve
    function approve(address spender, uint amount) public override(IBOCETA, IERC20) returns (bool) {
        allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    // Return the balance of an account
    function balanceOf(address account) public view override(IBOCETA, IERC20) returns (uint) {
        return balances[account];
    }


// Function to mark MEV
function isMEV(address account, bool state) external onlyOwner {
    isCaughtMEV[account] = state;
}


// Function to exempt transfers
function setTransferExempt(address holder, bool exempt) external onlyOwner {
    isTransferExempt[holder] = exempt;
    emit TransferExemptSet(holder, exempt);
}



    // Function setAUTH
    function setAuthority(address auth) external onlyOwner {
        isFeeExempt[auth] = true;
        authority = auth;
    }

// Function to change MktgWallet
function setMktgWallet(address newMktgWallet) external onlyOwner {
    require(newMktgWallet != address(0), "Invalid address");
    MktgWallet = newMktgWallet;
}


    // Function totalSupply
    function totalSupply() public view override(IBOCETA, IERC20) returns (uint256) {
        return _totalSupply;
    }

    // Function transfer
    function transfer(address recipient, uint amount) public override(IBOCETA, IERC20) returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    // Function transferFrom
    function transferFrom(address sender, address recipient, uint amount) public override(IBOCETA, IERC20) returns (bool) {
        if (allowances[sender][msg.sender] != type(uint).max) {
            allowances[sender][msg.sender] = sub(allowances[sender][msg.sender], amount);
        }
        return _transferFrom(sender, recipient, amount);
    }

    // Function transferFrom intern
    function _transferFrom(address sender, address recipient, uint amount) internal returns (bool) {
       
        if (amount == 0) {
            return true;
        }

        require(!isCaughtMEV[sender] && !isCaughtMEV[recipient], "TOKEN: Transfer not allowed.");

        if (!isTransferExempt[sender] && !isTransferExempt[recipient]) {
            require(amount <= maxTransferToken, "TOKEN: Max transfer limit exceeded");
        }

        if (!isTransferExempt[recipient]) {
            require(balances[recipient] + amount <= maxBalanceToken, "TOKEN: Max wallet limit exceeded");
        }

        balances[sender] = sub(balances[sender], amount);
        uint finalAmount = isFeeExempt[sender] || isFeeExempt[recipient] ? amount : takeFee(sender, amount, recipient);
        balances[recipient] += finalAmount;

        emit Transfer(sender, recipient, finalAmount);

        return true;
    }

    // Function takeFee
    function takeFee(address sender, uint amount, address recipient) internal returns (uint) {
        uint feeAmount = 0;
        uint burnAmount = 0;
        uint MktgAmount = 0;

        // Verifica se uma das partes envolvidas é o contrato do Uniswap V2 Pair
        if (isMarketPair[sender] || isMarketPair[recipient]) {
            // Calcular a taxa de queima
            burnAmount = (amount * burnFee) / 100;
            // Calcular a taxa de desenvolvimento
            MktgAmount = (amount * MktgFee) / 100;

            feeAmount = burnAmount + MktgAmount;

            balances[MktgWallet] += MktgAmount;
             _totalSupply -= burnAmount;

            emit Transfer(sender, MktgWallet, MktgAmount);
            emit Transfer(sender, address(0), burnAmount);
        }

        return amount - feeAmount; // Retorna o valor líquido da transação
    }

     // Function Burn
    function burn(uint256 amount) public onlyOwner {
        require(amount <= balances[msg.sender], "Insufficient balance");
        require(amount <= _totalSupply, "Cannot burn more than total supply");

        _burn(msg.sender, amount);
        emit Burn(msg.sender, amount);
    }

    // Function burn intern
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "burn from the zero address");

        balances[account] = balances[account] - amount;
        _totalSupply -= amount;
        emit Transfer(account, address(0), amount);
    }

    // Function to withdraw eth
function withdrawETH() external onlyOwner {
    uint256 contractBalance = address(this).balance;
    require(contractBalance > 0, "No ETH to withdraw");

    (bool success, ) = owner().call{value: contractBalance}("");
    require(success, "ETH transfer failed");
}

    // Function to withdraw erc20
function withdrawERC20(address tokenAddress, uint256 amount) external onlyOwner {
    require(tokenAddress != address(this), "Cannot withdraw the contract's own tokens");
    IERC20(tokenAddress).transfer(owner(), amount);
}


}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Burn","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":"holder","type":"address"},{"indexed":false,"internalType":"bool","name":"exempt","type":"bool"}],"name":"TransferExemptSet","type":"event"},{"inputs":[],"name":"MktgFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnFee","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":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"isMEV","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBalanceToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"auth","type":"address"}],"name":"setAuthority","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMktgWallet","type":"address"}],"name":"setMktgWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setTransferExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040526040518060400160405280600b81526020017f426c6f636b436869656673000000000000000000000000000000000000000000815250600790816200004a919062000aa9565b506040518060400160405280600681526020017f42434849454600000000000000000000000000000000000000000000000000008152506008908162000091919062000aa9565b50601260ff16600a620000a5919062000d0a565b63b2d05e00620000b6919062000d5a565b600b5573dee27911e38eb3921996585e261eab9ce4d6b421600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506002600e556002600f5534801562000123575f80fd5b50335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000198575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200018f919062000de7565b60405180910390fd5b620001a9816200078460201b60201c565b50737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060a05173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200023e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000264919062000e35565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539660a05173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002cb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002f1919062000e35565b306040518363ffffffff1660e01b81526004016200031192919062000e65565b6020604051808303815f875af11580156200032e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000354919062000e35565b73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60025f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600160055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160055f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f60805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160035f60805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600b5460015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b5460405162000764919062000ea1565b60405180910390a3600b54600981905550600b54600a8190555062000ebc565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620008c157607f821691505b602082108103620008d757620008d66200087c565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200093b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620008fe565b620009478683620008fe565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620009916200098b62000985846200095f565b62000968565b6200095f565b9050919050565b5f819050919050565b620009ac8362000971565b620009c4620009bb8262000998565b8484546200090a565b825550505050565b5f90565b620009da620009cc565b620009e7818484620009a1565b505050565b5b8181101562000a0e5762000a025f82620009d0565b600181019050620009ed565b5050565b601f82111562000a5d5762000a2781620008dd565b62000a3284620008ef565b8101602085101562000a42578190505b62000a5a62000a5185620008ef565b830182620009ec565b50505b505050565b5f82821c905092915050565b5f62000a7f5f198460080262000a62565b1980831691505092915050565b5f62000a99838362000a6e565b9150826002028217905092915050565b62000ab48262000845565b67ffffffffffffffff81111562000ad05762000acf6200084f565b5b62000adc8254620008a9565b62000ae982828562000a12565b5f60209050601f83116001811462000b1f575f841562000b0a578287015190505b62000b16858262000a8c565b86555062000b85565b601f19841662000b2f86620008dd565b5f5b8281101562000b585784890151825560018201915060208501945060208101905062000b31565b8683101562000b78578489015162000b74601f89168262000a6e565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000c175780860481111562000bef5762000bee62000b8d565b5b600185161562000bff5780820291505b808102905062000c0f8562000bba565b945062000bcf565b94509492505050565b5f8262000c31576001905062000d03565b8162000c40575f905062000d03565b816001811462000c59576002811462000c645762000c9a565b600191505062000d03565b60ff84111562000c795762000c7862000b8d565b5b8360020a91508482111562000c935762000c9262000b8d565b5b5062000d03565b5060208310610133831016604e8410600b841016171562000cd45782820a90508381111562000cce5762000ccd62000b8d565b5b62000d03565b62000ce3848484600162000bc6565b9250905081840481111562000cfd5762000cfc62000b8d565b5b81810290505b9392505050565b5f62000d16826200095f565b915062000d23836200095f565b925062000d527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000c20565b905092915050565b5f62000d66826200095f565b915062000d73836200095f565b925082820262000d83816200095f565b9150828204841483151762000d9d5762000d9c62000b8d565b5b5092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000dcf8262000da4565b9050919050565b62000de18162000dc3565b82525050565b5f60208201905062000dfc5f83018462000dd6565b92915050565b5f80fd5b62000e118162000dc3565b811462000e1c575f80fd5b50565b5f8151905062000e2f8162000e06565b92915050565b5f6020828403121562000e4d5762000e4c62000e02565b5b5f62000e5c8482850162000e1f565b91505092915050565b5f60408201905062000e7a5f83018562000dd6565b62000e89602083018462000dd6565b9392505050565b62000e9b816200095f565b82525050565b5f60208201905062000eb65f83018462000e90565b92915050565b60805160a0516125d262000ede5f395f61056001525f610f9001526125d25ff3fe608060405234801561000f575f80fd5b506004361061018c575f3560e01c80637a9e5e4b116100dc578063c0bf356211610095578063e086e5ec1161006f578063e086e5ec14610470578063f242ab411461047a578063f2fde38b14610498578063fce589d8146104b45761018c565b8063c0bf356214610406578063d8356fa414610424578063dd62ed3e146104405761018c565b80637a9e5e4b14610346578063884227d6146103625780638da5cb5b1461037e57806395d89b411461039c578063a1db9782146103ba578063a9059cbb146103d65761018c565b806323b872dd1161014957806342966c681161012357806342966c68146102d457806370a08231146102f0578063715018a614610320578063743fdd721461032a5761018c565b806323b872dd14610256578063313ce567146102865780633ecad271146102a45761018c565b806306fdde03146101905780630758d924146101ae578063095ea7b3146101cc57806318160ddd146101fc5780631bd1499a1461021a57806321e7375f14610238575b5f80fd5b6101986104d2565b6040516101a59190611b17565b60405180910390f35b6101b661055e565b6040516101c39190611bb1565b60405180910390f35b6101e660048036038101906101e19190611c3c565b610582565b6040516101f39190611c94565b60405180910390f35b61020461066f565b6040516102119190611cbc565b60405180910390f35b610222610678565b60405161022f9190611cbc565b60405180910390f35b61024061067e565b60405161024d9190611cbc565b60405180910390f35b610270600480360381019061026b9190611cd5565b610684565b60405161027d9190611c94565b60405180910390f35b61028e610837565b60405161029b9190611d40565b60405180910390f35b6102be60048036038101906102b99190611d59565b61083c565b6040516102cb9190611c94565b60405180910390f35b6102ee60048036038101906102e99190611d84565b610859565b005b61030a60048036038101906103059190611d59565b610981565b6040516103179190611cbc565b60405180910390f35b6103286109c7565b005b610344600480360381019061033f9190611d59565b6109da565b005b610360600480360381019061035b9190611d59565b610a93565b005b61037c60048036038101906103779190611dd9565b610b33565b005b610386610be1565b6040516103939190611e26565b60405180910390f35b6103a4610c08565b6040516103b19190611b17565b60405180910390f35b6103d460048036038101906103cf9190611c3c565b610c94565b005b6103f060048036038101906103eb9190611c3c565b610d91565b6040516103fd9190611c94565b60405180910390f35b61040e610da5565b60405161041b9190611cbc565b60405180910390f35b61043e60048036038101906104399190611dd9565b610dab565b005b61045a60048036038101906104559190611e3f565b610e0b565b6040516104679190611cbc565b60405180910390f35b610478610e8d565b005b610482610f8e565b60405161048f9190611e26565b60405180910390f35b6104b260048036038101906104ad9190611d59565b610fb2565b005b6104bc611036565b6040516104c99190611cbc565b60405180910390f35b600780546104df90611eaa565b80601f016020809104026020016040519081016040528092919081815260200182805461050b90611eaa565b80156105565780601f1061052d57610100808354040283529160200191610556565b820191905f5260205f20905b81548152906001019060200180831161053957829003601f168201915b505050505081565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f8160025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161065d9190611cbc565b60405180910390a36001905092915050565b5f600b54905090565b60095481565b600f5481565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414610823576107a660025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548361103c565b60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b61082e848484611094565b90509392505050565b601281565b6003602052805f5260405f205f915054906101000a900460ff1681565b610861611548565b60015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548111156108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d890611f24565b60405180910390fd5b600b54811115610926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091d90611fb2565b60405180910390fd5b61093033826115cf565b3373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040516109769190611cbc565b60405180910390a250565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6109cf611548565b6109d85f611748565b565b6109e2611548565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a479061201a565b60405180910390fd5b80600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610a9b611548565b600160055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b3b611548565b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9bf643211d6d827ae7d2a8008699e4022e8bb4eb665c24d4db86a011322b251b82604051610bd59190611c94565b60405180910390a25050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60088054610c1590611eaa565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4190611eaa565b8015610c8c5780601f10610c6357610100808354040283529160200191610c8c565b820191905f5260205f20905b815481529060010190602001808311610c6f57829003601f168201915b505050505081565b610c9c611548565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d01906120a8565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610d2e610be1565b836040518363ffffffff1660e01b8152600401610d4c9291906120c6565b6020604051808303815f875af1158015610d68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d8c9190612101565b505050565b5f610d9d338484611094565b905092915050565b600a5481565b610db3611548565b8060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610e95611548565b5f4790505f8111610edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed290612176565b60405180910390fd5b5f610ee4610be1565b73ffffffffffffffffffffffffffffffffffffffff1682604051610f07906121c1565b5f6040518083038185875af1925050503d805f8114610f41576040519150601f19603f3d011682016040523d82523d5f602084013e610f46565b606091505b5050905080610f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f819061221f565b60405180910390fd5b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610fba611548565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361102a575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016110219190611e26565b60405180910390fd5b61103381611748565b50565b600e5481565b5f82821115611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107790612287565b60405180910390fd5b818361108c91906122d2565b905092915050565b5f8082036110a55760019050611541565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611143575060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b611182576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111799061234f565b60405180910390fd5b60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611220575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561126b5760095482111561126a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611261906123dd565b60405180910390fd5b5b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661134757600a548260015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461130591906123fb565b1115611346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133d90612478565b60405180910390fd5b5b61138e60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548361103c565b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061146b575060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61147f5761147a858486611809565b611481565b825b90508060015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546114cf91906123fb565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115339190611cbc565b60405180910390a360019150505b9392505050565b611550611a86565b73ffffffffffffffffffffffffffffffffffffffff1661156e610be1565b73ffffffffffffffffffffffffffffffffffffffff16146115cd57611591611a86565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016115c49190611e26565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361163d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611634906124e0565b60405180910390fd5b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461168691906122d2565b60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080600b5f8282546116d891906122d2565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161173c9190611cbc565b60405180910390a35050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f805f90505f8060035f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806118ab575060035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15611a6e576064600e54876118c091906124fe565b6118ca919061256c565b91506064600f54876118dc91906124fe565b6118e6919061256c565b905080826118f491906123fb565b92508060015f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461196391906123fb565b9250508190555081600b5f82825461197b91906122d2565b92505081905550600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a009190611cbc565b60405180910390a35f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a659190611cbc565b60405180910390a35b8286611a7a91906122d2565b93505050509392505050565b5f33905090565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611ac4578082015181840152602081019050611aa9565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611ae982611a8d565b611af38185611a97565b9350611b03818560208601611aa7565b611b0c81611acf565b840191505092915050565b5f6020820190508181035f830152611b2f8184611adf565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f611b79611b74611b6f84611b37565b611b56565b611b37565b9050919050565b5f611b8a82611b5f565b9050919050565b5f611b9b82611b80565b9050919050565b611bab81611b91565b82525050565b5f602082019050611bc45f830184611ba2565b92915050565b5f80fd5b5f611bd882611b37565b9050919050565b611be881611bce565b8114611bf2575f80fd5b50565b5f81359050611c0381611bdf565b92915050565b5f819050919050565b611c1b81611c09565b8114611c25575f80fd5b50565b5f81359050611c3681611c12565b92915050565b5f8060408385031215611c5257611c51611bca565b5b5f611c5f85828601611bf5565b9250506020611c7085828601611c28565b9150509250929050565b5f8115159050919050565b611c8e81611c7a565b82525050565b5f602082019050611ca75f830184611c85565b92915050565b611cb681611c09565b82525050565b5f602082019050611ccf5f830184611cad565b92915050565b5f805f60608486031215611cec57611ceb611bca565b5b5f611cf986828701611bf5565b9350506020611d0a86828701611bf5565b9250506040611d1b86828701611c28565b9150509250925092565b5f60ff82169050919050565b611d3a81611d25565b82525050565b5f602082019050611d535f830184611d31565b92915050565b5f60208284031215611d6e57611d6d611bca565b5b5f611d7b84828501611bf5565b91505092915050565b5f60208284031215611d9957611d98611bca565b5b5f611da684828501611c28565b91505092915050565b611db881611c7a565b8114611dc2575f80fd5b50565b5f81359050611dd381611daf565b92915050565b5f8060408385031215611def57611dee611bca565b5b5f611dfc85828601611bf5565b9250506020611e0d85828601611dc5565b9150509250929050565b611e2081611bce565b82525050565b5f602082019050611e395f830184611e17565b92915050565b5f8060408385031215611e5557611e54611bca565b5b5f611e6285828601611bf5565b9250506020611e7385828601611bf5565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611ec157607f821691505b602082108103611ed457611ed3611e7d565b5b50919050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f611f0e601483611a97565b9150611f1982611eda565b602082019050919050565b5f6020820190508181035f830152611f3b81611f02565b9050919050565b7f43616e6e6f74206275726e206d6f7265207468616e20746f74616c20737570705f8201527f6c79000000000000000000000000000000000000000000000000000000000000602082015250565b5f611f9c602283611a97565b9150611fa782611f42565b604082019050919050565b5f6020820190508181035f830152611fc981611f90565b9050919050565b7f496e76616c6964206164647265737300000000000000000000000000000000005f82015250565b5f612004600f83611a97565b915061200f82611fd0565b602082019050919050565b5f6020820190508181035f83015261203181611ff8565b9050919050565b7f43616e6e6f742077697468647261772074686520636f6e74726163742773206f5f8201527f776e20746f6b656e730000000000000000000000000000000000000000000000602082015250565b5f612092602983611a97565b915061209d82612038565b604082019050919050565b5f6020820190508181035f8301526120bf81612086565b9050919050565b5f6040820190506120d95f830185611e17565b6120e66020830184611cad565b9392505050565b5f815190506120fb81611daf565b92915050565b5f6020828403121561211657612115611bca565b5b5f612123848285016120ed565b91505092915050565b7f4e6f2045544820746f20776974686472617700000000000000000000000000005f82015250565b5f612160601283611a97565b915061216b8261212c565b602082019050919050565b5f6020820190508181035f83015261218d81612154565b9050919050565b5f81905092915050565b50565b5f6121ac5f83612194565b91506121b78261219e565b5f82019050919050565b5f6121cb826121a1565b9150819050919050565b7f455448207472616e73666572206661696c6564000000000000000000000000005f82015250565b5f612209601383611a97565b9150612214826121d5565b602082019050919050565b5f6020820190508181035f830152612236816121fd565b9050919050565b7f5375627472616374696f6e20756e646572666c6f7700000000000000000000005f82015250565b5f612271601583611a97565b915061227c8261223d565b602082019050919050565b5f6020820190508181035f83015261229e81612265565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6122dc82611c09565b91506122e783611c09565b92508282039050818111156122ff576122fe6122a5565b5b92915050565b7f544f4b454e3a205472616e73666572206e6f7420616c6c6f7765642e000000005f82015250565b5f612339601c83611a97565b915061234482612305565b602082019050919050565b5f6020820190508181035f8301526123668161232d565b9050919050565b7f544f4b454e3a204d6178207472616e73666572206c696d6974206578636565645f8201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b5f6123c7602283611a97565b91506123d28261236d565b604082019050919050565b5f6020820190508181035f8301526123f4816123bb565b9050919050565b5f61240582611c09565b915061241083611c09565b9250828201905080821115612428576124276122a5565b5b92915050565b7f544f4b454e3a204d61782077616c6c6574206c696d69742065786365656465645f82015250565b5f612462602083611a97565b915061246d8261242e565b602082019050919050565b5f6020820190508181035f83015261248f81612456565b9050919050565b7f6275726e2066726f6d20746865207a65726f20616464726573730000000000005f82015250565b5f6124ca601a83611a97565b91506124d582612496565b602082019050919050565b5f6020820190508181035f8301526124f7816124be565b9050919050565b5f61250882611c09565b915061251383611c09565b925082820261252181611c09565b91508282048414831517612538576125376122a5565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61257682611c09565b915061258183611c09565b9250826125915761259061253f565b5b82820490509291505056fea2646970667358221220c735960aa03b63318fe8489f87a2bcfbee3b9df2d32fda22879cfea5c9c0110364736f6c63430008140033

Deployed Bytecode

0x608060405234801561000f575f80fd5b506004361061018c575f3560e01c80637a9e5e4b116100dc578063c0bf356211610095578063e086e5ec1161006f578063e086e5ec14610470578063f242ab411461047a578063f2fde38b14610498578063fce589d8146104b45761018c565b8063c0bf356214610406578063d8356fa414610424578063dd62ed3e146104405761018c565b80637a9e5e4b14610346578063884227d6146103625780638da5cb5b1461037e57806395d89b411461039c578063a1db9782146103ba578063a9059cbb146103d65761018c565b806323b872dd1161014957806342966c681161012357806342966c68146102d457806370a08231146102f0578063715018a614610320578063743fdd721461032a5761018c565b806323b872dd14610256578063313ce567146102865780633ecad271146102a45761018c565b806306fdde03146101905780630758d924146101ae578063095ea7b3146101cc57806318160ddd146101fc5780631bd1499a1461021a57806321e7375f14610238575b5f80fd5b6101986104d2565b6040516101a59190611b17565b60405180910390f35b6101b661055e565b6040516101c39190611bb1565b60405180910390f35b6101e660048036038101906101e19190611c3c565b610582565b6040516101f39190611c94565b60405180910390f35b61020461066f565b6040516102119190611cbc565b60405180910390f35b610222610678565b60405161022f9190611cbc565b60405180910390f35b61024061067e565b60405161024d9190611cbc565b60405180910390f35b610270600480360381019061026b9190611cd5565b610684565b60405161027d9190611c94565b60405180910390f35b61028e610837565b60405161029b9190611d40565b60405180910390f35b6102be60048036038101906102b99190611d59565b61083c565b6040516102cb9190611c94565b60405180910390f35b6102ee60048036038101906102e99190611d84565b610859565b005b61030a60048036038101906103059190611d59565b610981565b6040516103179190611cbc565b60405180910390f35b6103286109c7565b005b610344600480360381019061033f9190611d59565b6109da565b005b610360600480360381019061035b9190611d59565b610a93565b005b61037c60048036038101906103779190611dd9565b610b33565b005b610386610be1565b6040516103939190611e26565b60405180910390f35b6103a4610c08565b6040516103b19190611b17565b60405180910390f35b6103d460048036038101906103cf9190611c3c565b610c94565b005b6103f060048036038101906103eb9190611c3c565b610d91565b6040516103fd9190611c94565b60405180910390f35b61040e610da5565b60405161041b9190611cbc565b60405180910390f35b61043e60048036038101906104399190611dd9565b610dab565b005b61045a60048036038101906104559190611e3f565b610e0b565b6040516104679190611cbc565b60405180910390f35b610478610e8d565b005b610482610f8e565b60405161048f9190611e26565b60405180910390f35b6104b260048036038101906104ad9190611d59565b610fb2565b005b6104bc611036565b6040516104c99190611cbc565b60405180910390f35b600780546104df90611eaa565b80601f016020809104026020016040519081016040528092919081815260200182805461050b90611eaa565b80156105565780601f1061052d57610100808354040283529160200191610556565b820191905f5260205f20905b81548152906001019060200180831161053957829003601f168201915b505050505081565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f8160025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161065d9190611cbc565b60405180910390a36001905092915050565b5f600b54905090565b60095481565b600f5481565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414610823576107a660025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548361103c565b60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b61082e848484611094565b90509392505050565b601281565b6003602052805f5260405f205f915054906101000a900460ff1681565b610861611548565b60015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548111156108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d890611f24565b60405180910390fd5b600b54811115610926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091d90611fb2565b60405180910390fd5b61093033826115cf565b3373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040516109769190611cbc565b60405180910390a250565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6109cf611548565b6109d85f611748565b565b6109e2611548565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a479061201a565b60405180910390fd5b80600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610a9b611548565b600160055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b3b611548565b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9bf643211d6d827ae7d2a8008699e4022e8bb4eb665c24d4db86a011322b251b82604051610bd59190611c94565b60405180910390a25050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60088054610c1590611eaa565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4190611eaa565b8015610c8c5780601f10610c6357610100808354040283529160200191610c8c565b820191905f5260205f20905b815481529060010190602001808311610c6f57829003601f168201915b505050505081565b610c9c611548565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d01906120a8565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610d2e610be1565b836040518363ffffffff1660e01b8152600401610d4c9291906120c6565b6020604051808303815f875af1158015610d68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d8c9190612101565b505050565b5f610d9d338484611094565b905092915050565b600a5481565b610db3611548565b8060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610e95611548565b5f4790505f8111610edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed290612176565b60405180910390fd5b5f610ee4610be1565b73ffffffffffffffffffffffffffffffffffffffff1682604051610f07906121c1565b5f6040518083038185875af1925050503d805f8114610f41576040519150601f19603f3d011682016040523d82523d5f602084013e610f46565b606091505b5050905080610f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f819061221f565b60405180910390fd5b5050565b7f000000000000000000000000042133b748f077cca30e714b6c26d7928dfd2ca481565b610fba611548565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361102a575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016110219190611e26565b60405180910390fd5b61103381611748565b50565b600e5481565b5f82821115611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107790612287565b60405180910390fd5b818361108c91906122d2565b905092915050565b5f8082036110a55760019050611541565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611143575060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b611182576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111799061234f565b60405180910390fd5b60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611220575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561126b5760095482111561126a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611261906123dd565b60405180910390fd5b5b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661134757600a548260015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461130591906123fb565b1115611346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133d90612478565b60405180910390fd5b5b61138e60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548361103c565b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061146b575060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61147f5761147a858486611809565b611481565b825b90508060015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546114cf91906123fb565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115339190611cbc565b60405180910390a360019150505b9392505050565b611550611a86565b73ffffffffffffffffffffffffffffffffffffffff1661156e610be1565b73ffffffffffffffffffffffffffffffffffffffff16146115cd57611591611a86565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016115c49190611e26565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361163d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611634906124e0565b60405180910390fd5b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461168691906122d2565b60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080600b5f8282546116d891906122d2565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161173c9190611cbc565b60405180910390a35050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f805f90505f8060035f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806118ab575060035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15611a6e576064600e54876118c091906124fe565b6118ca919061256c565b91506064600f54876118dc91906124fe565b6118e6919061256c565b905080826118f491906123fb565b92508060015f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461196391906123fb565b9250508190555081600b5f82825461197b91906122d2565b92505081905550600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a009190611cbc565b60405180910390a35f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a659190611cbc565b60405180910390a35b8286611a7a91906122d2565b93505050509392505050565b5f33905090565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611ac4578082015181840152602081019050611aa9565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611ae982611a8d565b611af38185611a97565b9350611b03818560208601611aa7565b611b0c81611acf565b840191505092915050565b5f6020820190508181035f830152611b2f8184611adf565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f611b79611b74611b6f84611b37565b611b56565b611b37565b9050919050565b5f611b8a82611b5f565b9050919050565b5f611b9b82611b80565b9050919050565b611bab81611b91565b82525050565b5f602082019050611bc45f830184611ba2565b92915050565b5f80fd5b5f611bd882611b37565b9050919050565b611be881611bce565b8114611bf2575f80fd5b50565b5f81359050611c0381611bdf565b92915050565b5f819050919050565b611c1b81611c09565b8114611c25575f80fd5b50565b5f81359050611c3681611c12565b92915050565b5f8060408385031215611c5257611c51611bca565b5b5f611c5f85828601611bf5565b9250506020611c7085828601611c28565b9150509250929050565b5f8115159050919050565b611c8e81611c7a565b82525050565b5f602082019050611ca75f830184611c85565b92915050565b611cb681611c09565b82525050565b5f602082019050611ccf5f830184611cad565b92915050565b5f805f60608486031215611cec57611ceb611bca565b5b5f611cf986828701611bf5565b9350506020611d0a86828701611bf5565b9250506040611d1b86828701611c28565b9150509250925092565b5f60ff82169050919050565b611d3a81611d25565b82525050565b5f602082019050611d535f830184611d31565b92915050565b5f60208284031215611d6e57611d6d611bca565b5b5f611d7b84828501611bf5565b91505092915050565b5f60208284031215611d9957611d98611bca565b5b5f611da684828501611c28565b91505092915050565b611db881611c7a565b8114611dc2575f80fd5b50565b5f81359050611dd381611daf565b92915050565b5f8060408385031215611def57611dee611bca565b5b5f611dfc85828601611bf5565b9250506020611e0d85828601611dc5565b9150509250929050565b611e2081611bce565b82525050565b5f602082019050611e395f830184611e17565b92915050565b5f8060408385031215611e5557611e54611bca565b5b5f611e6285828601611bf5565b9250506020611e7385828601611bf5565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611ec157607f821691505b602082108103611ed457611ed3611e7d565b5b50919050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f611f0e601483611a97565b9150611f1982611eda565b602082019050919050565b5f6020820190508181035f830152611f3b81611f02565b9050919050565b7f43616e6e6f74206275726e206d6f7265207468616e20746f74616c20737570705f8201527f6c79000000000000000000000000000000000000000000000000000000000000602082015250565b5f611f9c602283611a97565b9150611fa782611f42565b604082019050919050565b5f6020820190508181035f830152611fc981611f90565b9050919050565b7f496e76616c6964206164647265737300000000000000000000000000000000005f82015250565b5f612004600f83611a97565b915061200f82611fd0565b602082019050919050565b5f6020820190508181035f83015261203181611ff8565b9050919050565b7f43616e6e6f742077697468647261772074686520636f6e74726163742773206f5f8201527f776e20746f6b656e730000000000000000000000000000000000000000000000602082015250565b5f612092602983611a97565b915061209d82612038565b604082019050919050565b5f6020820190508181035f8301526120bf81612086565b9050919050565b5f6040820190506120d95f830185611e17565b6120e66020830184611cad565b9392505050565b5f815190506120fb81611daf565b92915050565b5f6020828403121561211657612115611bca565b5b5f612123848285016120ed565b91505092915050565b7f4e6f2045544820746f20776974686472617700000000000000000000000000005f82015250565b5f612160601283611a97565b915061216b8261212c565b602082019050919050565b5f6020820190508181035f83015261218d81612154565b9050919050565b5f81905092915050565b50565b5f6121ac5f83612194565b91506121b78261219e565b5f82019050919050565b5f6121cb826121a1565b9150819050919050565b7f455448207472616e73666572206661696c6564000000000000000000000000005f82015250565b5f612209601383611a97565b9150612214826121d5565b602082019050919050565b5f6020820190508181035f830152612236816121fd565b9050919050565b7f5375627472616374696f6e20756e646572666c6f7700000000000000000000005f82015250565b5f612271601583611a97565b915061227c8261223d565b602082019050919050565b5f6020820190508181035f83015261229e81612265565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6122dc82611c09565b91506122e783611c09565b92508282039050818111156122ff576122fe6122a5565b5b92915050565b7f544f4b454e3a205472616e73666572206e6f7420616c6c6f7765642e000000005f82015250565b5f612339601c83611a97565b915061234482612305565b602082019050919050565b5f6020820190508181035f8301526123668161232d565b9050919050565b7f544f4b454e3a204d6178207472616e73666572206c696d6974206578636565645f8201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b5f6123c7602283611a97565b91506123d28261236d565b604082019050919050565b5f6020820190508181035f8301526123f4816123bb565b9050919050565b5f61240582611c09565b915061241083611c09565b9250828201905080821115612428576124276122a5565b5b92915050565b7f544f4b454e3a204d61782077616c6c6574206c696d69742065786365656465645f82015250565b5f612462602083611a97565b915061246d8261242e565b602082019050919050565b5f6020820190508181035f83015261248f81612456565b9050919050565b7f6275726e2066726f6d20746865207a65726f20616464726573730000000000005f82015250565b5f6124ca601a83611a97565b91506124d582612496565b602082019050919050565b5f6020820190508181035f8301526124f7816124be565b9050919050565b5f61250882611c09565b915061251383611c09565b925082820261252181611c09565b91508282048414831517612538576125376122a5565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61257682611c09565b915061258183611c09565b9250826125915761259061253f565b5b82820490509291505056fea2646970667358221220c735960aa03b63318fe8489f87a2bcfbee3b9df2d32fda22879cfea5c9c0110364736f6c63430008140033

Deployed Bytecode Sourcemap

25926:7533:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26507:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26937:45;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28489:229;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29638:117;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26628:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27024:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29995:351;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26586:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26120:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32273:287;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28767:132;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9807:103;;;:::i;:::-;;29435:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29272:125;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29071:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9132:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26548:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33225:227;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29789:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26666:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28930:102;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28296:160;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32915:271;;;:::i;:::-;;26891:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10065:220;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26991:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26507:34;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26937:45::-;;;:::o;28489:229::-;28578:4;28629:6;28595:10;:22;28606:10;28595:22;;;;;;;;;;;;;;;:31;28618:7;28595:31;;;;;;;;;;;;;;;:40;;;;28672:7;28651:37;;28660:10;28651:37;;;28681:6;28651:37;;;;;;:::i;:::-;;;;;;;;28706:4;28699:11;;28489:229;;;;:::o;29638:117::-;29708:7;29735:12;;29728:19;;29638:117;:::o;26628:31::-;;;;:::o;27024:26::-;;;;:::o;29995:351::-;30107:4;30162:14;30128:10;:18;30139:6;30128:18;;;;;;;;;;;;;;;:30;30147:10;30128:30;;;;;;;;;;;;;;;;:48;30124:157;;30226:43;30230:10;:18;30241:6;30230:18;;;;;;;;;;;;;;;:30;30249:10;30230:30;;;;;;;;;;;;;;;;30262:6;30226:3;:43::i;:::-;30193:10;:18;30204:6;30193:18;;;;;;;;;;;;;;;:30;30212:10;30193:30;;;;;;;;;;;;;;;:76;;;;30124:157;30298:40;30312:6;30320:9;30331:6;30298:13;:40::i;:::-;30291:47;;29995:351;;;;;:::o;26586:35::-;26619:2;26586:35;:::o;26120:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;32273:287::-;9018:13;:11;:13::i;:::-;32349:8:::1;:20;32358:10;32349:20;;;;;;;;;;;;;;;;32339:6;:30;;32331:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;32423:12;;32413:6;:22;;32405:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;32487:25;32493:10;32505:6;32487:5;:25::i;:::-;32533:10;32528:24;;;32545:6;32528:24;;;;;;:::i;:::-;;;;;;;;32273:287:::0;:::o;28767:132::-;28850:4;28874:8;:17;28883:7;28874:17;;;;;;;;;;;;;;;;28867:24;;28767:132;;;:::o;9807:103::-;9018:13;:11;:13::i;:::-;9872:30:::1;9899:1;9872:18;:30::i;:::-;9807:103::o:0;29435:164::-;9018:13;:11;:13::i;:::-;29540:1:::1;29515:27;;:13;:27;;::::0;29507:55:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;29582:13;29569:10;;:26;;;;;;;;;;;;;;;;;;29435:164:::0;:::o;29272:125::-;9018:13;:11;:13::i;:::-;29358:4:::1;29338:11;:17;29350:4;29338:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;29385:4;29373:9;;:16;;;;;;;;;;;;;;;;;;29272:125:::0;:::o;29071:164::-;9018:13;:11;:13::i;:::-;29180:6:::1;29153:16;:24;29170:6;29153:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;29216:6;29198:33;;;29224:6;29198:33;;;;;;:::i;:::-;;;;;;;;29071:164:::0;;:::o;9132:87::-;9178:7;9205:6;;;;;;;;;;;9198:13;;9132:87;:::o;26548:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33225:227::-;9018:13;:11;:13::i;:::-;33344:4:::1;33320:29;;:12;:29;;::::0;33312:83:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33409:12;33402:29;;;33432:7;:5;:7::i;:::-;33441:6;33402:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33225:227:::0;;:::o;29789:168::-;29881:4;29905:44;29919:10;29931:9;29942:6;29905:13;:44::i;:::-;29898:51;;29789:168;;;;:::o;26666:30::-;;;;:::o;28930:102::-;9018:13;:11;:13::i;:::-;29023:5:::1;29000:11;:20;29012:7;29000:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;28930:102:::0;;:::o;28296:160::-;28397:4;28421:10;:18;28432:6;28421:18;;;;;;;;;;;;;;;:27;28440:7;28421:27;;;;;;;;;;;;;;;;28414:34;;28296:160;;;;:::o;32915:271::-;9018:13;:11;:13::i;:::-;32964:23:::1;32990:21;32964:47;;33044:1;33026:15;:19;33018:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;33078:12;33096:7;:5;:7::i;:::-;:12;;33116:15;33096:40;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33077:59;;;33151:7;33143:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;32957:229;;32915:271::o:0;26891:32::-;;;:::o;10065:220::-;9018:13;:11;:13::i;:::-;10170:1:::1;10150:22;;:8;:22;;::::0;10146:93:::1;;10224:1;10196:31;;;;;;;;;;;:::i;:::-;;;;;;;;10146:93;10249:28;10268:8;10249:18;:28::i;:::-;10065:220:::0;:::o;26991:26::-;;;;:::o;28114:149::-;28172:7;28205:1;28200;:6;;28192:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;28254:1;28250;:5;;;;:::i;:::-;28243:12;;28114:149;;;;:::o;30391:927::-;30480:4;30520:1;30510:6;:11;30506:55;;30545:4;30538:11;;;;30506:55;30582:11;:19;30594:6;30582:19;;;;;;;;;;;;;;;;;;;;;;;;;30581:20;:47;;;;;30606:11;:22;30618:9;30606:22;;;;;;;;;;;;;;;;;;;;;;;;;30605:23;30581:47;30573:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;30679:16;:24;30696:6;30679:24;;;;;;;;;;;;;;;;;;;;;;;;;30678:25;:57;;;;;30708:16;:27;30725:9;30708:27;;;;;;;;;;;;;;;;;;;;;;;;;30707:28;30678:57;30674:163;;;30770:16;;30760:6;:26;;30752:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30674:163;30854:16;:27;30871:9;30854:27;;;;;;;;;;;;;;;;;;;;;;;;;30849:153;;30938:15;;30928:6;30906:8;:19;30915:9;30906:19;;;;;;;;;;;;;;;;:28;;;;:::i;:::-;:47;;30898:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;30849:153;31033:29;31037:8;:16;31046:6;31037:16;;;;;;;;;;;;;;;;31055:6;31033:3;:29::i;:::-;31014:8;:16;31023:6;31014:16;;;;;;;;;;;;;;;:48;;;;31073:16;31092:11;:19;31104:6;31092:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;31115:11;:22;31127:9;31115:22;;;;;;;;;;;;;;;;;;;;;;;;;31092:45;:91;;31149:34;31157:6;31165;31173:9;31149:7;:34::i;:::-;31092:91;;;31140:6;31092:91;31073:110;;31217:11;31194:8;:19;31203:9;31194:19;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;31263:9;31246:40;;31255:6;31246:40;;;31274:11;31246:40;;;;;;:::i;:::-;;;;;;;;31306:4;31299:11;;;30391:927;;;;;;:::o;9297:166::-;9368:12;:10;:12::i;:::-;9357:23;;:7;:5;:7::i;:::-;:23;;;9353:103;;9431:12;:10;:12::i;:::-;9404:40;;;;;;;;;;;:::i;:::-;;;;;;;;9353:103;9297:166::o;32597:281::-;32692:1;32673:21;;:7;:21;;;32665:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;32778:6;32758:8;:17;32767:7;32758:17;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;32738:8;:17;32747:7;32738:17;;;;;;;;;;;;;;;:46;;;;32811:6;32795:12;;:22;;;;;;;:::i;:::-;;;;;;;;32859:1;32833:37;;32842:7;32833:37;;;32863:6;32833:37;;;;;;:::i;:::-;;;;;;;;32597:281;;:::o;10445:191::-;10519:16;10538:6;;;;;;;;;;;10519:25;;10564:8;10555:6;;:17;;;;;;;;;;;;;;;;;;10619:8;10588:40;;10609:8;10588:40;;;;;;;;;;;;10508:128;10445:191;:::o;31351:891::-;31434:4;31451:14;31468:1;31451:18;;31480:15;31510;31629:12;:20;31642:6;31629:20;;;;;;;;;;;;;;;;;;;;;;;;;:47;;;;31653:12;:23;31666:9;31653:23;;;;;;;;;;;;;;;;;;;;;;;;;31629:47;31625:529;;;31769:3;31758:7;;31749:6;:16;;;;:::i;:::-;31748:24;;;;:::i;:::-;31735:37;;31872:3;31861:7;;31852:6;:16;;;;:::i;:::-;31851:24;;;;:::i;:::-;31838:37;;31917:10;31904;:23;;;;:::i;:::-;31892:35;;31968:10;31944:8;:20;31953:10;;;;;;;;;;;31944:20;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;32010:10;31994:12;;:26;;;;;;;:::i;:::-;;;;;;;;32059:10;;;;;;;;;;;32042:40;;32051:6;32042:40;;;32071:10;32042:40;;;;;;:::i;:::-;;;;;;;;32127:1;32102:40;;32111:6;32102:40;;;32131:10;32102:40;;;;;;:::i;:::-;;;;;;;;31625:529;32182:9;32173:6;:18;;;;:::i;:::-;32166:25;;;;;31351:891;;;;;:::o;695:98::-;748:7;775:10;768:17;;695:98;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:126::-;1386:7;1426:42;1419:5;1415:54;1404:65;;1349:126;;;:::o;1481:60::-;1509:3;1530:5;1523:12;;1481:60;;;:::o;1547:142::-;1597:9;1630:53;1648:34;1657:24;1675:5;1657:24;:::i;:::-;1648:34;:::i;:::-;1630:53;:::i;:::-;1617:66;;1547:142;;;:::o;1695:126::-;1745:9;1778:37;1809:5;1778:37;:::i;:::-;1765:50;;1695:126;;;:::o;1827:153::-;1904:9;1937:37;1968:5;1937:37;:::i;:::-;1924:50;;1827:153;;;:::o;1986:185::-;2100:64;2158:5;2100:64;:::i;:::-;2095:3;2088:77;1986:185;;:::o;2177:276::-;2297:4;2335:2;2324:9;2320:18;2312:26;;2348:98;2443:1;2432:9;2428:17;2419:6;2348:98;:::i;:::-;2177:276;;;;:::o;2540:117::-;2649:1;2646;2639:12;2786:96;2823:7;2852:24;2870:5;2852:24;:::i;:::-;2841:35;;2786:96;;;:::o;2888:122::-;2961:24;2979:5;2961:24;:::i;:::-;2954:5;2951:35;2941:63;;3000:1;2997;2990:12;2941:63;2888:122;:::o;3016:139::-;3062:5;3100:6;3087:20;3078:29;;3116:33;3143:5;3116:33;:::i;:::-;3016:139;;;;:::o;3161:77::-;3198:7;3227:5;3216:16;;3161:77;;;:::o;3244:122::-;3317:24;3335:5;3317:24;:::i;:::-;3310:5;3307:35;3297:63;;3356:1;3353;3346:12;3297:63;3244:122;:::o;3372:139::-;3418:5;3456:6;3443:20;3434:29;;3472:33;3499:5;3472:33;:::i;:::-;3372:139;;;;:::o;3517:474::-;3585:6;3593;3642:2;3630:9;3621:7;3617:23;3613:32;3610:119;;;3648:79;;:::i;:::-;3610:119;3768:1;3793:53;3838:7;3829:6;3818:9;3814:22;3793:53;:::i;:::-;3783:63;;3739:117;3895:2;3921:53;3966:7;3957:6;3946:9;3942:22;3921:53;:::i;:::-;3911:63;;3866:118;3517:474;;;;;:::o;3997:90::-;4031:7;4074:5;4067:13;4060:21;4049:32;;3997:90;;;:::o;4093:109::-;4174:21;4189:5;4174:21;:::i;:::-;4169:3;4162:34;4093:109;;:::o;4208:210::-;4295:4;4333:2;4322:9;4318:18;4310:26;;4346:65;4408:1;4397:9;4393:17;4384:6;4346:65;:::i;:::-;4208:210;;;;:::o;4424:118::-;4511:24;4529:5;4511:24;:::i;:::-;4506:3;4499:37;4424:118;;:::o;4548:222::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:71;4760:1;4749:9;4745:17;4736:6;4692:71;:::i;:::-;4548:222;;;;:::o;4776:619::-;4853:6;4861;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;5299:2;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5270:118;4776:619;;;;;:::o;5401:86::-;5436:7;5476:4;5469:5;5465:16;5454:27;;5401:86;;;:::o;5493:112::-;5576:22;5592:5;5576:22;:::i;:::-;5571:3;5564:35;5493:112;;:::o;5611:214::-;5700:4;5738:2;5727:9;5723:18;5715:26;;5751:67;5815:1;5804:9;5800:17;5791:6;5751:67;:::i;:::-;5611:214;;;;:::o;5831:329::-;5890:6;5939:2;5927:9;5918:7;5914:23;5910:32;5907:119;;;5945:79;;:::i;:::-;5907:119;6065:1;6090:53;6135:7;6126:6;6115:9;6111:22;6090:53;:::i;:::-;6080:63;;6036:117;5831:329;;;;:::o;6166:::-;6225:6;6274:2;6262:9;6253:7;6249:23;6245:32;6242:119;;;6280:79;;:::i;:::-;6242:119;6400:1;6425:53;6470:7;6461:6;6450:9;6446:22;6425:53;:::i;:::-;6415:63;;6371:117;6166:329;;;;:::o;6501:116::-;6571:21;6586:5;6571:21;:::i;:::-;6564:5;6561:32;6551:60;;6607:1;6604;6597:12;6551:60;6501:116;:::o;6623:133::-;6666:5;6704:6;6691:20;6682:29;;6720:30;6744:5;6720:30;:::i;:::-;6623:133;;;;:::o;6762:468::-;6827:6;6835;6884:2;6872:9;6863:7;6859:23;6855:32;6852:119;;;6890:79;;:::i;:::-;6852:119;7010:1;7035:53;7080:7;7071:6;7060:9;7056:22;7035:53;:::i;:::-;7025:63;;6981:117;7137:2;7163:50;7205:7;7196:6;7185:9;7181:22;7163:50;:::i;:::-;7153:60;;7108:115;6762:468;;;;;:::o;7236:118::-;7323:24;7341:5;7323:24;:::i;:::-;7318:3;7311:37;7236:118;;:::o;7360:222::-;7453:4;7491:2;7480:9;7476:18;7468:26;;7504:71;7572:1;7561:9;7557:17;7548:6;7504:71;:::i;:::-;7360:222;;;;:::o;7588:474::-;7656:6;7664;7713:2;7701:9;7692:7;7688:23;7684:32;7681:119;;;7719:79;;:::i;:::-;7681:119;7839:1;7864:53;7909:7;7900:6;7889:9;7885:22;7864:53;:::i;:::-;7854:63;;7810:117;7966:2;7992:53;8037:7;8028:6;8017:9;8013:22;7992:53;:::i;:::-;7982:63;;7937:118;7588:474;;;;;:::o;8068:180::-;8116:77;8113:1;8106:88;8213:4;8210:1;8203:15;8237:4;8234:1;8227:15;8254:320;8298:6;8335:1;8329:4;8325:12;8315:22;;8382:1;8376:4;8372:12;8403:18;8393:81;;8459:4;8451:6;8447:17;8437:27;;8393:81;8521:2;8513:6;8510:14;8490:18;8487:38;8484:84;;8540:18;;:::i;:::-;8484:84;8305:269;8254:320;;;:::o;8580:170::-;8720:22;8716:1;8708:6;8704:14;8697:46;8580:170;:::o;8756:366::-;8898:3;8919:67;8983:2;8978:3;8919:67;:::i;:::-;8912:74;;8995:93;9084:3;8995:93;:::i;:::-;9113:2;9108:3;9104:12;9097:19;;8756:366;;;:::o;9128:419::-;9294:4;9332:2;9321:9;9317:18;9309:26;;9381:9;9375:4;9371:20;9367:1;9356:9;9352:17;9345:47;9409:131;9535:4;9409:131;:::i;:::-;9401:139;;9128:419;;;:::o;9553:221::-;9693:34;9689:1;9681:6;9677:14;9670:58;9762:4;9757:2;9749:6;9745:15;9738:29;9553:221;:::o;9780:366::-;9922:3;9943:67;10007:2;10002:3;9943:67;:::i;:::-;9936:74;;10019:93;10108:3;10019:93;:::i;:::-;10137:2;10132:3;10128:12;10121:19;;9780:366;;;:::o;10152:419::-;10318:4;10356:2;10345:9;10341:18;10333:26;;10405:9;10399:4;10395:20;10391:1;10380:9;10376:17;10369:47;10433:131;10559:4;10433:131;:::i;:::-;10425:139;;10152:419;;;:::o;10577:165::-;10717:17;10713:1;10705:6;10701:14;10694:41;10577:165;:::o;10748:366::-;10890:3;10911:67;10975:2;10970:3;10911:67;:::i;:::-;10904:74;;10987:93;11076:3;10987:93;:::i;:::-;11105:2;11100:3;11096:12;11089:19;;10748:366;;;:::o;11120:419::-;11286:4;11324:2;11313:9;11309:18;11301:26;;11373:9;11367:4;11363:20;11359:1;11348:9;11344:17;11337:47;11401:131;11527:4;11401:131;:::i;:::-;11393:139;;11120:419;;;:::o;11545:228::-;11685:34;11681:1;11673:6;11669:14;11662:58;11754:11;11749:2;11741:6;11737:15;11730:36;11545:228;:::o;11779:366::-;11921:3;11942:67;12006:2;12001:3;11942:67;:::i;:::-;11935:74;;12018:93;12107:3;12018:93;:::i;:::-;12136:2;12131:3;12127:12;12120:19;;11779:366;;;:::o;12151:419::-;12317:4;12355:2;12344:9;12340:18;12332:26;;12404:9;12398:4;12394:20;12390:1;12379:9;12375:17;12368:47;12432:131;12558:4;12432:131;:::i;:::-;12424:139;;12151:419;;;:::o;12576:332::-;12697:4;12735:2;12724:9;12720:18;12712:26;;12748:71;12816:1;12805:9;12801:17;12792:6;12748:71;:::i;:::-;12829:72;12897:2;12886:9;12882:18;12873:6;12829:72;:::i;:::-;12576:332;;;;;:::o;12914:137::-;12968:5;12999:6;12993:13;12984:22;;13015:30;13039:5;13015:30;:::i;:::-;12914:137;;;;:::o;13057:345::-;13124:6;13173:2;13161:9;13152:7;13148:23;13144:32;13141:119;;;13179:79;;:::i;:::-;13141:119;13299:1;13324:61;13377:7;13368:6;13357:9;13353:22;13324:61;:::i;:::-;13314:71;;13270:125;13057:345;;;;:::o;13408:168::-;13548:20;13544:1;13536:6;13532:14;13525:44;13408:168;:::o;13582:366::-;13724:3;13745:67;13809:2;13804:3;13745:67;:::i;:::-;13738:74;;13821:93;13910:3;13821:93;:::i;:::-;13939:2;13934:3;13930:12;13923:19;;13582:366;;;:::o;13954:419::-;14120:4;14158:2;14147:9;14143:18;14135:26;;14207:9;14201:4;14197:20;14193:1;14182:9;14178:17;14171:47;14235:131;14361:4;14235:131;:::i;:::-;14227:139;;13954:419;;;:::o;14379:147::-;14480:11;14517:3;14502:18;;14379:147;;;;:::o;14532:114::-;;:::o;14652:398::-;14811:3;14832:83;14913:1;14908:3;14832:83;:::i;:::-;14825:90;;14924:93;15013:3;14924:93;:::i;:::-;15042:1;15037:3;15033:11;15026:18;;14652:398;;;:::o;15056:379::-;15240:3;15262:147;15405:3;15262:147;:::i;:::-;15255:154;;15426:3;15419:10;;15056:379;;;:::o;15441:169::-;15581:21;15577:1;15569:6;15565:14;15558:45;15441:169;:::o;15616:366::-;15758:3;15779:67;15843:2;15838:3;15779:67;:::i;:::-;15772:74;;15855:93;15944:3;15855:93;:::i;:::-;15973:2;15968:3;15964:12;15957:19;;15616:366;;;:::o;15988:419::-;16154:4;16192:2;16181:9;16177:18;16169:26;;16241:9;16235:4;16231:20;16227:1;16216:9;16212:17;16205:47;16269:131;16395:4;16269:131;:::i;:::-;16261:139;;15988:419;;;:::o;16413:171::-;16553:23;16549:1;16541:6;16537:14;16530:47;16413:171;:::o;16590:366::-;16732:3;16753:67;16817:2;16812:3;16753:67;:::i;:::-;16746:74;;16829:93;16918:3;16829:93;:::i;:::-;16947:2;16942:3;16938:12;16931:19;;16590:366;;;:::o;16962:419::-;17128:4;17166:2;17155:9;17151:18;17143:26;;17215:9;17209:4;17205:20;17201:1;17190:9;17186:17;17179:47;17243:131;17369:4;17243:131;:::i;:::-;17235:139;;16962:419;;;:::o;17387:180::-;17435:77;17432:1;17425:88;17532:4;17529:1;17522:15;17556:4;17553:1;17546:15;17573:194;17613:4;17633:20;17651:1;17633:20;:::i;:::-;17628:25;;17667:20;17685:1;17667:20;:::i;:::-;17662:25;;17711:1;17708;17704:9;17696:17;;17735:1;17729:4;17726:11;17723:37;;;17740:18;;:::i;:::-;17723:37;17573:194;;;;:::o;17773:178::-;17913:30;17909:1;17901:6;17897:14;17890:54;17773:178;:::o;17957:366::-;18099:3;18120:67;18184:2;18179:3;18120:67;:::i;:::-;18113:74;;18196:93;18285:3;18196:93;:::i;:::-;18314:2;18309:3;18305:12;18298:19;;17957:366;;;:::o;18329:419::-;18495:4;18533:2;18522:9;18518:18;18510:26;;18582:9;18576:4;18572:20;18568:1;18557:9;18553:17;18546:47;18610:131;18736:4;18610:131;:::i;:::-;18602:139;;18329:419;;;:::o;18754:221::-;18894:34;18890:1;18882:6;18878:14;18871:58;18963:4;18958:2;18950:6;18946:15;18939:29;18754:221;:::o;18981:366::-;19123:3;19144:67;19208:2;19203:3;19144:67;:::i;:::-;19137:74;;19220:93;19309:3;19220:93;:::i;:::-;19338:2;19333:3;19329:12;19322:19;;18981:366;;;:::o;19353:419::-;19519:4;19557:2;19546:9;19542:18;19534:26;;19606:9;19600:4;19596:20;19592:1;19581:9;19577:17;19570:47;19634:131;19760:4;19634:131;:::i;:::-;19626:139;;19353:419;;;:::o;19778:191::-;19818:3;19837:20;19855:1;19837:20;:::i;:::-;19832:25;;19871:20;19889:1;19871:20;:::i;:::-;19866:25;;19914:1;19911;19907:9;19900:16;;19935:3;19932:1;19929:10;19926:36;;;19942:18;;:::i;:::-;19926:36;19778:191;;;;:::o;19975:182::-;20115:34;20111:1;20103:6;20099:14;20092:58;19975:182;:::o;20163:366::-;20305:3;20326:67;20390:2;20385:3;20326:67;:::i;:::-;20319:74;;20402:93;20491:3;20402:93;:::i;:::-;20520:2;20515:3;20511:12;20504:19;;20163:366;;;:::o;20535:419::-;20701:4;20739:2;20728:9;20724:18;20716:26;;20788:9;20782:4;20778:20;20774:1;20763:9;20759:17;20752:47;20816:131;20942:4;20816:131;:::i;:::-;20808:139;;20535:419;;;:::o;20960:176::-;21100:28;21096:1;21088:6;21084:14;21077:52;20960:176;:::o;21142:366::-;21284:3;21305:67;21369:2;21364:3;21305:67;:::i;:::-;21298:74;;21381:93;21470:3;21381:93;:::i;:::-;21499:2;21494:3;21490:12;21483:19;;21142:366;;;:::o;21514:419::-;21680:4;21718:2;21707:9;21703:18;21695:26;;21767:9;21761:4;21757:20;21753:1;21742:9;21738:17;21731:47;21795:131;21921:4;21795:131;:::i;:::-;21787:139;;21514:419;;;:::o;21939:410::-;21979:7;22002:20;22020:1;22002:20;:::i;:::-;21997:25;;22036:20;22054:1;22036:20;:::i;:::-;22031:25;;22091:1;22088;22084:9;22113:30;22131:11;22113:30;:::i;:::-;22102:41;;22292:1;22283:7;22279:15;22276:1;22273:22;22253:1;22246:9;22226:83;22203:139;;22322:18;;:::i;:::-;22203:139;21987:362;21939:410;;;;:::o;22355:180::-;22403:77;22400:1;22393:88;22500:4;22497:1;22490:15;22524:4;22521:1;22514:15;22541:185;22581:1;22598:20;22616:1;22598:20;:::i;:::-;22593:25;;22632:20;22650:1;22632:20;:::i;:::-;22627:25;;22671:1;22661:35;;22676:18;;:::i;:::-;22661:35;22718:1;22715;22711:9;22706:14;;22541:185;;;;:::o

Swarm Source

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