Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Loading...
Loading
Contract Name:
XyxyxLaunchpad2
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at sepolia-optimism.etherscan.io on 2025-01-31 */ /** *Submitted for verification at Etherscan.io on 2024-04-12 */ pragma solidity ^0.8.0; /// [MIT License] /// @title Base64 /// @notice Provides a function for encoding some bytes in base64 /// @author Brecht Devos <[email protected]> library Base64 { bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /// @notice Encodes some bytes to the base64 representation function encode(bytes memory data) internal pure returns (string memory) { uint256 len = data.length; if (len == 0) return ""; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((len + 2) / 3); // Add some extra buffer at the end bytes memory result = new bytes(encodedLen + 32); bytes memory table = TABLE; assembly { let tablePtr := add(table, 1) let resultPtr := add(result, 32) for { let i := 0 } lt(i, len) { } { i := add(i, 3) let input := and(mload(add(data, i)), 0xffffff) let out := mload(add(tablePtr, and(shr(18, input), 0x3F))) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF)) out := shl(224, out) mstore(resultPtr, out) resultPtr := add(resultPtr, 4) } switch mod(len, 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } mstore(result, encodedLen) } return string(result); } } // File: @openzeppelin/contracts/utils/math/SignedMath.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol) pragma solidity ^0.8.20; /** * @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); } } } // File: @openzeppelin/contracts/utils/math/Math.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol) pragma solidity ^0.8.20; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Muldiv operation overflow. */ error MathOverflowedMulDiv(); enum Rounding { Floor, // Toward negative infinity Ceil, // Toward positive infinity Trunc, // Toward zero Expand // Away from zero } /** * @dev Returns the addition of two unsigned integers, with an overflow flag. */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @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 towards infinity instead * of rounding towards zero. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { if (b == 0) { // Guarantee the same behavior as in a regular Solidity division. return a / b; } // (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 = x * y; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) 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. if (denominator <= prod1) { revert MathOverflowedMulDiv(); } /////////////////////////////////////////////// // 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. uint256 twos = denominator & (0 - denominator); 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 (unsignedRoundsUp(rounding) && 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 * towards zero. * * 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 + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2 of a positive value rounded towards zero. * 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 + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10 of a positive value rounded towards zero. * 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 + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0); } } /** * @dev Return the log in base 256 of a positive value rounded towards zero. * 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 + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0); } } /** * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers. */ function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) { return uint8(rounding) % 2 == 1; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol) pragma solidity ^0.8.20; /** * @dev String operations. */ library Strings { bytes16 private constant HEX_DIGITS = "0123456789abcdef"; uint8 private constant ADDRESS_LENGTH = 20; /** * @dev The `value` string doesn't fit in the specified `length`. */ error StringsInsufficientHexLength(uint256 value, uint256 length); /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), HEX_DIGITS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `int256` to its ASCII `string` decimal representation. */ function toStringSigned(int256 value) internal pure returns (string memory) { return string.concat(value < 0 ? "-" : "", toString(SignedMath.abs(value))); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { uint256 localValue = value; bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = HEX_DIGITS[localValue & 0xf]; localValue >>= 4; } if (localValue != 0) { revert StringsInsufficientHexLength(value, length); } return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal * representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH); } /** * @dev Returns true if the two strings are equal. */ function equal(string memory a, string memory b) internal pure returns (bool) { return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b)); } } // File: https://github.com/0xacme/ERC404/blob/main/src/ERC404.sol pragma solidity ^0.8.0; abstract contract Ownable { event OwnershipTransferred(address indexed user, address indexed newOwner); error Unauthorized(); error InvalidOwner(); address public owner; modifier onlyOwner() virtual { if (msg.sender != owner) revert Unauthorized(); _; } constructor(address _owner) { if (_owner == address(0)) revert InvalidOwner(); owner = _owner; emit OwnershipTransferred(address(0), _owner); } function transferOwnership(address _owner) public virtual onlyOwner { if (_owner == address(0)) revert InvalidOwner(); owner = _owner; emit OwnershipTransferred(msg.sender, _owner); } function revokeOwnership() public virtual onlyOwner { owner = address(0); emit OwnershipTransferred(msg.sender, address(0)); } } abstract contract ERC721Receiver { function onERC721Received( address, address, uint256, bytes calldata ) external virtual returns (bytes4) { return ERC721Receiver.onERC721Received.selector; } } //SPDX-License-Identifier: UNLICENSED /// @notice ERC404 /// A gas-efficient, mixed ERC20 / ERC721 implementation /// with native liquidity and fractionalization. /// /// This is an experimental standard designed to integrate /// with pre-existing ERC20 / ERC721 support as smoothly as /// possible. /// /// @dev In order to support full functionality of ERC20 and ERC721 /// supply assumptions are made that slightly constraint usage. /// Ensure decimals are sufficiently large (standard 18 recommended) /// as ids are effectively encoded in the lowest range of amounts. /// /// NFTs are spent on ERC20 functions in a FILO queue, this is by /// design. /// abstract contract ERC404 is Ownable { // Events event ERC20Transfer( address indexed from, address indexed to, uint256 amount ); event Approval( address indexed owner, address indexed spender, uint256 amount ); event Transfer( address indexed from, address indexed to, uint256 indexed id ); event ERC721Approval( address indexed owner, address indexed spender, uint256 indexed id ); event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); // Errors error NotFound(); error AlreadyExists(); error InvalidRecipient(); error InvalidSender(); error UnsafeRecipient(); // Metadata /// @dev Token name string public name; /// @dev Token symbol string public symbol; /// @dev Decimals for fractional representation uint8 public immutable decimals; /// @dev Total supply in fractionalized representation uint256 public immutable totalSupply; /// @dev Current mint counter, monotonically increasing to ensure accurate ownership uint256 public minted; // Mappings /// @dev Balance of user in fractional representation mapping(address => uint256) public balanceOf; /// @dev Allowance of user in fractional representation mapping(address => mapping(address => uint256)) public allowance; /// @dev Approval in native representaion mapping(uint256 => address) public getApproved; /// @dev Approval for all in native representation mapping(address => mapping(address => bool)) public isApprovedForAll; /// @dev Owner of id in native representation mapping(uint256 => address) internal _ownerOf; /// @dev Array of owned ids in native representation mapping(address => uint256[]) internal _owned; /// @dev Tracks indices for the _owned mapping mapping(uint256 => uint256) internal _ownedIndex; /// @dev Addresses whitelisted from minting / burning for gas savings (pairs, routers, etc) mapping(address => bool) public whitelist; // Constructor constructor( string memory _name, string memory _symbol, uint8 _decimals, uint256 _totalNativeSupply, address _owner ) Ownable(_owner) { name = _name; symbol = _symbol; decimals = _decimals; totalSupply = _totalNativeSupply * (10 ** decimals); } /// @notice Initialization function to set pairs / etc /// saving gas by avoiding mint / burn on unnecessary targets function setWhitelist(address target, bool state) public onlyOwner { whitelist[target] = state; } /// @notice Function to find owner of a given native token function ownerOf(uint256 id) public view virtual returns (address owner) { owner = _ownerOf[id]; if (owner == address(0)) { revert NotFound(); } } /// @notice tokenURI must be implemented by child contract function tokenURI(uint256 id) public view virtual returns (string memory); /// @notice Function for token approvals /// @dev This function assumes id / native if amount less than or equal to current max id function approve( address spender, uint256 amountOrId ) public virtual returns (bool) { if (amountOrId <= minted && amountOrId > 0) { address owner = _ownerOf[amountOrId]; if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) { revert Unauthorized(); } getApproved[amountOrId] = spender; emit Approval(owner, spender, amountOrId); } else { allowance[msg.sender][spender] = amountOrId; emit Approval(msg.sender, spender, amountOrId); } return true; } /// @notice Function native approvals function setApprovalForAll(address operator, bool approved) public virtual { isApprovedForAll[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } /// @notice Function for mixed transfers /// @dev This function assumes id / native if amount less than or equal to current max id function transferFrom( address from, address to, uint256 amountOrId ) public virtual { if (amountOrId <= minted) { if (from != _ownerOf[amountOrId]) { revert InvalidSender(); } if (to == address(0)) { revert InvalidRecipient(); } if ( msg.sender != from && !isApprovedForAll[from][msg.sender] && msg.sender != getApproved[amountOrId] ) { revert Unauthorized(); } balanceOf[from] -= _getUnit(); unchecked { balanceOf[to] += _getUnit(); } _ownerOf[amountOrId] = to; delete getApproved[amountOrId]; // update _owned for sender uint256 updatedId = _owned[from][_owned[from].length - 1]; _owned[from][_ownedIndex[amountOrId]] = updatedId; // pop _owned[from].pop(); // update index for the moved id _ownedIndex[updatedId] = _ownedIndex[amountOrId]; // push token to to owned _owned[to].push(amountOrId); // update index for to owned _ownedIndex[amountOrId] = _owned[to].length - 1; emit Transfer(from, to, amountOrId); emit ERC20Transfer(from, to, _getUnit()); } else { uint256 allowed = allowance[from][msg.sender]; if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amountOrId; _transfer(from, to, amountOrId); } } /// @notice Function for fractional transfers function transfer( address to, uint256 amount ) public virtual returns (bool) { return _transfer(msg.sender, to, amount); } /// @notice Function for native transfers with contract support function safeTransferFrom( address from, address to, uint256 id ) public virtual { transferFrom(from, to, id); if ( to.code.length != 0 && ERC721Receiver(to).onERC721Received(msg.sender, from, id, "") != ERC721Receiver.onERC721Received.selector ) { revert UnsafeRecipient(); } } /// @notice Function for native transfers with contract support and callback data function safeTransferFrom( address from, address to, uint256 id, bytes calldata data ) public virtual { transferFrom(from, to, id); if ( to.code.length != 0 && ERC721Receiver(to).onERC721Received(msg.sender, from, id, data) != ERC721Receiver.onERC721Received.selector ) { revert UnsafeRecipient(); } } /// @notice Internal function for fractional transfers function _transfer( address from, address to, uint256 amount ) internal returns (bool) { uint256 unit = _getUnit(); uint256 balanceBeforeSender = balanceOf[from]; uint256 balanceBeforeReceiver = balanceOf[to]; balanceOf[from] -= amount; unchecked { balanceOf[to] += amount; } // Skip burn for certain addresses to save gas if (!whitelist[from]) { uint256 tokens_to_burn = (balanceBeforeSender / unit) - (balanceOf[from] / unit); for (uint256 i = 0; i < tokens_to_burn; i++) { _burn(from); } } // Skip minting for certain addresses to save gas if (!whitelist[to]) { uint256 tokens_to_mint = (balanceOf[to] / unit) - (balanceBeforeReceiver / unit); for (uint256 i = 0; i < tokens_to_mint; i++) { _mint(to); } } emit ERC20Transfer(from, to, amount); return true; } // Internal utility logic function _getUnit() internal view returns (uint256) { return 10 ** decimals; } function _mint(address to) internal virtual { if (to == address(0)) { revert InvalidRecipient(); } unchecked { minted++; } uint256 id = minted; if (_ownerOf[id] != address(0)) { revert AlreadyExists(); } _ownerOf[id] = to; _owned[to].push(id); _ownedIndex[id] = _owned[to].length - 1; emit Transfer(address(0), to, id); } function _burn(address from) internal virtual { if (from == address(0)) { revert InvalidSender(); } uint256 id = _owned[from][_owned[from].length - 1]; _owned[from].pop(); delete _ownedIndex[id]; delete _ownerOf[id]; delete getApproved[id]; emit Transfer(from, address(0), id); } function _setNameSymbol( string memory _name, string memory _symbol ) internal { name = _name; symbol = _symbol; } } pragma solidity ^0.8.0; contract XyxyxLaunchpad2 is ERC404 { string private _svgBody; constructor( string memory name, string memory symbol, uint8 decimals, uint256 totalSupply, string memory svgBody ) ERC404(name, symbol, decimals, totalSupply, msg.sender) { _svgBody = svgBody; balanceOf[msg.sender] = totalSupply * 10 ** uint256(decimals); setWhitelist(msg.sender, true); } function tokenURI(uint256 tokenId) public view override returns (string memory) { string memory svg = string(abi.encodePacked( _svgBody )); string memory json = Base64.encode(bytes(abi.encodePacked( '{"name": "', name, ' #', toString(tokenId), '", "description": "Generated at xyxyx.pro", "image": "data:image/svg+xml;base64,', Base64.encode(bytes(svg)), '"}' ))); return string(abi.encodePacked("data:application/json;base64,", json)); } function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT license // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } }
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"string","name":"svgBody","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyExists","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"NotFound","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"UnsafeRecipient","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":"amount","type":"uint256"}],"name":"ERC20Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ERC721Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revokeOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c060405234801562000010575f80fd5b506040516200201438038062002014833981016040819052620000339162000253565b8484848433808062000058576040516349e27cff60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b03831690811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001620000ae86826200038d565b506002620000bd85826200038d565b5060ff83166080819052620000d490600a62000564565b620000e090836200057b565b60a05250600c9350620000fa92508491508390506200038d565b506200010b60ff8416600a62000595565b6200011790836200057b565b335f818152600460205260409020919091556200013690600162000141565b5050505050620005a2565b5f546001600160a01b031633146200016b576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112620001b9575f80fd5b81516001600160401b0380821115620001d657620001d662000195565b604051601f8301601f19908116603f0116810190828211818310171562000201576200020162000195565b816040528381526020925086838588010111156200021d575f80fd5b5f91505b8382101562000240578582018301518183018401529082019062000221565b5f93810190920192909252949350505050565b5f805f805f60a0868803121562000268575f80fd5b85516001600160401b03808211156200027f575f80fd5b6200028d89838a01620001a9565b96506020880151915080821115620002a3575f80fd5b620002b189838a01620001a9565b95506040880151915060ff82168214620002c9575f80fd5b60608801516080890151929550935080821115620002e5575f80fd5b50620002f488828901620001a9565b9150509295509295909350565b600181811c908216806200031657607f821691505b6020821081036200033557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000388575f81815260208120601f850160051c81016020861015620003635750805b601f850160051c820191505b8181101562000384578281556001016200036f565b5050505b505050565b81516001600160401b03811115620003a957620003a962000195565b620003c181620003ba845462000301565b846200033b565b602080601f831160018114620003f7575f8415620003df5750858301515b5f19600386901b1c1916600185901b17855562000384565b5f85815260208120601f198616915b82811015620004275788860151825594840194600190910190840162000406565b50858210156200044557878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620004a957815f19048211156200048d576200048d62000455565b808516156200049b57918102915b93841c93908002906200046e565b509250929050565b5f82620004c1575060016200055e565b81620004cf57505f6200055e565b8160018114620004e85760028114620004f35762000513565b60019150506200055e565b60ff84111562000507576200050762000455565b50506001821b6200055e565b5060208310610133831016604e8410600b841016171562000538575081810a6200055e565b62000544838362000469565b805f19048211156200055a576200055a62000455565b0290505b92915050565b5f6200057460ff841683620004b1565b9392505050565b80820281158282048414176200055e576200055e62000455565b5f620005748383620004b1565b60805160a051611a49620005cb5f395f6101c701525f81816102190152610d2f0152611a495ff3fe608060405234801561000f575f80fd5b506004361061013d575f3560e01c806370a08231116100b4578063a9059cbb11610079578063a9059cbb146102fd578063b88d4fde14610310578063c87b56dd14610323578063dd62ed3e14610336578063e985e9c514610360578063f2fde38b1461038d575f80fd5b806370a082311461028f5780638da5cb5b146102ae57806395d89b41146102c05780639b19251a146102c8578063a22cb465146102ea575f80fd5b80632b968958116101055780632b9689581461020c578063313ce5671461021457806342842e0e1461024d5780634f02c4201461026057806353d6fd59146102695780636352211e1461027c575f80fd5b806306fdde0314610141578063081812fc1461015f578063095ea7b31461019f57806318160ddd146101c257806323b872dd146101f7575b5f80fd5b6101496103a0565b60405161015691906113c6565b60405180910390f35b61018761016d3660046113f8565b60066020525f90815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610156565b6101b26101ad366004611425565b61042c565b6040519015158152602001610156565b6101e97f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610156565b61020a61020536600461144d565b610577565b005b61020a6108f3565b61023b7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610156565b61020a61025b36600461144d565b610957565b6101e960035481565b61020a610277366004611486565b610a28565b61018761028a3660046113f8565b610a7b565b6101e961029d3660046114bf565b60046020525f908152604090205481565b5f54610187906001600160a01b031681565b610149610ab5565b6101b26102d63660046114bf565b600b6020525f908152604090205460ff1681565b61020a6102f8366004611486565b610ac2565b6101b261030b366004611425565b610b2d565b61020a61031e3660046114d8565b610b40565b6101496103313660046113f8565b610c00565b6101e961034436600461156b565b600560209081525f928352604080842090915290825290205481565b6101b261036e36600461156b565b600760209081525f928352604080842090915290825290205460ff1681565b61020a61039b3660046114bf565b610c8f565b600180546103ad9061159c565b80601f01602080910402602001604051908101604052809291908181526020018280546103d99061159c565b80156104245780601f106103fb57610100808354040283529160200191610424565b820191905f5260205f20905b81548152906001019060200180831161040757829003601f168201915b505050505081565b5f600354821115801561043e57505f82115b15610512575f828152600860205260409020546001600160a01b031633811480159061048d57506001600160a01b0381165f90815260076020908152604080832033845290915290205460ff16155b156104aa576040516282b42960e81b815260040160405180910390fd5b5f8381526006602090815260409182902080546001600160a01b0319166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35061056d565b335f8181526005602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b6003548111610887575f818152600860205260409020546001600160a01b038481169116146105b957604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0382166105e057604051634e46966960e11b815260040160405180910390fd5b336001600160a01b0384161480159061061c57506001600160a01b0383165f90815260076020908152604080832033845290915290205460ff16155b801561063e57505f818152600660205260409020546001600160a01b03163314155b1561065b576040516282b42960e81b815260040160405180910390fd5b610663610d29565b6001600160a01b0384165f908152600460205260408120805490919061068a9084906115e8565b909155506106989050610d29565b6001600160a01b038084165f81815260046020908152604080832080549096019095558582526008815284822080546001600160a01b031990811690941790556006815284822080549093169092559186168252600990529081208054610701906001906115e8565b81548110610711576107116115fb565b5f9182526020808320909101546001600160a01b0387168352600982526040808420868552600a90935290922054815492935083928110610754576107546115fb565b5f9182526020808320909101929092556001600160a01b03861681526009909152604090208054806107885761078861160f565b5f828152602080822083015f19908101839055909201909255838252600a8152604080832054848452818420556001600160a01b0386168084526009835290832080546001818101835582865293852001869055925290546107ea91906115e8565b5f838152600a602052604080822092909255905183916001600160a01b0380871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4826001600160a01b0316846001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487610870610d29565b60405190815260200160405180910390a350505050565b6001600160a01b0383165f9081526005602090815260408083203384529091529020545f1981146108e0576108bc82826115e8565b6001600160a01b0385165f9081526005602090815260408083203384529091529020555b6108eb848484610d5a565b50505b505050565b5f546001600160a01b0316331461091c576040516282b42960e81b815260040160405180910390fd5b5f80546001600160a01b031916815560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b610962838383610577565b6001600160a01b0382163b15801590610a0a5750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401525f608484015290919084169063150b7a029060a4016020604051808303815f875af11580156109d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109fd9190611623565b6001600160e01b03191614155b156108ee57604051633da6393160e01b815260040160405180910390fd5b5f546001600160a01b03163314610a51576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b5f818152600860205260409020546001600160a01b031680610ab05760405163c5723b5160e01b815260040160405180910390fd5b919050565b600280546103ad9061159c565b335f8181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b5f610b39338484610d5a565b9392505050565b610b4b858585610577565b6001600160a01b0384163b15801590610be25750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290610b959033908a9089908990899060040161164a565b6020604051808303815f875af1158015610bb1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bd59190611623565b6001600160e01b03191614155b156108eb57604051633da6393160e01b815260040160405180910390fd5b60605f600c604051602001610c159190611734565b60405160208183030381529060405290505f610c646001610c3586610f13565b610c3e85611018565b604051602001610c509392919061173f565b604051602081830303815290604052611018565b905080604051602001610c779190611811565b60405160208183030381529060405292505050919050565b5f546001600160a01b03163314610cb8576040516282b42960e81b815260040160405180910390fd5b6001600160a01b038116610cdf576040516349e27cff60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f610d557f0000000000000000000000000000000000000000000000000000000000000000600a611935565b905090565b5f80610d64610d29565b6001600160a01b038087165f818152600460205260408082208054948a1683529082205492825293945091929091869190610d9f83866115e8565b90915550506001600160a01b038087165f90815260046020908152604080832080548a019055928a168252600b9052205460ff16610e38576001600160a01b0387165f90815260046020526040812054610dfa908590611957565b610e048585611957565b610e0e91906115e8565b90505f5b81811015610e3557610e238961117b565b80610e2d8161196a565b915050610e12565b50505b6001600160a01b0386165f908152600b602052604090205460ff16610eb9575f610e628483611957565b6001600160a01b0388165f90815260046020526040902054610e85908690611957565b610e8f91906115e8565b90505f5b81811015610eb657610ea48861129c565b80610eae8161196a565b915050610e93565b50505b856001600160a01b0316876001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148787604051610efe91815260200190565b60405180910390a35060019695505050505050565b6060815f03610f395750506040805180820190915260018152600360fc1b602082015290565b815f5b8115610f625780610f4c8161196a565b9150610f5b9050600a83611957565b9150610f3c565b5f8167ffffffffffffffff811115610f7c57610f7c611982565b6040519080825280601f01601f191660200182016040528015610fa6576020820181803683370190505b5090505b841561101057610fbb6001836115e8565b9150610fc8600a86611996565b610fd39060306119a9565b60f81b818381518110610fe857610fe86115fb565b60200101906001600160f81b03191690815f1a905350611009600a86611957565b9450610faa565b949350505050565b80516060905f81900361103a57505060408051602081019091525f8152919050565b5f60036110488360026119a9565b6110529190611957565b61105d9060046119bc565b90505f61106b8260206119a9565b67ffffffffffffffff81111561108357611083611982565b6040519080825280601f01601f1916602001820160405280156110ad576020820181803683370190505b5090505f6040518060600160405280604081526020016119d460409139905060018101602083015f5b86811015611137576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b8352600490920191016110d6565b50600386066001811461115157600281146111625761116d565b613d3d60f01b60011983015261116d565b603d60f81b5f198301525b505050918152949350505050565b6001600160a01b0381166111a257604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0381165f90815260096020526040812080546111c7906001906115e8565b815481106111d7576111d76115fb565b905f5260205f200154905060095f836001600160a01b03166001600160a01b031681526020019081526020015f208054806112145761121461160f565b5f828152602080822083015f19908101839055909201909255828252600a815260408083208390556008825280832080546001600160a01b031990811690915560069092528083208054909216909155518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b0381166112c357604051634e46966960e11b815260040160405180910390fd5b60038054600101908190555f818152600860205260409020546001600160a01b0316156113035760405163119b4fd360e11b815260040160405180910390fd5b5f81815260086020908152604080832080546001600160a01b0319166001600160a01b03871690811790915580845260098352908320805460018181018355828652938520018590559252905461135a91906115e8565b5f828152600a602052604080822092909255905182916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f5b838110156113be5781810151838201526020016113a6565b50505f910152565b602081525f82518060208401526113e48160408501602087016113a4565b601f01601f19169190910160400192915050565b5f60208284031215611408575f80fd5b5035919050565b80356001600160a01b0381168114610ab0575f80fd5b5f8060408385031215611436575f80fd5b61143f8361140f565b946020939093013593505050565b5f805f6060848603121561145f575f80fd5b6114688461140f565b92506114766020850161140f565b9150604084013590509250925092565b5f8060408385031215611497575f80fd5b6114a08361140f565b9150602083013580151581146114b4575f80fd5b809150509250929050565b5f602082840312156114cf575f80fd5b610b398261140f565b5f805f805f608086880312156114ec575f80fd5b6114f58661140f565b94506115036020870161140f565b935060408601359250606086013567ffffffffffffffff80821115611526575f80fd5b818801915088601f830112611539575f80fd5b813581811115611547575f80fd5b896020828501011115611558575f80fd5b9699959850939650602001949392505050565b5f806040838503121561157c575f80fd5b6115858361140f565b91506115936020840161140f565b90509250929050565b600181811c908216806115b057607f821691505b6020821081036115ce57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610571576105716115d4565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b5f60208284031215611633575f80fd5b81516001600160e01b031981168114610b39575f80fd5b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290525f828460a08401375f60a0848401015260a0601f19601f85011683010190509695505050505050565b80545f90600181811c90808316806116b557607f831692505b602080841082036116d457634e487b7160e01b5f52602260045260245ffd5b8180156116e857600181146116fd57611728565b60ff1986168952841515850289019650611728565b5f888152602090205f5b868110156117205781548b820152908501908301611707565b505084890196505b50505050505092915050565b5f610b39828461169c565b693d913730b6b2911d101160b11b81525f61175d600a83018661169c565b61202360f01b815284516117788160028401602089016113a4565b7f222c20226465736372697074696f6e223a202247656e65726174656420617420600292909101918201527f78797879782e70726f222c2022696d616765223a2022646174613a696d61676560228201526f0bdcdd99cade1b5b0ed8985cd94d8d0b60821b604282015283516117f58160528401602088016113a4565b61227d60f01b6052929091019182015260540195945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081525f825161184881601d8501602087016113a4565b91909101601d0192915050565b600181815b8085111561188f57815f1904821115611875576118756115d4565b8085161561188257918102915b93841c939080029061185a565b509250929050565b5f826118a557506001610571565b816118b157505f610571565b81600181146118c757600281146118d1576118ed565b6001915050610571565b60ff8411156118e2576118e26115d4565b50506001821b610571565b5060208310610133831016604e8410600b8410161715611910575081810a610571565b61191a8383611855565b805f190482111561192d5761192d6115d4565b029392505050565b5f610b3960ff841683611897565b634e487b7160e01b5f52601260045260245ffd5b5f8261196557611965611943565b500490565b5f6001820161197b5761197b6115d4565b5060010190565b634e487b7160e01b5f52604160045260245ffd5b5f826119a4576119a4611943565b500690565b80820180821115610571576105716115d4565b8082028115828204841417610571576105716115d456fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220644831ecf1c8108da25c3d6ee0bc7a4088c983a6407c5167e646cfa524484a6e64736f6c6343000814003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000c48656c6c6f2046757475726500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002484600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013133c7376672077696474683d2232313222206865696768743d223330302220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f7376672220786d6c6e733a786c696e6b3d22687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b223e3c6d657461646174613e47656e6572617465642061742078797879782e70726f3c646573633e3c2f646573633e3c2f6d657461646174613e3c7374796c653e2e736c696465207b646973706c61793a206e6f6e653b7d2e736c6964653a7461726765747b646973706c61793a20626c6f636b3b7d74657874207b666f6e742d66616d696c793a202754696d6573204e657720526f6d616e272c2054696d65732c2073657269663b7d2e6e61767b706f736974696f6e3a2072656c61746976653b7a2d696e6465783a20393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393b613a686f766572207b6f7061636974793a20302e347d7d3c2f7374796c653e3c612069643d22736c696465312220636c6173733d22736c6964652220786c696e6b3a687265663d2223736c696465312220783d2231302220793d2230222077696474683d2232313222206865696768743d2233303022207374796c653d22646973706c61793a20626c6f636b223e3c726563742077696474683d2232313222206865696768743d22333030222066696c6c3d222346464622202f3e3c7465787420783d2231302220793d2232302220746578742d616e63686f723d226c6566742220666f6e742d73697a653d22367078222066696c6c3d22233030302220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c207365726966223e3c747370616e20783d223130222064793d22302220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223e48656c6c6f2c20576f726c643c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c2f746578743e3c2f613e3c612069643d22736c696465322220636c6173733d22736c6964652220786c696e6b3a687265663d2223736c696465322220783d2231302220793d2230222077696474683d2232313222206865696768743d2233303022207374796c653d22223e3c726563742077696474683d2232313222206865696768743d22333030222066696c6c3d222346464622202f3e3c7465787420783d2231302220793d2232302220746578742d616e63686f723d226c6566742220666f6e742d73697a653d22367078222066696c6c3d22233030302220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c207365726966223e3c747370616e20783d223130222064793d22302220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223e48656c6c6f2c204675747572653c2f747370616e3e3c2f746578743e3c2f613e3c7465787420783d2231302220793d223239302220636c6173733d226e61762220666f6e742d73697a653d22367078222066696c6c3d2223303030223e3c747370616e20636c6173733d226e6176222064783d2230223e3c6120636c6173733d226e61762220786c696e6b3a687265663d2223736c69646531223e313c2f613e3c2f747370616e3e3c747370616e20636c6173733d226e6176222064783d2232223e3c6120636c6173733d226e61762220786c696e6b3a687265663d2223736c69646532223e323c2f613e3c2f747370616e3e3c2f746578743e3c2f7376673e00000000000000000000000000
Deployed Bytecode
0x608060405234801561000f575f80fd5b506004361061013d575f3560e01c806370a08231116100b4578063a9059cbb11610079578063a9059cbb146102fd578063b88d4fde14610310578063c87b56dd14610323578063dd62ed3e14610336578063e985e9c514610360578063f2fde38b1461038d575f80fd5b806370a082311461028f5780638da5cb5b146102ae57806395d89b41146102c05780639b19251a146102c8578063a22cb465146102ea575f80fd5b80632b968958116101055780632b9689581461020c578063313ce5671461021457806342842e0e1461024d5780634f02c4201461026057806353d6fd59146102695780636352211e1461027c575f80fd5b806306fdde0314610141578063081812fc1461015f578063095ea7b31461019f57806318160ddd146101c257806323b872dd146101f7575b5f80fd5b6101496103a0565b60405161015691906113c6565b60405180910390f35b61018761016d3660046113f8565b60066020525f90815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610156565b6101b26101ad366004611425565b61042c565b6040519015158152602001610156565b6101e97f0000000000000000000000000000000000000000000000000de0b6b3a764000081565b604051908152602001610156565b61020a61020536600461144d565b610577565b005b61020a6108f3565b61023b7f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff9091168152602001610156565b61020a61025b36600461144d565b610957565b6101e960035481565b61020a610277366004611486565b610a28565b61018761028a3660046113f8565b610a7b565b6101e961029d3660046114bf565b60046020525f908152604090205481565b5f54610187906001600160a01b031681565b610149610ab5565b6101b26102d63660046114bf565b600b6020525f908152604090205460ff1681565b61020a6102f8366004611486565b610ac2565b6101b261030b366004611425565b610b2d565b61020a61031e3660046114d8565b610b40565b6101496103313660046113f8565b610c00565b6101e961034436600461156b565b600560209081525f928352604080842090915290825290205481565b6101b261036e36600461156b565b600760209081525f928352604080842090915290825290205460ff1681565b61020a61039b3660046114bf565b610c8f565b600180546103ad9061159c565b80601f01602080910402602001604051908101604052809291908181526020018280546103d99061159c565b80156104245780601f106103fb57610100808354040283529160200191610424565b820191905f5260205f20905b81548152906001019060200180831161040757829003601f168201915b505050505081565b5f600354821115801561043e57505f82115b15610512575f828152600860205260409020546001600160a01b031633811480159061048d57506001600160a01b0381165f90815260076020908152604080832033845290915290205460ff16155b156104aa576040516282b42960e81b815260040160405180910390fd5b5f8381526006602090815260409182902080546001600160a01b0319166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35061056d565b335f8181526005602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b6003548111610887575f818152600860205260409020546001600160a01b038481169116146105b957604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0382166105e057604051634e46966960e11b815260040160405180910390fd5b336001600160a01b0384161480159061061c57506001600160a01b0383165f90815260076020908152604080832033845290915290205460ff16155b801561063e57505f818152600660205260409020546001600160a01b03163314155b1561065b576040516282b42960e81b815260040160405180910390fd5b610663610d29565b6001600160a01b0384165f908152600460205260408120805490919061068a9084906115e8565b909155506106989050610d29565b6001600160a01b038084165f81815260046020908152604080832080549096019095558582526008815284822080546001600160a01b031990811690941790556006815284822080549093169092559186168252600990529081208054610701906001906115e8565b81548110610711576107116115fb565b5f9182526020808320909101546001600160a01b0387168352600982526040808420868552600a90935290922054815492935083928110610754576107546115fb565b5f9182526020808320909101929092556001600160a01b03861681526009909152604090208054806107885761078861160f565b5f828152602080822083015f19908101839055909201909255838252600a8152604080832054848452818420556001600160a01b0386168084526009835290832080546001818101835582865293852001869055925290546107ea91906115e8565b5f838152600a602052604080822092909255905183916001600160a01b0380871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4826001600160a01b0316846001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487610870610d29565b60405190815260200160405180910390a350505050565b6001600160a01b0383165f9081526005602090815260408083203384529091529020545f1981146108e0576108bc82826115e8565b6001600160a01b0385165f9081526005602090815260408083203384529091529020555b6108eb848484610d5a565b50505b505050565b5f546001600160a01b0316331461091c576040516282b42960e81b815260040160405180910390fd5b5f80546001600160a01b031916815560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b610962838383610577565b6001600160a01b0382163b15801590610a0a5750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401525f608484015290919084169063150b7a029060a4016020604051808303815f875af11580156109d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109fd9190611623565b6001600160e01b03191614155b156108ee57604051633da6393160e01b815260040160405180910390fd5b5f546001600160a01b03163314610a51576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b5f818152600860205260409020546001600160a01b031680610ab05760405163c5723b5160e01b815260040160405180910390fd5b919050565b600280546103ad9061159c565b335f8181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b5f610b39338484610d5a565b9392505050565b610b4b858585610577565b6001600160a01b0384163b15801590610be25750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290610b959033908a9089908990899060040161164a565b6020604051808303815f875af1158015610bb1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bd59190611623565b6001600160e01b03191614155b156108eb57604051633da6393160e01b815260040160405180910390fd5b60605f600c604051602001610c159190611734565b60405160208183030381529060405290505f610c646001610c3586610f13565b610c3e85611018565b604051602001610c509392919061173f565b604051602081830303815290604052611018565b905080604051602001610c779190611811565b60405160208183030381529060405292505050919050565b5f546001600160a01b03163314610cb8576040516282b42960e81b815260040160405180910390fd5b6001600160a01b038116610cdf576040516349e27cff60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f610d557f0000000000000000000000000000000000000000000000000000000000000012600a611935565b905090565b5f80610d64610d29565b6001600160a01b038087165f818152600460205260408082208054948a1683529082205492825293945091929091869190610d9f83866115e8565b90915550506001600160a01b038087165f90815260046020908152604080832080548a019055928a168252600b9052205460ff16610e38576001600160a01b0387165f90815260046020526040812054610dfa908590611957565b610e048585611957565b610e0e91906115e8565b90505f5b81811015610e3557610e238961117b565b80610e2d8161196a565b915050610e12565b50505b6001600160a01b0386165f908152600b602052604090205460ff16610eb9575f610e628483611957565b6001600160a01b0388165f90815260046020526040902054610e85908690611957565b610e8f91906115e8565b90505f5b81811015610eb657610ea48861129c565b80610eae8161196a565b915050610e93565b50505b856001600160a01b0316876001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148787604051610efe91815260200190565b60405180910390a35060019695505050505050565b6060815f03610f395750506040805180820190915260018152600360fc1b602082015290565b815f5b8115610f625780610f4c8161196a565b9150610f5b9050600a83611957565b9150610f3c565b5f8167ffffffffffffffff811115610f7c57610f7c611982565b6040519080825280601f01601f191660200182016040528015610fa6576020820181803683370190505b5090505b841561101057610fbb6001836115e8565b9150610fc8600a86611996565b610fd39060306119a9565b60f81b818381518110610fe857610fe86115fb565b60200101906001600160f81b03191690815f1a905350611009600a86611957565b9450610faa565b949350505050565b80516060905f81900361103a57505060408051602081019091525f8152919050565b5f60036110488360026119a9565b6110529190611957565b61105d9060046119bc565b90505f61106b8260206119a9565b67ffffffffffffffff81111561108357611083611982565b6040519080825280601f01601f1916602001820160405280156110ad576020820181803683370190505b5090505f6040518060600160405280604081526020016119d460409139905060018101602083015f5b86811015611137576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b8352600490920191016110d6565b50600386066001811461115157600281146111625761116d565b613d3d60f01b60011983015261116d565b603d60f81b5f198301525b505050918152949350505050565b6001600160a01b0381166111a257604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0381165f90815260096020526040812080546111c7906001906115e8565b815481106111d7576111d76115fb565b905f5260205f200154905060095f836001600160a01b03166001600160a01b031681526020019081526020015f208054806112145761121461160f565b5f828152602080822083015f19908101839055909201909255828252600a815260408083208390556008825280832080546001600160a01b031990811690915560069092528083208054909216909155518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b0381166112c357604051634e46966960e11b815260040160405180910390fd5b60038054600101908190555f818152600860205260409020546001600160a01b0316156113035760405163119b4fd360e11b815260040160405180910390fd5b5f81815260086020908152604080832080546001600160a01b0319166001600160a01b03871690811790915580845260098352908320805460018181018355828652938520018590559252905461135a91906115e8565b5f828152600a602052604080822092909255905182916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f5b838110156113be5781810151838201526020016113a6565b50505f910152565b602081525f82518060208401526113e48160408501602087016113a4565b601f01601f19169190910160400192915050565b5f60208284031215611408575f80fd5b5035919050565b80356001600160a01b0381168114610ab0575f80fd5b5f8060408385031215611436575f80fd5b61143f8361140f565b946020939093013593505050565b5f805f6060848603121561145f575f80fd5b6114688461140f565b92506114766020850161140f565b9150604084013590509250925092565b5f8060408385031215611497575f80fd5b6114a08361140f565b9150602083013580151581146114b4575f80fd5b809150509250929050565b5f602082840312156114cf575f80fd5b610b398261140f565b5f805f805f608086880312156114ec575f80fd5b6114f58661140f565b94506115036020870161140f565b935060408601359250606086013567ffffffffffffffff80821115611526575f80fd5b818801915088601f830112611539575f80fd5b813581811115611547575f80fd5b896020828501011115611558575f80fd5b9699959850939650602001949392505050565b5f806040838503121561157c575f80fd5b6115858361140f565b91506115936020840161140f565b90509250929050565b600181811c908216806115b057607f821691505b6020821081036115ce57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610571576105716115d4565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b5f60208284031215611633575f80fd5b81516001600160e01b031981168114610b39575f80fd5b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290525f828460a08401375f60a0848401015260a0601f19601f85011683010190509695505050505050565b80545f90600181811c90808316806116b557607f831692505b602080841082036116d457634e487b7160e01b5f52602260045260245ffd5b8180156116e857600181146116fd57611728565b60ff1986168952841515850289019650611728565b5f888152602090205f5b868110156117205781548b820152908501908301611707565b505084890196505b50505050505092915050565b5f610b39828461169c565b693d913730b6b2911d101160b11b81525f61175d600a83018661169c565b61202360f01b815284516117788160028401602089016113a4565b7f222c20226465736372697074696f6e223a202247656e65726174656420617420600292909101918201527f78797879782e70726f222c2022696d616765223a2022646174613a696d61676560228201526f0bdcdd99cade1b5b0ed8985cd94d8d0b60821b604282015283516117f58160528401602088016113a4565b61227d60f01b6052929091019182015260540195945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081525f825161184881601d8501602087016113a4565b91909101601d0192915050565b600181815b8085111561188f57815f1904821115611875576118756115d4565b8085161561188257918102915b93841c939080029061185a565b509250929050565b5f826118a557506001610571565b816118b157505f610571565b81600181146118c757600281146118d1576118ed565b6001915050610571565b60ff8411156118e2576118e26115d4565b50506001821b610571565b5060208310610133831016604e8410600b8410161715611910575081810a610571565b61191a8383611855565b805f190482111561192d5761192d6115d4565b029392505050565b5f610b3960ff841683611897565b634e487b7160e01b5f52601260045260245ffd5b5f8261196557611965611943565b500490565b5f6001820161197b5761197b6115d4565b5060010190565b634e487b7160e01b5f52604160045260245ffd5b5f826119a4576119a4611943565b500690565b80820180821115610571576105716115d4565b8082028115828204841417610571576105716115d456fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220644831ecf1c8108da25c3d6ee0bc7a4088c983a6407c5167e646cfa524484a6e64736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000c48656c6c6f2046757475726500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002484600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013133c7376672077696474683d2232313222206865696768743d223330302220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f7376672220786d6c6e733a786c696e6b3d22687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b223e3c6d657461646174613e47656e6572617465642061742078797879782e70726f3c646573633e3c2f646573633e3c2f6d657461646174613e3c7374796c653e2e736c696465207b646973706c61793a206e6f6e653b7d2e736c6964653a7461726765747b646973706c61793a20626c6f636b3b7d74657874207b666f6e742d66616d696c793a202754696d6573204e657720526f6d616e272c2054696d65732c2073657269663b7d2e6e61767b706f736974696f6e3a2072656c61746976653b7a2d696e6465783a20393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393b613a686f766572207b6f7061636974793a20302e347d7d3c2f7374796c653e3c612069643d22736c696465312220636c6173733d22736c6964652220786c696e6b3a687265663d2223736c696465312220783d2231302220793d2230222077696474683d2232313222206865696768743d2233303022207374796c653d22646973706c61793a20626c6f636b223e3c726563742077696474683d2232313222206865696768743d22333030222066696c6c3d222346464622202f3e3c7465787420783d2231302220793d2232302220746578742d616e63686f723d226c6566742220666f6e742d73697a653d22367078222066696c6c3d22233030302220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c207365726966223e3c747370616e20783d223130222064793d22302220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223e48656c6c6f2c20576f726c643c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c2f746578743e3c2f613e3c612069643d22736c696465322220636c6173733d22736c6964652220786c696e6b3a687265663d2223736c696465322220783d2231302220793d2230222077696474683d2232313222206865696768743d2233303022207374796c653d22223e3c726563742077696474683d2232313222206865696768743d22333030222066696c6c3d222346464622202f3e3c7465787420783d2231302220793d2232302220746578742d616e63686f723d226c6566742220666f6e742d73697a653d22367078222066696c6c3d22233030302220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c207365726966223e3c747370616e20783d223130222064793d22302220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078223e48656c6c6f2c204675747572653c2f747370616e3e3c2f746578743e3c2f613e3c7465787420783d2231302220793d223239302220636c6173733d226e61762220666f6e742d73697a653d22367078222066696c6c3d2223303030223e3c747370616e20636c6173733d226e6176222064783d2230223e3c6120636c6173733d226e61762220786c696e6b3a687265663d2223736c69646531223e313c2f613e3c2f747370616e3e3c747370616e20636c6173733d226e6176222064783d2232223e3c6120636c6173733d226e61762220786c696e6b3a687265663d2223736c69646532223e323c2f613e3c2f747370616e3e3c2f746578743e3c2f7376673e00000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): Hello Future
Arg [1] : symbol (string): HF
Arg [2] : decimals (uint8): 18
Arg [3] : totalSupply (uint256): 1
Arg [4] : svgBody (string): <svg width="212" height="300" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><metadata>Generated at xyxyx.pro<desc></desc></metadata><style>.slide {display: none;}.slide:target{display: block;}text {font-family: 'Times New Roman', Times, serif;}.nav{position: relative;z-index: 9999999999999999999999999999999999999999999999999999999999999999999999999;a:hover {opacity: 0.4}}</style><a id="slide1" class="slide" xlink:href="#slide1" x="10" y="0" width="212" height="300" style="display: block"><rect width="212" height="300" fill="#FFF" /><text x="10" y="20" text-anchor="left" font-size="6px" fill="#000" font-family="'Times New Roman', Times, serif"><tspan x="10" dy="0" font-family="'Times New Roman', Times, serif" font-size="6px">Hello, World</tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan><tspan x="10" dy="1.2em" font-family="'Times New Roman', Times, serif" font-size="6px"> </tspan></text></a><a id="slide2" class="slide" xlink:href="#slide2" x="10" y="0" width="212" height="300" style=""><rect width="212" height="300" fill="#FFF" /><text x="10" y="20" text-anchor="left" font-size="6px" fill="#000" font-family="'Times New Roman', Times, serif"><tspan x="10" dy="0" font-family="'Times New Roman', Times, serif" font-size="6px">Hello, Future</tspan></text></a><text x="10" y="290" class="nav" font-size="6px" fill="#000"><tspan class="nav" dx="0"><a class="nav" xlink:href="#slide1">1</a></tspan><tspan class="nav" dx="2"><a class="nav" xlink:href="#slide2">2</a></tspan></text></svg>
-----Encoded View---------------
163 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [6] : 48656c6c6f204675747572650000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [8] : 4846000000000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000001313
Arg [10] : 3c7376672077696474683d2232313222206865696768743d223330302220786d
Arg [11] : 6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722
Arg [12] : 20786d6c6e733a786c696e6b3d22687474703a2f2f7777772e77332e6f72672f
Arg [13] : 313939392f786c696e6b223e3c6d657461646174613e47656e65726174656420
Arg [14] : 61742078797879782e70726f3c646573633e3c2f646573633e3c2f6d65746164
Arg [15] : 6174613e3c7374796c653e2e736c696465207b646973706c61793a206e6f6e65
Arg [16] : 3b7d2e736c6964653a7461726765747b646973706c61793a20626c6f636b3b7d
Arg [17] : 74657874207b666f6e742d66616d696c793a202754696d6573204e657720526f
Arg [18] : 6d616e272c2054696d65732c2073657269663b7d2e6e61767b706f736974696f
Arg [19] : 6e3a2072656c61746976653b7a2d696e6465783a203939393939393939393939
Arg [20] : 3939393939393939393939393939393939393939393939393939393939393939
Arg [21] : 3939393939393939393939393939393939393939393939393939393939393b61
Arg [22] : 3a686f766572207b6f7061636974793a20302e347d7d3c2f7374796c653e3c61
Arg [23] : 2069643d22736c696465312220636c6173733d22736c6964652220786c696e6b
Arg [24] : 3a687265663d2223736c696465312220783d2231302220793d22302220776964
Arg [25] : 74683d2232313222206865696768743d2233303022207374796c653d22646973
Arg [26] : 706c61793a20626c6f636b223e3c726563742077696474683d22323132222068
Arg [27] : 65696768743d22333030222066696c6c3d222346464622202f3e3c7465787420
Arg [28] : 783d2231302220793d2232302220746578742d616e63686f723d226c65667422
Arg [29] : 20666f6e742d73697a653d22367078222066696c6c3d22233030302220666f6e
Arg [30] : 742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d
Arg [31] : 65732c207365726966223e3c747370616e20783d223130222064793d22302220
Arg [32] : 666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c20
Arg [33] : 54696d65732c2073657269662220666f6e742d73697a653d22367078223e4865
Arg [34] : 6c6c6f2c20576f726c643c2f747370616e3e3c747370616e20783d2231302220
Arg [35] : 64793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e
Arg [36] : 657720526f6d616e272c2054696d65732c2073657269662220666f6e742d7369
Arg [37] : 7a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d22313022
Arg [38] : 2064793d22312e32656d2220666f6e742d66616d696c793d222754696d657320
Arg [39] : 4e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73
Arg [40] : 697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130
Arg [41] : 222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573
Arg [42] : 204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d
Arg [43] : 73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d2231
Arg [44] : 30222064793d22312e32656d2220666f6e742d66616d696c793d222754696d65
Arg [45] : 73204e657720526f6d616e272c2054696d65732c2073657269662220666f6e74
Arg [46] : 2d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d22
Arg [47] : 3130222064793d22312e32656d2220666f6e742d66616d696c793d222754696d
Arg [48] : 6573204e657720526f6d616e272c2054696d65732c2073657269662220666f6e
Arg [49] : 742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d
Arg [50] : 223130222064793d22312e32656d2220666f6e742d66616d696c793d22275469
Arg [51] : 6d6573204e657720526f6d616e272c2054696d65732c2073657269662220666f
Arg [52] : 6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e2078
Arg [53] : 3d223130222064793d22312e32656d2220666f6e742d66616d696c793d222754
Arg [54] : 696d6573204e657720526f6d616e272c2054696d65732c207365726966222066
Arg [55] : 6f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20
Arg [56] : 783d223130222064793d22312e32656d2220666f6e742d66616d696c793d2227
Arg [57] : 54696d6573204e657720526f6d616e272c2054696d65732c2073657269662220
Arg [58] : 666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370616e
Arg [59] : 20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d22
Arg [60] : 2754696d6573204e657720526f6d616e272c2054696d65732c20736572696622
Arg [61] : 20666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c74737061
Arg [62] : 6e20783d223130222064793d22312e32656d2220666f6e742d66616d696c793d
Arg [63] : 222754696d6573204e657720526f6d616e272c2054696d65732c207365726966
Arg [64] : 2220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c747370
Arg [65] : 616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c79
Arg [66] : 3d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269
Arg [67] : 662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c7473
Arg [68] : 70616e20783d223130222064793d22312e32656d2220666f6e742d66616d696c
Arg [69] : 793d222754696d6573204e657720526f6d616e272c2054696d65732c20736572
Arg [70] : 69662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c74
Arg [71] : 7370616e20783d223130222064793d22312e32656d2220666f6e742d66616d69
Arg [72] : 6c793d222754696d6573204e657720526f6d616e272c2054696d65732c207365
Arg [73] : 7269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e3c
Arg [74] : 747370616e20783d223130222064793d22312e32656d2220666f6e742d66616d
Arg [75] : 696c793d222754696d6573204e657720526f6d616e272c2054696d65732c2073
Arg [76] : 657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e3e
Arg [77] : 3c747370616e20783d223130222064793d22312e32656d2220666f6e742d6661
Arg [78] : 6d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c20
Arg [79] : 73657269662220666f6e742d73697a653d22367078223ec2a03c2f747370616e
Arg [80] : 3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d66
Arg [81] : 616d696c793d222754696d6573204e657720526f6d616e272c2054696d65732c
Arg [82] : 2073657269662220666f6e742d73697a653d22367078223ec2a03c2f74737061
Arg [83] : 6e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e742d
Arg [84] : 66616d696c793d222754696d6573204e657720526f6d616e272c2054696d6573
Arg [85] : 2c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f747370
Arg [86] : 616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e74
Arg [87] : 2d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d65
Arg [88] : 732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f7473
Arg [89] : 70616e3e3c747370616e20783d223130222064793d22312e32656d2220666f6e
Arg [90] : 742d66616d696c793d222754696d6573204e657720526f6d616e272c2054696d
Arg [91] : 65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f74
Arg [92] : 7370616e3e3c747370616e20783d223130222064793d22312e32656d2220666f
Arg [93] : 6e742d66616d696c793d222754696d6573204e657720526f6d616e272c205469
Arg [94] : 6d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c2f
Arg [95] : 747370616e3e3c747370616e20783d223130222064793d22312e32656d222066
Arg [96] : 6f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c2054
Arg [97] : 696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a03c
Arg [98] : 2f747370616e3e3c747370616e20783d223130222064793d22312e32656d2220
Arg [99] : 666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c20
Arg [100] : 54696d65732c2073657269662220666f6e742d73697a653d22367078223ec2a0
Arg [101] : 3c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d22
Arg [102] : 20666f6e742d66616d696c793d222754696d6573204e657720526f6d616e272c
Arg [103] : 2054696d65732c2073657269662220666f6e742d73697a653d22367078223ec2
Arg [104] : a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32656d
Arg [105] : 2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e27
Arg [106] : 2c2054696d65732c2073657269662220666f6e742d73697a653d22367078223e
Arg [107] : c2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e3265
Arg [108] : 6d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d616e
Arg [109] : 272c2054696d65732c2073657269662220666f6e742d73697a653d2236707822
Arg [110] : 3ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e32
Arg [111] : 656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d61
Arg [112] : 6e272c2054696d65732c2073657269662220666f6e742d73697a653d22367078
Arg [113] : 223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22312e
Arg [114] : 32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f6d
Arg [115] : 616e272c2054696d65732c2073657269662220666f6e742d73697a653d223670
Arg [116] : 78223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d2231
Arg [117] : 2e32656d2220666f6e742d66616d696c793d222754696d6573204e657720526f
Arg [118] : 6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d2236
Arg [119] : 7078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d22
Arg [120] : 312e32656d2220666f6e742d66616d696c793d222754696d6573204e65772052
Arg [121] : 6f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d22
Arg [122] : 367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064793d
Arg [123] : 22312e32656d2220666f6e742d66616d696c793d222754696d6573204e657720
Arg [124] : 526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a653d
Arg [125] : 22367078223ec2a03c2f747370616e3e3c747370616e20783d22313022206479
Arg [126] : 3d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e6577
Arg [127] : 20526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a65
Arg [128] : 3d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130222064
Arg [129] : 793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e65
Arg [130] : 7720526f6d616e272c2054696d65732c2073657269662220666f6e742d73697a
Arg [131] : 653d22367078223ec2a03c2f747370616e3e3c747370616e20783d2231302220
Arg [132] : 64793d22312e32656d2220666f6e742d66616d696c793d222754696d6573204e
Arg [133] : 657720526f6d616e272c2054696d65732c2073657269662220666f6e742d7369
Arg [134] : 7a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d22313022
Arg [135] : 2064793d22312e32656d2220666f6e742d66616d696c793d222754696d657320
Arg [136] : 4e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d73
Arg [137] : 697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d223130
Arg [138] : 222064793d22312e32656d2220666f6e742d66616d696c793d222754696d6573
Arg [139] : 204e657720526f6d616e272c2054696d65732c2073657269662220666f6e742d
Arg [140] : 73697a653d22367078223ec2a03c2f747370616e3e3c747370616e20783d2231
Arg [141] : 30222064793d22312e32656d2220666f6e742d66616d696c793d222754696d65
Arg [142] : 73204e657720526f6d616e272c2054696d65732c2073657269662220666f6e74
Arg [143] : 2d73697a653d22367078223ec2a03c2f747370616e3e3c2f746578743e3c2f61
Arg [144] : 3e3c612069643d22736c696465322220636c6173733d22736c6964652220786c
Arg [145] : 696e6b3a687265663d2223736c696465322220783d2231302220793d22302220
Arg [146] : 77696474683d2232313222206865696768743d2233303022207374796c653d22
Arg [147] : 223e3c726563742077696474683d2232313222206865696768743d2233303022
Arg [148] : 2066696c6c3d222346464622202f3e3c7465787420783d2231302220793d2232
Arg [149] : 302220746578742d616e63686f723d226c6566742220666f6e742d73697a653d
Arg [150] : 22367078222066696c6c3d22233030302220666f6e742d66616d696c793d2227
Arg [151] : 54696d6573204e657720526f6d616e272c2054696d65732c207365726966223e
Arg [152] : 3c747370616e20783d223130222064793d22302220666f6e742d66616d696c79
Arg [153] : 3d222754696d6573204e657720526f6d616e272c2054696d65732c2073657269
Arg [154] : 662220666f6e742d73697a653d22367078223e48656c6c6f2c20467574757265
Arg [155] : 3c2f747370616e3e3c2f746578743e3c2f613e3c7465787420783d2231302220
Arg [156] : 793d223239302220636c6173733d226e61762220666f6e742d73697a653d2236
Arg [157] : 7078222066696c6c3d2223303030223e3c747370616e20636c6173733d226e61
Arg [158] : 76222064783d2230223e3c6120636c6173733d226e61762220786c696e6b3a68
Arg [159] : 7265663d2223736c69646531223e313c2f613e3c2f747370616e3e3c74737061
Arg [160] : 6e20636c6173733d226e6176222064783d2232223e3c6120636c6173733d226e
Arg [161] : 61762220786c696e6b3a687265663d2223736c69646532223e323c2f613e3c2f
Arg [162] : 747370616e3e3c2f746578743e3c2f7376673e00000000000000000000000000
Deployed Bytecode Sourcemap
33862:1787:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24961:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25672:46;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;25672:46:0;;;;;;-1:-1:-1;;;;;1019:32:1;;;1001:51;;989:2;974:18;25672:46:0;855:203:1;27503:642:0;;;;;;:::i;:::-;;:::i;:::-;;;1665:14:1;;1658:22;1640:41;;1628:2;1613:18;27503:642:0;1500:187:1;25197:36:0;;;;;;;;1838:25:1;;;1826:2;1811:18;25197:36:0;1692:177:1;28552:1716:0;;;;;;:::i;:::-;;:::i;:::-;;22921:151;;;:::i;25097:31::-;;;;;;;;2379:4:1;2367:17;;;2349:36;;2337:2;2322:18;25097:31:0;2207:184:1;30564:405:0;;;;;;:::i;:::-;;:::i;25332:21::-;;;;;;26832:111;;;;;;:::i;:::-;;:::i;27015:193::-;;;;;;:::i;:::-;;:::i;25438:44::-;;;;;;:::i;:::-;;;;;;;;;;;;;;22362:20;;;;;-1:-1:-1;;;;;22362:20:0;;;25015;;;:::i;26283:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28196:207;;;;;;:::i;:::-;;:::i;30327:160::-;;;;;;:::i;:::-;;:::i;31064:437::-;;;;;;:::i;:::-;;:::i;34317:596::-;;;;;;:::i;:::-;;:::i;25552:64::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;25783:68;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;22694:219;;;;;;:::i;:::-;;:::i;24961:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27503:642::-;27606:4;27641:6;;27627:10;:20;;:38;;;;;27664:1;27651:10;:14;27627:38;27623:491;;;27682:13;27698:20;;;:8;:20;;;;;;-1:-1:-1;;;;;27698:20:0;27739:10;:19;;;;;:59;;-1:-1:-1;;;;;;27763:23:0;;;;;;:16;:23;;;;;;;;27787:10;27763:35;;;;;;;;;;27762:36;27739:59;27735:121;;;27826:14;;-1:-1:-1;;;27826:14:0;;;;;;;;;;;27735:121;27872:23;;;;:11;:23;;;;;;;;;:33;;-1:-1:-1;;;;;;27872:33:0;-1:-1:-1;;;;;27872:33:0;;;;;;;;;27927:36;;1838:25:1;;;27927:36:0;;;;;;1811:18:1;27927:36:0;;;;;;;27667:308;27623:491;;;28006:10;27996:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;27996:30:0;;;;;;;;;;;;:43;;;28061:41;1838:25:1;;;27996:30:0;;28006:10;28061:41;;1811:18:1;28061:41:0;;;;;;;27623:491;-1:-1:-1;28133:4:0;27503:642;;;;;:::o;28552:1716::-;28698:6;;28684:10;:20;28680:1581;;28733:20;;;;:8;:20;;;;;;-1:-1:-1;;;;;28725:28:0;;;28733:20;;28725:28;28721:91;;28781:15;;-1:-1:-1;;;28781:15:0;;;;;;;;;;;28721:91;-1:-1:-1;;;;;28832:16:0;;28828:82;;28876:18;;-1:-1:-1;;;28876:18:0;;;;;;;;;;;28828:82;28948:10;-1:-1:-1;;;;;28948:18:0;;;;;;:74;;-1:-1:-1;;;;;;28988:22:0;;;;;;:16;:22;;;;;;;;29011:10;28988:34;;;;;;;;;;28987:35;28948:74;:132;;;;-1:-1:-1;29057:23:0;;;;:11;:23;;;;;;-1:-1:-1;;;;;29057:23:0;29043:10;:37;;28948:132;28926:226;;;29122:14;;-1:-1:-1;;;29122:14:0;;;;;;;;;;;28926:226;29187:10;:8;:10::i;:::-;-1:-1:-1;;;;;29168:15:0;;;;;;:9;:15;;;;;:29;;:15;;;:29;;;;;:::i;:::-;;;;-1:-1:-1;29260:10:0;;-1:-1:-1;29260:8:0;:10::i;:::-;-1:-1:-1;;;;;29243:13:0;;;;;;;:9;:13;;;;;;;;:27;;;;;;;;29302:20;;;:8;:20;;;;;:25;;-1:-1:-1;;;;;;29302:25:0;;;;;;;;29349:11;:23;;;;;29342:30;;;;;;;;29450:12;;;;;:6;:12;;;;;29463:19;;:23;;-1:-1:-1;;29463:23:0;:::i;:::-;29450:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29502:12:0;;;;:6;:12;;;;;;29515:23;;;:11;:23;;;;;;;29502:37;;29450;;-1:-1:-1;29450:37:0;;29502;;;;;;:::i;:::-;;;;;;;;;;;;:49;;;;-1:-1:-1;;;;;29586:12:0;;;;:6;:12;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;29586:18:0;;;;;;;;;;;;29690:23;;;:11;:23;;;;;;;29665:22;;;;;;:48;-1:-1:-1;;;;;29767:10:0;;;;;:6;:10;;;;;:27;;29586:18;29767:27;;;;;;;;;;;;;;;29877:10;;:17;;:21;;29586:18;29877:21;:::i;:::-;29851:23;;;;:11;:23;;;;;;:47;;;;29920:30;;29863:10;;-1:-1:-1;;;;;29920:30:0;;;;;;;;;;;29990:2;-1:-1:-1;;;;;29970:35:0;29984:4;-1:-1:-1;;;;;29970:35:0;;29994:10;:8;:10::i;:::-;29970:35;;1838:25:1;;;1826:2;1811:18;29970:35:0;;;;;;;28706:1311;28552:1716;;;:::o;28680:1581::-;-1:-1:-1;;;;;30056:15:0;;30038;30056;;;:9;:15;;;;;;;;30072:10;30056:27;;;;;;;;-1:-1:-1;;30104:28:0;;30100:101;;30181:20;30191:10;30181:7;:20;:::i;:::-;-1:-1:-1;;;;;30151:15:0;;;;;;:9;:15;;;;;;;;30167:10;30151:27;;;;;;;:50;30100:101;30218:31;30228:4;30234:2;30238:10;30218:9;:31::i;:::-;;30023:238;28680:1581;28552:1716;;;:::o;22921:151::-;22449:5;;-1:-1:-1;;;;;22449:5:0;22435:10;:19;22431:46;;22463:14;;-1:-1:-1;;;22463:14:0;;;;;;;;;;;22431:46;23000:1:::1;22984:18:::0;;-1:-1:-1;;;;;;22984:18:0::1;::::0;;23020:44:::1;::::0;23041:10:::1;::::0;23020:44:::1;::::0;23000:1;;23020:44:::1;22921:151::o:0;30564:405::-;30688:26;30701:4;30707:2;30711;30688:12;:26::i;:::-;-1:-1:-1;;;;;30745:14:0;;;:19;;;;:154;;-1:-1:-1;30781:61:0;;-1:-1:-1;;;30781:61:0;;;30817:10;30781:61;;;5236:34:1;-1:-1:-1;;;;;5306:15:1;;;5286:18;;;5279:43;5338:18;;;5331:34;;;5401:3;5381:18;;;5374:31;-1:-1:-1;5421:19:1;;;5414:30;30859:40:0;;30781:35;;;;30859:40;;5461:19:1;;30781:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;30781:118:0;;;30745:154;30727:235;;;30933:17;;-1:-1:-1;;;30933:17:0;;;;;;;;;;;26832:111;22449:5;;-1:-1:-1;;;;;22449:5:0;22435:10;:19;22431:46;;22463:14;;-1:-1:-1;;;22463:14:0;;;;;;;;;;;22431:46;-1:-1:-1;;;;;26910:17:0;;;::::1;;::::0;;;:9:::1;:17;::::0;;;;:25;;-1:-1:-1;;26910:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26832:111::o;27015:193::-;27073:13;27107:12;;;:8;:12;;;;;;-1:-1:-1;;;;;27107:12:0;;27132:69;;27179:10;;-1:-1:-1;;;27179:10:0;;;;;;;;;;;27132:69;27015:193;;;:::o;25015:20::-;;;;;;;:::i;28196:207::-;28299:10;28282:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;28282:38:0;;;;;;;;;;;;:49;;-1:-1:-1;;28282:49:0;;;;;;;;;;28349:46;;1640:41:1;;;28282:38:0;;28299:10;28349:46;;1613:18:1;28349:46:0;;;;;;;28196:207;;:::o;30327:160::-;30422:4;30446:33;30456:10;30468:2;30472:6;30446:9;:33::i;:::-;30439:40;30327:160;-1:-1:-1;;;30327:160:0:o;31064:437::-;31218:26;31231:4;31237:2;31241;31218:12;:26::i;:::-;-1:-1:-1;;;;;31275:14:0;;;:19;;;;:156;;-1:-1:-1;31311:63:0;;-1:-1:-1;;;31311:63:0;;;31391:40;-1:-1:-1;;;;;31311:35:0;;;31391:40;;31311:63;;31347:10;;31359:4;;31365:2;;31369:4;;;;31311:63;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;31311:120:0;;;31275:156;31257:237;;;31465:17;;-1:-1:-1;;;31465:17:0;;;;;;;;;;;34317:596;34382:13;34408:17;34466:8;34435:50;;;;;;;;:::i;:::-;;;;;;;;;;;;;34408:78;;34499:18;34520:302;34598:4;34636:17;34645:7;34636:8;:17::i;:::-;34765:25;34785:3;34765:13;:25::i;:::-;34540:280;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34520:13;:302::i;:::-;34499:323;;34899:4;34849:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;34835:70;;;;34317:596;;;:::o;22694:219::-;22449:5;;-1:-1:-1;;;;;22449:5:0;22435:10;:19;22431:46;;22463:14;;-1:-1:-1;;;22463:14:0;;;;;;;;;;;22431:46;-1:-1:-1;;;;;22777:20:0;::::1;22773:47;;22806:14;;-1:-1:-1::0;;;22806:14:0::1;;;;;;;;;;;22773:47;22833:5;:14:::0;;-1:-1:-1;;;;;;22833:14:0::1;-1:-1:-1::0;;;;;22833:14:0;::::1;::::0;;::::1;::::0;;22865:40:::1;::::0;22833:14;;22886:10:::1;::::0;22865:40:::1;::::0;22833:5;22865:40:::1;22694:219:::0;:::o;32701:92::-;32744:7;32771:14;32777:8;32771:2;:14;:::i;:::-;32764:21;;32701:92;:::o;31569:1093::-;31682:4;31699:12;31714:10;:8;:10::i;:::-;-1:-1:-1;;;;;31765:15:0;;;31735:27;31765:15;;;:9;:15;;;;;;;;31823:13;;;;;;;;;31849:15;;;31699:25;;-1:-1:-1;31765:15:0;;31823:13;;31868:6;;31765:15;31849:25;31868:6;31765:15;31849:25;:::i;:::-;;;;-1:-1:-1;;;;;;;31912:13:0;;;;;;;:9;:13;;;;;;;;:23;;;;;;32020:15;;;;;:9;:15;;;;;;32015:251;;-1:-1:-1;;;;;32126:15:0;;32052:22;32126:15;;;:9;:15;;;;;;:22;;32144:4;;32126:22;:::i;:::-;32078:26;32100:4;32078:19;:26;:::i;:::-;32077:72;;;;:::i;:::-;32052:97;;32169:9;32164:91;32188:14;32184:1;:18;32164:91;;;32228:11;32234:4;32228:5;:11::i;:::-;32204:3;;;;:::i;:::-;;;;32164:91;;;;32037:229;32015:251;-1:-1:-1;;;;;32342:13:0;;;;;;:9;:13;;;;;;;;32337:247;;32372:22;32440:28;32464:4;32440:21;:28;:::i;:::-;-1:-1:-1;;;;;32398:13:0;;;;;;:9;:13;;;;;;:20;;32414:4;;32398:20;:::i;:::-;32397:72;;;;:::i;:::-;32372:97;;32489:9;32484:89;32508:14;32504:1;:18;32484:89;;;32548:9;32554:2;32548:5;:9::i;:::-;32524:3;;;;:::i;:::-;;;;32484:89;;;;32357:227;32337:247;32621:2;-1:-1:-1;;;;;32601:31:0;32615:4;-1:-1:-1;;;;;32601:31:0;;32625:6;32601:31;;;;1838:25:1;;1826:2;1811:18;;1692:177;32601:31:0;;;;;;;;-1:-1:-1;32650:4:0;;31569:1093;-1:-1:-1;;;;;;31569:1093:0:o;34925:715::-;34981:13;35194:5;35203:1;35194:10;35190:53;;-1:-1:-1;;35221:10:0;;;;;;;;;;;;-1:-1:-1;;;35221:10:0;;;;;34925:715::o;35190:53::-;35268:5;35253:12;35309:78;35316:9;;35309:78;;35342:8;;;;:::i;:::-;;-1:-1:-1;35365:10:0;;-1:-1:-1;35373:2:0;35365:10;;:::i;:::-;;;35309:78;;;35397:19;35429:6;35419:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35419:17:0;;35397:39;;35447:154;35454:10;;35447:154;;35481:11;35491:1;35481:11;;:::i;:::-;;-1:-1:-1;35550:10:0;35558:2;35550:5;:10;:::i;:::-;35537:24;;:2;:24;:::i;:::-;35524:39;;35507:6;35514;35507:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;35507:56:0;;;;;;;;-1:-1:-1;35578:11:0;35587:2;35578:11;;:::i;:::-;;;35447:154;;;35625:6;34925:715;-1:-1:-1;;;;34925:715:0:o;445:1607::-;543:11;;503:13;;529:11;569:8;;;565:23;;-1:-1:-1;;579:9:0;;;;;;;;;-1:-1:-1;579:9:0;;;445:1607;-1:-1:-1;445:1607:0:o;565:23::-;640:18;678:1;667:7;:3;673:1;667:7;:::i;:::-;666:13;;;;:::i;:::-;661:19;;:1;:19;:::i;:::-;640:40;-1:-1:-1;738:19:0;770:15;640:40;783:2;770:15;:::i;:::-;760:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;760:26:0;;738:48;;799:18;820:5;;;;;;;;;;;;;;;;;799:26;;889:1;882:5;878:13;934:2;926:6;922:15;985:1;953:777;1008:3;1005:1;1002:10;953:777;;;1063:1;1106:12;;;;;1100:19;1201:4;1189:2;1185:14;;;;;1167:40;;1161:47;1310:2;1306:14;;;1302:25;;1288:40;;1282:47;1439:1;1435:13;;;1431:24;;1417:39;;1411:46;1559:16;;;;1545:31;;1539:38;1237:1;1233:11;;;1331:4;1278:58;;;1269:68;1362:11;;1407:57;;;1398:67;;;;1490:11;;1535:49;;1526:59;1614:3;1610:13;1643:22;;1713:1;1698:17;;;;1056:9;953:777;;;957:44;1762:1;1757:3;1753:11;1783:1;1778:84;;;;1881:1;1876:82;;;;1746:212;;1778:84;-1:-1:-1;;;;;1811:17:0;;1804:43;1778:84;;1876:82;-1:-1:-1;;;;;1909:17:0;;1902:41;1746:212;-1:-1:-1;;;1974:26:0;;;1981:6;445:1607;-1:-1:-1;;;;445:1607:0:o;33283:373::-;-1:-1:-1;;;;;33344:18:0;;33340:73;;33386:15;;-1:-1:-1;;;33386:15:0;;;;;;;;;;;33340:73;-1:-1:-1;;;;;33438:12:0;;33425:10;33438:12;;;:6;:12;;;;;33451:19;;:23;;33473:1;;33451:23;:::i;:::-;33438:37;;;;;;;;:::i;:::-;;;;;;;;;33425:50;;33486:6;:12;33493:4;-1:-1:-1;;;;;33486:12:0;-1:-1:-1;;;;;33486:12:0;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;33486:18:0;;;;;;;;;;;;33522:15;;;:11;:15;;;;;;33515:22;;;33555:8;:12;;;;;33548:19;;-1:-1:-1;;;;;;33548:19:0;;;;;;33585:11;:15;;;;;;33578:22;;;;;;;;33618:30;33534:2;;33486:18;-1:-1:-1;;;;;33618:30:0;;;;;33486:18;;33618:30;33329:327;33283:373;:::o;32801:474::-;-1:-1:-1;;;;;32860:16:0;;32856:74;;32900:18;;-1:-1:-1;;;32900:18:0;;;;;;;;;;;32856:74;32967:6;:8;;;;;;;;:6;33035:12;;;:8;:12;;;;;;-1:-1:-1;;;;;33035:12:0;:26;33031:81;;33085:15;;-1:-1:-1;;;33085:15:0;;;;;;;;;;;33031:81;33124:12;;;;:8;:12;;;;;;;;:17;;-1:-1:-1;;;;;;33124:17:0;-1:-1:-1;;;;;33124:17:0;;;;;;;;33152:10;;;:6;:10;;;;;:19;;-1:-1:-1;33152:19:0;;;;;;;;;;;;;;;33200:10;;:17;;:21;;-1:-1:-1;33200:21:0;:::i;:::-;33182:15;;;;:11;:15;;;;;;:39;;;;33239:28;;33194:2;;-1:-1:-1;;;;;33239:28:0;;;;;33182:15;;33239:28;32845:430;32801:474;:::o;14:250:1:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:1;238:16;;231:27;14:250::o;269:396::-;418:2;407:9;400:21;381:4;450:6;444:13;493:6;488:2;477:9;473:18;466:34;509:79;581:6;576:2;565:9;561:18;556:2;548:6;544:15;509:79;:::i;:::-;649:2;628:15;-1:-1:-1;;624:29:1;609:45;;;;656:2;605:54;;269:396;-1:-1:-1;;269:396:1:o;670:180::-;729:6;782:2;770:9;761:7;757:23;753:32;750:52;;;798:1;795;788:12;750:52;-1:-1:-1;821:23:1;;670:180;-1:-1:-1;670:180:1:o;1063:173::-;1131:20;;-1:-1:-1;;;;;1180:31:1;;1170:42;;1160:70;;1226:1;1223;1216:12;1241:254;1309:6;1317;1370:2;1358:9;1349:7;1345:23;1341:32;1338:52;;;1386:1;1383;1376:12;1338:52;1409:29;1428:9;1409:29;:::i;:::-;1399:39;1485:2;1470:18;;;;1457:32;;-1:-1:-1;;;1241:254:1:o;1874:328::-;1951:6;1959;1967;2020:2;2008:9;1999:7;1995:23;1991:32;1988:52;;;2036:1;2033;2026:12;1988:52;2059:29;2078:9;2059:29;:::i;:::-;2049:39;;2107:38;2141:2;2130:9;2126:18;2107:38;:::i;:::-;2097:48;;2192:2;2181:9;2177:18;2164:32;2154:42;;1874:328;;;;;:::o;2396:347::-;2461:6;2469;2522:2;2510:9;2501:7;2497:23;2493:32;2490:52;;;2538:1;2535;2528:12;2490:52;2561:29;2580:9;2561:29;:::i;:::-;2551:39;;2640:2;2629:9;2625:18;2612:32;2687:5;2680:13;2673:21;2666:5;2663:32;2653:60;;2709:1;2706;2699:12;2653:60;2732:5;2722:15;;;2396:347;;;;;:::o;2748:186::-;2807:6;2860:2;2848:9;2839:7;2835:23;2831:32;2828:52;;;2876:1;2873;2866:12;2828:52;2899:29;2918:9;2899:29;:::i;2939:808::-;3036:6;3044;3052;3060;3068;3121:3;3109:9;3100:7;3096:23;3092:33;3089:53;;;3138:1;3135;3128:12;3089:53;3161:29;3180:9;3161:29;:::i;:::-;3151:39;;3209:38;3243:2;3232:9;3228:18;3209:38;:::i;:::-;3199:48;;3294:2;3283:9;3279:18;3266:32;3256:42;;3349:2;3338:9;3334:18;3321:32;3372:18;3413:2;3405:6;3402:14;3399:34;;;3429:1;3426;3419:12;3399:34;3467:6;3456:9;3452:22;3442:32;;3512:7;3505:4;3501:2;3497:13;3493:27;3483:55;;3534:1;3531;3524:12;3483:55;3574:2;3561:16;3600:2;3592:6;3589:14;3586:34;;;3616:1;3613;3606:12;3586:34;3661:7;3656:2;3647:6;3643:2;3639:15;3635:24;3632:37;3629:57;;;3682:1;3679;3672:12;3629:57;2939:808;;;;-1:-1:-1;2939:808:1;;-1:-1:-1;3713:2:1;3705:11;;3735:6;2939:808;-1:-1:-1;;;2939:808:1:o;3752:260::-;3820:6;3828;3881:2;3869:9;3860:7;3856:23;3852:32;3849:52;;;3897:1;3894;3887:12;3849:52;3920:29;3939:9;3920:29;:::i;:::-;3910:39;;3968:38;4002:2;3991:9;3987:18;3968:38;:::i;:::-;3958:48;;3752:260;;;;;:::o;4017:380::-;4096:1;4092:12;;;;4139;;;4160:61;;4214:4;4206:6;4202:17;4192:27;;4160:61;4267:2;4259:6;4256:14;4236:18;4233:38;4230:161;;4313:10;4308:3;4304:20;4301:1;4294:31;4348:4;4345:1;4338:15;4376:4;4373:1;4366:15;4230:161;;4017:380;;;:::o;4402:127::-;4463:10;4458:3;4454:20;4451:1;4444:31;4494:4;4491:1;4484:15;4518:4;4515:1;4508:15;4534:128;4601:9;;;4622:11;;;4619:37;;;4636:18;;:::i;4667:127::-;4728:10;4723:3;4719:20;4716:1;4709:31;4759:4;4756:1;4749:15;4783:4;4780:1;4773:15;4799:127;4860:10;4855:3;4851:20;4848:1;4841:31;4891:4;4888:1;4881:15;4915:4;4912:1;4905:15;5491:290;5560:6;5613:2;5601:9;5592:7;5588:23;5584:32;5581:52;;;5629:1;5626;5619:12;5581:52;5655:16;;-1:-1:-1;;;;;;5700:32:1;;5690:43;;5680:71;;5747:1;5744;5737:12;5786:662;-1:-1:-1;;;;;6065:15:1;;;6047:34;;6117:15;;6112:2;6097:18;;6090:43;6164:2;6149:18;;6142:34;;;6212:3;6207:2;6192:18;;6185:31;;;6232:19;;6225:35;;;5990:4;6253:6;6303;6027:3;6282:19;;6269:49;6368:1;6362:3;6353:6;6342:9;6338:22;6334:32;6327:43;6438:3;6431:2;6427:7;6422:2;6414:6;6410:15;6406:29;6395:9;6391:45;6387:55;6379:63;;5786:662;;;;;;;;:::o;6579:1002::-;6664:12;;6629:3;;6719:1;6739:18;;;;6792;;;;6819:61;;6873:4;6865:6;6861:17;6851:27;;6819:61;6899:2;6947;6939:6;6936:14;6916:18;6913:38;6910:161;;6993:10;6988:3;6984:20;6981:1;6974:31;7028:4;7025:1;7018:15;7056:4;7053:1;7046:15;6910:161;7087:18;7114:133;;;;7261:1;7256:319;;;;7080:495;;7114:133;-1:-1:-1;;7147:24:1;;7135:37;;7220:14;;7213:22;7201:35;;7192:45;;;-1:-1:-1;7114:133:1;;7256:319;6526:1;6519:14;;;6563:4;6550:18;;7350:1;7364:165;7378:6;7375:1;7372:13;7364:165;;;7456:14;;7443:11;;;7436:35;7499:16;;;;7393:10;;7364:165;;;7368:3;;7558:6;7553:3;7549:16;7542:23;;7080:495;;;;;;;6579:1002;;;;:::o;7586:197::-;7714:3;7739:38;7773:3;7765:6;7739:38;:::i;7788:1409::-;-1:-1:-1;;;8434:45:1;;8416:3;8498:47;8541:2;8532:12;;8524:6;8498:47;:::i;:::-;-1:-1:-1;;;8561:2:1;8554:16;8599:6;8593:13;8615:73;8681:6;8677:1;8673:2;8669:10;8662:4;8654:6;8650:17;8615:73;:::i;:::-;8750:66;8746:1;8707:15;;;;8738:10;;;8731:86;8846:66;8841:2;8833:11;;8826:87;-1:-1:-1;;;8937:2:1;8929:11;;8922:39;8986:13;;9008:76;8986:13;9070:2;9062:11;;9055:4;9043:17;;9008:76;:::i;:::-;-1:-1:-1;;;9144:2:1;9103:17;;;;9136:11;;;9129:35;9188:2;9180:11;;7788:1409;-1:-1:-1;;;;;7788:1409:1:o;9202:461::-;9464:31;9459:3;9452:44;9434:3;9525:6;9519:13;9541:75;9609:6;9604:2;9599:3;9595:12;9588:4;9580:6;9576:17;9541:75;:::i;:::-;9636:16;;;;9654:2;9632:25;;9202:461;-1:-1:-1;;9202:461:1:o;9668:422::-;9757:1;9800:5;9757:1;9814:270;9835:7;9825:8;9822:21;9814:270;;;9894:4;9890:1;9886:6;9882:17;9876:4;9873:27;9870:53;;;9903:18;;:::i;:::-;9953:7;9943:8;9939:22;9936:55;;;9973:16;;;;9936:55;10052:22;;;;10012:15;;;;9814:270;;;9818:3;9668:422;;;;;:::o;10095:806::-;10144:5;10174:8;10164:80;;-1:-1:-1;10215:1:1;10229:5;;10164:80;10263:4;10253:76;;-1:-1:-1;10300:1:1;10314:5;;10253:76;10345:4;10363:1;10358:59;;;;10431:1;10426:130;;;;10338:218;;10358:59;10388:1;10379:10;;10402:5;;;10426:130;10463:3;10453:8;10450:17;10447:43;;;10470:18;;:::i;:::-;-1:-1:-1;;10526:1:1;10512:16;;10541:5;;10338:218;;10640:2;10630:8;10627:16;10621:3;10615:4;10612:13;10608:36;10602:2;10592:8;10589:16;10584:2;10578:4;10575:12;10571:35;10568:77;10565:159;;;-1:-1:-1;10677:19:1;;;10709:5;;10565:159;10756:34;10781:8;10775:4;10756:34;:::i;:::-;10826:6;10822:1;10818:6;10814:19;10805:7;10802:32;10799:58;;;10837:18;;:::i;:::-;10875:20;;10095:806;-1:-1:-1;;;10095:806:1:o;10906:140::-;10964:5;10993:47;11034:4;11024:8;11020:19;11014:4;10993:47;:::i;11051:127::-;11112:10;11107:3;11103:20;11100:1;11093:31;11143:4;11140:1;11133:15;11167:4;11164:1;11157:15;11183:120;11223:1;11249;11239:35;;11254:18;;:::i;:::-;-1:-1:-1;11288:9:1;;11183:120::o;11308:135::-;11347:3;11368:17;;;11365:43;;11388:18;;:::i;:::-;-1:-1:-1;11435:1:1;11424:13;;11308:135::o;11448:127::-;11509:10;11504:3;11500:20;11497:1;11490:31;11540:4;11537:1;11530:15;11564:4;11561:1;11554:15;11580:112;11612:1;11638;11628:35;;11643:18;;:::i;:::-;-1:-1:-1;11677:9:1;;11580:112::o;11697:125::-;11762:9;;;11783:10;;;11780:36;;;11796:18;;:::i;11827:168::-;11900:9;;;11931;;11948:15;;;11942:22;;11928:37;11918:71;;11969:18;;:::i
Swarm Source
ipfs://644831ecf1c8108da25c3d6ee0bc7a4088c983a6407c5167e646cfa524484a6e
Loading...
Loading
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.