Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000 SOB
Holders
373 (0.00%)
Market
Price
$0.88 @ 0.000349 ETH (+9.47%)
Onchain Market Cap
$880,937.00
Circulating Supply Market Cap
$879,068.00
Other Info
Token Contract (WITH 9 Decimals)
Balance
7,079.038485587 SOBValue
$6,236.19 ( ~2.4740 Eth) [0.7079%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
SecuredOnBlockChainToken
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-03-10 */ //SPDX-License-Identifier: MIT pragma solidity 0.8.24; // lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol) /** * @dev Standard ERC20 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens. */ interface IERC20Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC20InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC20InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers. * @param spender Address that may be allowed to operate on tokens without being their owner. * @param allowance Amount of tokens a `spender` is allowed to operate with. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC20InvalidApprover(address approver); /** * @dev Indicates a failure with the `spender` to be approved. Used in approvals. * @param spender Address that may be allowed to operate on tokens without being their owner. */ error ERC20InvalidSpender(address spender); } /** * @dev Standard ERC721 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens. */ interface IERC721Errors { /** * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20. * Used in balance queries. * @param owner Address of the current owner of a token. */ error ERC721InvalidOwner(address owner); /** * @dev Indicates a `tokenId` whose `owner` is the zero address. * @param tokenId Identifier number of a token. */ error ERC721NonexistentToken(uint256 tokenId); /** * @dev Indicates an error related to the ownership over a particular token. Used in transfers. * @param sender Address whose tokens are being transferred. * @param tokenId Identifier number of a token. * @param owner Address of the current owner of a token. */ error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC721InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC721InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param tokenId Identifier number of a token. */ error ERC721InsufficientApproval(address operator, uint256 tokenId); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC721InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC721InvalidOperator(address operator); } /** * @dev Standard ERC1155 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens. */ interface IERC1155Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. * @param tokenId Identifier number of a token. */ error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC1155InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC1155InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param owner Address of the current owner of a token. */ error ERC1155MissingApprovalForAll(address operator, address owner); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC1155InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC1155InvalidOperator(address operator); /** * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. * Used in batch transfers. * @param idsLength Length of the array of token identifiers * @param valuesLength Length of the array of token amounts */ error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength); } // lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) /** * @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); } // lib/openzeppelin-contracts/contracts/utils/Context.sol // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) /** * @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; } } // src/interfaces/IUniswap.sol interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); 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(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 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 (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); 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 (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } // lib/openzeppelin-contracts/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) /** * @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); } } // lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol) /** * @dev Interface for the optional metadata functions from the ERC20 standard. */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol) /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. */ abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors { mapping(address account => uint256) private _balances; mapping(address account => mapping(address spender => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the default value returned by this function, unless * it's overridden. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `value`. */ function transfer(address to, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _transfer(owner, to, value); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, value); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `value`. * - the caller must have allowance for ``from``'s tokens of at least * `value`. */ function transferFrom(address from, address to, uint256 value) public virtual returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, value); _transfer(from, to, value); return true; } /** * @dev Moves a `value` amount of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _transfer(address from, address to, uint256 value) internal { if (from == address(0)) { revert ERC20InvalidSender(address(0)); } if (to == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(from, to, value); } /** * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from` * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding * this function. * * Emits a {Transfer} event. */ function _update(address from, address to, uint256 value) internal virtual { if (from == address(0)) { // Overflow check required: The rest of the code assumes that totalSupply never overflows _totalSupply += value; } else { uint256 fromBalance = _balances[from]; if (fromBalance < value) { revert ERC20InsufficientBalance(from, fromBalance, value); } unchecked { // Overflow not possible: value <= fromBalance <= totalSupply. _balances[from] = fromBalance - value; } } if (to == address(0)) { unchecked { // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply. _totalSupply -= value; } } else { unchecked { // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256. _balances[to] += value; } } emit Transfer(from, to, value); } /** * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0). * Relies on the `_update` mechanism * * Emits a {Transfer} event with `from` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _mint(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(address(0), account, value); } /** * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply. * Relies on the `_update` mechanism. * * Emits a {Transfer} event with `to` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead */ function _burn(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidSender(address(0)); } _update(account, address(0), value); } /** * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. * * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument. */ function _approve(address owner, address spender, uint256 value) internal { _approve(owner, spender, value, true); } /** * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event. * * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any * `Approval` event during `transferFrom` operations. * * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to * true using the following override: * ``` * function _approve(address owner, address spender, uint256 value, bool) internal virtual override { * super._approve(owner, spender, value, true); * } * ``` * * Requirements are the same as {_approve}. */ function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual { if (owner == address(0)) { revert ERC20InvalidApprover(address(0)); } if (spender == address(0)) { revert ERC20InvalidSpender(address(0)); } _allowances[owner][spender] = value; if (emitEvent) { emit Approval(owner, spender, value); } } /** * @dev Updates `owner` s allowance for `spender` based on spent `value`. * * Does not update the allowance value in case of infinite allowance. * Revert if not enough allowance is available. * * Does not emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 value) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { if (currentAllowance < value) { revert ERC20InsufficientAllowance(spender, currentAllowance, value); } unchecked { _approve(owner, spender, currentAllowance - value, false); } } } } // src/OnSecuredToken.sol error SOB__InvalidWalletAddress(address invalidWallet); error SOB__InvalidPairAddress(address invalidPair); error SOB__InvalidRouterAddress(address invalidRouter); error SOB__CannotTransfer(uint8 code); error SOB__InvalidFeeAmount(uint256 fee, uint256 maxFee); error SOB__InvalidSplit(uint8 errorTotal); error SOB__InvalidMaxTxAmount(); error SOB__MaxTx(); // code == 0: Cannot transfer 0 ETH // code == 1: Cannot transfer receiver address failed contract SecuredOnBlockChainToken is ERC20, Ownable { uint256 public constant FEE_BASIS = 100; address private constant DEAD = 0x000000000000000000000000000000000000dEaD; mapping(address => bool) public isExcludedFromFee; mapping(address => bool) public isExcludedFromLimit; mapping(address => bool) public isPair; uint256 public feeOnBuy = 0; uint256 public feeOnSell = 0; uint256 public swapThreshold; uint256 public maxTxAmount; IUniswapV2Router02 public router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address public immutable WETH; address public marketingWallet; address public devWallet; address public uniswapV2Pair; uint8 public marketingPercent = 8; uint8 public devPercent = 2; uint8 public totalPercent = 10; bool private swapping; //------------------------------------------------------------------------ //---------------------- Events --------------------- event MarketingWalletUpdate( address indexed previousMarketingWallet, address indexed newMarketingWallet ); event DevWalletUpdate( address indexed previousDevWallet, address indexed newDevWallet ); event PairUpdate(address indexed previousPair, address indexed newPair); event RouterUpdate( address indexed previousRouter, address indexed newRouter ); event InvalidTransfer(address indexed to, uint256 ETHvalue); event UpdateExcludedStatus(address indexed wallet, bool status); event UpdateLimitStatus(address indexed wallet, bool status); event UpdateBuyFee(uint256 prevFee, uint256 fee); event UpdateSellFee(uint256 prevFee, uint256 fee); event UpdateThreshold(uint256 prevThreshold, uint256 threshold); event UpdateFeeSplit(uint8 mktShares, uint8 devShares, uint8 totalShares); event MaxTxUpdate(uint256 prevMaxTx, uint256 newMaxTx); //------------------------------------------------------------------------ //-------------------- Modifiers -------------------- constructor( address _ownerWallet, address _mktWallet, address _devWallet ) ERC20("Secured On Blockchain", "SOB") Ownable(_ownerWallet) { // Total Supply 1M gwei. 9 decimals super._update(address(0), _ownerWallet, 1_000_000 gwei); maxTxAmount = totalSupply() / 100; // 1% of total supply marketingWallet = _mktWallet; devWallet = _devWallet; IUniswapV2Factory factory = IUniswapV2Factory(router.factory()); WETH = router.WETH(); uniswapV2Pair = factory.createPair(address(this), WETH); isPair[uniswapV2Pair] = true; swapThreshold = totalSupply() / 5_000; // Exclude From Fees isExcludedFromFee[_ownerWallet] = true; isExcludedFromFee[address(this)] = true; // Exclude From Limits isExcludedFromLimit[_ownerWallet] = true; isExcludedFromLimit[address(this)] = true; isExcludedFromLimit[DEAD] = true; isExcludedFromLimit[uniswapV2Pair] = true; _approve(address(this), address(router), type(uint256).max); } //------------------------------------------------------------------------ //-------------------- External/Public functions ------------------------- //------------------------------------------------------------------------ receive() external payable {} fallback() external payable {} //-------------------- onlyOwner functions -------------------- /** * @notice Update the Marketing Wallet * @param _newMarketingWallet The new Marketing Wallet address * @dev Only the owner can update the Marketing Wallet and the new wallet should not be the zero address or the contract address or the current marketing address */ function updateMarketingWallet( address _newMarketingWallet ) external onlyOwner { if ( _newMarketingWallet == address(0) || _newMarketingWallet == address(this) || _newMarketingWallet == marketingWallet ) revert SOB__InvalidWalletAddress(_newMarketingWallet); emit MarketingWalletUpdate(marketingWallet, _newMarketingWallet); marketingWallet = _newMarketingWallet; } /** * @notice Update the Dev Wallet * @param _devWallet The new Dev Wallet address * @dev Only the owner can update the Dev Wallet and the new wallet should not be the zero address or the contract address or the current marketing address */ function updateDevWallet(address _devWallet) external onlyOwner { if ( _devWallet == address(0) || _devWallet == address(this) || _devWallet == devWallet ) revert SOB__InvalidWalletAddress(_devWallet); emit DevWalletUpdate(devWallet, _devWallet); devWallet = _devWallet; } /** * @notice Update the Main Pair to swap for ETH * @param _uniswapV2Pair The new UniswapV2Pair address * @dev Only the owner can update the Pair and the new wallet should not be the zero address or the contract address or the current address * or the current pair address or be an invalid V2pair */ function updateV2Pair(address _uniswapV2Pair) external onlyOwner { address token0 = IUniswapV2Pair(_uniswapV2Pair).token0(); address token1 = IUniswapV2Pair(_uniswapV2Pair).token1(); if (token0 != address(this) && token1 != address(this)) { revert SOB__InvalidWalletAddress(_uniswapV2Pair); } emit PairUpdate(uniswapV2Pair, _uniswapV2Pair); uniswapV2Pair = _uniswapV2Pair; } /** * @notice Update the UniswapV2Router * @param _uniswapV2Router The new UniswapV2Router address * @dev Only the owner can update the Router and the new wallet should not be the zero address or the contract address or the current address * or the current pair address or be an invalid v2 router */ function updateV2Router(address _uniswapV2Router) external onlyOwner { if ( _uniswapV2Router == address(0) || _uniswapV2Router == address(this) || _uniswapV2Router == address(router) || IUniswapV2Router02(_uniswapV2Router).WETH() != WETH ) revert SOB__InvalidRouterAddress(_uniswapV2Router); emit RouterUpdate(address(router), _uniswapV2Router); router = IUniswapV2Router02(_uniswapV2Router); } /** * @notice Add a new pair to the list of pairs * @param pair The address of the pair to add */ function addPair(address pair) external onlyOwner { if (pair == address(0) || pair == address(this)) revert SOB__InvalidPairAddress(pair); isPair[pair] = true; isExcludedFromLimit[pair] = true; } /** * @notice Update the exclusion status of a wallet from fees * @param wallet The address to update exclusion status from fees * @param status The new exclusion status */ function updateWalletExcludeStatus( address wallet, bool status ) external onlyOwner { isExcludedFromFee[wallet] = status; emit UpdateExcludedStatus(wallet, status); } /** * @notice Update the limit exclusion of a wallet * @param wallet The address to update exclusion status from limits * @param status The new limit exclusion status * @dev Wallet to update cannot be the pair or the router */ function updateWalletLimitStatus( address wallet, bool status ) external onlyOwner { if (wallet == uniswapV2Pair || wallet == address(router)) revert SOB__InvalidWalletAddress(wallet); isExcludedFromLimit[wallet] = status; emit UpdateLimitStatus(wallet, status); } /** * @notice Swap currently held fees for ETH and distribute to mkt and dev wallets */ function manualSwapFees() external onlyOwner { _swapFees(); } /** * @notice update the fee taken on BUY transactions * @param _fee The new fee to apply * @dev The fee cannot be more than 25% */ function updateBuyFee(uint256 _fee) external onlyOwner { if (_fee > 25) revert SOB__InvalidFeeAmount(_fee, 25); emit UpdateBuyFee(feeOnBuy, _fee); feeOnBuy = _fee; } /** * @notice update the fee taken on BUY transactions * @param _fee The new fee to apply * @dev The fee cannot be more than 25% */ function updateSellFee(uint256 _fee) external onlyOwner { if (_fee > 25) revert SOB__InvalidFeeAmount(_fee, 25); emit UpdateSellFee(feeOnSell, _fee); feeOnSell = _fee; } /** * @notice update the amount to collect before triggering a conversion to ETH * @param _threshold The new threshold to apply */ function updateSwapThreshold(uint256 _threshold) external onlyOwner { emit UpdateThreshold(swapThreshold, _threshold); swapThreshold = _threshold; } /** * Updates the Max Tokens a tx can make in a single TX * @param _maxTx The new maxTx to apply */ function updateMaxTx(uint256 _maxTx) external onlyOwner { if (_maxTx < totalSupply() / 100) revert SOB__InvalidMaxTxAmount(); emit MaxTxUpdate(maxTxAmount, _maxTx); maxTxAmount = _maxTx; } /** * @notice update the fee split between marketing and dev wallets * @param _mktShares The new marketing shares * @param _devShares The new dev shares * @dev totalPercent cannot be 0. Shares do not change the fees, only the split */ function updateFeeSplit( uint8 _mktShares, uint8 _devShares ) external onlyOwner { if (_mktShares + _devShares == 0) revert SOB__InvalidSplit(0); totalPercent = _mktShares + _devShares; marketingPercent = _mktShares; devPercent = _devShares; } /** * @notice remove any ETH from the contract to DEV wallet */ function extractETH() external { uint amount = address(this).balance; if (amount == 0) revert SOB__CannotTransfer(0); (bool success, ) = devWallet.call{value: address(this).balance}(""); if (!success) revert SOB__CannotTransfer(1); } /** * @notice remove any ERC20 token from the contract to DEV wallet * @param token The address of the ERC20 token to extract from this contract */ function extractERC20(address token) external { if (token == address(this) || token == address(0)) revert SOB__InvalidWalletAddress(token); ERC20 erc = ERC20(token); uint256 balance = erc.balanceOf(address(this)); if (balance == 0) revert SOB__CannotTransfer(0); erc.transfer(devWallet, balance); } //------------------------------------------------------------------------ //-------------------- Internal/Private functions ------------------------ //------------------------------------------------------------------------ /** * @notice Update the balances of the sender and receiver * @param from The sender address * @param to The receiver address * @param value The amount to transfer * @dev This function is called by the transfer and transferFrom functions * and it updates the balances of the sender and receiver and also takes care of the fees * if the threshold is reached it swaps for ETH and splits the fees */ function _update( address from, address to, uint256 value ) internal override { bool isBuy = isPair[from]; bool isSell = isPair[to]; // Check Max TX limits if (value > maxTxAmount) { if (isBuy && !isExcludedFromLimit[to]) revert SOB__MaxTx(); else if (isSell && !isExcludedFromLimit[from]) revert SOB__MaxTx(); else { if (!isExcludedFromLimit[from]) revert SOB__MaxTx(); } } bool canSwap = !swapping && !isSell && balanceOf(address(this)) >= swapThreshold; if (canSwap) { _swapFees(); } bool takeFee = !swapping && !(isExcludedFromFee[from] || isExcludedFromFee[to]); uint fee = 0; if (takeFee) { if (isBuy) { fee = (value * feeOnBuy) / FEE_BASIS; } else if (isSell) { fee = (value * feeOnSell) / FEE_BASIS; } super._update(from, address(this), fee); value -= fee; } super._update(from, to, value); } /** * @notice swap the fees collected in SOB for ETH and send to the marketing and dev wallets respectively */ function _swapFees() private { swapping = true; uint256 totalFees = balanceOf(address(this)); // Swapping address[] memory path = new address[](2); path[0] = address(this); path[1] = WETH; router.swapExactTokensForETHSupportingFeeOnTransferTokens( totalFees, 0, path, address(this), block.timestamp ); uint256 ethBalance = address(this).balance; if (totalPercent > 0) { uint256 marketingFee = (ethBalance * marketingPercent) / totalPercent; uint256 devFee = (ethBalance * devPercent) / totalPercent; (bool success, ) = marketingWallet.call{value: marketingFee}(""); if (!success) emit InvalidTransfer(marketingWallet, marketingFee); (success, ) = devWallet.call{value: devFee}(""); if (!success) emit InvalidTransfer(marketingWallet, marketingFee); } swapping = false; } //-------------------- External/Public VIEW functions -------------------- function decimals() public pure override returns (uint8) { return 9; } //-------------------- Internal/Private VIEW functions ------------------- }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_ownerWallet","type":"address"},{"internalType":"address","name":"_mktWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"uint8","name":"code","type":"uint8"}],"name":"SOB__CannotTransfer","type":"error"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"maxFee","type":"uint256"}],"name":"SOB__InvalidFeeAmount","type":"error"},{"inputs":[],"name":"SOB__InvalidMaxTxAmount","type":"error"},{"inputs":[{"internalType":"address","name":"invalidPair","type":"address"}],"name":"SOB__InvalidPairAddress","type":"error"},{"inputs":[{"internalType":"address","name":"invalidRouter","type":"address"}],"name":"SOB__InvalidRouterAddress","type":"error"},{"inputs":[{"internalType":"uint8","name":"errorTotal","type":"uint8"}],"name":"SOB__InvalidSplit","type":"error"},{"inputs":[{"internalType":"address","name":"invalidWallet","type":"address"}],"name":"SOB__InvalidWalletAddress","type":"error"},{"inputs":[],"name":"SOB__MaxTx","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":"previousDevWallet","type":"address"},{"indexed":true,"internalType":"address","name":"newDevWallet","type":"address"}],"name":"DevWalletUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"ETHvalue","type":"uint256"}],"name":"InvalidTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousMarketingWallet","type":"address"},{"indexed":true,"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"MarketingWalletUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevMaxTx","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMaxTx","type":"uint256"}],"name":"MaxTxUpdate","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":"previousPair","type":"address"},{"indexed":true,"internalType":"address","name":"newPair","type":"address"}],"name":"PairUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousRouter","type":"address"},{"indexed":true,"internalType":"address","name":"newRouter","type":"address"}],"name":"RouterUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"UpdateBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateExcludedStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"mktShares","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"devShares","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalShares","type":"uint8"}],"name":"UpdateFeeSplit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateLimitStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"UpdateSellFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevThreshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"UpdateThreshold","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"FEE_BASIS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"addPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devPercent","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"extractERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"extractETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingPercent","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","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":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPercent","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"updateBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_mktShares","type":"uint8"},{"internalType":"uint8","name":"_devShares","type":"uint8"}],"name":"updateFeeSplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"name":"updateMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"updateSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"updateSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_uniswapV2Pair","type":"address"}],"name":"updateV2Pair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_uniswapV2Router","type":"address"}],"name":"updateV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"updateWalletExcludeStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"updateWalletLimitStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040525f6009819055600a55600d80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055601080546201404160a31b62ffffff60a01b1990911617905534801562000058575f80fd5b50604051620027c3380380620027c38339810160408190526200007b9162000674565b826040518060400160405280601581526020017f53656375726564204f6e20426c6f636b636861696e00000000000000000000008152506040518060400160405280600381526020016229a7a160e91b8152508160039081620000df919062000758565b506004620000ee828262000758565b5050506001600160a01b0381166200012057604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6200012b81620003eb565b50620001405f8466038d7ea4c680006200043c565b60646200014c60025490565b62000158919062000824565b600c55600e80546001600160a01b038085166001600160a01b031992831617909255600f80548484169216919091179055600d546040805163c45a015560e01b815290515f93929092169163c45a0155916004808201926020929091908290030181865afa158015620001cd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001f3919062000844565b9050600d5f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000246573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200026c919062000844565b6001600160a01b0390811660808190526040516364e329cb60e11b815230600482015260248101919091529082169063c9c65396906044016020604051808303815f875af1158015620002c1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002e7919062000844565b601080546001600160a01b0319166001600160a01b039290921691821790555f908152600860205260409020805460ff191660011790556113886200032b60025490565b62000337919062000824565b600b556001600160a01b038481165f8181526006602090815260408083208054600160ff1991821681179092553080865283862080548316841790559585526007909352818420805484168217905584845281842080548416821790557fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d805484168217905560105486168452922080549091169091179055600d54620003e192165f196200056b565b505050506200088d565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0383166200046a578060025f8282546200045e919062000867565b90915550620004dc9050565b6001600160a01b0383165f9081526020819052604090205481811015620004be5760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640162000117565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216620004fa5760028054829003905562000518565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200055e91815260200190565b60405180910390a3505050565b6200057a83838360016200057f565b505050565b6001600160a01b038416620005aa5760405163e602df0560e01b81525f600482015260240162000117565b6001600160a01b038316620005d557604051634a1406b160e11b81525f600482015260240162000117565b6001600160a01b038085165f90815260016020908152604080832093871683529290522082905580156200065257826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516200064991815260200190565b60405180910390a35b50505050565b80516001600160a01b03811681146200066f575f80fd5b919050565b5f805f6060848603121562000687575f80fd5b620006928462000658565b9250620006a26020850162000658565b9150620006b26040850162000658565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620006e457607f821691505b6020821081036200070357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200057a57805f5260205f20601f840160051c81016020851015620007305750805b601f840160051c820191505b8181101562000751575f81556001016200073c565b5050505050565b81516001600160401b03811115620007745762000774620006bb565b6200078c81620007858454620006cf565b8462000709565b602080601f831160018114620007c2575f8415620007aa5750858301515b5f19600386901b1c1916600185901b1785556200081c565b5f85815260208120601f198616915b82811015620007f257888601518255948401946001909101908401620007d1565b50858210156200081057878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f826200083f57634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121562000855575f80fd5b620008608262000658565b9392505050565b808201808211156200088757634e487b7160e01b5f52601160045260245ffd5b92915050565b608051611f0f620008b45f395f81816105b301528181610a2401526114cb0152611f0f5ff3fe608060405260043610610247575f3560e01c80638da5cb5b11610137578063c5c0da1a116100af578063dd62ed3e11610076578063dd62ed3e146106f2578063e5e31b1314610736578063f2fde38b14610764578063f887ea4014610783578063fabb71d2146107a2578063fc3c28af146107b657005b8063c5c0da1a14610647578063cc274b2914610666578063cd9f62d414610685578063d8020a18146106a4578063d94160e0146106c457005b8063aacebbe3116100fe578063aacebbe314610583578063ad5c4648146105a2578063b9f72443146105d5578063bb8c3ee0146105f4578063c2b7bbb614610609578063c2d0ffca1461062857005b80638da5cb5b146104f55780638ea5220f146105125780639359a92b1461053157806395d89b4114610550578063a9059cbb1461056457005b8063467abe0a116101ca578063715018a611610191578063715018a61461045a57806375f0a8741461046e57806378ff4fdc1461048d5780637a7c83a6146104ac5780638686ebcc146104cc5780638c0b5e22146104e057005b8063467abe0a1461038d57806349bd5a5e146103ac5780635342acb4146103e357806365048d081461041157806370a082311461042657005b80631d933a4a1161020e5780631d933a4a146102fb57806323b872dd1461031a578063313ce567146103395780633bb25ad41461035a57806343ed59af1461037957005b80630445b6671461025057806306fdde0314610278578063095ea7b31461029957806318160ddd146102c85780631816467f146102dc57005b3661024e57005b005b34801561025b575f80fd5b50610265600b5481565b6040519081526020015b60405180910390f35b348015610283575f80fd5b5061028c6107d6565b60405161026f9190611b8f565b3480156102a4575f80fd5b506102b86102b3366004611bef565b610866565b604051901515815260200161026f565b3480156102d3575f80fd5b50600254610265565b3480156102e7575f80fd5b5061024e6102f6366004611c19565b61087f565b348015610306575f80fd5b5061024e610315366004611c3b565b610946565b348015610325575f80fd5b506102b8610334366004611c52565b6109bb565b348015610344575f80fd5b5060095b60405160ff909116815260200161026f565b348015610365575f80fd5b5061024e610374366004611c19565b6109de565b348015610384575f80fd5b5061024e610b3c565b348015610398575f80fd5b5061024e6103a7366004611c3b565b610b4e565b3480156103b7575f80fd5b506010546103cb906001600160a01b031681565b6040516001600160a01b03909116815260200161026f565b3480156103ee575f80fd5b506102b86103fd366004611c19565b60066020525f908152604090205460ff1681565b34801561041c575f80fd5b50610265600a5481565b348015610431575f80fd5b50610265610440366004611c19565b6001600160a01b03165f9081526020819052604090205490565b348015610465575f80fd5b5061024e610bc3565b348015610479575f80fd5b50600e546103cb906001600160a01b031681565b348015610498575f80fd5b5061024e6104a7366004611ca5565b610bd4565b3480156104b7575f80fd5b5060105461034890600160b01b900460ff1681565b3480156104d7575f80fd5b50610265606481565b3480156104eb575f80fd5b50610265600c5481565b348015610500575f80fd5b506005546001600160a01b03166103cb565b34801561051d575f80fd5b50600f546103cb906001600160a01b031681565b34801561053c575f80fd5b5061024e61054b366004611ce3565b610c5d565b34801561055b575f80fd5b5061028c610cc4565b34801561056f575f80fd5b506102b861057e366004611bef565b610cd3565b34801561058e575f80fd5b5061024e61059d366004611c19565b610ce0565b3480156105ad575f80fd5b506103cb7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105e0575f80fd5b5061024e6105ef366004611ce3565b610da2565b3480156105ff575f80fd5b5061026560095481565b348015610614575f80fd5b5061024e610623366004611c19565b610e53565b348015610633575f80fd5b5061024e610642366004611c3b565b610edd565b348015610652575f80fd5b5061024e610661366004611c19565b610f5b565b348015610671575f80fd5b5061024e610680366004611c3b565b6110aa565b348015610690575f80fd5b5061024e61069f366004611c19565b6110f3565b3480156106af575f80fd5b5060105461034890600160a01b900460ff1681565b3480156106cf575f80fd5b506102b86106de366004611c19565b60076020525f908152604090205460ff1681565b3480156106fd575f80fd5b5061026561070c366004611d1a565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610741575f80fd5b506102b8610750366004611c19565b60086020525f908152604090205460ff1681565b34801561076f575f80fd5b5061024e61077e366004611c19565b611269565b34801561078e575f80fd5b50600d546103cb906001600160a01b031681565b3480156107ad575f80fd5b5061024e6112a6565b3480156107c1575f80fd5b5060105461034890600160a81b900460ff1681565b6060600380546107e590611d46565b80601f016020809104026020016040519081016040528092919081815260200182805461081190611d46565b801561085c5780601f106108335761010080835404028352916020019161085c565b820191905f5260205f20905b81548152906001019060200180831161083f57829003601f168201915b5050505050905090565b5f33610873818585611342565b60019150505b92915050565b610887611354565b6001600160a01b03811615806108a557506001600160a01b03811630145b806108bd5750600f546001600160a01b038281169116145b156108eb57604051635f9535e560e11b81526001600160a01b03821660048201526024015b60405180910390fd5b600f546040516001600160a01b038084169216907f18fc3ba4f62cf4833f55b864292e6863d464b3d906a761e44ad014bc14a055c6905f90a3600f80546001600160a01b0319166001600160a01b0392909216919091179055565b61094e611354565b601981111561097a5760405163506f007160e01b815260048101829052601960248201526044016108e2565b600a5460408051918252602082018390527fde4022aab72c416fa5c54f5b02a3d8ce50d8a9418a85c790d51cf759ebb4697d910160405180910390a1600a55565b5f336109c8858285611381565b6109d38585856113f6565b506001949350505050565b6109e6611354565b6001600160a01b0381161580610a0457506001600160a01b03811630145b80610a1c5750600d546001600160a01b038281169116145b80610ab857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a88573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aac9190611d7e565b6001600160a01b031614155b15610ae15760405163e2959edb60e01b81526001600160a01b03821660048201526024016108e2565b600d546040516001600160a01b038084169216907f363beda10ebf02584eda9ab4ca38e353bc57591b50714ba84692ed584280672d905f90a3600d80546001600160a01b0319166001600160a01b0392909216919091179055565b610b44611354565b610b4c611453565b565b610b56611354565b6019811115610b825760405163506f007160e01b815260048101829052601960248201526044016108e2565b60095460408051918252602082018390527fc66f11a4e1af275a2ecb111e96ff29a572358bd3abd0d8851f439ca0f4aa40ac910160405180910390a1600955565b610bcb611354565b610b4c5f611736565b610bdc611354565b610be68183611dad565b60ff165f03610c0a5760405163cc90e88360e01b81525f60048201526024016108e2565b610c148183611dad565b6010805462ff00ff60a01b1916600160b01b60ff9384160260ff60a01b191617600160a01b948316949094029390931760ff60a81b1916600160a81b9290911691909102179055565b610c65611354565b6001600160a01b0382165f81815260066020908152604091829020805460ff191685151590811790915591519182527f2c3bf8535205cd5836e82c4509edb0b2d59ca58bfecd1cc0a511828828881dba91015b60405180910390a25050565b6060600480546107e590611d46565b5f336108738185856113f6565b610ce8611354565b6001600160a01b0381161580610d0657506001600160a01b03811630145b80610d1e5750600e546001600160a01b038281169116145b15610d4757604051635f9535e560e11b81526001600160a01b03821660048201526024016108e2565b600e546040516001600160a01b038084169216907f7dba0a5693978c89a298b760efee1931a0b2815b9deb02129ad881e64767cff5905f90a3600e80546001600160a01b0319166001600160a01b0392909216919091179055565b610daa611354565b6010546001600160a01b0383811691161480610dd35750600d546001600160a01b038381169116145b15610dfc57604051635f9535e560e11b81526001600160a01b03831660048201526024016108e2565b6001600160a01b0382165f81815260076020908152604091829020805460ff191685151590811790915591519182527f68eb8038e65b90dcf733cc7d3ea22c9b5623b245737f1dba379e61416b094b759101610cb8565b610e5b611354565b6001600160a01b0381161580610e7957506001600160a01b03811630145b15610ea257604051631c75e49760e01b81526001600160a01b03821660048201526024016108e2565b6001600160a01b03165f9081526008602090815260408083208054600160ff1991821681179092556007909352922080549091169091179055565b610ee5611354565b6064610ef060025490565b610efa9190611dc6565b811015610f1a576040516361f717e160e11b815260040160405180910390fd5b600c5460408051918252602082018390527f7a67d9ff36dd9cfc97e4bec7285f664fae66a1fe883052d5b46346773a0057b9910160405180910390a1600c55565b6001600160a01b038116301480610f7957506001600160a01b038116155b15610fa257604051635f9535e560e11b81526001600160a01b03821660048201526024016108e2565b6040516370a0823160e01b815230600482015281905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610fe8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061100c9190611de5565b9050805f036110305760405163d88b230d60e01b81525f60048201526024016108e2565b600f5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303815f875af1158015611080573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110a49190611dfc565b50505050565b6110b2611354565b600b5460408051918252602082018390527fe2f0d2b9bd62fe4d997e442d96308c2084de77174fc94e18e14bf473b030f4dd910160405180910390a1600b55565b6110fb611354565b5f816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611138573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061115c9190611d7e565b90505f826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561119b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111bf9190611d7e565b90506001600160a01b03821630148015906111e357506001600160a01b0381163014155b1561120c57604051635f9535e560e11b81526001600160a01b03841660048201526024016108e2565b6010546040516001600160a01b038086169216907f64f805d25d00b4b9f3a22a1ccccdbcc3b12948681a091c3643be5488fbe85a81905f90a35050601080546001600160a01b0319166001600160a01b0392909216919091179055565b611271611354565b6001600160a01b03811661129a57604051631e4fbdf760e01b81525f60048201526024016108e2565b6112a381611736565b50565b475f8190036112ca5760405163d88b230d60e01b81525f60048201526024016108e2565b600f546040515f916001600160a01b03169047908381818185875af1925050503d805f8114611314576040519150601f19603f3d011682016040523d82523d5f602084013e611319565b606091505b505090508061133e5760405163d88b230d60e01b8152600160048201526024016108e2565b5050565b61134f8383836001611787565b505050565b6005546001600160a01b03163314610b4c5760405163118cdaa760e01b81523360048201526024016108e2565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f1981146110a457818110156113e857604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016108e2565b6110a484848484035f611787565b6001600160a01b03831661141f57604051634b637e8f60e11b81525f60048201526024016108e2565b6001600160a01b0382166114485760405163ec442f0560e01b81525f60048201526024016108e2565b61134f838383611859565b6010805460ff60b81b1916600160b81b179055305f9081526020818152604080832054815160028082526060820184529194939092908301908036833701905050905030815f815181106114a9576114a9611e17565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000816001815181106114fd576114fd611e17565b6001600160a01b039283166020918202929092010152600d5460405163791ac94760e01b815291169063791ac947906115429085905f90869030904290600401611e2b565b5f604051808303815f87803b158015611559575f80fd5b505af115801561156b573d5f803e3d5ffd5b5050601054479250600160b01b900460ff16159050611724576010545f9060ff600160b01b82048116916115a891600160a01b9091041684611e9c565b6115b29190611dc6565b6010549091505f9060ff600160b01b82048116916115d991600160a81b9091041685611e9c565b6115e39190611dc6565b600e546040519192505f916001600160a01b039091169084908381818185875af1925050503d805f8114611632576040519150601f19603f3d011682016040523d82523d5f602084013e611637565b606091505b505090508061168357600e546040518481526001600160a01b03909116907f3aa9c48059ec71098c4c50a2ff39cb5bb4f4be1fc8192f76dbcfe829242a76649060200160405180910390a25b600f546040516001600160a01b039091169083905f81818185875af1925050503d805f81146116cd576040519150601f19603f3d011682016040523d82523d5f602084013e6116d2565b606091505b5050809150508061172057600e546040518481526001600160a01b03909116907f3aa9c48059ec71098c4c50a2ff39cb5bb4f4be1fc8192f76dbcfe829242a76649060200160405180910390a25b5050505b50506010805460ff60b81b1916905550565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0384166117b05760405163e602df0560e01b81525f60048201526024016108e2565b6001600160a01b0383166117d957604051634a1406b160e11b81525f60048201526024016108e2565b6001600160a01b038085165f90815260016020908152604080832093871683529290522082905580156110a457826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161184b91815260200190565b60405180910390a350505050565b6001600160a01b038381165f90815260086020526040808220549285168252902054600c5460ff928316929091169083111561194d578180156118b457506001600160a01b0384165f9081526007602052604090205460ff16155b156118d2576040516367a6ec0360e01b815260040160405180910390fd5b8080156118f757506001600160a01b0385165f9081526007602052604090205460ff16155b15611915576040516367a6ec0360e01b815260040160405180910390fd5b6001600160a01b0385165f9081526007602052604090205460ff1661194d576040516367a6ec0360e01b815260040160405180910390fd5b6010545f90600160b81b900460ff16158015611967575081155b80156119835750600b54305f9081526020819052604090205410155b9050801561199357611993611453565b6010545f90600160b81b900460ff161580156119e957506001600160a01b0387165f9081526006602052604090205460ff16806119e757506001600160a01b0386165f9081526006602052604090205460ff165b155b90505f8115611a54578415611a1957606460095487611a089190611e9c565b611a129190611dc6565b9050611a3c565b8315611a3c576064600a5487611a2f9190611e9c565b611a399190611dc6565b90505b611a47883083611a69565b611a518187611eb3565b95505b611a5f888888611a69565b5050505050505050565b6001600160a01b038316611a93578060025f828254611a889190611ec6565b90915550611b039050565b6001600160a01b0383165f9081526020819052604090205481811015611ae55760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016108e2565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216611b1f57600280548290039055611b3d565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b8291815260200190565b60405180910390a3505050565b5f602080835283518060208501525f5b81811015611bbb57858101830151858201604001528201611b9f565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146112a3575f80fd5b5f8060408385031215611c00575f80fd5b8235611c0b81611bdb565b946020939093013593505050565b5f60208284031215611c29575f80fd5b8135611c3481611bdb565b9392505050565b5f60208284031215611c4b575f80fd5b5035919050565b5f805f60608486031215611c64575f80fd5b8335611c6f81611bdb565b92506020840135611c7f81611bdb565b929592945050506040919091013590565b803560ff81168114611ca0575f80fd5b919050565b5f8060408385031215611cb6575f80fd5b611cbf83611c90565b9150611ccd60208401611c90565b90509250929050565b80151581146112a3575f80fd5b5f8060408385031215611cf4575f80fd5b8235611cff81611bdb565b91506020830135611d0f81611cd6565b809150509250929050565b5f8060408385031215611d2b575f80fd5b8235611d3681611bdb565b91506020830135611d0f81611bdb565b600181811c90821680611d5a57607f821691505b602082108103611d7857634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215611d8e575f80fd5b8151611c3481611bdb565b634e487b7160e01b5f52601160045260245ffd5b60ff818116838216019081111561087957610879611d99565b5f82611de057634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215611df5575f80fd5b5051919050565b5f60208284031215611e0c575f80fd5b8151611c3481611cd6565b634e487b7160e01b5f52603260045260245ffd5b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015611e7b5784516001600160a01b031683529383019391830191600101611e56565b50506001600160a01b03969096166060850152505050608001529392505050565b808202811582820484141761087957610879611d99565b8181038181111561087957610879611d99565b8082018082111561087957610879611d9956fea2646970667358221220fc515073a64dbdb2bfc1746f50048cf1bbc3e7ac64c5bffd383290c3e818f13d64736f6c634300081800330000000000000000000000002fb70dd1b7677c29103bcd280cf061b81357b877000000000000000000000000430732094a39c4bda694121e4513041fab878cab0000000000000000000000002fb70dd1b7677c29103bcd280cf061b81357b877
Deployed Bytecode
0x608060405260043610610247575f3560e01c80638da5cb5b11610137578063c5c0da1a116100af578063dd62ed3e11610076578063dd62ed3e146106f2578063e5e31b1314610736578063f2fde38b14610764578063f887ea4014610783578063fabb71d2146107a2578063fc3c28af146107b657005b8063c5c0da1a14610647578063cc274b2914610666578063cd9f62d414610685578063d8020a18146106a4578063d94160e0146106c457005b8063aacebbe3116100fe578063aacebbe314610583578063ad5c4648146105a2578063b9f72443146105d5578063bb8c3ee0146105f4578063c2b7bbb614610609578063c2d0ffca1461062857005b80638da5cb5b146104f55780638ea5220f146105125780639359a92b1461053157806395d89b4114610550578063a9059cbb1461056457005b8063467abe0a116101ca578063715018a611610191578063715018a61461045a57806375f0a8741461046e57806378ff4fdc1461048d5780637a7c83a6146104ac5780638686ebcc146104cc5780638c0b5e22146104e057005b8063467abe0a1461038d57806349bd5a5e146103ac5780635342acb4146103e357806365048d081461041157806370a082311461042657005b80631d933a4a1161020e5780631d933a4a146102fb57806323b872dd1461031a578063313ce567146103395780633bb25ad41461035a57806343ed59af1461037957005b80630445b6671461025057806306fdde0314610278578063095ea7b31461029957806318160ddd146102c85780631816467f146102dc57005b3661024e57005b005b34801561025b575f80fd5b50610265600b5481565b6040519081526020015b60405180910390f35b348015610283575f80fd5b5061028c6107d6565b60405161026f9190611b8f565b3480156102a4575f80fd5b506102b86102b3366004611bef565b610866565b604051901515815260200161026f565b3480156102d3575f80fd5b50600254610265565b3480156102e7575f80fd5b5061024e6102f6366004611c19565b61087f565b348015610306575f80fd5b5061024e610315366004611c3b565b610946565b348015610325575f80fd5b506102b8610334366004611c52565b6109bb565b348015610344575f80fd5b5060095b60405160ff909116815260200161026f565b348015610365575f80fd5b5061024e610374366004611c19565b6109de565b348015610384575f80fd5b5061024e610b3c565b348015610398575f80fd5b5061024e6103a7366004611c3b565b610b4e565b3480156103b7575f80fd5b506010546103cb906001600160a01b031681565b6040516001600160a01b03909116815260200161026f565b3480156103ee575f80fd5b506102b86103fd366004611c19565b60066020525f908152604090205460ff1681565b34801561041c575f80fd5b50610265600a5481565b348015610431575f80fd5b50610265610440366004611c19565b6001600160a01b03165f9081526020819052604090205490565b348015610465575f80fd5b5061024e610bc3565b348015610479575f80fd5b50600e546103cb906001600160a01b031681565b348015610498575f80fd5b5061024e6104a7366004611ca5565b610bd4565b3480156104b7575f80fd5b5060105461034890600160b01b900460ff1681565b3480156104d7575f80fd5b50610265606481565b3480156104eb575f80fd5b50610265600c5481565b348015610500575f80fd5b506005546001600160a01b03166103cb565b34801561051d575f80fd5b50600f546103cb906001600160a01b031681565b34801561053c575f80fd5b5061024e61054b366004611ce3565b610c5d565b34801561055b575f80fd5b5061028c610cc4565b34801561056f575f80fd5b506102b861057e366004611bef565b610cd3565b34801561058e575f80fd5b5061024e61059d366004611c19565b610ce0565b3480156105ad575f80fd5b506103cb7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b3480156105e0575f80fd5b5061024e6105ef366004611ce3565b610da2565b3480156105ff575f80fd5b5061026560095481565b348015610614575f80fd5b5061024e610623366004611c19565b610e53565b348015610633575f80fd5b5061024e610642366004611c3b565b610edd565b348015610652575f80fd5b5061024e610661366004611c19565b610f5b565b348015610671575f80fd5b5061024e610680366004611c3b565b6110aa565b348015610690575f80fd5b5061024e61069f366004611c19565b6110f3565b3480156106af575f80fd5b5060105461034890600160a01b900460ff1681565b3480156106cf575f80fd5b506102b86106de366004611c19565b60076020525f908152604090205460ff1681565b3480156106fd575f80fd5b5061026561070c366004611d1a565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610741575f80fd5b506102b8610750366004611c19565b60086020525f908152604090205460ff1681565b34801561076f575f80fd5b5061024e61077e366004611c19565b611269565b34801561078e575f80fd5b50600d546103cb906001600160a01b031681565b3480156107ad575f80fd5b5061024e6112a6565b3480156107c1575f80fd5b5060105461034890600160a81b900460ff1681565b6060600380546107e590611d46565b80601f016020809104026020016040519081016040528092919081815260200182805461081190611d46565b801561085c5780601f106108335761010080835404028352916020019161085c565b820191905f5260205f20905b81548152906001019060200180831161083f57829003601f168201915b5050505050905090565b5f33610873818585611342565b60019150505b92915050565b610887611354565b6001600160a01b03811615806108a557506001600160a01b03811630145b806108bd5750600f546001600160a01b038281169116145b156108eb57604051635f9535e560e11b81526001600160a01b03821660048201526024015b60405180910390fd5b600f546040516001600160a01b038084169216907f18fc3ba4f62cf4833f55b864292e6863d464b3d906a761e44ad014bc14a055c6905f90a3600f80546001600160a01b0319166001600160a01b0392909216919091179055565b61094e611354565b601981111561097a5760405163506f007160e01b815260048101829052601960248201526044016108e2565b600a5460408051918252602082018390527fde4022aab72c416fa5c54f5b02a3d8ce50d8a9418a85c790d51cf759ebb4697d910160405180910390a1600a55565b5f336109c8858285611381565b6109d38585856113f6565b506001949350505050565b6109e6611354565b6001600160a01b0381161580610a0457506001600160a01b03811630145b80610a1c5750600d546001600160a01b038281169116145b80610ab857507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316816001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a88573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aac9190611d7e565b6001600160a01b031614155b15610ae15760405163e2959edb60e01b81526001600160a01b03821660048201526024016108e2565b600d546040516001600160a01b038084169216907f363beda10ebf02584eda9ab4ca38e353bc57591b50714ba84692ed584280672d905f90a3600d80546001600160a01b0319166001600160a01b0392909216919091179055565b610b44611354565b610b4c611453565b565b610b56611354565b6019811115610b825760405163506f007160e01b815260048101829052601960248201526044016108e2565b60095460408051918252602082018390527fc66f11a4e1af275a2ecb111e96ff29a572358bd3abd0d8851f439ca0f4aa40ac910160405180910390a1600955565b610bcb611354565b610b4c5f611736565b610bdc611354565b610be68183611dad565b60ff165f03610c0a5760405163cc90e88360e01b81525f60048201526024016108e2565b610c148183611dad565b6010805462ff00ff60a01b1916600160b01b60ff9384160260ff60a01b191617600160a01b948316949094029390931760ff60a81b1916600160a81b9290911691909102179055565b610c65611354565b6001600160a01b0382165f81815260066020908152604091829020805460ff191685151590811790915591519182527f2c3bf8535205cd5836e82c4509edb0b2d59ca58bfecd1cc0a511828828881dba91015b60405180910390a25050565b6060600480546107e590611d46565b5f336108738185856113f6565b610ce8611354565b6001600160a01b0381161580610d0657506001600160a01b03811630145b80610d1e5750600e546001600160a01b038281169116145b15610d4757604051635f9535e560e11b81526001600160a01b03821660048201526024016108e2565b600e546040516001600160a01b038084169216907f7dba0a5693978c89a298b760efee1931a0b2815b9deb02129ad881e64767cff5905f90a3600e80546001600160a01b0319166001600160a01b0392909216919091179055565b610daa611354565b6010546001600160a01b0383811691161480610dd35750600d546001600160a01b038381169116145b15610dfc57604051635f9535e560e11b81526001600160a01b03831660048201526024016108e2565b6001600160a01b0382165f81815260076020908152604091829020805460ff191685151590811790915591519182527f68eb8038e65b90dcf733cc7d3ea22c9b5623b245737f1dba379e61416b094b759101610cb8565b610e5b611354565b6001600160a01b0381161580610e7957506001600160a01b03811630145b15610ea257604051631c75e49760e01b81526001600160a01b03821660048201526024016108e2565b6001600160a01b03165f9081526008602090815260408083208054600160ff1991821681179092556007909352922080549091169091179055565b610ee5611354565b6064610ef060025490565b610efa9190611dc6565b811015610f1a576040516361f717e160e11b815260040160405180910390fd5b600c5460408051918252602082018390527f7a67d9ff36dd9cfc97e4bec7285f664fae66a1fe883052d5b46346773a0057b9910160405180910390a1600c55565b6001600160a01b038116301480610f7957506001600160a01b038116155b15610fa257604051635f9535e560e11b81526001600160a01b03821660048201526024016108e2565b6040516370a0823160e01b815230600482015281905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610fe8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061100c9190611de5565b9050805f036110305760405163d88b230d60e01b81525f60048201526024016108e2565b600f5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303815f875af1158015611080573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110a49190611dfc565b50505050565b6110b2611354565b600b5460408051918252602082018390527fe2f0d2b9bd62fe4d997e442d96308c2084de77174fc94e18e14bf473b030f4dd910160405180910390a1600b55565b6110fb611354565b5f816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611138573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061115c9190611d7e565b90505f826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561119b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111bf9190611d7e565b90506001600160a01b03821630148015906111e357506001600160a01b0381163014155b1561120c57604051635f9535e560e11b81526001600160a01b03841660048201526024016108e2565b6010546040516001600160a01b038086169216907f64f805d25d00b4b9f3a22a1ccccdbcc3b12948681a091c3643be5488fbe85a81905f90a35050601080546001600160a01b0319166001600160a01b0392909216919091179055565b611271611354565b6001600160a01b03811661129a57604051631e4fbdf760e01b81525f60048201526024016108e2565b6112a381611736565b50565b475f8190036112ca5760405163d88b230d60e01b81525f60048201526024016108e2565b600f546040515f916001600160a01b03169047908381818185875af1925050503d805f8114611314576040519150601f19603f3d011682016040523d82523d5f602084013e611319565b606091505b505090508061133e5760405163d88b230d60e01b8152600160048201526024016108e2565b5050565b61134f8383836001611787565b505050565b6005546001600160a01b03163314610b4c5760405163118cdaa760e01b81523360048201526024016108e2565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f1981146110a457818110156113e857604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016108e2565b6110a484848484035f611787565b6001600160a01b03831661141f57604051634b637e8f60e11b81525f60048201526024016108e2565b6001600160a01b0382166114485760405163ec442f0560e01b81525f60048201526024016108e2565b61134f838383611859565b6010805460ff60b81b1916600160b81b179055305f9081526020818152604080832054815160028082526060820184529194939092908301908036833701905050905030815f815181106114a9576114a9611e17565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2816001815181106114fd576114fd611e17565b6001600160a01b039283166020918202929092010152600d5460405163791ac94760e01b815291169063791ac947906115429085905f90869030904290600401611e2b565b5f604051808303815f87803b158015611559575f80fd5b505af115801561156b573d5f803e3d5ffd5b5050601054479250600160b01b900460ff16159050611724576010545f9060ff600160b01b82048116916115a891600160a01b9091041684611e9c565b6115b29190611dc6565b6010549091505f9060ff600160b01b82048116916115d991600160a81b9091041685611e9c565b6115e39190611dc6565b600e546040519192505f916001600160a01b039091169084908381818185875af1925050503d805f8114611632576040519150601f19603f3d011682016040523d82523d5f602084013e611637565b606091505b505090508061168357600e546040518481526001600160a01b03909116907f3aa9c48059ec71098c4c50a2ff39cb5bb4f4be1fc8192f76dbcfe829242a76649060200160405180910390a25b600f546040516001600160a01b039091169083905f81818185875af1925050503d805f81146116cd576040519150601f19603f3d011682016040523d82523d5f602084013e6116d2565b606091505b5050809150508061172057600e546040518481526001600160a01b03909116907f3aa9c48059ec71098c4c50a2ff39cb5bb4f4be1fc8192f76dbcfe829242a76649060200160405180910390a25b5050505b50506010805460ff60b81b1916905550565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0384166117b05760405163e602df0560e01b81525f60048201526024016108e2565b6001600160a01b0383166117d957604051634a1406b160e11b81525f60048201526024016108e2565b6001600160a01b038085165f90815260016020908152604080832093871683529290522082905580156110a457826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161184b91815260200190565b60405180910390a350505050565b6001600160a01b038381165f90815260086020526040808220549285168252902054600c5460ff928316929091169083111561194d578180156118b457506001600160a01b0384165f9081526007602052604090205460ff16155b156118d2576040516367a6ec0360e01b815260040160405180910390fd5b8080156118f757506001600160a01b0385165f9081526007602052604090205460ff16155b15611915576040516367a6ec0360e01b815260040160405180910390fd5b6001600160a01b0385165f9081526007602052604090205460ff1661194d576040516367a6ec0360e01b815260040160405180910390fd5b6010545f90600160b81b900460ff16158015611967575081155b80156119835750600b54305f9081526020819052604090205410155b9050801561199357611993611453565b6010545f90600160b81b900460ff161580156119e957506001600160a01b0387165f9081526006602052604090205460ff16806119e757506001600160a01b0386165f9081526006602052604090205460ff165b155b90505f8115611a54578415611a1957606460095487611a089190611e9c565b611a129190611dc6565b9050611a3c565b8315611a3c576064600a5487611a2f9190611e9c565b611a399190611dc6565b90505b611a47883083611a69565b611a518187611eb3565b95505b611a5f888888611a69565b5050505050505050565b6001600160a01b038316611a93578060025f828254611a889190611ec6565b90915550611b039050565b6001600160a01b0383165f9081526020819052604090205481811015611ae55760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016108e2565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216611b1f57600280548290039055611b3d565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b8291815260200190565b60405180910390a3505050565b5f602080835283518060208501525f5b81811015611bbb57858101830151858201604001528201611b9f565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146112a3575f80fd5b5f8060408385031215611c00575f80fd5b8235611c0b81611bdb565b946020939093013593505050565b5f60208284031215611c29575f80fd5b8135611c3481611bdb565b9392505050565b5f60208284031215611c4b575f80fd5b5035919050565b5f805f60608486031215611c64575f80fd5b8335611c6f81611bdb565b92506020840135611c7f81611bdb565b929592945050506040919091013590565b803560ff81168114611ca0575f80fd5b919050565b5f8060408385031215611cb6575f80fd5b611cbf83611c90565b9150611ccd60208401611c90565b90509250929050565b80151581146112a3575f80fd5b5f8060408385031215611cf4575f80fd5b8235611cff81611bdb565b91506020830135611d0f81611cd6565b809150509250929050565b5f8060408385031215611d2b575f80fd5b8235611d3681611bdb565b91506020830135611d0f81611bdb565b600181811c90821680611d5a57607f821691505b602082108103611d7857634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215611d8e575f80fd5b8151611c3481611bdb565b634e487b7160e01b5f52601160045260245ffd5b60ff818116838216019081111561087957610879611d99565b5f82611de057634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215611df5575f80fd5b5051919050565b5f60208284031215611e0c575f80fd5b8151611c3481611cd6565b634e487b7160e01b5f52603260045260245ffd5b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015611e7b5784516001600160a01b031683529383019391830191600101611e56565b50506001600160a01b03969096166060850152505050608001529392505050565b808202811582820484141761087957610879611d99565b8181038181111561087957610879611d99565b8082018082111561087957610879611d9956fea2646970667358221220fc515073a64dbdb2bfc1746f50048cf1bbc3e7ac64c5bffd383290c3e818f13d64736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000002fb70dd1b7677c29103bcd280cf061b81357b877000000000000000000000000430732094a39c4bda694121e4513041fab878cab0000000000000000000000002fb70dd1b7677c29103bcd280cf061b81357b877
-----Decoded View---------------
Arg [0] : _ownerWallet (address): 0x2FB70Dd1b7677C29103BCD280cF061b81357b877
Arg [1] : _mktWallet (address): 0x430732094A39c4BdA694121E4513041fAb878CaB
Arg [2] : _devWallet (address): 0x2FB70Dd1b7677C29103BCD280cF061b81357b877
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000002fb70dd1b7677c29103bcd280cf061b81357b877
Arg [1] : 000000000000000000000000430732094a39c4bda694121e4513041fab878cab
Arg [2] : 0000000000000000000000002fb70dd1b7677c29103bcd280cf061b81357b877
Deployed Bytecode Sourcemap
35344:14458:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35760:28;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;35760:28:0;;;;;;;;25524:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;27817:190::-;;;;;;;;;;-1:-1:-1;27817:190:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;27817:190:0;1205:187:1;26626:99:0;;;;;;;;;;-1:-1:-1;26705:12:0;;26626:99;;40015:352;;;;;;;;;;-1:-1:-1;40015:352:0;;;;;:::i;:::-;;:::i;44106:201::-;;;;;;;;;;-1:-1:-1;44106:201:0;;;;;:::i;:::-;;:::i;28585:249::-;;;;;;;;;;-1:-1:-1;28585:249:0;;;;;:::i;:::-;;:::i;49635:84::-;;;;;;;;;;-1:-1:-1;49710:1:0;49635:84;;;2467:4:1;2455:17;;;2437:36;;2425:2;2410:18;49635:84:0;2295:184:1;41502:487:0;;;;;;;;;;-1:-1:-1;41502:487:0;;;;;:::i;:::-;;:::i;43496:75::-;;;;;;;;;;;;;:::i;43740:197::-;;;;;;;;;;-1:-1:-1;43740:197:0;;;;;:::i;:::-;;:::i;36047:28::-;;;;;;;;;;-1:-1:-1;36047:28:0;;;;-1:-1:-1;;;;;36047:28:0;;;;;;-1:-1:-1;;;;;2648:32:1;;;2630:51;;2618:2;2603:18;36047:28:0;2484:203:1;35532:49:0;;;;;;;;;;-1:-1:-1;35532:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;35725:28;;;;;;;;;;;;;;;;26788:118;;;;;;;;;;-1:-1:-1;26788:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;26880:18:0;26853:7;26880:18;;;;;;;;;;;;26788:118;22081:103;;;;;;;;;;;;;:::i;35979:30::-;;;;;;;;;;-1:-1:-1;35979:30:0;;;;-1:-1:-1;;;;;35979:30:0;;;45269:307;;;;;;;;;;-1:-1:-1;45269:307:0;;;;;:::i;:::-;;:::i;36158:30::-;;;;;;;;;;-1:-1:-1;36158:30:0;;;;-1:-1:-1;;;36158:30:0;;;;;;35403:39;;;;;;;;;;;;35439:3;35403:39;;35795:26;;;;;;;;;;;;;;;;21406:87;;;;;;;;;;-1:-1:-1;21479:6:0;;-1:-1:-1;;;;;21479:6:0;21406:87;;36016:24;;;;;;;;;;-1:-1:-1;36016:24:0;;;;-1:-1:-1;;;;;36016:24:0;;;42568:213;;;;;;;;;;-1:-1:-1;42568:213:0;;;;;:::i;:::-;;:::i;25734:95::-;;;;;;;;;;;;;:::i;27111:182::-;;;;;;;;;;-1:-1:-1;27111:182:0;;;;;:::i;:::-;;:::i;39276:461::-;;;;;;;;;;-1:-1:-1;39276:461:0;;;;;:::i;:::-;;:::i;35943:29::-;;;;;;;;;;;;;;;43051:332;;;;;;;;;;-1:-1:-1;43051:332:0;;;;;:::i;:::-;;:::i;35691:27::-;;;;;;;;;;;;;;;;42118:240;;;;;;;;;;-1:-1:-1;42118:240:0;;;;;:::i;:::-;;:::i;44771:220::-;;;;;;;;;;-1:-1:-1;44771:220:0;;;;;:::i;:::-;;:::i;46118:361::-;;;;;;;;;;-1:-1:-1;46118:361:0;;;;;:::i;:::-;;:::i;44469:171::-;;;;;;;;;;-1:-1:-1;44469:171:0;;;;;:::i;:::-;;:::i;40712:446::-;;;;;;;;;;-1:-1:-1;40712:446:0;;;;;:::i;:::-;;:::i;36084:33::-;;;;;;;;;;-1:-1:-1;36084:33:0;;;;-1:-1:-1;;;36084:33:0;;;;;;35588:51;;;;;;;;;;-1:-1:-1;35588:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27356:142;;;;;;;;;;-1:-1:-1;27356:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;27463:18:0;;;27436:7;27463:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;27356:142;35646:38;;;;;;;;;;-1:-1:-1;35646:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22339:220;;;;;;;;;;-1:-1:-1;22339:220:0;;;;;:::i;:::-;;:::i;35830:106::-;;;;;;;;;;-1:-1:-1;35830:106:0;;;;-1:-1:-1;;;;;35830:106:0;;;45665:274;;;;;;;;;;;;;:::i;36124:27::-;;;;;;;;;;-1:-1:-1;36124:27:0;;;;-1:-1:-1;;;36124:27:0;;;;;;25524:91;25569:13;25602:5;25595:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25524:91;:::o;27817:190::-;27890:4;10385:10;27946:31;10385:10;27962:7;27971:5;27946:8;:31::i;:::-;27995:4;27988:11;;;27817:190;;;;;:::o;40015:352::-;21292:13;:11;:13::i;:::-;-1:-1:-1;;;;;40108:24:0;::::1;::::0;;:68:::1;;-1:-1:-1::0;;;;;;40149:27:0;::::1;40171:4;40149:27;40108:68;:108;;;-1:-1:-1::0;40207:9:0::1;::::0;-1:-1:-1;;;;;40193:23:0;;::::1;40207:9:::0;::::1;40193:23;40108:108;40090:182;;;40235:37;::::0;-1:-1:-1;;;40235:37:0;;-1:-1:-1;;;;;2648:32:1;;40235:37:0::1;::::0;::::1;2630:51:1::0;2603:18;;40235:37:0::1;;;;;;;;40090:182;40304:9;::::0;40288:38:::1;::::0;-1:-1:-1;;;;;40288:38:0;;::::1;::::0;40304:9:::1;::::0;40288:38:::1;::::0;40304:9:::1;::::0;40288:38:::1;40337:9;:22:::0;;-1:-1:-1;;;;;;40337:22:0::1;-1:-1:-1::0;;;;;40337:22:0;;;::::1;::::0;;;::::1;::::0;;40015:352::o;44106:201::-;21292:13;:11;:13::i;:::-;44184:2:::1;44177:4;:9;44173:53;;;44195:31;::::0;-1:-1:-1;;;44195:31:0;;::::1;::::0;::::1;4815:25:1::0;;;44223:2:0::1;4856:18:1::0;;;4849:34;4788:18;;44195:31:0::1;4632:257:1::0;44173:53:0::1;44256:9;::::0;44242:30:::1;::::0;;4815:25:1;;;4871:2;4856:18;;4849:34;;;44242:30:0::1;::::0;4788:18:1;44242:30:0::1;;;;;;;44283:9;:16:::0;44106:201::o;28585:249::-;28672:4;10385:10;28730:37;28746:4;10385:10;28761:5;28730:15;:37::i;:::-;28778:26;28788:4;28794:2;28798:5;28778:9;:26::i;:::-;-1:-1:-1;28822:4:0;;28585:249;-1:-1:-1;;;;28585:249:0:o;41502:487::-;21292:13;:11;:13::i;:::-;-1:-1:-1;;;;;41600:30:0;::::1;::::0;;:80:::1;;-1:-1:-1::0;;;;;;41647:33:0;::::1;41675:4;41647:33;41600:80;:132;;;-1:-1:-1::0;41725:6:0::1;::::0;-1:-1:-1;;;;;41697:35:0;;::::1;41725:6:::0;::::1;41697:35;41600:132;:200;;;;41796:4;-1:-1:-1::0;;;;;41749:51:0::1;41768:16;-1:-1:-1::0;;;;;41749:41:0::1;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41749:51:0::1;;;41600:200;41582:280;;;41819:43;::::0;-1:-1:-1;;;41819:43:0;;-1:-1:-1;;;;;2648:32:1;;41819:43:0::1;::::0;::::1;2630:51:1::0;2603:18;;41819:43:0::1;2484:203:1::0;41582:280:0::1;41899:6;::::0;41878:47:::1;::::0;-1:-1:-1;;;;;41878:47:0;;::::1;::::0;41899:6:::1;::::0;41878:47:::1;::::0;41899:6:::1;::::0;41878:47:::1;41936:6;:45:::0;;-1:-1:-1;;;;;;41936:45:0::1;-1:-1:-1::0;;;;;41936:45:0;;;::::1;::::0;;;::::1;::::0;;41502:487::o;43496:75::-;21292:13;:11;:13::i;:::-;43552:11:::1;:9;:11::i;:::-;43496:75::o:0;43740:197::-;21292:13;:11;:13::i;:::-;43817:2:::1;43810:4;:9;43806:53;;;43828:31;::::0;-1:-1:-1;;;43828:31:0;;::::1;::::0;::::1;4815:25:1::0;;;43856:2:0::1;4856:18:1::0;;;4849:34;4788:18;;43828:31:0::1;4632:257:1::0;43806:53:0::1;43888:8;::::0;43875:28:::1;::::0;;4815:25:1;;;4871:2;4856:18;;4849:34;;;43875:28:0::1;::::0;4788:18:1;43875:28:0::1;;;;;;;43914:8;:15:::0;43740:197::o;22081:103::-;21292:13;:11;:13::i;:::-;22146:30:::1;22173:1;22146:18;:30::i;45269:307::-:0;21292:13;:11;:13::i;:::-;45388:23:::1;45401:10:::0;45388;:23:::1;:::i;:::-;:28;;45415:1;45388:28:::0;45384:61:::1;;45425:20;::::0;-1:-1:-1;;;45425:20:0;;45443:1:::1;45425:20;::::0;::::1;2437:36:1::0;2410:18;;45425:20:0::1;2295:184:1::0;45384:61:0::1;45471:23;45484:10:::0;45471;:23:::1;:::i;:::-;45456:12;:38:::0;;-1:-1:-1;;;;45505:29:0;-1:-1:-1;;;45456:38:0::1;::::0;;::::1;;-1:-1:-1::0;;;;45505:29:0;;-1:-1:-1;;;45505:29:0;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;45545:23:0::1;-1:-1:-1::0;;;45545:23:0;;;::::1;::::0;;;::::1;;::::0;;45269:307::o;42568:213::-;21292:13;:11;:13::i;:::-;-1:-1:-1;;;;;42687:25:0;::::1;;::::0;;;:17:::1;:25;::::0;;;;;;;;:34;;-1:-1:-1;;42687:34:0::1;::::0;::::1;;::::0;;::::1;::::0;;;42737:36;;1345:41:1;;;42737:36:0::1;::::0;1318:18:1;42737:36:0::1;;;;;;;;42568:213:::0;;:::o;25734:95::-;25781:13;25814:7;25807:14;;;;;:::i;27111:182::-;27180:4;10385:10;27236:27;10385:10;27253:2;27257:5;27236:9;:27::i;39276:461::-;21292:13;:11;:13::i;:::-;-1:-1:-1;;;;;39400:33:0;::::1;::::0;;:86:::1;;-1:-1:-1::0;;;;;;39450:36:0;::::1;39481:4;39450:36;39400:86;:141;;;-1:-1:-1::0;39526:15:0::1;::::0;-1:-1:-1;;;;;39503:38:0;;::::1;39526:15:::0;::::1;39503:38;39400:141;39382:224;;;39560:46;::::0;-1:-1:-1;;;39560:46:0;;-1:-1:-1;;;;;2648:32:1;;39560:46:0::1;::::0;::::1;2630:51:1::0;2603:18;;39560:46:0::1;2484:203:1::0;39382:224:0::1;39644:15;::::0;39622:59:::1;::::0;-1:-1:-1;;;;;39622:59:0;;::::1;::::0;39644:15:::1;::::0;39622:59:::1;::::0;39644:15:::1;::::0;39622:59:::1;39692:15;:37:::0;;-1:-1:-1;;;;;;39692:37:0::1;-1:-1:-1::0;;;;;39692:37:0;;;::::1;::::0;;;::::1;::::0;;39276:461::o;43051:332::-;21292:13;:11;:13::i;:::-;43182::::1;::::0;-1:-1:-1;;;;;43172:23:0;;::::1;43182:13:::0;::::1;43172:23;::::0;:52:::1;;-1:-1:-1::0;43217:6:0::1;::::0;-1:-1:-1;;;;;43199:25:0;;::::1;43217:6:::0;::::1;43199:25;43172:52;43168:111;;;43246:33;::::0;-1:-1:-1;;;43246:33:0;;-1:-1:-1;;;;;2648:32:1;;43246:33:0::1;::::0;::::1;2630:51:1::0;2603:18;;43246:33:0::1;2484:203:1::0;43168:111:0::1;-1:-1:-1::0;;;;;43290:27:0;::::1;;::::0;;;:19:::1;:27;::::0;;;;;;;;:36;;-1:-1:-1;;43290:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;43342:33;;1345:41:1;;;43342:33:0::1;::::0;1318:18:1;43342:33:0::1;1205:187:1::0;42118:240:0;21292:13;:11;:13::i;:::-;-1:-1:-1;;;;;42183:18:0;::::1;::::0;;:43:::1;;-1:-1:-1::0;;;;;;42205:21:0;::::1;42221:4;42205:21;42183:43;42179:98;;;42248:29;::::0;-1:-1:-1;;;42248:29:0;;-1:-1:-1;;;;;2648:32:1;;42248:29:0::1;::::0;::::1;2630:51:1::0;2603:18;;42248:29:0::1;2484:203:1::0;42179:98:0::1;-1:-1:-1::0;;;;;42288:12:0::1;;::::0;;;:6:::1;:12;::::0;;;;;;;:19;;42303:4:::1;-1:-1:-1::0;;42288:19:0;;::::1;::::0;::::1;::::0;;;42318::::1;:25:::0;;;;;:32;;;;::::1;::::0;;::::1;::::0;;42118:240::o;44771:220::-;21292:13;:11;:13::i;:::-;44867:3:::1;44851:13;26705:12:::0;;;26626:99;44851:13:::1;:19;;;;:::i;:::-;44842:6;:28;44838:66;;;44879:25;;-1:-1:-1::0;;;44879:25:0::1;;;;;;;;;;;44838:66;44932:11;::::0;44920:32:::1;::::0;;4815:25:1;;;4871:2;4856:18;;4849:34;;;44920:32:0::1;::::0;4788:18:1;44920:32:0::1;;;;;;;44963:11;:20:::0;44771:220::o;46118:361::-;-1:-1:-1;;;;;46179:22:0;;46196:4;46179:22;;:45;;-1:-1:-1;;;;;;46205:19:0;;;46179:45;46175:103;;;46246:32;;-1:-1:-1;;;46246:32:0;;-1:-1:-1;;;;;2648:32:1;;46246::0;;;2630:51:1;2603:18;;46246:32:0;2484:203:1;46175:103:0;46342:28;;-1:-1:-1;;;46342:28:0;;46364:4;46342:28;;;2630:51:1;46307:5:0;;46289:9;;-1:-1:-1;;;;;46342:13:0;;;;;2603:18:1;;46342:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46324:46;;46385:7;46396:1;46385:12;46381:47;;46406:22;;-1:-1:-1;;;46406:22:0;;46426:1;46406:22;;;2437:36:1;2410:18;;46406:22:0;2295:184:1;46381:47:0;46452:9;;46439:32;;-1:-1:-1;;;46439:32:0;;-1:-1:-1;;;;;46452:9:0;;;46439:32;;;6472:51:1;6539:18;;;6532:34;;;46439:12:0;;;;;;6445:18:1;;46439:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46164:315;;46118:361;:::o;44469:171::-;21292:13;:11;:13::i;:::-;44569::::1;::::0;44553:42:::1;::::0;;4815:25:1;;;4871:2;4856:18;;4849:34;;;44553:42:0::1;::::0;4788:18:1;44553:42:0::1;;;;;;;44606:13;:26:::0;44469:171::o;40712:446::-;21292:13;:11;:13::i;:::-;40788:14:::1;40820;-1:-1:-1::0;;;;;40805:37:0::1;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40788:56;;40855:14;40887;-1:-1:-1::0;;;;;40872:37:0::1;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40855:56:::0;-1:-1:-1;;;;;;40926:23:0;::::1;40944:4;40926:23;::::0;::::1;::::0;:50:::1;;-1:-1:-1::0;;;;;;40953:23:0;::::1;40971:4;40953:23;;40926:50;40922:131;;;41000:41;::::0;-1:-1:-1;;;41000:41:0;;-1:-1:-1;;;;;2648:32:1;;41000:41:0::1;::::0;::::1;2630:51:1::0;2603:18;;41000:41:0::1;2484:203:1::0;40922:131:0::1;41079:13;::::0;41068:41:::1;::::0;-1:-1:-1;;;;;41068:41:0;;::::1;::::0;41079:13:::1;::::0;41068:41:::1;::::0;41079:13:::1;::::0;41068:41:::1;-1:-1:-1::0;;41120:13:0::1;:30:::0;;-1:-1:-1;;;;;;41120:30:0::1;-1:-1:-1::0;;;;;41120:30:0;;;::::1;::::0;;;::::1;::::0;;40712:446::o;22339:220::-;21292:13;:11;:13::i;:::-;-1:-1:-1;;;;;22424:22:0;::::1;22420:93;;22470:31;::::0;-1:-1:-1;;;22470:31:0;;22498:1:::1;22470:31;::::0;::::1;2630:51:1::0;2603:18;;22470:31:0::1;2484:203:1::0;22420:93:0::1;22523:28;22542:8;22523:18;:28::i;:::-;22339:220:::0;:::o;45665:274::-;45721:21;45707:11;45757;;;45753:46;;45777:22;;-1:-1:-1;;;45777:22:0;;45797:1;45777:22;;;2437:36:1;2410:18;;45777:22:0;2295:184:1;45753:46:0;45829:9;;:48;;45811:12;;-1:-1:-1;;;;;45829:9:0;;45851:21;;45811:12;45829:48;45811:12;45829:48;45851:21;45829:9;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45810:67;;;45893:7;45888:43;;45909:22;;-1:-1:-1;;;45909:22:0;;45929:1;45909:22;;;2437:36:1;2410:18;;45909:22:0;2295:184:1;45888:43:0;45696:243;;45665:274::o;32644:130::-;32729:37;32738:5;32745:7;32754:5;32761:4;32729:8;:37::i;:::-;32644:130;;;:::o;21571:166::-;21479:6;;-1:-1:-1;;;;;21479:6:0;10385:10;21631:23;21627:103;;21678:40;;-1:-1:-1;;;21678:40:0;;10385:10;21678:40;;;2630:51:1;2603:18;;21678:40:0;2484:203:1;34360:487:0;-1:-1:-1;;;;;27463:18:0;;;34460:24;27463:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;34527:37:0;;34523:317;;34604:5;34585:16;:24;34581:132;;;34637:60;;-1:-1:-1;;;34637:60:0;;-1:-1:-1;;;;;7456:32:1;;34637:60:0;;;7438:51:1;7505:18;;;7498:34;;;7548:18;;;7541:34;;;7411:18;;34637:60:0;7236:345:1;34581:132:0;34756:57;34765:5;34772:7;34800:5;34781:16;:24;34807:5;34756:8;:57::i;29219:308::-;-1:-1:-1;;;;;29303:18:0;;29299:88;;29345:30;;-1:-1:-1;;;29345:30:0;;29372:1;29345:30;;;2630:51:1;2603:18;;29345:30:0;2484:203:1;29299:88:0;-1:-1:-1;;;;;29401:16:0;;29397:88;;29441:32;;-1:-1:-1;;;29441:32:0;;29470:1;29441:32;;;2630:51:1;2603:18;;29441:32:0;2484:203:1;29397:88:0;29495:24;29503:4;29509:2;29513:5;29495:7;:24::i;48498:1049::-;48538:8;:15;;-1:-1:-1;;;;48538:15:0;-1:-1:-1;;;48538:15:0;;;48602:4;-1:-1:-1;26880:18:0;;;;;;;;;;;;48666:16;;48680:1;48666:16;;;;;;;;26880:18;;-1:-1:-1;48666:16:0;;;;;;26880:18;48666:16;;;;;-1:-1:-1;48666:16:0;48642:40;;48711:4;48693;48698:1;48693:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;48693:23:0;;;-1:-1:-1;;;;;48693:23:0;;;;;48737:4;48727;48732:1;48727:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48727:14:0;;;:7;;;;;;;;;:14;48754:6;;:185;;-1:-1:-1;;;48754:185:0;;:6;;;:57;;:185;;48826:9;;48754:6;;48866:4;;48893;;48913:15;;48754:185;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;49009:12:0;;48973:21;;-1:-1:-1;;;;49009:12:0;;;;:16;;-1:-1:-1;49005:508:0;;49116:12;;49042:20;;49116:12;-1:-1:-1;;;49116:12:0;;;;;49066:29;;-1:-1:-1;;;49079:16:0;;;;49066:10;:29;:::i;:::-;49065:63;;;;:::i;:::-;49188:12;;49042:86;;-1:-1:-1;49143:14:0;;49188:12;-1:-1:-1;;;49188:12:0;;;;;49161:23;;-1:-1:-1;;;49174:10:0;;;;49161;:23;:::i;:::-;49160:40;;;;:::i;:::-;49234:15;;:45;;49143:57;;-1:-1:-1;49216:12:0;;-1:-1:-1;;;;;49234:15:0;;;;49262:12;;49216;49234:45;49216:12;49234:45;49262:12;49234:15;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49215:64;;;49299:7;49294:65;;49329:15;;49313:46;;160:25:1;;;-1:-1:-1;;;;;49329:15:0;;;;49313:46;;148:2:1;133:18;49313:46:0;;;;;;;49294:65;49388:9;;:33;;-1:-1:-1;;;;;49388:9:0;;;;49410:6;;49388:33;;;;49410:6;49388:9;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49374:47;;;;;49441:7;49436:65;;49471:15;;49455:46;;160:25:1;;;-1:-1:-1;;;;;49471:15:0;;;;49455:46;;148:2:1;133:18;49455:46:0;;;;;;;49436:65;49027:486;;;49005:508;-1:-1:-1;;49523:8:0;:16;;-1:-1:-1;;;;49523:16:0;;;-1:-1:-1;48498:1049:0:o;22719:191::-;22812:6;;;-1:-1:-1;;;;;22829:17:0;;;-1:-1:-1;;;;;;22829:17:0;;;;;;;22862:40;;22812:6;;;22829:17;22812:6;;22862:40;;22793:16;;22862:40;22782:128;22719:191;:::o;33625:443::-;-1:-1:-1;;;;;33738:19:0;;33734:91;;33781:32;;-1:-1:-1;;;33781:32:0;;33810:1;33781:32;;;2630:51:1;2603:18;;33781:32:0;2484:203:1;33734:91:0;-1:-1:-1;;;;;33839:21:0;;33835:92;;33884:31;;-1:-1:-1;;;33884:31:0;;33912:1;33884:31;;;2630:51:1;2603:18;;33884:31:0;2484:203:1;33835:92:0;-1:-1:-1;;;;;33937:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;33983:78;;;;34034:7;-1:-1:-1;;;;;34018:31:0;34027:5;-1:-1:-1;;;;;34018:31:0;;34043:5;34018:31;;;;160:25:1;;148:2;133:18;;14:177;34018:31:0;;;;;;;;33625:443;;;;:::o;47178:1184::-;-1:-1:-1;;;;;47312:12:0;;;47299:10;47312:12;;;:6;:12;;;;;;;47349:10;;;;;;;;47416:11;;47312:12;;;;;47349:10;;;;47408:19;;47404:296;;;47448:5;:33;;;;-1:-1:-1;;;;;;47458:23:0;;;;;;:19;:23;;;;;;;;47457:24;47448:33;47444:245;;;47490:12;;-1:-1:-1;;;47490:12:0;;;;;;;;;;;47444:245;47526:6;:36;;;;-1:-1:-1;;;;;;47537:25:0;;;;;;:19;:25;;;;;;;;47536:26;47526:36;47522:167;;;47571:12;;-1:-1:-1;;;47571:12:0;;;;;;;;;;;47522:167;-1:-1:-1;;;;;47627:25:0;;;;;;:19;:25;;;;;;;;47622:51;;47661:12;;-1:-1:-1;;;47661:12:0;;;;;;;;;;;47622:51;47728:8;;47712:12;;-1:-1:-1;;;47728:8:0;;;;47727:9;:33;;;;;47754:6;47753:7;47727:33;:91;;;;-1:-1:-1;47805:13:0;;47795:4;26853:7;26880:18;;;;;;;;;;;47777:41;;47727:91;47712:106;;47835:7;47831:51;;;47859:11;:9;:11::i;:::-;47910:8;;47894:12;;-1:-1:-1;;;47910:8:0;;;;47909:9;:77;;;;-1:-1:-1;;;;;;47937:23:0;;;;;;:17;:23;;;;;;;;;:48;;-1:-1:-1;;;;;;47964:21:0;;;;;;:17;:21;;;;;;;;47937:48;47935:51;47909:77;47894:92;;47997:8;48024:7;48020:292;;;48052:5;48048:172;;;35439:3;48093:8;;48085:5;:16;;;;:::i;:::-;48084:30;;;;:::i;:::-;48078:36;;48048:172;;;48140:6;48136:84;;;35439:3;48182:9;;48174:5;:17;;;;:::i;:::-;48173:31;;;;:::i;:::-;48167:37;;48136:84;48234:39;48248:4;48262;48269:3;48234:13;:39::i;:::-;48288:12;48297:3;48288:12;;:::i;:::-;;;48020:292;48324:30;48338:4;48344:2;48348:5;48324:13;:30::i;:::-;47288:1074;;;;;47178:1184;;;:::o;29851:1135::-;-1:-1:-1;;;;;29941:18:0;;29937:552;;30095:5;30079:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;29937:552:0;;-1:-1:-1;29937:552:0;;-1:-1:-1;;;;;30155:15:0;;30133:19;30155:15;;;;;;;;;;;30189:19;;;30185:117;;;30236:50;;-1:-1:-1;;;30236:50:0;;-1:-1:-1;;;;;7456:32:1;;30236:50:0;;;7438:51:1;7505:18;;;7498:34;;;7548:18;;;7541:34;;;7411:18;;30236:50:0;7236:345:1;30185:117:0;-1:-1:-1;;;;;30425:15:0;;:9;:15;;;;;;;;;;30443:19;;;;30425:37;;29937:552;-1:-1:-1;;;;;30505:16:0;;30501:435;;30671:12;:21;;;;;;;30501:435;;;-1:-1:-1;;;;;30887:13:0;;:9;:13;;;;;;;;;;:22;;;;;;30501:435;30968:2;-1:-1:-1;;;;;30953:25:0;30962:4;-1:-1:-1;;;;;30953:25:0;;30972:5;30953:25;;;;160::1;;148:2;133:18;;14:177;30953:25:0;;;;;;;;29851:1135;;;:::o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:247::-;1456:6;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;1564:9;1551:23;1583:31;1608:5;1583:31;:::i;:::-;1633:5;1397:247;-1:-1:-1;;;1397:247:1:o;1649:180::-;1708:6;1761:2;1749:9;1740:7;1736:23;1732:32;1729:52;;;1777:1;1774;1767:12;1729:52;-1:-1:-1;1800:23:1;;1649:180;-1:-1:-1;1649:180:1:o;1834:456::-;1911:6;1919;1927;1980:2;1968:9;1959:7;1955:23;1951:32;1948:52;;;1996:1;1993;1986:12;1948:52;2035:9;2022:23;2054:31;2079:5;2054:31;:::i;:::-;2104:5;-1:-1:-1;2161:2:1;2146:18;;2133:32;2174:33;2133:32;2174:33;:::i;:::-;1834:456;;2226:7;;-1:-1:-1;;;2280:2:1;2265:18;;;;2252:32;;1834:456::o;2692:156::-;2758:20;;2818:4;2807:16;;2797:27;;2787:55;;2838:1;2835;2828:12;2787:55;2692:156;;;:::o;2853:252::-;2917:6;2925;2978:2;2966:9;2957:7;2953:23;2949:32;2946:52;;;2994:1;2991;2984:12;2946:52;3017:27;3034:9;3017:27;:::i;:::-;3007:37;;3063:36;3095:2;3084:9;3080:18;3063:36;:::i;:::-;3053:46;;2853:252;;;;;:::o;3110:118::-;3196:5;3189:13;3182:21;3175:5;3172:32;3162:60;;3218:1;3215;3208:12;3233:382;3298:6;3306;3359:2;3347:9;3338:7;3334:23;3330:32;3327:52;;;3375:1;3372;3365:12;3327:52;3414:9;3401:23;3433:31;3458:5;3433:31;:::i;:::-;3483:5;-1:-1:-1;3540:2:1;3525:18;;3512:32;3553:30;3512:32;3553:30;:::i;:::-;3602:7;3592:17;;;3233:382;;;;;:::o;3620:388::-;3688:6;3696;3749:2;3737:9;3728:7;3724:23;3720:32;3717:52;;;3765:1;3762;3755:12;3717:52;3804:9;3791:23;3823:31;3848:5;3823:31;:::i;:::-;3873:5;-1:-1:-1;3930:2:1;3915:18;;3902:32;3943:33;3902:32;3943:33;:::i;4247:380::-;4326:1;4322:12;;;;4369;;;4390:61;;4444:4;4436:6;4432:17;4422:27;;4390:61;4497:2;4489:6;4486:14;4466:18;4463:38;4460:161;;4543:10;4538:3;4534:20;4531:1;4524:31;4578:4;4575:1;4568:15;4606:4;4603:1;4596:15;4460:161;;4247:380;;;:::o;5147:251::-;5217:6;5270:2;5258:9;5249:7;5245:23;5241:32;5238:52;;;5286:1;5283;5276:12;5238:52;5318:9;5312:16;5337:31;5362:5;5337:31;:::i;5403:127::-;5464:10;5459:3;5455:20;5452:1;5445:31;5495:4;5492:1;5485:15;5519:4;5516:1;5509:15;5535:148;5623:4;5602:12;;;5616;;;5598:31;;5641:13;;5638:39;;;5657:18;;:::i;5887:217::-;5927:1;5953;5943:132;;5997:10;5992:3;5988:20;5985:1;5978:31;6032:4;6029:1;6022:15;6060:4;6057:1;6050:15;5943:132;-1:-1:-1;6089:9:1;;5887:217::o;6109:184::-;6179:6;6232:2;6220:9;6211:7;6207:23;6203:32;6200:52;;;6248:1;6245;6238:12;6200:52;-1:-1:-1;6271:16:1;;6109:184;-1:-1:-1;6109:184:1:o;6577:245::-;6644:6;6697:2;6685:9;6676:7;6672:23;6668:32;6665:52;;;6713:1;6710;6703:12;6665:52;6745:9;6739:16;6764:28;6786:5;6764:28;:::i;7718:127::-;7779:10;7774:3;7770:20;7767:1;7760:31;7810:4;7807:1;7800:15;7834:4;7831:1;7824:15;7850:980;8112:4;8160:3;8149:9;8145:19;8191:6;8180:9;8173:25;8217:2;8255:6;8250:2;8239:9;8235:18;8228:34;8298:3;8293:2;8282:9;8278:18;8271:31;8322:6;8357;8351:13;8388:6;8380;8373:22;8426:3;8415:9;8411:19;8404:26;;8465:2;8457:6;8453:15;8439:29;;8486:1;8496:195;8510:6;8507:1;8504:13;8496:195;;;8575:13;;-1:-1:-1;;;;;8571:39:1;8559:52;;8666:15;;;;8631:12;;;;8607:1;8525:9;8496:195;;;-1:-1:-1;;;;;;;8747:32:1;;;;8742:2;8727:18;;8720:60;-1:-1:-1;;;8811:3:1;8796:19;8789:35;8708:3;7850:980;-1:-1:-1;;;7850:980:1:o;8835:168::-;8908:9;;;8939;;8956:15;;;8950:22;;8936:37;8926:71;;8977:18;;:::i;9008:128::-;9075:9;;;9096:11;;;9093:37;;;9110:18;;:::i;9141:125::-;9206:9;;;9227:10;;;9224:36;;;9240:18;;:::i
Swarm Source
ipfs://fc515073a64dbdb2bfc1746f50048cf1bbc3e7ac64c5bffd383290c3e818f13d
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.