ERC-20
Overview
Max Total Supply
6,042,328,392,566.253658088453087287 FELON.ee
Holders
95
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
967,479,814.044121091633002928 FELON.eeValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
FELON
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: Apache License 2.0 /* * * (*`ω´*) ELON MUSK, WE HATE YOU!!! (ノ ̄ ̄∇ ̄ ̄)ノ~~~~~⌒━━┻━━┻━━ * * +%%%%%%%%%%#. *%. .#%%%%%%%%%%= -#%= %# * *%. -%%#= %# * =##########*. *%. -#= .#* :%*-##= %# * *#. =#= .## :#+ -##+## * =##########*. *##########*: =############ :#+ -### (FELON.ee) * * Welcome to the first celebrity tokens fueled by the popularity of Elon Musk. * * * Website: https://elonexperiment.com * https://elonexperiment-eth.ipns.dweb.link * https://elonexperiment-eth.ipns.cf-ipfs.com * https://elonexperiment.eth.link * https://elonexperiment.eth.limo * ipns://elonexperiment.eth * * Docs / Blog: https://resources.elonexperiment.com * https://resources-elonexperiment-eth.ipns.dweb.link * https://resources-elonexperiment-eth.ipns.cf-ipfs.com * https://resources.elonexperiment.eth.limo * ipns://resources.elonexperiment.eth * */ pragma solidity ^0.8.17; import "./CelebrityToken.sol"; contract FELON is CelebrityToken { constructor() ERC20("Elon Experiment FELON", "FELON.ee") {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: Apache License 2.0 pragma solidity ^0.8.17; import "./ReentrancyGuard.sol"; import "./ERC20.sol"; import "./ERC20Burnable.sol"; import "./Ownable.sol"; import "./Address.sol"; import "./IUniswapV2Factory.sol"; import "./IUniswapV2Router02.sol"; import "./IAdversaryCelebrityToken.sol"; import "./StatefulContract.sol"; error SniperForbiddenError( string msg, bool isSender, bool isFrom, bool isTo, bool isTxOrigin ); error ExceedBuyLimitsError( string msg, uint256 buyAmount, int256 currentQuota, int256 maxYouCanBuyNow, uint256 intervalResetAt, uint256 maxPerInterval, uint256 disableThrottlingAfter ); error HumansOnlyError(string msg); error GenericSetupError(string msg); error TransferForbidden(string msg); error NotAdversaryToken(string msg); abstract contract CelebrityCore is ERC20, ERC20Burnable, ReentrancyGuard, Ownable, StatefulContract { event LimitsReset(); event FailedToSwapToAdversary(uint256 amount); event FailedToSwapToETH(uint256 amount); event FeeTaken(uint256 amount); event BurnedAdversaryTokens(uint256 amount); uint8 internal constant feePercentage = 69; uint256 private immutable fixedTotalSupply = formatTokens(6_900_000_000_000); IUniswapV2Router02 internal constant uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address private immutable WETH9 = uniswapV2Router.WETH(); address internal uniswapV2Pair; IAdversaryCelebrityToken internal adversaryCelebrityToken; mapping(address => bool) internal isExcludedFromFee; bool internal isSwapping = false; uint256 internal burnedAdversaryTokens = 0; uint256 internal collectedFees = 0; uint256 internal lastSwapBlock = 0; mapping(address => uint256) internal _resetBuyLimitsAt; mapping(address => int256) internal _boughtTokensOf; uint256 internal _resetBuyLimitsAfter; uint256 internal _maxQuotaIn; uint256 internal _disableThrottlingAfter; // Anti-bot protection (switched off when ownership is renounced) mapping(address => bool) private _0017333; modifier swapLock() { isSwapping = true; _; isSwapping = false; lastSwapBlock = block.number; } constructor() { _mint(address(this), fixedTotalSupply); } function shouldResetBuyLimitsOf(address account) internal view returns (bool) { return block.timestamp >= _resetBuyLimitsAt[account]; } function formatTokens(uint256 amount) private pure returns (uint256) { return amount * (10**18); } // This check is compatible with all Uniswap-like AMM function hasFactory(address _sender) private view returns (bool) { if (Address.isContract(_sender)) { IUniswapV2Router02 _router = IUniswapV2Router02(_sender); try _router.factory() returns (address factory) { if (factory != address(0)) { return true; } } catch {} } return false; } function getTradeInformation( address _sender, address from, address to ) internal view returns (bool isBuy, bool isSell) { if (!hasFactory(_sender)) { return (false, false); } return (hasFactory(from), hasFactory(to)); } function setExclusionFromFee(address account, bool _isExcludedFromFee) internal { isExcludedFromFee[account] = _isExcludedFromFee; } function _isSniperBlocked(address account) internal view returns (bool) { return _0017333[account]; } function blockSniper(address account) internal { if (isExcludedFromFee[account]) { return; } _0017333[account] = true; } function resetBuyLimitsAfter(uint256 value) internal { _resetBuyLimitsAfter = value; } function maxQuotaIn(uint256 value) internal { _maxQuotaIn = formatTokens(value); } function disableThrottlingAfter(uint256 value) internal { _disableThrottlingAfter = block.timestamp + value; } function addInitialLiquidity(uint256 deadline) internal ensure(State.UNINITIALIZED) onlyOwner { _approve(address(this), address(uniswapV2Router), fixedTotalSupply); uniswapV2Router.addLiquidityETH{value: msg.value}( address(this), fixedTotalSupply, fixedTotalSupply, msg.value, owner(), deadline ); } function _swapAndBurn() internal swapLock { if (lastSwapBlock != block.number) { if (adversaryCelebrityToken.getLastSwap() != block.number) { uint256 selfBalance = balanceOf(address(this)); if (selfBalance > 0) { address[] memory path = new address[](2); path[0] = address(this); path[1] = WETH9; _approve( address(this), address(uniswapV2Router), selfBalance ); try uniswapV2Router .swapExactTokensForETHSupportingFeeOnTransferTokens( selfBalance, 0, path, address(this), block.timestamp ) {} catch { emit FailedToSwapToETH(selfBalance); } } } uint256 ethBalance = address(this).balance; if (ethBalance > 0) { address[] memory path = new address[](2); path[0] = WETH9; path[1] = address(adversaryCelebrityToken); try uniswapV2Router .swapExactETHForTokensSupportingFeeOnTransferTokens{ value: ethBalance }(0, path, address(this), block.timestamp) {} catch { emit FailedToSwapToAdversary(ethBalance); } } uint256 adversaryBalance = adversaryCelebrityToken.balanceOf( address(this) ); if (adversaryBalance > 0) { adversaryCelebrityToken.burn(adversaryBalance); burnedAdversaryTokens += adversaryBalance; emit BurnedAdversaryTokens(adversaryBalance); } } } }
// SPDX-License-Identifier: Apache License 2.0 pragma solidity ^0.8.17; import "./CelebrityCore.sol"; abstract contract CelebrityToken is CelebrityCore { // Allow ETH to be received for the swap receive() external payable {} function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual override { super._beforeTokenTransfer(from, to, amount); // Ignore if not initialized if (_getState() == State.UNINITIALIZED) { return; } // Remove buy limits after timer is expired if ( _getState() == State.THROTTLED && block.timestamp >= _disableThrottlingAfter ) { upgradeState(State.OPEN); } // Don't look after burn events and self transfers if (to == address(0) || from == to) { return; } address _sender = _msgSender(); // Protection against snipers if ( _isSniperBlocked(_sender) || _isSniperBlocked(from) || _isSniperBlocked(to) || _isSniperBlocked(tx.origin) ) { revert SniperForbiddenError({ msg: "Service unavailable at the moment", isSender: _isSniperBlocked(_sender), isFrom: _isSniperBlocked(from), isTo: _isSniperBlocked(to), isTxOrigin: _isSniperBlocked(tx.origin) }); } // Buy limits are enabled in Protected and Throttled mode if ( (_getState() == State.PROTECTED || _getState() == State.THROTTLED) && !isExcludedFromFee[from] && !isExcludedFromFee[to] ) { (bool isBuy, bool isSell) = getTradeInformation(_sender, from, to); if (isBuy) { // Reset limits if needed if (shouldResetBuyLimitsOf(to)) { _resetBuyLimitsAt[to] = block.timestamp + _resetBuyLimitsAfter; _boughtTokensOf[to] = 0; emit LimitsReset(); } // During the fair launch we only allow humans to buy if (to != tx.origin) { revert HumansOnlyError({msg: "Humans only at launch"}); } // Protection against snipers if (_getState() == State.PROTECTED) { blockSniper(to); } int256 currentQuota = _boughtTokensOf[to]; _boughtTokensOf[to] += int256(amount); if (_boughtTokensOf[to] > int256(_maxQuotaIn)) { revert ExceedBuyLimitsError({ msg: "Buy exceed limits, try lower amount or try again later", buyAmount: amount, currentQuota: currentQuota, maxYouCanBuyNow: int256(_maxQuotaIn) - currentQuota, intervalResetAt: _resetBuyLimitsAt[to], maxPerInterval: _maxQuotaIn, disableThrottlingAfter: _disableThrottlingAfter }); } } else if (isSell) { _boughtTokensOf[from] -= int256(amount); } } } function _transfer( address from, address to, uint256 amount ) internal virtual override { if (!isSwapping && !isExcludedFromFee[from] && !isExcludedFromFee[to]) { address _sender = _msgSender(); (bool isBuy, bool isSell) = getTradeInformation(_sender, from, to); if (!isBuy && _getState() >= State.THROTTLED) { _swapAndBurn(); } if (isSell) { return _transferWithFee(from, to, amount); } } if (_getState() > State.UNINITIALIZED && to == address(this)) { revert TransferForbidden({msg: "Cannot send to contract directly"}); } super._transfer(from, to, amount); } function _transferWithFee( address from, address to, uint256 amount ) private { uint256 sellFee = (amount * feePercentage) / 1000; collectedFees += sellFee; super._transfer(from, to, amount - sellFee); super._transfer(from, address(this), sellFee); emit FeeTaken(sellFee); } function setup(address _adversaryCelebrityToken, uint256 _deadline) external payable onlyOwner ensure(State.UNINITIALIZED) nonReentrant { if (_adversaryCelebrityToken == address(0)) { revert GenericSetupError({msg: "Adversary token missing"}); } if (_deadline == 0) { revert GenericSetupError({msg: "Deadline is missing"}); } maxQuotaIn( 34_500_000_000 + 500_000 // Add some tolerance ); uint256 expectedLiquidity = 6.9 ether; resetBuyLimitsAfter(4 hours); if (msg.value != expectedLiquidity) { revert GenericSetupError({msg: "Invalid liquidity value"}); } uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair( address(this), uniswapV2Router.WETH() ); adversaryCelebrityToken = IAdversaryCelebrityToken( _adversaryCelebrityToken ); // Four addresses must be free from any restriction, at any time setExclusionFromFee(owner(), true); setExclusionFromFee(address(this), true); setExclusionFromFee(address(adversaryCelebrityToken), true); setExclusionFromFee(address(uniswapV2Router), true); addInitialLiquidity(_deadline); upgradeState(State.PROTECTED); } // Anyone can call this function to swap any tokens or ETH leftover function swapAndBurn() external nonReentrant ensureAtLeast(State.THROTTLED) { _swapAndBurn(); } function renounceOwnership() public virtual override onlyOwner ensure(State.PROTECTED) { super.renounceOwnership(); // Open trading after ownership is renounced disableThrottlingAfter(3 days); upgradeState(State.THROTTLED); } function getLastSwap() external view returns (uint256) { return (lastSwapBlock); } function getStats() external view returns (uint256, uint256) { return (burnedAdversaryTokens, collectedFees); } function burnFrom(address account, uint256 amount) public virtual override ensureAtLeast(State.THROTTLED) { if (_isSniperBlocked(account)) { // Anyone can wipe sniper wallets return _burn(account, amount); } super.burnFrom(account, amount); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; import "./IERC20.sol"; import "./IERC20Metadata.sol"; import "./Context.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}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * 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. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * 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 override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override 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 value {ERC20} uses, unless this function is * 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 override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override 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 `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` 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 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); 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 `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `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. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` 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. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol) pragma solidity ^0.8.0; import "./ERC20.sol"; import "./Context.sol"; /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { _spendAllowance(account, _msgSender(), amount); _burn(account, amount); } }
// SPDX-License-Identifier: Apache License 2.0 pragma solidity ^0.8.17; import "./IERC20.sol"; interface IAdversaryCelebrityToken is IERC20 { function burn(uint256 amount) external; function burnFrom(address account, uint256 amount) external; function getLastSwap() external returns (uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @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 amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` 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 amount) 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 `amount` 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 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` 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 amount ) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; import "./IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ 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); }
pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; }
pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); }
pragma solidity >=0.6.2; import './IUniswapV2Router01.sol'; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "./Context.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. * * By default, the owner account will be the one that deploys the contract. 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; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @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 { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing 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 { require(newOwner != address(0), "Ownable: new owner is the zero address"); _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); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: Apache License 2.0 pragma solidity ^0.8.17; error WrongStateException( StatefulContract.State expected, StatefulContract.State current ); error UpgradeStateException( StatefulContract.State currentState, StatefulContract.State newState ); abstract contract StatefulContract { event UpgradedState(State oldState, State newState); // Explanation of the different contract states // // UNINITIALIZED: The contract was created, but setup() was not called // PROTECTED: The contract is now set up, allowing the owner to add liquidity and renounce ownership // Snipers will be automatically blocked if they try to buy during the PROTECTED state // THROTTLED: Trading is open but buys limits are enforced, and smart contracts cannot buy to ensure a fair launch // OPEN: All trading restrictions are lifted // enum State { UNINITIALIZED, PROTECTED, THROTTLED, OPEN } State private currentState = State.UNINITIALIZED; modifier ensure(State expectedState) { if (expectedState != currentState) { revert WrongStateException({ expected: expectedState, current: currentState }); } _; } modifier ensureAtLeast(State expectedState) { if (expectedState > currentState) { revert WrongStateException({ expected: expectedState, current: currentState }); } _; } function _getState() internal view returns (State) { return currentState; } function upgradeState(State newState) internal { if (currentState >= newState) { // Can only move forward revert UpgradeStateException(currentState, newState); } currentState = newState; emit UpgradedState(currentState, newState); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"string","name":"msg","type":"string"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"int256","name":"currentQuota","type":"int256"},{"internalType":"int256","name":"maxYouCanBuyNow","type":"int256"},{"internalType":"uint256","name":"intervalResetAt","type":"uint256"},{"internalType":"uint256","name":"maxPerInterval","type":"uint256"},{"internalType":"uint256","name":"disableThrottlingAfter","type":"uint256"}],"name":"ExceedBuyLimitsError","type":"error"},{"inputs":[{"internalType":"string","name":"msg","type":"string"}],"name":"GenericSetupError","type":"error"},{"inputs":[{"internalType":"string","name":"msg","type":"string"}],"name":"HumansOnlyError","type":"error"},{"inputs":[{"internalType":"string","name":"msg","type":"string"},{"internalType":"bool","name":"isSender","type":"bool"},{"internalType":"bool","name":"isFrom","type":"bool"},{"internalType":"bool","name":"isTo","type":"bool"},{"internalType":"bool","name":"isTxOrigin","type":"bool"}],"name":"SniperForbiddenError","type":"error"},{"inputs":[{"internalType":"string","name":"msg","type":"string"}],"name":"TransferForbidden","type":"error"},{"inputs":[{"internalType":"enum StatefulContract.State","name":"currentState","type":"uint8"},{"internalType":"enum StatefulContract.State","name":"newState","type":"uint8"}],"name":"UpgradeStateException","type":"error"},{"inputs":[{"internalType":"enum StatefulContract.State","name":"expected","type":"uint8"},{"internalType":"enum StatefulContract.State","name":"current","type":"uint8"}],"name":"WrongStateException","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BurnedAdversaryTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FailedToSwapToAdversary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FailedToSwapToETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FeeTaken","type":"event"},{"anonymous":false,"inputs":[],"name":"LimitsReset","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"enum StatefulContract.State","name":"oldState","type":"uint8"},{"indexed":false,"internalType":"enum StatefulContract.State","name":"newState","type":"uint8"}],"name":"UpgradedState","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getLastSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStats","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_adversaryCelebrityToken","type":"address"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"setup","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"swapAndBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526006805460ff60a01b1916905562000022650646880c880062000178565b608090815250737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200007b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000a1919062000a63565b6001600160a01b031660a052600a805460ff191690556000600b819055600c819055600d55348015620000d357600080fd5b506040518060400160405280601581526020017f456c6f6e204578706572696d656e742046454c4f4e00000000000000000000008152506040518060400160405280600881526020016746454c4f4e2e656560c01b81525081600390816200013c919062000b31565b5060046200014b828262000b31565b50506001600555506200015e3362000194565b6200017230608051620001e660201b60201c565b62000cda565b60006200018e82670de0b6b3a764000062000c13565b92915050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620002425760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b6200025060008383620002dd565b806002600082825462000264919062000c2d565b90915550506001600160a01b038216600090815260208190526040812080548392906200029390849062000c2d565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b620002f58383836200082160201b620007fb1760201c565b60006200030b600654600160a01b900460ff1690565b60038111156200031f576200031f62000a4d565b036200032a57505050565b600262000340600654600160a01b900460ff1690565b600381111562000354576200035462000a4d565b1480156200036457506012544210155b15620003765762000376600362000826565b6001600160a01b03821615806200039e5750816001600160a01b0316836001600160a01b0316145b15620003a957505050565b3360008181526013602052604090205460ff1680620003e057506001600160a01b03841660009081526013602052604090205460ff165b806200040457506001600160a01b03831660009081526013602052604090205460ff165b806200041f57503260009081526013602052604090205460ff165b15620004d6576001600160a01b038181166000908152601360205260408082205487841683528183205493871683528183205432845292829020549151631db8a4f360e31b815260a06004820152602160a48201527f5365727669636520756e617661696c61626c6520617420746865206d6f6d656e60c4820152601d60fa1b60e482015260ff91821615156024820152938116151560448501529182161515606484015216151560848201526101040162000239565b6001620004ec600654600160a01b900460ff1690565b600381111562000500576200050062000a4d565b148062000534575060026200051e600654600160a01b900460ff1690565b600381111562000532576200053262000a4d565b145b80156200055a57506001600160a01b03841660009081526009602052604090205460ff16155b80156200058057506001600160a01b03831660009081526009602052604090205460ff16155b156200081b576000806200059683878762000907565b915091508115620007e1576001600160a01b0385166000908152600e602052604090205442106200062057601054620005d0904262000c2d565b6001600160a01b0386166000908152600e6020908152604080832093909355600f905281812081905590517ff80cdc7daf5b39410cdf188e111cbe09e67548ba6f9c2f4e3bbac3b1162479b09190a15b6001600160a01b03851632146200067b576040516325dc4c5160e11b815260206004820152601560248201527f48756d616e73206f6e6c79206174206c61756e63680000000000000000000000604482015260640162000239565b600162000691600654600160a01b900460ff1690565b6003811115620006a557620006a562000a4d565b03620006b657620006b68562000949565b6001600160a01b0385166000908152600f60205260408120805491869190620006e0838562000c43565b90915550506011546001600160a01b0387166000908152600f60205260409020541315620007da578481826011546200071a919062000c6e565b6001600160a01b0389166000908152600e60205260409081902054601154601254925163c869158760e01b815260e06004820152603660e48201527f42757920657863656564206c696d6974732c20747279206c6f77657220616d6f6101048201527f756e74206f722074727920616761696e206c6174657200000000000000000000610124820152602481019690965260448601949094526064850192909252608484019190915260a483019190915260c48201526101440162000239565b5062000818565b801562000818576001600160a01b0386166000908152600f6020526040812080548692906200081290849062000c6e565b90915550505b50505b50505050565b505050565b8060038111156200083b576200083b62000a4d565b600654600160a01b900460ff1660038111156200085c576200085c62000a4d565b106200088d5760065460405163222b511b60e11b81526200023991600160a01b900460ff1690839060040162000cbb565b6006805482919060ff60a01b1916600160a01b836003811115620008b557620008b562000a4d565b02179055507f9fa1c989c9896c15b8b20df912a910ee2dd47559e137d781fb9d32102d442033600660149054906101000a900460ff1682604051620008fc92919062000cbb565b60405180910390a150565b600080620009158562000992565b620009265750600090508062000941565b620009318462000992565b6200093c8462000992565b915091505b935093915050565b6001600160a01b03811660009081526009602052604090205460ff16156200096e5750565b6001600160a01b03166000908152601360205260409020805460ff19166001179055565b6000620009aa8262000a3e60201b62000efa1760201c565b1562000a36576000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801562000a12575060408051601f3d908101601f1916820190925262000a0f9181019062000a63565b60015b1562000a34576001600160a01b0381161562000a32575060019392505050565b505b505b506000919050565b6001600160a01b03163b151590565b634e487b7160e01b600052602160045260246000fd5b60006020828403121562000a7657600080fd5b81516001600160a01b038116811462000a8e57600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000ac057607f821691505b60208210810362000ae157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200082157600081815260208120601f850160051c8101602086101562000b105750805b601f850160051c820191505b81811015620008185782815560010162000b1c565b81516001600160401b0381111562000b4d5762000b4d62000a95565b62000b658162000b5e845462000aab565b8462000ae7565b602080601f83116001811462000b9d576000841562000b845750858301515b600019600386901b1c1916600185901b17855562000818565b600085815260208120601f198616915b8281101562000bce5788860151825594840194600190910190840162000bad565b508582101562000bed5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200018e576200018e62000bfd565b808201808211156200018e576200018e62000bfd565b808201828112600083128015821682158216171562000c665762000c6662000bfd565b505092915050565b818103600083128015838313168383128216171562000c915762000c9162000bfd565b5092915050565b6004811062000cb757634e487b7160e01b600052602160045260246000fd5b9052565b6040810162000ccb828562000c98565b62000a8e602083018462000c98565b60805160a051612f9262000d0e6000396000818161106b01526111e0015260008181611e2f0152611e710152612f926000f3fe6080604052600436106101635760003560e01c8063715018a6116100c0578063a9059cbb11610074578063dd62ed3e11610059578063dd62ed3e146103bb578063f2fde38b1461040e578063f46d19821461042e57600080fd5b8063a9059cbb14610373578063c59d48471461039357600080fd5b80638da5cb5b116100a55780638da5cb5b1461030957806395d89b411461033e578063a457c2d71461035357600080fd5b8063715018a6146102d457806379cc6790146102e957600080fd5b806323b872dd1161011757806339509351116100fc578063395093511461025157806342966c681461027157806370a082311461029157600080fd5b806323b872dd14610215578063313ce5671461023557600080fd5b8063079b118411610148578063079b1184146101b1578063095ea7b3146101d057806318160ddd1461020057600080fd5b8063030a5a751461016f57806306fdde031461018657600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b50610184610441565b005b34801561019257600080fd5b5061019b610555565b6040516101a89190612ab5565b60405180910390f35b3480156101bd57600080fd5b50600d545b6040519081526020016101a8565b3480156101dc57600080fd5b506101f06101eb366004612b43565b6105e7565b60405190151581526020016101a8565b34801561020c57600080fd5b506002546101c2565b34801561022157600080fd5b506101f0610230366004612b6f565b610601565b34801561024157600080fd5b50604051601281526020016101a8565b34801561025d57600080fd5b506101f061026c366004612b43565b610627565b34801561027d57600080fd5b5061018461028c366004612bb0565b610673565b34801561029d57600080fd5b506101c26102ac366004612bc9565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b3480156102e057600080fd5b50610184610680565b3480156102f557600080fd5b50610184610304366004612b43565b610734565b34801561031557600080fd5b5060065460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a8565b34801561034a57600080fd5b5061019b61080a565b34801561035f57600080fd5b506101f061036e366004612b43565b610819565b34801561037f57600080fd5b506101f061038e366004612b43565b6108f5565b34801561039f57600080fd5b50600b54600c54604080519283526020830191909152016101a8565b3480156103c757600080fd5b506101c26103d6366004612be6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561041a57600080fd5b50610184610429366004612bc9565b610903565b61018461043c366004612b43565b6109b7565b6002600554036104b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600581905560065474010000000000000000000000000000000000000000900460ff1660038111156104e8576104e8612c1f565b8160038111156104fa576104fa612c1f565b11156105455780600660149054906101000a900460ff166040517fc1432afd0000000000000000000000000000000000000000000000000000000081526004016104a9929190612c89565b61054d610f16565b506001600555565b60606003805461056490612ca4565b80601f016020809104026020016040519081016040528092919081815260200182805461059090612ca4565b80156105dd5780601f106105b2576101008083540402835291602001916105dd565b820191906000526020600020905b8154815290600101906020018083116105c057829003601f168201915b5050505050905090565b6000336105f58185856114ce565b60019150505b92915050565b60003361060f858285611681565b61061a858585611758565b60019150505b9392505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906105f5908290869061066e908790612d26565b6114ce565b61067d3382611907565b50565b610688611b00565b60065460019074010000000000000000000000000000000000000000900460ff1660038111156106ba576106ba612c1f565b8160038111156106cc576106cc612c1f565b146107165780600660149054906101000a900460ff166040517fc1432afd0000000000000000000000000000000000000000000000000000000081526004016104a9929190612c89565b61071e611b83565b61072a6203f480611b95565b61067d6002611ba5565b60065460029074010000000000000000000000000000000000000000900460ff16600381111561076657610766612c1f565b81600381111561077857610778612c1f565b11156107c35780600660149054906101000a900460ff166040517fc1432afd0000000000000000000000000000000000000000000000000000000081526004016104a9929190612c89565b73ffffffffffffffffffffffffffffffffffffffff831660009081526013602052604090205460ff1615610800576107fb8383611907565b505050565b6107fb8383611cdf565b60606004805461056490612ca4565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156108dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016104a9565b6108ea82868684036114ce565b506001949350505050565b6000336105f5818585611758565b61090b611b00565b73ffffffffffffffffffffffffffffffffffffffff81166109ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104a9565b61067d81611cf8565b6109bf611b00565b60065460009074010000000000000000000000000000000000000000900460ff1660038111156109f1576109f1612c1f565b816003811115610a0357610a03612c1f565b14610a4d5780600660149054906101000a900460ff166040517fc1432afd0000000000000000000000000000000000000000000000000000000081526004016104a9929190612c89565b600260055403610ab9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104a9565b600260055573ffffffffffffffffffffffffffffffffffffffff8316610b3b576040517f77c322ca00000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f41647665727361727920746f6b656e206d697373696e6700000000000000000060448201526064016104a9565b81600003610ba5576040517f77c322ca00000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f446561646c696e65206973206d697373696e670000000000000000000000000060448201526064016104a9565b610bb364080863da20611d6f565b675fc1b97136320000610bc7613840601055565b803414610c30576040517f77c322ca00000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c6964206c69717569646974792076616c756500000000000000000060448201526064016104a9565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb39190612d39565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d529190612d39565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff9283166004820152911660248201526044016020604051808303816000875af1158015610dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de89190612d39565b600780547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff9384161790915560088054909116868316178155600654821660009081526009602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00908116600190811790925530845282842080548216831790559354909416825281208054831684179055737a250d5630b4cf539739df2c5dacb4c659f2488d90527fbaa441ac52505693dd98c7dd2f5bbf8f9349b7da9de72f9d52e5cac70e7da8ce80549091169091179055610ee583611d7e565b610eef6001611ba5565b505060016005555050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055600d5443146114a057600854604080517f079b11840000000000000000000000000000000000000000000000000000000081529051439273ffffffffffffffffffffffffffffffffffffffff169163079b118491600480830192602092919082900301816000875af1158015610fbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdf9190612d56565b146111b6573060009081526020819052604090205480156111b457604080516002808252606082018352600092602083019080368337019050509050308160008151811061102f5761102f612d6f565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061109d5761109d612d6f565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506110f630737a250d5630b4cf539739df2c5dacb4c659f2488d846114ce565b6040517f791ac947000000000000000000000000000000000000000000000000000000008152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac9479061114f908590600090869030904290600401612def565b600060405180830381600087803b15801561116957600080fd5b505af192505050801561117a575060015b6111b2576040518281527f69469fa6040ddfead198765e60d773ea29340d11c87ebff89827788fb6d65c3b9060200160405180910390a15b505b505b478015611333576040805160028082526060820183526000926020830190803683370190505090507f00000000000000000000000000000000000000000000000000000000000000008160008151811061121257611212612d6f565b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201015260085482519116908290600190811061125057611250612d6f565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526040517fb6f9de95000000000000000000000000000000000000000000000000000000008152737a250d5630b4cf539739df2c5dacb4c659f2488d9063b6f9de959084906112ce90600090869030904290600401612e38565b6000604051808303818588803b1580156112e757600080fd5b505af1935050505080156112f9575060015b611331576040518281527f0668deee0ea2fcf064f7b8a17995d02b0b148abeefea89aff88e9593ba1f28a59060200160405180910390a15b505b6008546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156113a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c69190612d56565b9050801561149d576008546040517f42966c680000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff909116906342966c6890602401600060405180830381600087803b15801561143a57600080fd5b505af115801561144e573d6000803e3d6000fd5b5050505080600b60008282546114649190612d26565b90915550506040518181527f7d45abaf6ead4b095a9f76f08641529978e72250fbaf64344985ec4bc46049e49060200160405180910390a15b50505b600a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905543600d55565b73ffffffffffffffffffffffffffffffffffffffff8316611570576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016104a9565b73ffffffffffffffffffffffffffffffffffffffff8216611613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016104a9565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146117525781811015611745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104a9565b61175284848484036114ce565b50505050565b600a5460ff16158015611791575073ffffffffffffffffffffffffffffffffffffffff831660009081526009602052604090205460ff16155b80156117c3575073ffffffffffffffffffffffffffffffffffffffff821660009081526009602052604090205460ff16155b1561184257336000806117d7838787611f6b565b91509150811580156118185750600260065474010000000000000000000000000000000000000000900460ff16600381111561181557611815612c1f565b10155b1561182557611825610f16565b801561183e57611836868686611fa5565b505050505050565b5050505b600060065474010000000000000000000000000000000000000000900460ff16600381111561187357611873612c1f565b118015611895575073ffffffffffffffffffffffffffffffffffffffff821630145b156118fc576040517fa744719900000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f43616e6e6f742073656e6420746f20636f6e7472616374206469726563746c7960448201526064016104a9565b6107fb838383612031565b73ffffffffffffffffffffffffffffffffffffffff82166119aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016104a9565b6119b6826000836122ef565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611a6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016104a9565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611aa8908490612e7a565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b60065473ffffffffffffffffffffffffffffffffffffffff163314611b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a9565b565b611b8b611b00565b611b816000611cf8565b611b9f8142612d26565b60125550565b806003811115611bb757611bb7612c1f565b60065474010000000000000000000000000000000000000000900460ff166003811115611be657611be6612c1f565b10611c3e576006546040517f4456a2360000000000000000000000000000000000000000000000000000000081526104a99174010000000000000000000000000000000000000000900460ff16908390600401612c89565b600680548291907fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000836003811115611c8f57611c8f612c1f565b02179055507f9fa1c989c9896c15b8b20df912a910ee2dd47559e137d781fb9d32102d442033600660149054906101000a900460ff1682604051611cd4929190612c89565b60405180910390a150565b611cea823383611681565b611cf48282611907565b5050565b6006805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611d7881612941565b60115550565b60065460009074010000000000000000000000000000000000000000900460ff166003811115611db057611db0612c1f565b816003811115611dc257611dc2612c1f565b14611e0c5780600660149054906101000a900460ff166040517fc1432afd0000000000000000000000000000000000000000000000000000000081526004016104a9929190612c89565b611e14611b00565b611e5330737a250d5630b4cf539739df2c5dacb4c659f2488d7f00000000000000000000000000000000000000000000000000000000000000006114ce565b737a250d5630b4cf539739df2c5dacb4c659f2488d63f305d71934307f00000000000000000000000000000000000000000000000000000000000000008083611eb160065473ffffffffffffffffffffffffffffffffffffffff1690565b60405160e088901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9586166004820152602481019490945260448401929092526064830152909116608482015260a4810186905260c40160606040518083038185885af1158015611f3f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f649190612e8d565b5050505050565b600080611f7785612955565b611f8657506000905080611f9d565b611f8f84612955565b611f9884612955565b915091505b935093915050565b60006103e8611fb5604584612ebb565b611fbf9190612ed2565b905080600c6000828254611fd39190612d26565b90915550611fed90508484611fe88486612e7a565b612031565b611ff8843083612031565b6040518181527f28ecfa9863ff521e372e36eca8b2401df92e9ed1deb428d178c53b727eb9b3cf9060200160405180910390a150505050565b73ffffffffffffffffffffffffffffffffffffffff83166120d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016104a9565b73ffffffffffffffffffffffffffffffffffffffff8216612177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016104a9565b6121828383836122ef565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015612238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016104a9565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526020819052604080822085850390559185168152908120805484929061227c908490612d26565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122e291815260200190565b60405180910390a3611752565b600060065474010000000000000000000000000000000000000000900460ff16600381111561232057612320612c1f565b0361232a57505050565b600260065474010000000000000000000000000000000000000000900460ff16600381111561235b5761235b612c1f565b14801561236a57506012544210155b15612379576123796003611ba5565b73ffffffffffffffffffffffffffffffffffffffff821615806123c757508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156123d157505050565b3360008181526013602052604090205460ff1680612414575073ffffffffffffffffffffffffffffffffffffffff841660009081526013602052604090205460ff165b80612444575073ffffffffffffffffffffffffffffffffffffffff831660009081526013602052604090205460ff165b8061245e57503260009081526013602052604090205460ff165b156125555773ffffffffffffffffffffffffffffffffffffffff81811660009081526013602052604080822054878416835281832054938716835281832054328452928290205491517fedc5279800000000000000000000000000000000000000000000000000000000815260a06004820152602160a48201527f5365727669636520756e617661696c61626c6520617420746865206d6f6d656e60c48201527f740000000000000000000000000000000000000000000000000000000000000060e482015260ff9182161515602482015293811615156044850152918216151560648401521615156084820152610104016104a9565b600160065474010000000000000000000000000000000000000000900460ff16600381111561258657612586612c1f565b14806125c05750600260065474010000000000000000000000000000000000000000900460ff1660038111156125be576125be612c1f565b145b80156125f2575073ffffffffffffffffffffffffffffffffffffffff841660009081526009602052604090205460ff16155b8015612624575073ffffffffffffffffffffffffffffffffffffffff831660009081526009602052604090205460ff16155b1561175257600080612637838787611f6b565b9150915081156128f95773ffffffffffffffffffffffffffffffffffffffff85166000908152600e602052604090205442106126d75760105461267a9042612d26565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600e6020908152604080832093909355600f905281812081905590517ff80cdc7daf5b39410cdf188e111cbe09e67548ba6f9c2f4e3bbac3b1162479b09190a15b73ffffffffffffffffffffffffffffffffffffffff85163214612756576040517f4bb898a200000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f48756d616e73206f6e6c79206174206c61756e6368000000000000000000000060448201526064016104a9565b600160065474010000000000000000000000000000000000000000900460ff16600381111561278757612787612c1f565b036127955761279585612a35565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600f602052604081208054918691906127ca8385612f0d565b909155505060115473ffffffffffffffffffffffffffffffffffffffff87166000908152600f602052604090205413156128f35784818260115461280e9190612f35565b73ffffffffffffffffffffffffffffffffffffffff89166000908152600e6020526040908190205460115460125492517fc869158700000000000000000000000000000000000000000000000000000000815260e06004820152603660e48201527f42757920657863656564206c696d6974732c20747279206c6f77657220616d6f6101048201527f756e74206f722074727920616761696e206c6174657200000000000000000000610124820152602481019690965260448601949094526064850192909252608484019190915260a483019190915260c4820152610144016104a9565b50611836565b80156118365773ffffffffffffffffffffffffffffffffffffffff86166000908152600f602052604081208054869290612934908490612f35565b9091555050505050505050565b60006105fb82670de0b6b3a7640000612ebb565b600073ffffffffffffffffffffffffffffffffffffffff82163b15612a2d5760008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156129fe575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526129fb91810190612d39565b60015b15612a2b5773ffffffffffffffffffffffffffffffffffffffff811615612a29575060019392505050565b505b505b506000919050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526009602052604090205460ff1615612a665750565b73ffffffffffffffffffffffffffffffffffffffff16600090815260136020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b600060208083528351808285015260005b81811015612ae257858101830151858201604001528201612ac6565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461067d57600080fd5b60008060408385031215612b5657600080fd5b8235612b6181612b21565b946020939093013593505050565b600080600060608486031215612b8457600080fd5b8335612b8f81612b21565b92506020840135612b9f81612b21565b929592945050506040919091013590565b600060208284031215612bc257600080fd5b5035919050565b600060208284031215612bdb57600080fd5b813561062081612b21565b60008060408385031215612bf957600080fd5b8235612c0481612b21565b91506020830135612c1481612b21565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110612c85577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b60408101612c978285612c4e565b6106206020830184612c4e565b600181811c90821680612cb857607f821691505b602082108103612cf1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156105fb576105fb612cf7565b600060208284031215612d4b57600080fd5b815161062081612b21565b600060208284031215612d6857600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020808501945080840160005b83811015612de457815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101612db2565b509495945050505050565b85815284602082015260a060408201526000612e0e60a0830186612d9e565b73ffffffffffffffffffffffffffffffffffffffff94909416606083015250608001529392505050565b848152608060208201526000612e516080830186612d9e565b73ffffffffffffffffffffffffffffffffffffffff949094166040830152506060015292915050565b818103818111156105fb576105fb612cf7565b600080600060608486031215612ea257600080fd5b8351925060208401519150604084015190509250925092565b80820281158282048414176105fb576105fb612cf7565b600082612f08577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018281126000831280158216821582161715612f2d57612f2d612cf7565b505092915050565b8181036000831280158383131683831282161715612f5557612f55612cf7565b509291505056fea2646970667358221220490be8e8bf4893fa2432b0804d55e023e341e445c4316e2e6c05e0b34e6b1a7664736f6c63430008110033
Deployed Bytecode
0x6080604052600436106101635760003560e01c8063715018a6116100c0578063a9059cbb11610074578063dd62ed3e11610059578063dd62ed3e146103bb578063f2fde38b1461040e578063f46d19821461042e57600080fd5b8063a9059cbb14610373578063c59d48471461039357600080fd5b80638da5cb5b116100a55780638da5cb5b1461030957806395d89b411461033e578063a457c2d71461035357600080fd5b8063715018a6146102d457806379cc6790146102e957600080fd5b806323b872dd1161011757806339509351116100fc578063395093511461025157806342966c681461027157806370a082311461029157600080fd5b806323b872dd14610215578063313ce5671461023557600080fd5b8063079b118411610148578063079b1184146101b1578063095ea7b3146101d057806318160ddd1461020057600080fd5b8063030a5a751461016f57806306fdde031461018657600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b50610184610441565b005b34801561019257600080fd5b5061019b610555565b6040516101a89190612ab5565b60405180910390f35b3480156101bd57600080fd5b50600d545b6040519081526020016101a8565b3480156101dc57600080fd5b506101f06101eb366004612b43565b6105e7565b60405190151581526020016101a8565b34801561020c57600080fd5b506002546101c2565b34801561022157600080fd5b506101f0610230366004612b6f565b610601565b34801561024157600080fd5b50604051601281526020016101a8565b34801561025d57600080fd5b506101f061026c366004612b43565b610627565b34801561027d57600080fd5b5061018461028c366004612bb0565b610673565b34801561029d57600080fd5b506101c26102ac366004612bc9565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b3480156102e057600080fd5b50610184610680565b3480156102f557600080fd5b50610184610304366004612b43565b610734565b34801561031557600080fd5b5060065460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a8565b34801561034a57600080fd5b5061019b61080a565b34801561035f57600080fd5b506101f061036e366004612b43565b610819565b34801561037f57600080fd5b506101f061038e366004612b43565b6108f5565b34801561039f57600080fd5b50600b54600c54604080519283526020830191909152016101a8565b3480156103c757600080fd5b506101c26103d6366004612be6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561041a57600080fd5b50610184610429366004612bc9565b610903565b61018461043c366004612b43565b6109b7565b6002600554036104b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600581905560065474010000000000000000000000000000000000000000900460ff1660038111156104e8576104e8612c1f565b8160038111156104fa576104fa612c1f565b11156105455780600660149054906101000a900460ff166040517fc1432afd0000000000000000000000000000000000000000000000000000000081526004016104a9929190612c89565b61054d610f16565b506001600555565b60606003805461056490612ca4565b80601f016020809104026020016040519081016040528092919081815260200182805461059090612ca4565b80156105dd5780601f106105b2576101008083540402835291602001916105dd565b820191906000526020600020905b8154815290600101906020018083116105c057829003601f168201915b5050505050905090565b6000336105f58185856114ce565b60019150505b92915050565b60003361060f858285611681565b61061a858585611758565b60019150505b9392505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906105f5908290869061066e908790612d26565b6114ce565b61067d3382611907565b50565b610688611b00565b60065460019074010000000000000000000000000000000000000000900460ff1660038111156106ba576106ba612c1f565b8160038111156106cc576106cc612c1f565b146107165780600660149054906101000a900460ff166040517fc1432afd0000000000000000000000000000000000000000000000000000000081526004016104a9929190612c89565b61071e611b83565b61072a6203f480611b95565b61067d6002611ba5565b60065460029074010000000000000000000000000000000000000000900460ff16600381111561076657610766612c1f565b81600381111561077857610778612c1f565b11156107c35780600660149054906101000a900460ff166040517fc1432afd0000000000000000000000000000000000000000000000000000000081526004016104a9929190612c89565b73ffffffffffffffffffffffffffffffffffffffff831660009081526013602052604090205460ff1615610800576107fb8383611907565b505050565b6107fb8383611cdf565b60606004805461056490612ca4565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156108dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016104a9565b6108ea82868684036114ce565b506001949350505050565b6000336105f5818585611758565b61090b611b00565b73ffffffffffffffffffffffffffffffffffffffff81166109ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104a9565b61067d81611cf8565b6109bf611b00565b60065460009074010000000000000000000000000000000000000000900460ff1660038111156109f1576109f1612c1f565b816003811115610a0357610a03612c1f565b14610a4d5780600660149054906101000a900460ff166040517fc1432afd0000000000000000000000000000000000000000000000000000000081526004016104a9929190612c89565b600260055403610ab9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104a9565b600260055573ffffffffffffffffffffffffffffffffffffffff8316610b3b576040517f77c322ca00000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f41647665727361727920746f6b656e206d697373696e6700000000000000000060448201526064016104a9565b81600003610ba5576040517f77c322ca00000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f446561646c696e65206973206d697373696e670000000000000000000000000060448201526064016104a9565b610bb364080863da20611d6f565b675fc1b97136320000610bc7613840601055565b803414610c30576040517f77c322ca00000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c6964206c69717569646974792076616c756500000000000000000060448201526064016104a9565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb39190612d39565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d529190612d39565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff9283166004820152911660248201526044016020604051808303816000875af1158015610dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de89190612d39565b600780547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff9384161790915560088054909116868316178155600654821660009081526009602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00908116600190811790925530845282842080548216831790559354909416825281208054831684179055737a250d5630b4cf539739df2c5dacb4c659f2488d90527fbaa441ac52505693dd98c7dd2f5bbf8f9349b7da9de72f9d52e5cac70e7da8ce80549091169091179055610ee583611d7e565b610eef6001611ba5565b505060016005555050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055600d5443146114a057600854604080517f079b11840000000000000000000000000000000000000000000000000000000081529051439273ffffffffffffffffffffffffffffffffffffffff169163079b118491600480830192602092919082900301816000875af1158015610fbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdf9190612d56565b146111b6573060009081526020819052604090205480156111b457604080516002808252606082018352600092602083019080368337019050509050308160008151811061102f5761102f612d6f565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061109d5761109d612d6f565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506110f630737a250d5630b4cf539739df2c5dacb4c659f2488d846114ce565b6040517f791ac947000000000000000000000000000000000000000000000000000000008152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac9479061114f908590600090869030904290600401612def565b600060405180830381600087803b15801561116957600080fd5b505af192505050801561117a575060015b6111b2576040518281527f69469fa6040ddfead198765e60d773ea29340d11c87ebff89827788fb6d65c3b9060200160405180910390a15b505b505b478015611333576040805160028082526060820183526000926020830190803683370190505090507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160008151811061121257611212612d6f565b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201015260085482519116908290600190811061125057611250612d6f565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526040517fb6f9de95000000000000000000000000000000000000000000000000000000008152737a250d5630b4cf539739df2c5dacb4c659f2488d9063b6f9de959084906112ce90600090869030904290600401612e38565b6000604051808303818588803b1580156112e757600080fd5b505af1935050505080156112f9575060015b611331576040518281527f0668deee0ea2fcf064f7b8a17995d02b0b148abeefea89aff88e9593ba1f28a59060200160405180910390a15b505b6008546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156113a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c69190612d56565b9050801561149d576008546040517f42966c680000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff909116906342966c6890602401600060405180830381600087803b15801561143a57600080fd5b505af115801561144e573d6000803e3d6000fd5b5050505080600b60008282546114649190612d26565b90915550506040518181527f7d45abaf6ead4b095a9f76f08641529978e72250fbaf64344985ec4bc46049e49060200160405180910390a15b50505b600a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905543600d55565b73ffffffffffffffffffffffffffffffffffffffff8316611570576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016104a9565b73ffffffffffffffffffffffffffffffffffffffff8216611613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016104a9565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146117525781811015611745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104a9565b61175284848484036114ce565b50505050565b600a5460ff16158015611791575073ffffffffffffffffffffffffffffffffffffffff831660009081526009602052604090205460ff16155b80156117c3575073ffffffffffffffffffffffffffffffffffffffff821660009081526009602052604090205460ff16155b1561184257336000806117d7838787611f6b565b91509150811580156118185750600260065474010000000000000000000000000000000000000000900460ff16600381111561181557611815612c1f565b10155b1561182557611825610f16565b801561183e57611836868686611fa5565b505050505050565b5050505b600060065474010000000000000000000000000000000000000000900460ff16600381111561187357611873612c1f565b118015611895575073ffffffffffffffffffffffffffffffffffffffff821630145b156118fc576040517fa744719900000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f43616e6e6f742073656e6420746f20636f6e7472616374206469726563746c7960448201526064016104a9565b6107fb838383612031565b73ffffffffffffffffffffffffffffffffffffffff82166119aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016104a9565b6119b6826000836122ef565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611a6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016104a9565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611aa8908490612e7a565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b60065473ffffffffffffffffffffffffffffffffffffffff163314611b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a9565b565b611b8b611b00565b611b816000611cf8565b611b9f8142612d26565b60125550565b806003811115611bb757611bb7612c1f565b60065474010000000000000000000000000000000000000000900460ff166003811115611be657611be6612c1f565b10611c3e576006546040517f4456a2360000000000000000000000000000000000000000000000000000000081526104a99174010000000000000000000000000000000000000000900460ff16908390600401612c89565b600680548291907fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000836003811115611c8f57611c8f612c1f565b02179055507f9fa1c989c9896c15b8b20df912a910ee2dd47559e137d781fb9d32102d442033600660149054906101000a900460ff1682604051611cd4929190612c89565b60405180910390a150565b611cea823383611681565b611cf48282611907565b5050565b6006805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611d7881612941565b60115550565b60065460009074010000000000000000000000000000000000000000900460ff166003811115611db057611db0612c1f565b816003811115611dc257611dc2612c1f565b14611e0c5780600660149054906101000a900460ff166040517fc1432afd0000000000000000000000000000000000000000000000000000000081526004016104a9929190612c89565b611e14611b00565b611e5330737a250d5630b4cf539739df2c5dacb4c659f2488d7f0000000000000000000000000000000000000057171a3a037fc0699d200000006114ce565b737a250d5630b4cf539739df2c5dacb4c659f2488d63f305d71934307f0000000000000000000000000000000000000057171a3a037fc0699d200000008083611eb160065473ffffffffffffffffffffffffffffffffffffffff1690565b60405160e088901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9586166004820152602481019490945260448401929092526064830152909116608482015260a4810186905260c40160606040518083038185885af1158015611f3f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f649190612e8d565b5050505050565b600080611f7785612955565b611f8657506000905080611f9d565b611f8f84612955565b611f9884612955565b915091505b935093915050565b60006103e8611fb5604584612ebb565b611fbf9190612ed2565b905080600c6000828254611fd39190612d26565b90915550611fed90508484611fe88486612e7a565b612031565b611ff8843083612031565b6040518181527f28ecfa9863ff521e372e36eca8b2401df92e9ed1deb428d178c53b727eb9b3cf9060200160405180910390a150505050565b73ffffffffffffffffffffffffffffffffffffffff83166120d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016104a9565b73ffffffffffffffffffffffffffffffffffffffff8216612177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016104a9565b6121828383836122ef565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015612238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016104a9565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526020819052604080822085850390559185168152908120805484929061227c908490612d26565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122e291815260200190565b60405180910390a3611752565b600060065474010000000000000000000000000000000000000000900460ff16600381111561232057612320612c1f565b0361232a57505050565b600260065474010000000000000000000000000000000000000000900460ff16600381111561235b5761235b612c1f565b14801561236a57506012544210155b15612379576123796003611ba5565b73ffffffffffffffffffffffffffffffffffffffff821615806123c757508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156123d157505050565b3360008181526013602052604090205460ff1680612414575073ffffffffffffffffffffffffffffffffffffffff841660009081526013602052604090205460ff165b80612444575073ffffffffffffffffffffffffffffffffffffffff831660009081526013602052604090205460ff165b8061245e57503260009081526013602052604090205460ff165b156125555773ffffffffffffffffffffffffffffffffffffffff81811660009081526013602052604080822054878416835281832054938716835281832054328452928290205491517fedc5279800000000000000000000000000000000000000000000000000000000815260a06004820152602160a48201527f5365727669636520756e617661696c61626c6520617420746865206d6f6d656e60c48201527f740000000000000000000000000000000000000000000000000000000000000060e482015260ff9182161515602482015293811615156044850152918216151560648401521615156084820152610104016104a9565b600160065474010000000000000000000000000000000000000000900460ff16600381111561258657612586612c1f565b14806125c05750600260065474010000000000000000000000000000000000000000900460ff1660038111156125be576125be612c1f565b145b80156125f2575073ffffffffffffffffffffffffffffffffffffffff841660009081526009602052604090205460ff16155b8015612624575073ffffffffffffffffffffffffffffffffffffffff831660009081526009602052604090205460ff16155b1561175257600080612637838787611f6b565b9150915081156128f95773ffffffffffffffffffffffffffffffffffffffff85166000908152600e602052604090205442106126d75760105461267a9042612d26565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600e6020908152604080832093909355600f905281812081905590517ff80cdc7daf5b39410cdf188e111cbe09e67548ba6f9c2f4e3bbac3b1162479b09190a15b73ffffffffffffffffffffffffffffffffffffffff85163214612756576040517f4bb898a200000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f48756d616e73206f6e6c79206174206c61756e6368000000000000000000000060448201526064016104a9565b600160065474010000000000000000000000000000000000000000900460ff16600381111561278757612787612c1f565b036127955761279585612a35565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600f602052604081208054918691906127ca8385612f0d565b909155505060115473ffffffffffffffffffffffffffffffffffffffff87166000908152600f602052604090205413156128f35784818260115461280e9190612f35565b73ffffffffffffffffffffffffffffffffffffffff89166000908152600e6020526040908190205460115460125492517fc869158700000000000000000000000000000000000000000000000000000000815260e06004820152603660e48201527f42757920657863656564206c696d6974732c20747279206c6f77657220616d6f6101048201527f756e74206f722074727920616761696e206c6174657200000000000000000000610124820152602481019690965260448601949094526064850192909252608484019190915260a483019190915260c4820152610144016104a9565b50611836565b80156118365773ffffffffffffffffffffffffffffffffffffffff86166000908152600f602052604081208054869290612934908490612f35565b9091555050505050505050565b60006105fb82670de0b6b3a7640000612ebb565b600073ffffffffffffffffffffffffffffffffffffffff82163b15612a2d5760008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156129fe575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526129fb91810190612d39565b60015b15612a2b5773ffffffffffffffffffffffffffffffffffffffff811615612a29575060019392505050565b505b505b506000919050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526009602052604090205460ff1615612a665750565b73ffffffffffffffffffffffffffffffffffffffff16600090815260136020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b600060208083528351808285015260005b81811015612ae257858101830151858201604001528201612ac6565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461067d57600080fd5b60008060408385031215612b5657600080fd5b8235612b6181612b21565b946020939093013593505050565b600080600060608486031215612b8457600080fd5b8335612b8f81612b21565b92506020840135612b9f81612b21565b929592945050506040919091013590565b600060208284031215612bc257600080fd5b5035919050565b600060208284031215612bdb57600080fd5b813561062081612b21565b60008060408385031215612bf957600080fd5b8235612c0481612b21565b91506020830135612c1481612b21565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110612c85577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b60408101612c978285612c4e565b6106206020830184612c4e565b600181811c90821680612cb857607f821691505b602082108103612cf1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156105fb576105fb612cf7565b600060208284031215612d4b57600080fd5b815161062081612b21565b600060208284031215612d6857600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020808501945080840160005b83811015612de457815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101612db2565b509495945050505050565b85815284602082015260a060408201526000612e0e60a0830186612d9e565b73ffffffffffffffffffffffffffffffffffffffff94909416606083015250608001529392505050565b848152608060208201526000612e516080830186612d9e565b73ffffffffffffffffffffffffffffffffffffffff949094166040830152506060015292915050565b818103818111156105fb576105fb612cf7565b600080600060608486031215612ea257600080fd5b8351925060208401519150604084015190509250925092565b80820281158282048414176105fb576105fb612cf7565b600082612f08577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018281126000831280158216821582161715612f2d57612f2d612cf7565b505092915050565b8181036000831280158383131683831282161715612f5557612f55612cf7565b509291505056fea2646970667358221220490be8e8bf4893fa2432b0804d55e023e341e445c4316e2e6c05e0b34e6b1a7664736f6c63430008110033
Deployed Bytecode Sourcemap
1311:100:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5974:135:2;;;;;;;;;;;;;:::i;:::-;;2135:98:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6428:94:2;;;;;;;;;;-1:-1:-1;6501:13:2;;6428:94;;;772:25:16;;;760:2;745:18;6428:94:2;626:177:16;4412:197:4;;;;;;;;;;-1:-1:-1;4412:197:4;;;;;:::i;:::-;;:::i;:::-;;;1452:14:16;;1445:22;1427:41;;1415:2;1400:18;4412:197:4;1287:187:16;3223:106:4;;;;;;;;;;-1:-1:-1;3310:12:4;;3223:106;;5171:286;;;;;;;;;;-1:-1:-1;5171:286:4;;;;;:::i;:::-;;:::i;3072:91::-;;;;;;;;;;-1:-1:-1;3072:91:4;;3154:2;2082:36:16;;2070:2;2055:18;3072:91:4;1940:184:16;5852:234:4;;;;;;;;;;-1:-1:-1;5852:234:4;;;;;:::i;:::-;;:::i;564:89:5:-;;;;;;;;;;-1:-1:-1;564:89:5;;;;;:::i;:::-;;:::i;3387:125:4:-;;;;;;;;;;-1:-1:-1;3387:125:4;;;;;:::i;:::-;3487:18;;3461:7;3487:18;;;;;;;;;;;;3387:125;6115:307:2;;;;;;;;;;;;;:::i;6657:330::-;;;;;;;;;;-1:-1:-1;6657:330:2;;;;;:::i;:::-;;:::i;1194:85:13:-;;;;;;;;;;-1:-1:-1;1266:6:13;;1194:85;;1266:6;;;;2712:74:16;;2700:2;2685:18;1194:85:13;2566:226:16;2346:102:4;;;;;;;;;;;;;:::i;6573:427::-;;;;;;;;;;-1:-1:-1;6573:427:4;;;;;:::i;:::-;;:::i;3708:189::-;;;;;;;;;;-1:-1:-1;3708:189:4;;;;;:::i;:::-;;:::i;6528:123:2:-;;;;;;;;;;-1:-1:-1;6607:21:2;;6630:13;;6528:123;;;2971:25:16;;;3027:2;3012:18;;3005:34;;;;2944:18;6528:123:2;2797:248:16;3955:149:4;;;;;;;;;;-1:-1:-1;3955:149:4;;;;;:::i;:::-;4070:18;;;;4044:7;4070:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3955:149;2074:198:13;;;;;;;;;;-1:-1:-1;2074:198:13;;;;;:::i;:::-;;:::i;4504:1392:2:-;;;;;;:::i;:::-;;:::i;5974:135::-;1744:1:14;2325:7;;:19;2317:63;;;;;;;3645:2:16;2317:63:14;;;3627:21:16;3684:2;3664:18;;;3657:30;3723:33;3703:18;;;3696:61;3774:18;;2317:63:14;;;;;;;;;1744:1;2455:7;:18;;;1379:12:15::1;::::0;;;::::1;;;1363:28;::::0;::::1;;;;;;:::i;:::-;:13;:28;;;;;;;;:::i;:::-;;1359:181;;;1462:13;1502:12;;;;;;;;;;;1414:115;;;;;;;;;;;;:::i;1359:181::-;6088:14:2::2;:12;:14::i;:::-;-1:-1:-1::0;1701:1:14;2628:7;:22;5974:135:2:o;2135:98:4:-;2189:13;2221:5;2214:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2135:98;:::o;4412:197::-;4495:4;719:10:3;4549:32:4;719:10:3;4565:7:4;4574:6;4549:8;:32::i;:::-;4598:4;4591:11;;;4412:197;;;;;:::o;5171:286::-;5298:4;719:10:3;5354:38:4;5370:4;719:10:3;5385:6:4;5354:15;:38::i;:::-;5402:27;5412:4;5418:2;5422:6;5402:9;:27::i;:::-;5446:4;5439:11;;;5171:286;;;;;;:::o;5852:234::-;719:10:3;5940:4:4;4070:18;;;:11;:18;;;;;;;;;:27;;;;;;;;;;5940:4;;719:10:3;5994:64:4;;719:10:3;;4070:27:4;;6019:38;;6047:10;;6019:38;:::i;:::-;5994:8;:64::i;564:89:5:-;619:27;719:10:3;639:6:5;619:5;:27::i;:::-;564:89;:::o;6115:307:2:-;1087:13:13;:11;:13::i;:::-;1121:12:15::1;::::0;6225:15:2::1;::::0;1121:12:15;;::::1;;;1104:29;::::0;::::1;;;;;;:::i;:::-;:13;:29;;;;;;;;:::i;:::-;;1100:182;;1204:13;1244:12;;;;;;;;;;;1156:115;;;;;;;;;;;;:::i;1100:182::-;6256:25:2::2;:23;:25::i;:::-;6345:30;6368:6;6345:22;:30::i;:::-;6386:29;6399:15;6386:12;:29::i;6657:330::-:0;1379:12:15;;6778:15:2;;1379:12:15;;;;;1363:28;;;;;;;;:::i;:::-;:13;:28;;;;;;;;:::i;:::-;;1359:181;;;1462:13;1502:12;;;;;;;;;;;1414:115;;;;;;;;;;;;:::i;1359:181::-;3697:17:1;;;3674:4;3697:17;;;:8;:17;;;;;;;;6809:131:2::1;;;6907:22;6913:7;6922:6;6907:5;:22::i;:::-;6657:330:::0;;;:::o;6809:131::-:1;6949:31;6964:7;6973:6;6949:14;:31::i;2346:102:4:-:0;2402:13;2434:7;2427:14;;;;;:::i;6573:427::-;719:10:3;6666:4:4;4070:18;;;:11;:18;;;;;;;;;:27;;;;;;;;;;6666:4;;719:10:3;6810:15:4;6790:16;:35;;6782:85;;;;;;;5549:2:16;6782:85:4;;;5531:21:16;5588:2;5568:18;;;5561:30;5627:34;5607:18;;;5600:62;5698:7;5678:18;;;5671:35;5723:19;;6782:85:4;5347:401:16;6782:85:4;6901:60;6910:5;6917:7;6945:15;6926:16;:34;6901:8;:60::i;:::-;-1:-1:-1;6989:4:4;;6573:427;-1:-1:-1;;;;6573:427:4:o;3708:189::-;3787:4;719:10:3;3841:28:4;719:10:3;3858:2:4;3862:6;3841:9;:28::i;2074:198:13:-;1087:13;:11;:13::i;:::-;2162:22:::1;::::0;::::1;2154:73;;;::::0;::::1;::::0;;5955:2:16;2154:73:13::1;::::0;::::1;5937:21:16::0;5994:2;5974:18;;;5967:30;6033:34;6013:18;;;6006:62;6104:8;6084:18;;;6077:36;6130:19;;2154:73:13::1;5753:402:16::0;2154:73:13::1;2237:28;2256:8;2237:18;:28::i;4504:1392:2:-:0;1087:13:13;:11;:13::i;:::-;1121:12:15::1;::::0;4638:19:2::1;::::0;1121:12:15;;::::1;;;1104:29;::::0;::::1;;;;;;:::i;:::-;:13;:29;;;;;;;;:::i;:::-;;1100:182;;1204:13;1244:12;;;;;;;;;;;1156:115;;;;;;;;;;;;:::i;1100:182::-;1744:1:14::2;2325:7;;:19:::0;2317:63:::2;;;::::0;::::2;::::0;;3645:2:16;2317:63:14::2;::::0;::::2;3627:21:16::0;3684:2;3664:18;;;3657:30;3723:33;3703:18;;;3696:61;3774:18;;2317:63:14::2;3443:355:16::0;2317:63:14::2;1744:1;2455:7;:18:::0;4698:38:2::3;::::0;::::3;4694:127;;4759:51;::::0;::::3;::::0;;6362:2:16;4759:51:2::3;::::0;::::3;6344:21:16::0;6401:2;6381:18;;;6374:30;6440:25;6420:18;;;6413:53;6483:18;;4759:51:2::3;6160:347:16::0;4694:127:2::3;4834:9;4847:1;4834:14:::0;4830:99:::3;;4871:47;::::0;::::3;::::0;;6714:2:16;4871:47:2::3;::::0;::::3;6696:21:16::0;6753:2;6733:18;;;6726:30;6792:21;6772:18;;;6765:49;6831:18;;4871:47:2::3;6512:343:16::0;4830:99:2::3;4939:80;4963:24;4939:10;:80::i;:::-;5058:9;5077:28;5097:7;3956:20:1::0;:28;3893:98;5077:28:2::3;5133:17;5120:9;:30;5116:119;;5173:51;::::0;::::3;::::0;;7062:2:16;5173:51:2::3;::::0;::::3;7044:21:16::0;7101:2;7081:18;;;7074:30;7140:25;7120:18;;;7113:53;7183:18;;5173:51:2::3;6860:347:16::0;5116:119:2::3;1383:42:1;5279:23:2;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5261:55;;;5342:4;1383:42:1;5365:20:2;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5261:140;::::0;;::::3;::::0;;;;;;7652:42:16;7721:15;;;5261:140:2::3;::::0;::::3;7703:34:16::0;7773:15;;7753:18;;;7746:43;7615:18;;5261:140:2::3;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5245:13;:156:::0;;;;;::::3;;::::0;;::::3;;::::0;;;5412:23:::3;:98:::0;;;;::::3;::::0;;::::3;;::::0;;1266:6:13;;;;-1:-1:-1;3548:26:1;;;:17;:26;;;;;;:47;;;;;;-1:-1:-1;3548:47:1;;;;;;5666:4:2::3;3548:26:1::0;;;;;:47;;;;;;;;5716:23:2;;;;::::3;3548:26:1::0;;;;:47;;;;;;;;1383:42:::3;3548:26:::0;;;:47;;;;;;;;;;5819:30:2::3;5839:9:::0;5819:19:::3;:30::i;:::-;5860:29;5873:15;5860:12;:29::i;:::-;-1:-1:-1::0;;1701:1:14::2;2628:7;:22:::0;-1:-1:-1;;4504:1392:2:o;1175:320:0:-;1465:19;;;:23;;;1175:320::o;4659:2096:1:-;2210:10;:17;;;;2223:4;2210:17;;;4715:13:::1;::::0;4732:12:::1;4715:29;4711:2038;;4764:23;::::0;:37:::1;::::0;;;;;;;4805:12:::1;::::0;4764:23:::1;;::::0;:35:::1;::::0;:37:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:23:::1;::::0;:37:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;4760:1019;;4877:4;4837:19;3487:18:4::0;;;;;;;;;;;4905:15:1;;4901:864:::1;;4968:16;::::0;;4982:1:::1;4968:16:::0;;;;;::::1;::::0;;4944:21:::1;::::0;4968:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;4968:16:1::1;4944:40;;5024:4;5006;5011:1;5006:7;;;;;;;;:::i;:::-;;;;;;:23;;;;;;;;;::::0;::::1;5061:5;5051:4;5056:1;5051:7;;;;;;;;:::i;:::-;;;;;;:15;;;;;;;;;::::0;::::1;5088:156;5130:4;1383:42;5211:11;5088:8;:156::i;:::-;5294:339;::::0;;;;1383:42:::1;::::0;5294:95:::1;::::0;:339:::1;::::0;5423:11;;5468:1:::1;::::0;5503:4;;5549::::1;::::0;5588:15:::1;::::0;5294:339:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;5266:481;;5694:30;::::0;772:25:16;;;5694:30:1::1;::::0;760:2:16;745:18;5694:30:1::1;;;;;;;5266:481;4922:843;4901:864;4819:960;4760:1019;5814:21;5853:14:::0;;5849:531:::1;;5911:16;::::0;;5925:1:::1;5911:16:::0;;;;;::::1;::::0;;5887:21:::1;::::0;5911:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;5911:16:1::1;5887:40;;5955:5;5945:4;5950:1;5945:7;;;;;;;;:::i;:::-;:15;::::0;;::::1;:7;::::0;;::::1;::::0;;;;;:15;5996:23:::1;::::0;5978:7;;5996:23;::::1;::::0;5978:4;;5996:23;;5978:7;::::1;;;;;:::i;:::-;:42;::::0;;::::1;:7;::::0;;::::1;::::0;;;;;;;:42;6062:197:::1;::::0;;;;1383:42:::1;::::0;6062:91:::1;::::0;6186:10;;6062:197:::1;::::0;6219:1:::1;::::0;6222:4;;6236::::1;::::0;6243:15:::1;::::0;6062:197:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;6038:328;;6312:35;::::0;772:25:16;;;6312:35:1::1;::::0;760:2:16;745:18;6312:35:1::1;;;;;;;6038:328;5869:511;5849:531;6421:23;::::0;:78:::1;::::0;;;;6480:4:::1;6421:78;::::0;::::1;2712:74:16::0;6394:24:1::1;::::0;6421:23:::1;;::::0;:33:::1;::::0;2685:18:16;;6421:78:1::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6394:105:::0;-1:-1:-1;6517:20:1;;6513:226:::1;;6557:23;::::0;:46:::1;::::0;;;;::::1;::::0;::::1;772:25:16::0;;;6557:23:1::1;::::0;;::::1;::::0;:28:::1;::::0;745:18:16;;6557:46:1::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;6646:16;6621:21;;:41;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;6685:39:1::1;::::0;772:25:16;;;6685:39:1::1;::::0;760:2:16;745:18;6685:39:1::1;;;;;;;6513:226;4746:2003;;4711:2038;2248:10:::0;:18;;;;;;2292:12;2276:13;:28;4659:2096::o;10089:370:4:-;10220:19;;;10212:68;;;;;;;10206:2:16;10212:68:4;;;10188:21:16;10245:2;10225:18;;;10218:30;10284:34;10264:18;;;10257:62;10355:6;10335:18;;;10328:34;10379:19;;10212:68:4;10004:400:16;10212:68:4;10298:21;;;10290:68;;;;;;;10611:2:16;10290:68:4;;;10593:21:16;10650:2;10630:18;;;10623:30;10689:34;10669:18;;;10662:62;10760:4;10740:18;;;10733:32;10782:19;;10290:68:4;10409:398:16;10290:68:4;10369:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10420:32;;772:25:16;;;10420:32:4;;745:18:16;10420:32:4;;;;;;;10089:370;;;:::o;10740:441::-;4070:18;;;;10870:24;4070:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;10956:17;10936:37;;10932:243;;11017:6;10997:16;:26;;10989:68;;;;;;;11014:2:16;10989:68:4;;;10996:21:16;11053:2;11033:18;;;11026:30;11092:31;11072:18;;;11065:59;11141:18;;10989:68:4;10812:353:16;10989:68:4;11099:51;11108:5;11115:7;11143:6;11124:16;:25;11099:8;:51::i;:::-;10860:321;10740:441;;;:::o;3394:752:2:-;3526:10;;;;3525:11;:39;;;;-1:-1:-1;3541:23:2;;;;;;;:17;:23;;;;;;;;3540:24;3525:39;:65;;;;-1:-1:-1;3569:21:2;;;;;;;:17;:21;;;;;;;;3568:22;3525:65;3521:411;;;719:10:3;3606:15:2;;3678:38;719:10:3;3707:4:2;3713:2;3678:19;:38::i;:::-;3650:66;;;;3735:5;3734:6;:40;;;;-1:-1:-1;3759:15:2;1631:12:15;;;;;;;3744:30:2;;;;;;;;:::i;:::-;;;3734:40;3730:93;;;3794:14;:12;:14::i;:::-;3840:6;3836:86;;;3873:34;3890:4;3896:2;3900:6;3873:16;:34::i;:::-;3866:41;;;3394:752;;;:::o;3836:86::-;3592:340;;;3521:411;3960:19;1631:12:15;;;;;;;3946:33:2;;;;;;;;:::i;:::-;;:56;;;;-1:-1:-1;3983:19:2;;;3997:4;3983:19;3946:56;3942:154;;;4025:60;;;;;11372:2:16;4025:60:2;;;11354:21:16;;;11391:18;;;11384:30;11450:34;11430:18;;;11423:62;11502:18;;4025:60:2;11170:356:16;3942:154:2;4106:33;4122:4;4128:2;4132:6;4106:15;:33::i;9090:576:4:-;9173:21;;;9165:67;;;;;;;11733:2:16;9165:67:4;;;11715:21:16;11772:2;11752:18;;;11745:30;11811:34;11791:18;;;11784:62;11882:3;11862:18;;;11855:31;11903:19;;9165:67:4;11531:397:16;9165:67:4;9243:49;9264:7;9281:1;9285:6;9243:20;:49::i;:::-;9328:18;;;9303:22;9328:18;;;;;;;;;;;9364:24;;;;9356:71;;;;;;;12135:2:16;9356:71:4;;;12117:21:16;12174:2;12154:18;;;12147:30;12213:34;12193:18;;;12186:62;12284:4;12264:18;;;12257:32;12306:19;;9356:71:4;11933:398:16;9356:71:4;9461:18;;;:9;:18;;;;;;;;;;9482:23;;;9461:44;;9525:12;:22;;9499:6;;9461:9;9525:22;;9499:6;;9525:22;:::i;:::-;;;;-1:-1:-1;;9563:37:4;;772:25:16;;;9589:1:4;;9563:37;;;;;;760:2:16;745:18;9563:37:4;;;;;;;6657:330:2;;;:::o;1352:130:13:-;1266:6;;1415:23;1266:6;719:10:3;1415:23:13;1407:68;;;;;;;12671:2:16;1407:68:13;;;12653:21:16;;;12690:18;;;12683:30;12749:34;12729:18;;;12722:62;12801:18;;1407:68:13;12469:356:16;1407:68:13;1352:130::o;1824:101::-;1087:13;:11;:13::i;:::-;1888:30:::1;1915:1;1888:18;:30::i;4097:122:1:-:0;4189:23;4207:5;4189:15;:23;:::i;:::-;4163;:49;-1:-1:-1;4097:122:1:o;1656:292:15:-;1733:8;1717:24;;;;;;;;:::i;:::-;:12;;;;;;;:24;;;;;;;;:::i;:::-;;1713:144;;1823:12;;1801:45;;;;;;;1823:12;;;;;;1837:8;;1801:45;;;:::i;1713:144::-;1866:12;:23;;1881:8;;1866:12;:23;;;1881:8;1866:23;;;;;;;;:::i;:::-;;;;;;1904:37;1918:12;;;;;;;;;;;1932:8;1904:37;;;;;;;:::i;:::-;;;;;;;;1656:292;:::o;959:161:5:-;1035:46;1051:7;719:10:3;1074:6:5;1035:15;:46::i;:::-;1091:22;1097:7;1106:6;1091:5;:22::i;:::-;959:161;;:::o;2426:187:13:-;2518:6;;;;2534:17;;;;;;;;;;;2566:40;;2518:6;;;2534:17;2518:6;;2566:40;;2499:16;;2566:40;2489:124;2426:187;:::o;3997:94:1:-;4065:19;4078:5;4065:12;:19::i;:::-;4051:11;:33;-1:-1:-1;3997:94:1:o;4225:428::-;1121:12:15;;4304:19:1;;1121:12:15;;;;;1104:29;;;;;;;;:::i;:::-;:13;:29;;;;;;;;:::i;:::-;;1100:182;;1204:13;1244:12;;;;;;;;;;;1156:115;;;;;;;;;;;;:::i;1100:182::-;1087:13:13::1;:11;:13::i;:::-;4357:67:1::2;4374:4;1383:42;4407:16;4357:8;:67::i;:::-;1383:42;4434:31;4473:9;4505:4;4524:16;::::0;4473:9;4607:7:::2;1266:6:13::0;;;;;1194:85;4607:7:1::2;4434:212;::::0;::::2;::::0;;;;;;;13127:42:16;13196:15;;;4434:212:1::2;::::0;::::2;13178:34:16::0;13228:18;;;13221:34;;;;13271:18;;;13264:34;;;;13314:18;;;13307:34;13378:15;;;13357:19;;;13350:44;13410:19;;;13403:35;;;13089:19;;4434:212:1::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;4225:428:::0;;:::o;3151:289::-;3276:10;3288:11;3316:19;3327:7;3316:10;:19::i;:::-;3311:72;;-1:-1:-1;3359:5:1;;-1:-1:-1;3359:5:1;3351:21;;3311:72;3400:16;3411:4;3400:10;:16::i;:::-;3418:14;3429:2;3418:10;:14::i;:::-;3392:41;;;;3151:289;;;;;;;:::o;4152:346:2:-;4268:15;4313:4;4287:22;1202:2:1;4287:6:2;:22;:::i;:::-;4286:31;;;;:::i;:::-;4268:49;;4344:7;4327:13;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;4361:43:2;;-1:-1:-1;4377:4:2;4383:2;4387:16;4396:7;4387:6;:16;:::i;:::-;4361:15;:43::i;:::-;4414:45;4430:4;4444;4451:7;4414:15;:45::i;:::-;4474:17;;772:25:16;;;4474:17:2;;760:2:16;745:18;4474:17:2;;;;;;;4258:240;4152:346;;;:::o;7454:651:4:-;7580:18;;;7572:68;;;;;;;14414:2:16;7572:68:4;;;14396:21:16;14453:2;14433:18;;;14426:30;14492:34;14472:18;;;14465:62;14563:7;14543:18;;;14536:35;14588:19;;7572:68:4;14212:401:16;7572:68:4;7658:16;;;7650:64;;;;;;;14820:2:16;7650:64:4;;;14802:21:16;14859:2;14839:18;;;14832:30;14898:34;14878:18;;;14871:62;14969:5;14949:18;;;14942:33;14992:19;;7650:64:4;14618:399:16;7650:64:4;7725:38;7746:4;7752:2;7756:6;7725:20;:38::i;:::-;7796:15;;;7774:19;7796:15;;;;;;;;;;;7829:21;;;;7821:72;;;;;;;15224:2:16;7821:72:4;;;15206:21:16;15263:2;15243:18;;;15236:30;15302:34;15282:18;;;15275:62;15373:8;15353:18;;;15346:36;15399:19;;7821:72:4;15022:402:16;7821:72:4;7927:15;;;;:9;:15;;;;;;;;;;;7945:20;;;7927:38;;7985:13;;;;;;;;:23;;7959:6;;7927:9;7985:23;;7959:6;;7985:23;:::i;:::-;;;;;;;;8039:2;8024:26;;8033:4;8024:26;;;8043:6;8024:26;;;;772:25:16;;760:2;745:18;;626:177;8024:26:4;;;;;;;;8061:37;6657:330:2;240:3148;489:19;1631:12:15;;;;;;;474:34:2;;;;;;;;:::i;:::-;;470:71;;240:3148;;;:::o;470:71::-;635:15;1631:12:15;;;;;;;620:30:2;;;;;;;;:::i;:::-;;:88;;;;;685:23;;666:15;:42;;620:88;603:165;;;733:24;746:10;733:12;:24::i;:::-;841:16;;;;;:30;;;869:2;861:10;;:4;:10;;;841:30;837:67;;;240:3148;;;:::o;837:67::-;719:10:3;914:15:2;3697:17:1;;;:8;:17;;;;;;;;1010:63:2;;;-1:-1:-1;3697:17:1;;;3674:4;3697:17;;;:8;:17;;;;;;;;1051:22:2;1010:99;;;-1:-1:-1;3697:17:1;;;3674:4;3697:17;;;:8;:17;;;;;;;;1089:20:2;1010:142;;;-1:-1:-1;1142:9:2;3674:4:1;3697:17;;;:8;:17;;;;;;;;1125:27:2;993:498;;;3697:17:1;;;;3674:4;3697:17;;;:8;:17;;;;;;;;;;;;;;;;;;;;;;;;;1455:9:2;3697:17:1;;;;;;;1184:296:2;;;;;15719:3:16;1184:296:2;;;15701:22:16;15760:2;15739:19;;;15732:31;15800:34;15779:19;;;15772:63;15872:3;15851:19;;;15844:32;3697:17:1;;;;15957:14:16;15950:22;15928:20;;;15921:52;3697:17:1;;;16016:14:16;16009:22;15989:18;;;15982:50;3697:17:1;;;16075:14:16;16068:22;16048:18;;;16041:50;3697:17:1;16135:14:16;16128:22;16107:19;;;16100:51;15893:19;;1184:296:2;15429:728:16;993:498:2;1600:15;1631:12:15;;;;;;;1585:30:2;;;;;;;;:::i;:::-;;:80;;;-1:-1:-1;1650:15:2;1631:12:15;;;;;;;1635:30:2;;;;;;;;:::i;:::-;;1585:80;1584:122;;;;-1:-1:-1;1683:23:2;;;;;;;:17;:23;;;;;;;;1682:24;1584:122;:160;;;;-1:-1:-1;1723:21:2;;;;;;;:17;:21;;;;;;;;1722:22;1584:160;1567:1815;;;1770:10;1782:11;1797:38;1817:7;1826:4;1832:2;1797:19;:38::i;:::-;1769:66;;;;1853:5;1849:1523;;;2534:26:1;;;2488:4;2534:26;;;:17;:26;;;;;;2515:15;:45;1920:268:2;;2064:20;;2022:62;;:15;:62;:::i;:::-;1974:21;;;;;;;:17;:21;;;;;;;;:110;;;;2106:15;:19;;;;;:23;;;2156:13;;;;1974:21;2156:13;1920:268;2280:15;;;2286:9;2280:15;2276:116;;2326:47;;;;;16364:2:16;2326:47:2;;;16346:21:16;16403:2;16383:18;;;16376:30;16442:23;16422:18;;;16415:51;16483:18;;2326:47:2;16162:345:16;2276:116:2;2475:15;1631:12:15;;;;;;;2460:30:2;;;;;;;;:::i;:::-;;2456:92;;2514:15;2526:2;2514:11;:15::i;:::-;2588:19;;;2566;2588;;;:15;:19;;;;;;;;2655:6;;2588:19;2625:37;2655:6;2588:19;2625:37;:::i;:::-;;;;-1:-1:-1;;2713:11:2;;2684:19;;;;;;;:15;:19;;;;;;:41;2680:588;;;2901:6;2947:12;3024;3009:11;;3002:34;;;;:::i;:::-;3079:21;;;;;;;:17;:21;;;;;;;;3142:11;;3203:23;;2756:493;;;;;17304:3:16;2756:493:2;;;17286:22:16;17345:2;17324:19;;;17317:31;17385:34;17364:19;;;17357:63;17457:24;17436:19;;;17429:53;17534:20;;;17527:36;;;;17579:18;;;17572:34;;;;17622:18;;;17615:34;;;;17665:19;;;17658:35;;;;17709:19;;;17702:35;;;;17753:19;;;17746:35;17499:19;;2756:493:2;16938:849:16;2680:588:2;1860:1422;1849:1523;;;3292:6;3288:84;;;3318:21;;;;;;;:15;:21;;;;;:39;;3350:6;;3318:21;:39;;3350:6;;3318:39;:::i;:::-;;;;-1:-1:-1;;1755:1627:2;;368:3020;240:3148;;;:::o;2573:110:1:-;2633:7;2659:17;:6;2669;2659:17;:::i;2747:398::-;2806:4;1465:19:0;;;;:23;2822:295:1;;2869:26;2917:7;2869:56;;2943:7;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2943:17:1;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;2939:168;;;3009:21;;;;3005:79;;-1:-1:-1;3061:4:1;;2747:398;-1:-1:-1;;;2747:398:1:o;3005:79::-;2961:137;2939:168;2855:262;2822:295;-1:-1:-1;3133:5:1;;2747:398;-1:-1:-1;2747:398:1:o;3727:160::-;3788:26;;;;;;;:17;:26;;;;;;;;3784:63;;;3727:160;:::o;3784:63::-;3856:17;;;;;;:8;:17;;;;;:24;;;;3876:4;3856:24;;;3727:160::o;14:607:16:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;612:2;542:66;537:2;529:6;525:15;521:88;510:9;506:104;502:113;494:121;;;;14:607;;;;:::o;808:154::-;894:42;887:5;883:54;876:5;873:65;863:93;;952:1;949;942:12;967:315;1035:6;1043;1096:2;1084:9;1075:7;1071:23;1067:32;1064:52;;;1112:1;1109;1102:12;1064:52;1151:9;1138:23;1170:31;1195:5;1170:31;:::i;:::-;1220:5;1272:2;1257:18;;;;1244:32;;-1:-1:-1;;;967:315:16:o;1479:456::-;1556:6;1564;1572;1625:2;1613:9;1604:7;1600:23;1596:32;1593:52;;;1641:1;1638;1631:12;1593:52;1680:9;1667:23;1699:31;1724:5;1699:31;:::i;:::-;1749:5;-1:-1:-1;1806:2:16;1791:18;;1778:32;1819:33;1778:32;1819:33;:::i;:::-;1479:456;;1871:7;;-1:-1:-1;;;1925:2:16;1910:18;;;;1897:32;;1479:456::o;2129:180::-;2188:6;2241:2;2229:9;2220:7;2216:23;2212:32;2209:52;;;2257:1;2254;2247:12;2209:52;-1:-1:-1;2280:23:16;;2129:180;-1:-1:-1;2129:180:16:o;2314:247::-;2373:6;2426:2;2414:9;2405:7;2401:23;2397:32;2394:52;;;2442:1;2439;2432:12;2394:52;2481:9;2468:23;2500:31;2525:5;2500:31;:::i;3050:388::-;3118:6;3126;3179:2;3167:9;3158:7;3154:23;3150:32;3147:52;;;3195:1;3192;3185:12;3147:52;3234:9;3221:23;3253:31;3278:5;3253:31;:::i;:::-;3303:5;-1:-1:-1;3360:2:16;3345:18;;3332:32;3373:33;3332:32;3373:33;:::i;:::-;3425:7;3415:17;;;3050:388;;;;;:::o;3803:184::-;3855:77;3852:1;3845:88;3952:4;3949:1;3942:15;3976:4;3973:1;3966:15;3992:290;4069:1;4062:5;4059:12;4049:200;;4105:77;4102:1;4095:88;4206:4;4203:1;4196:15;4234:4;4231:1;4224:15;4049:200;4258:18;;3992:290::o;4287:294::-;4465:2;4450:18;;4477:40;4454:9;4499:6;4477:40;:::i;:::-;4526:49;4571:2;4560:9;4556:18;4548:6;4526:49;:::i;4586:437::-;4665:1;4661:12;;;;4708;;;4729:61;;4783:4;4775:6;4771:17;4761:27;;4729:61;4836:2;4828:6;4825:14;4805:18;4802:38;4799:218;;4873:77;4870:1;4863:88;4974:4;4971:1;4964:15;5002:4;4999:1;4992:15;4799:218;;4586:437;;;:::o;5028:184::-;5080:77;5077:1;5070:88;5177:4;5174:1;5167:15;5201:4;5198:1;5191:15;5217:125;5282:9;;;5303:10;;;5300:36;;;5316:18;;:::i;7212:251::-;7282:6;7335:2;7323:9;7314:7;7310:23;7306:32;7303:52;;;7351:1;7348;7341:12;7303:52;7383:9;7377:16;7402:31;7427:5;7402:31;:::i;7800:184::-;7870:6;7923:2;7911:9;7902:7;7898:23;7894:32;7891:52;;;7939:1;7936;7929:12;7891:52;-1:-1:-1;7962:16:16;;7800:184;-1:-1:-1;7800:184:16:o;8178:::-;8230:77;8227:1;8220:88;8327:4;8324:1;8317:15;8351:4;8348:1;8341:15;8367:484;8420:3;8458:5;8452:12;8485:6;8480:3;8473:19;8511:4;8540:2;8535:3;8531:12;8524:19;;8577:2;8570:5;8566:14;8598:1;8608:218;8622:6;8619:1;8616:13;8608:218;;;8687:13;;8702:42;8683:62;8671:75;;8766:12;;;;8801:15;;;;8644:1;8637:9;8608:218;;;-1:-1:-1;8842:3:16;;8367:484;-1:-1:-1;;;;;8367:484:16:o;8856:605::-;9155:6;9144:9;9137:25;9198:6;9193:2;9182:9;9178:18;9171:34;9241:3;9236:2;9225:9;9221:18;9214:31;9118:4;9262:57;9314:3;9303:9;9299:19;9291:6;9262:57;:::i;:::-;9367:42;9355:55;;;;9350:2;9335:18;;9328:83;-1:-1:-1;9442:3:16;9427:19;9420:35;9254:65;8856:605;-1:-1:-1;;;8856:605:16:o;9466:533::-;9737:6;9726:9;9719:25;9780:3;9775:2;9764:9;9760:18;9753:31;9700:4;9801:57;9853:3;9842:9;9838:19;9830:6;9801:57;:::i;:::-;9906:42;9894:55;;;;9889:2;9874:18;;9867:83;-1:-1:-1;9981:2:16;9966:18;9959:34;9793:65;9466:533;-1:-1:-1;;9466:533:16:o;12336:128::-;12403:9;;;12424:11;;;12421:37;;;12438:18;;:::i;13449:306::-;13537:6;13545;13553;13606:2;13594:9;13585:7;13581:23;13577:32;13574:52;;;13622:1;13619;13612:12;13574:52;13651:9;13645:16;13635:26;;13701:2;13690:9;13686:18;13680:25;13670:35;;13745:2;13734:9;13730:18;13724:25;13714:35;;13449:306;;;;;:::o;13760:168::-;13833:9;;;13864;;13881:15;;;13875:22;;13861:37;13851:71;;13902:18;;:::i;13933:274::-;13973:1;13999;13989:189;;14034:77;14031:1;14024:88;14135:4;14132:1;14125:15;14163:4;14160:1;14153:15;13989:189;-1:-1:-1;14192:9:16;;13933:274::o;16512:216::-;16576:9;;;16604:11;;;16551:3;16634:9;;16662:10;;16658:19;;16687:10;;16679:19;;16655:44;16652:70;;;16702:18;;:::i;:::-;16652:70;;16512:216;;;;:::o;16733:200::-;16799:9;;;16772:4;16827:9;;16855:10;;16867:12;;;16851:29;16890:12;;;16882:21;;16848:56;16845:82;;;16907:18;;:::i;:::-;16845:82;16733:200;;;;:::o
Swarm Source
ipfs://490be8e8bf4893fa2432b0804d55e023e341e445c4316e2e6c05e0b34e6b1a76
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.