Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
GetPoolsPriceData
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {Strings} from "@openzeppelin/contracts/utils/Strings.sol"; interface PoolV2{ function getReserves() external view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast); } interface PoolV2Balancerfi{ function getPriceData(address pool) external view returns (uint48 swapFee, address[] memory tokens, uint112[] memory balances); } interface PoolV3Uniswap{ function fee() external view returns (uint24); function slot0() external view returns ( uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked ); } interface PoolV3Quickswap{ function globalState() external view returns ( uint160 price, int24 tick, uint16 fee, uint16 timepointIndex, uint8 communityFeeToken0, uint8 communityFeeToken1, bool unlocked ); } contract GetPoolsPriceData{ function addressToString(address _address) internal pure returns (string memory) { bytes32 value = bytes32(uint256(uint160(_address))); // Convert address to bytes32 bytes memory bytesString = new bytes(32); for (uint256 j = 0; j < 32; j++) { bytesString[j] = value[j]; } return string(bytesString); } function equalStrings(string memory string1, string memory string2) internal pure returns (bool) { return keccak256(abi.encodePacked(string1)) == keccak256(abi.encodePacked(string2)); } function getPoolsPriceData(address[] memory pools, uint[] memory poolsVersion, string[] memory poolsDEX) external view returns (uint112[] memory amounts0, uint112[] memory amounts1, uint160[] memory sqrtPrices, uint48[] memory fees){ uint sizePools = pools.length; uint sizePoolsVersion = poolsVersion.length; uint sizePoolsDEX = poolsDEX.length; //check the sizes if(sizePools != sizePoolsVersion || sizePoolsVersion != sizePoolsDEX){ revert( string.concat("Different array sizes for inputs (", Strings.toString(sizePools), ", ", Strings.toString(sizePoolsVersion), ", ", Strings.toString(sizePoolsDEX), ")") ); } //initialize return arrays amounts0 = new uint112[](sizePools); amounts1 = new uint112[](sizePools); sqrtPrices = new uint160[](sizePools); fees = new uint48[](sizePools); for(uint i = 0; i < sizePools; i++){ //init amounts0[i] = 0; amounts1[i] = 0; sqrtPrices[i] = 0; fees[i] = 0; //prepare given data address poolAddress = pools[i]; uint poolVersion = poolsVersion[i]; string memory poolDEX = poolsDEX[i]; //get data if(poolVersion == 2){ if(equalStrings(poolDEX, "Balancerfi2")){ PoolV2Balancerfi poolSC = PoolV2Balancerfi(0x1Fc3a9D7FfEfc3B808f04e6db3c86E6612B7848A); (uint48 swapFee, , uint112[] memory balances) = poolSC.getPriceData(poolAddress); fees[i] = swapFee; amounts0[i] = balances[0]; amounts1[i] = balances[1]; }else{ PoolV2 poolSC = PoolV2(poolAddress); (amounts0[i], amounts1[i], ) = poolSC.getReserves(); } }else if(poolVersion == 3){ if(equalStrings(poolDEX, "US")){ //uniswap PoolV3Uniswap poolSC = PoolV3Uniswap(poolAddress); (sqrtPrices[i], , , , , , ) = poolSC.slot0(); fees[i] = poolSC.fee(); }else if(equalStrings(poolDEX, "QS")){ //quickswap PoolV3Quickswap poolSC = PoolV3Quickswap(poolAddress); (sqrtPrices[i], , fees[i], , , , ) = poolSC.globalState(); }else{ revert( string.concat("Unknown DEX for: ", addressToString(poolAddress), " - ", Strings.toString(poolVersion), " - ", poolDEX) ); } }else{ revert( string.concat("Unknown Version for: ", addressToString(poolAddress), " - ", Strings.toString(poolVersion), " - ", poolDEX) ); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { // Solidity will revert if denominator == 0, unlike the div opcode on its own. // The surrounding unchecked block does not change this fact. // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic. return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1, "Math: mulDiv overflow"); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 256, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol) pragma solidity ^0.8.0; /** * @dev Standard signed math utilities missing in the Solidity language. */ library SignedMath { /** * @dev Returns the largest of two signed numbers. */ function max(int256 a, int256 b) internal pure returns (int256) { return a > b ? a : b; } /** * @dev Returns the smallest of two signed numbers. */ function min(int256 a, int256 b) internal pure returns (int256) { return a < b ? a : b; } /** * @dev Returns the average of two signed numbers without overflow. * The result is rounded towards zero. */ function average(int256 a, int256 b) internal pure returns (int256) { // Formula from the book "Hacker's Delight" int256 x = (a & b) + ((a ^ b) >> 1); return x + (int256(uint256(x) >> 255) & (a ^ b)); } /** * @dev Returns the absolute unsigned value of a signed value. */ function abs(int256 n) internal pure returns (uint256) { unchecked { // must be unchecked in order to support `n = type(int256).min` return uint256(n >= 0 ? n : -n); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol) pragma solidity ^0.8.0; import "./math/Math.sol"; import "./math/SignedMath.sol"; /** * @dev String operations. */ library Strings { bytes16 private constant _SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @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), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `int256` to its ASCII `string` decimal representation. */ function toString(int256 value) internal pure returns (string memory) { return string(abi.encodePacked(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) { 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] = _SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); 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 keccak256(bytes(a)) == keccak256(bytes(b)); } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"},{"internalType":"uint256[]","name":"poolsVersion","type":"uint256[]"},{"internalType":"string[]","name":"poolsDEX","type":"string[]"}],"name":"getPoolsPriceData","outputs":[{"internalType":"uint112[]","name":"amounts0","type":"uint112[]"},{"internalType":"uint112[]","name":"amounts1","type":"uint112[]"},{"internalType":"uint160[]","name":"sqrtPrices","type":"uint160[]"},{"internalType":"uint48[]","name":"fees","type":"uint48[]"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50611ff3806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063cfa08f4a14610030575b600080fd5b61004a6004803603810190610045919061126a565b610063565b60405161005a9493929190611577565b60405180910390f35b606080606080600087519050600087519050600087519050818314158061008a5750808214155b156101075761009883610aa1565b6100a183610aa1565b6100aa83610aa1565b6040516020016100bc93929190611707565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100fe91906117ba565b60405180910390fd5b8267ffffffffffffffff81111561012157610120610e3a565b5b60405190808252806020026020018201604052801561014f5781602001602082028036833780820191505090505b5096508267ffffffffffffffff81111561016c5761016b610e3a565b5b60405190808252806020026020018201604052801561019a5781602001602082028036833780820191505090505b5095508267ffffffffffffffff8111156101b7576101b6610e3a565b5b6040519080825280602002602001820160405280156101e55781602001602082028036833780820191505090505b5094508267ffffffffffffffff81111561020257610201610e3a565b5b6040519080825280602002602001820160405280156102305781602001602082028036833780820191505090505b50935060005b83811015610a94576000888281518110610253576102526117dc565b5b60200260200101906dffffffffffffffffffffffffffff1690816dffffffffffffffffffffffffffff16815250506000878281518110610296576102956117dc565b5b60200260200101906dffffffffffffffffffffffffffff1690816dffffffffffffffffffffffffffff168152505060008682815181106102d9576102d86117dc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000858281518110610328576103276117dc565b5b602002602001019065ffffffffffff16908165ffffffffffff168152505060008b828151811061035b5761035a6117dc565b5b6020026020010151905060008b838151811061037a576103796117dc565b5b6020026020010151905060008b8481518110610399576103986117dc565b5b602002602001015190506002820361067d576103ea816040518060400160405280600b81526020017f42616c616e636572666932000000000000000000000000000000000000000000815250610b6f565b15610583576000731fc3a9d7ffefc3b808f04e6db3c86e6612b7848a90506000808273ffffffffffffffffffffffffffffffffffffffff166372279ba1876040518263ffffffff1660e01b8152600401610444919061181a565b600060405180830381865afa158015610461573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061048a91906119fc565b9250509150818b88815181106104a3576104a26117dc565b5b602002602001019065ffffffffffff16908165ffffffffffff1681525050806000815181106104d5576104d46117dc565b5b60200260200101518e88815181106104f0576104ef6117dc565b5b60200260200101906dffffffffffffffffffffffffffff1690816dffffffffffffffffffffffffffff168152505080600181518110610532576105316117dc565b5b60200260200101518d888151811061054d5761054c6117dc565b5b60200260200101906dffffffffffffffffffffffffffff1690816dffffffffffffffffffffffffffff1681525050505050610678565b60008390508073ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156105d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f79190611ac3565b508d878151811061060b5761060a6117dc565b5b602002602001018d8881518110610625576106246117dc565b5b60200260200101826dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16815250826dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168152505050505b610a7e565b60038203610a0d576106c4816040518060400160405280600281526020017f5553000000000000000000000000000000000000000000000000000000000000815250610b6f565b156108485760008390508073ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015610719573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073d9190611c26565b9091929394509091929350909192509091509050508a8681518110610765576107646117dc565b5b602002602001018173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080c9190611d03565b62ffffff16898681518110610824576108236117dc565b5b602002602001019065ffffffffffff16908165ffffffffffff168152505050610a08565b610887816040518060400160405280600281526020017f5153000000000000000000000000000000000000000000000000000000000000815250610b6f565b156109975760008390508073ffffffffffffffffffffffffffffffffffffffff1663e76c01e46040518163ffffffff1660e01b815260040160e060405180830381865afa1580156108dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109009190611d30565b9091929394508461ffff169450909192509091509050508b878151811061092a576109296117dc565b5b602002602001018b8881518110610944576109436117dc565b5b602002602001018265ffffffffffff1665ffffffffffff168152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250505050610a07565b6109a083610bc8565b6109a983610aa1565b826040516020016109bc93929190611e1e565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fe91906117ba565b60405180910390fd5b5b610a7d565b610a1683610bc8565b610a1f83610aa1565b82604051602001610a3293929190611ea2565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7491906117ba565b60405180910390fd5b5b5050508080610a8c90611f2f565b915050610236565b5050505093509350935093565b606060006001610ab084610cbd565b01905060008167ffffffffffffffff811115610acf57610ace610e3a565b5b6040519080825280601f01601f191660200182016040528015610b015781602001600182028036833780820191505090505b509050600082602001820190505b600115610b64578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581610b5857610b57611f77565b5b04945060008503610b0f575b819350505050919050565b600081604051602001610b829190611fa6565b6040516020818303038152906040528051906020012083604051602001610ba99190611fa6565b6040516020818303038152906040528051906020012014905092915050565b606060008273ffffffffffffffffffffffffffffffffffffffff1660001b90506000602067ffffffffffffffff811115610c0557610c04610e3a565b5b6040519080825280601f01601f191660200182016040528015610c375781602001600182028036833780820191505090505b50905060005b6020811015610cb257828160208110610c5957610c586117dc565b5b1a60f81b828281518110610c7057610c6f6117dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080610caa90611f2f565b915050610c3d565b508092505050919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610d1b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381610d1157610d10611f77565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310610d58576d04ee2d6d415b85acef81000000008381610d4e57610d4d611f77565b5b0492506020810190505b662386f26fc100008310610d8757662386f26fc100008381610d7d57610d7c611f77565b5b0492506010810190505b6305f5e1008310610db0576305f5e1008381610da657610da5611f77565b5b0492506008810190505b6127108310610dd5576127108381610dcb57610dca611f77565b5b0492506004810190505b60648310610df85760648381610dee57610ded611f77565b5b0492506002810190505b600a8310610e07576001810190505b80915050919050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610e7282610e29565b810181811067ffffffffffffffff82111715610e9157610e90610e3a565b5b80604052505050565b6000610ea4610e10565b9050610eb08282610e69565b919050565b600067ffffffffffffffff821115610ed057610ecf610e3a565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f1182610ee6565b9050919050565b610f2181610f06565b8114610f2c57600080fd5b50565b600081359050610f3e81610f18565b92915050565b6000610f57610f5284610eb5565b610e9a565b90508083825260208201905060208402830185811115610f7a57610f79610ee1565b5b835b81811015610fa35780610f8f8882610f2f565b845260208401935050602081019050610f7c565b5050509392505050565b600082601f830112610fc257610fc1610e24565b5b8135610fd2848260208601610f44565b91505092915050565b600067ffffffffffffffff821115610ff657610ff5610e3a565b5b602082029050602081019050919050565b6000819050919050565b61101a81611007565b811461102557600080fd5b50565b60008135905061103781611011565b92915050565b600061105061104b84610fdb565b610e9a565b9050808382526020820190506020840283018581111561107357611072610ee1565b5b835b8181101561109c57806110888882611028565b845260208401935050602081019050611075565b5050509392505050565b600082601f8301126110bb576110ba610e24565b5b81356110cb84826020860161103d565b91505092915050565b600067ffffffffffffffff8211156110ef576110ee610e3a565b5b602082029050602081019050919050565b600080fd5b600067ffffffffffffffff8211156111205761111f610e3a565b5b61112982610e29565b9050602081019050919050565b82818337600083830152505050565b600061115861115384611105565b610e9a565b90508281526020810184848401111561117457611173611100565b5b61117f848285611136565b509392505050565b600082601f83011261119c5761119b610e24565b5b81356111ac848260208601611145565b91505092915050565b60006111c86111c3846110d4565b610e9a565b905080838252602082019050602084028301858111156111eb576111ea610ee1565b5b835b8181101561123257803567ffffffffffffffff8111156112105761120f610e24565b5b80860161121d8982611187565b855260208501945050506020810190506111ed565b5050509392505050565b600082601f83011261125157611250610e24565b5b81356112618482602086016111b5565b91505092915050565b60008060006060848603121561128357611282610e1a565b5b600084013567ffffffffffffffff8111156112a1576112a0610e1f565b5b6112ad86828701610fad565b935050602084013567ffffffffffffffff8111156112ce576112cd610e1f565b5b6112da868287016110a6565b925050604084013567ffffffffffffffff8111156112fb576112fa610e1f565b5b6113078682870161123c565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006dffffffffffffffffffffffffffff82169050919050565b6113608161133d565b82525050565b60006113728383611357565b60208301905092915050565b6000602082019050919050565b600061139682611311565b6113a0818561131c565b93506113ab8361132d565b8060005b838110156113dc5781516113c38882611366565b97506113ce8361137e565b9250506001810190506113af565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61141e81610ee6565b82525050565b60006114308383611415565b60208301905092915050565b6000602082019050919050565b6000611454826113e9565b61145e81856113f4565b935061146983611405565b8060005b8381101561149a5781516114818882611424565b975061148c8361143c565b92505060018101905061146d565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600065ffffffffffff82169050919050565b6114ee816114d3565b82525050565b600061150083836114e5565b60208301905092915050565b6000602082019050919050565b6000611524826114a7565b61152e81856114b2565b9350611539836114c3565b8060005b8381101561156a57815161155188826114f4565b975061155c8361150c565b92505060018101905061153d565b5085935050505092915050565b60006080820190508181036000830152611591818761138b565b905081810360208301526115a5818661138b565b905081810360408301526115b98185611449565b905081810360608301526115cd8184611519565b905095945050505050565b600081905092915050565b7f446966666572656e742061727261792073697a657320666f7220696e7075747360008201527f2028000000000000000000000000000000000000000000000000000000000000602082015250565b600061163f6022836115d8565b915061164a826115e3565b602282019050919050565b600081519050919050565b60005b8381101561167e578082015181840152602081019050611663565b60008484015250505050565b600061169582611655565b61169f81856115d8565b93506116af818560208601611660565b80840191505092915050565b7f2c20000000000000000000000000000000000000000000000000000000000000815250565b7f2900000000000000000000000000000000000000000000000000000000000000815250565b600061171282611632565b915061171e828661168a565b9150611729826116bb565b600282019150611739828561168a565b9150611744826116bb565b600282019150611754828461168a565b915061175f826116e1565b600182019150819050949350505050565b600082825260208201905092915050565b600061178c82611655565b6117968185611770565b93506117a6818560208601611660565b6117af81610e29565b840191505092915050565b600060208201905081810360008301526117d48184611781565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b61181481610f06565b82525050565b600060208201905061182f600083018461180b565b92915050565b61183e816114d3565b811461184957600080fd5b50565b60008151905061185b81611835565b92915050565b60008151905061187081610f18565b92915050565b600061188961188484610eb5565b610e9a565b905080838252602082019050602084028301858111156118ac576118ab610ee1565b5b835b818110156118d557806118c18882611861565b8452602084019350506020810190506118ae565b5050509392505050565b600082601f8301126118f4576118f3610e24565b5b8151611904848260208601611876565b91505092915050565b600067ffffffffffffffff82111561192857611927610e3a565b5b602082029050602081019050919050565b6119428161133d565b811461194d57600080fd5b50565b60008151905061195f81611939565b92915050565b60006119786119738461190d565b610e9a565b9050808382526020820190506020840283018581111561199b5761199a610ee1565b5b835b818110156119c457806119b08882611950565b84526020840193505060208101905061199d565b5050509392505050565b600082601f8301126119e3576119e2610e24565b5b81516119f3848260208601611965565b91505092915050565b600080600060608486031215611a1557611a14610e1a565b5b6000611a238682870161184c565b935050602084015167ffffffffffffffff811115611a4457611a43610e1f565b5b611a50868287016118df565b925050604084015167ffffffffffffffff811115611a7157611a70610e1f565b5b611a7d868287016119ce565b9150509250925092565b600063ffffffff82169050919050565b611aa081611a87565b8114611aab57600080fd5b50565b600081519050611abd81611a97565b92915050565b600080600060608486031215611adc57611adb610e1a565b5b6000611aea86828701611950565b9350506020611afb86828701611950565b9250506040611b0c86828701611aae565b9150509250925092565b611b1f81610ee6565b8114611b2a57600080fd5b50565b600081519050611b3c81611b16565b92915050565b60008160020b9050919050565b611b5881611b42565b8114611b6357600080fd5b50565b600081519050611b7581611b4f565b92915050565b600061ffff82169050919050565b611b9281611b7b565b8114611b9d57600080fd5b50565b600081519050611baf81611b89565b92915050565b600060ff82169050919050565b611bcb81611bb5565b8114611bd657600080fd5b50565b600081519050611be881611bc2565b92915050565b60008115159050919050565b611c0381611bee565b8114611c0e57600080fd5b50565b600081519050611c2081611bfa565b92915050565b600080600080600080600060e0888a031215611c4557611c44610e1a565b5b6000611c538a828b01611b2d565b9750506020611c648a828b01611b66565b9650506040611c758a828b01611ba0565b9550506060611c868a828b01611ba0565b9450506080611c978a828b01611ba0565b93505060a0611ca88a828b01611bd9565b92505060c0611cb98a828b01611c11565b91505092959891949750929550565b600062ffffff82169050919050565b611ce081611cc8565b8114611ceb57600080fd5b50565b600081519050611cfd81611cd7565b92915050565b600060208284031215611d1957611d18610e1a565b5b6000611d2784828501611cee565b91505092915050565b600080600080600080600060e0888a031215611d4f57611d4e610e1a565b5b6000611d5d8a828b01611b2d565b9750506020611d6e8a828b01611b66565b9650506040611d7f8a828b01611ba0565b9550506060611d908a828b01611ba0565b9450506080611da18a828b01611bd9565b93505060a0611db28a828b01611bd9565b92505060c0611dc38a828b01611c11565b91505092959891949750929550565b7f556e6b6e6f776e2044455820666f723a20000000000000000000000000000000815250565b7f202d200000000000000000000000000000000000000000000000000000000000815250565b6000611e2982611dd2565b601182019150611e39828661168a565b9150611e4482611df8565b600382019150611e54828561168a565b9150611e5f82611df8565b600382019150611e6f828461168a565b9150819050949350505050565b7f556e6b6e6f776e2056657273696f6e20666f723a200000000000000000000000815250565b6000611ead82611e7c565b601582019150611ebd828661168a565b9150611ec882611df8565b600382019150611ed8828561168a565b9150611ee382611df8565b600382019150611ef3828461168a565b9150819050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611f3a82611007565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611f6c57611f6b611f00565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611fb2828461168a565b91508190509291505056fea2646970667358221220404c135873a056d97319cac725dba95af4c4eeae12e14fb65c9e696505a4601e64736f6c63430008130033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063cfa08f4a14610030575b600080fd5b61004a6004803603810190610045919061126a565b610063565b60405161005a9493929190611577565b60405180910390f35b606080606080600087519050600087519050600087519050818314158061008a5750808214155b156101075761009883610aa1565b6100a183610aa1565b6100aa83610aa1565b6040516020016100bc93929190611707565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100fe91906117ba565b60405180910390fd5b8267ffffffffffffffff81111561012157610120610e3a565b5b60405190808252806020026020018201604052801561014f5781602001602082028036833780820191505090505b5096508267ffffffffffffffff81111561016c5761016b610e3a565b5b60405190808252806020026020018201604052801561019a5781602001602082028036833780820191505090505b5095508267ffffffffffffffff8111156101b7576101b6610e3a565b5b6040519080825280602002602001820160405280156101e55781602001602082028036833780820191505090505b5094508267ffffffffffffffff81111561020257610201610e3a565b5b6040519080825280602002602001820160405280156102305781602001602082028036833780820191505090505b50935060005b83811015610a94576000888281518110610253576102526117dc565b5b60200260200101906dffffffffffffffffffffffffffff1690816dffffffffffffffffffffffffffff16815250506000878281518110610296576102956117dc565b5b60200260200101906dffffffffffffffffffffffffffff1690816dffffffffffffffffffffffffffff168152505060008682815181106102d9576102d86117dc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000858281518110610328576103276117dc565b5b602002602001019065ffffffffffff16908165ffffffffffff168152505060008b828151811061035b5761035a6117dc565b5b6020026020010151905060008b838151811061037a576103796117dc565b5b6020026020010151905060008b8481518110610399576103986117dc565b5b602002602001015190506002820361067d576103ea816040518060400160405280600b81526020017f42616c616e636572666932000000000000000000000000000000000000000000815250610b6f565b15610583576000731fc3a9d7ffefc3b808f04e6db3c86e6612b7848a90506000808273ffffffffffffffffffffffffffffffffffffffff166372279ba1876040518263ffffffff1660e01b8152600401610444919061181a565b600060405180830381865afa158015610461573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061048a91906119fc565b9250509150818b88815181106104a3576104a26117dc565b5b602002602001019065ffffffffffff16908165ffffffffffff1681525050806000815181106104d5576104d46117dc565b5b60200260200101518e88815181106104f0576104ef6117dc565b5b60200260200101906dffffffffffffffffffffffffffff1690816dffffffffffffffffffffffffffff168152505080600181518110610532576105316117dc565b5b60200260200101518d888151811061054d5761054c6117dc565b5b60200260200101906dffffffffffffffffffffffffffff1690816dffffffffffffffffffffffffffff1681525050505050610678565b60008390508073ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156105d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f79190611ac3565b508d878151811061060b5761060a6117dc565b5b602002602001018d8881518110610625576106246117dc565b5b60200260200101826dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16815250826dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168152505050505b610a7e565b60038203610a0d576106c4816040518060400160405280600281526020017f5553000000000000000000000000000000000000000000000000000000000000815250610b6f565b156108485760008390508073ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015610719573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073d9190611c26565b9091929394509091929350909192509091509050508a8681518110610765576107646117dc565b5b602002602001018173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080c9190611d03565b62ffffff16898681518110610824576108236117dc565b5b602002602001019065ffffffffffff16908165ffffffffffff168152505050610a08565b610887816040518060400160405280600281526020017f5153000000000000000000000000000000000000000000000000000000000000815250610b6f565b156109975760008390508073ffffffffffffffffffffffffffffffffffffffff1663e76c01e46040518163ffffffff1660e01b815260040160e060405180830381865afa1580156108dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109009190611d30565b9091929394508461ffff169450909192509091509050508b878151811061092a576109296117dc565b5b602002602001018b8881518110610944576109436117dc565b5b602002602001018265ffffffffffff1665ffffffffffff168152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250505050610a07565b6109a083610bc8565b6109a983610aa1565b826040516020016109bc93929190611e1e565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fe91906117ba565b60405180910390fd5b5b610a7d565b610a1683610bc8565b610a1f83610aa1565b82604051602001610a3293929190611ea2565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7491906117ba565b60405180910390fd5b5b5050508080610a8c90611f2f565b915050610236565b5050505093509350935093565b606060006001610ab084610cbd565b01905060008167ffffffffffffffff811115610acf57610ace610e3a565b5b6040519080825280601f01601f191660200182016040528015610b015781602001600182028036833780820191505090505b509050600082602001820190505b600115610b64578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581610b5857610b57611f77565b5b04945060008503610b0f575b819350505050919050565b600081604051602001610b829190611fa6565b6040516020818303038152906040528051906020012083604051602001610ba99190611fa6565b6040516020818303038152906040528051906020012014905092915050565b606060008273ffffffffffffffffffffffffffffffffffffffff1660001b90506000602067ffffffffffffffff811115610c0557610c04610e3a565b5b6040519080825280601f01601f191660200182016040528015610c375781602001600182028036833780820191505090505b50905060005b6020811015610cb257828160208110610c5957610c586117dc565b5b1a60f81b828281518110610c7057610c6f6117dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080610caa90611f2f565b915050610c3d565b508092505050919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610d1b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381610d1157610d10611f77565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310610d58576d04ee2d6d415b85acef81000000008381610d4e57610d4d611f77565b5b0492506020810190505b662386f26fc100008310610d8757662386f26fc100008381610d7d57610d7c611f77565b5b0492506010810190505b6305f5e1008310610db0576305f5e1008381610da657610da5611f77565b5b0492506008810190505b6127108310610dd5576127108381610dcb57610dca611f77565b5b0492506004810190505b60648310610df85760648381610dee57610ded611f77565b5b0492506002810190505b600a8310610e07576001810190505b80915050919050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610e7282610e29565b810181811067ffffffffffffffff82111715610e9157610e90610e3a565b5b80604052505050565b6000610ea4610e10565b9050610eb08282610e69565b919050565b600067ffffffffffffffff821115610ed057610ecf610e3a565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f1182610ee6565b9050919050565b610f2181610f06565b8114610f2c57600080fd5b50565b600081359050610f3e81610f18565b92915050565b6000610f57610f5284610eb5565b610e9a565b90508083825260208201905060208402830185811115610f7a57610f79610ee1565b5b835b81811015610fa35780610f8f8882610f2f565b845260208401935050602081019050610f7c565b5050509392505050565b600082601f830112610fc257610fc1610e24565b5b8135610fd2848260208601610f44565b91505092915050565b600067ffffffffffffffff821115610ff657610ff5610e3a565b5b602082029050602081019050919050565b6000819050919050565b61101a81611007565b811461102557600080fd5b50565b60008135905061103781611011565b92915050565b600061105061104b84610fdb565b610e9a565b9050808382526020820190506020840283018581111561107357611072610ee1565b5b835b8181101561109c57806110888882611028565b845260208401935050602081019050611075565b5050509392505050565b600082601f8301126110bb576110ba610e24565b5b81356110cb84826020860161103d565b91505092915050565b600067ffffffffffffffff8211156110ef576110ee610e3a565b5b602082029050602081019050919050565b600080fd5b600067ffffffffffffffff8211156111205761111f610e3a565b5b61112982610e29565b9050602081019050919050565b82818337600083830152505050565b600061115861115384611105565b610e9a565b90508281526020810184848401111561117457611173611100565b5b61117f848285611136565b509392505050565b600082601f83011261119c5761119b610e24565b5b81356111ac848260208601611145565b91505092915050565b60006111c86111c3846110d4565b610e9a565b905080838252602082019050602084028301858111156111eb576111ea610ee1565b5b835b8181101561123257803567ffffffffffffffff8111156112105761120f610e24565b5b80860161121d8982611187565b855260208501945050506020810190506111ed565b5050509392505050565b600082601f83011261125157611250610e24565b5b81356112618482602086016111b5565b91505092915050565b60008060006060848603121561128357611282610e1a565b5b600084013567ffffffffffffffff8111156112a1576112a0610e1f565b5b6112ad86828701610fad565b935050602084013567ffffffffffffffff8111156112ce576112cd610e1f565b5b6112da868287016110a6565b925050604084013567ffffffffffffffff8111156112fb576112fa610e1f565b5b6113078682870161123c565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006dffffffffffffffffffffffffffff82169050919050565b6113608161133d565b82525050565b60006113728383611357565b60208301905092915050565b6000602082019050919050565b600061139682611311565b6113a0818561131c565b93506113ab8361132d565b8060005b838110156113dc5781516113c38882611366565b97506113ce8361137e565b9250506001810190506113af565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61141e81610ee6565b82525050565b60006114308383611415565b60208301905092915050565b6000602082019050919050565b6000611454826113e9565b61145e81856113f4565b935061146983611405565b8060005b8381101561149a5781516114818882611424565b975061148c8361143c565b92505060018101905061146d565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600065ffffffffffff82169050919050565b6114ee816114d3565b82525050565b600061150083836114e5565b60208301905092915050565b6000602082019050919050565b6000611524826114a7565b61152e81856114b2565b9350611539836114c3565b8060005b8381101561156a57815161155188826114f4565b975061155c8361150c565b92505060018101905061153d565b5085935050505092915050565b60006080820190508181036000830152611591818761138b565b905081810360208301526115a5818661138b565b905081810360408301526115b98185611449565b905081810360608301526115cd8184611519565b905095945050505050565b600081905092915050565b7f446966666572656e742061727261792073697a657320666f7220696e7075747360008201527f2028000000000000000000000000000000000000000000000000000000000000602082015250565b600061163f6022836115d8565b915061164a826115e3565b602282019050919050565b600081519050919050565b60005b8381101561167e578082015181840152602081019050611663565b60008484015250505050565b600061169582611655565b61169f81856115d8565b93506116af818560208601611660565b80840191505092915050565b7f2c20000000000000000000000000000000000000000000000000000000000000815250565b7f2900000000000000000000000000000000000000000000000000000000000000815250565b600061171282611632565b915061171e828661168a565b9150611729826116bb565b600282019150611739828561168a565b9150611744826116bb565b600282019150611754828461168a565b915061175f826116e1565b600182019150819050949350505050565b600082825260208201905092915050565b600061178c82611655565b6117968185611770565b93506117a6818560208601611660565b6117af81610e29565b840191505092915050565b600060208201905081810360008301526117d48184611781565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b61181481610f06565b82525050565b600060208201905061182f600083018461180b565b92915050565b61183e816114d3565b811461184957600080fd5b50565b60008151905061185b81611835565b92915050565b60008151905061187081610f18565b92915050565b600061188961188484610eb5565b610e9a565b905080838252602082019050602084028301858111156118ac576118ab610ee1565b5b835b818110156118d557806118c18882611861565b8452602084019350506020810190506118ae565b5050509392505050565b600082601f8301126118f4576118f3610e24565b5b8151611904848260208601611876565b91505092915050565b600067ffffffffffffffff82111561192857611927610e3a565b5b602082029050602081019050919050565b6119428161133d565b811461194d57600080fd5b50565b60008151905061195f81611939565b92915050565b60006119786119738461190d565b610e9a565b9050808382526020820190506020840283018581111561199b5761199a610ee1565b5b835b818110156119c457806119b08882611950565b84526020840193505060208101905061199d565b5050509392505050565b600082601f8301126119e3576119e2610e24565b5b81516119f3848260208601611965565b91505092915050565b600080600060608486031215611a1557611a14610e1a565b5b6000611a238682870161184c565b935050602084015167ffffffffffffffff811115611a4457611a43610e1f565b5b611a50868287016118df565b925050604084015167ffffffffffffffff811115611a7157611a70610e1f565b5b611a7d868287016119ce565b9150509250925092565b600063ffffffff82169050919050565b611aa081611a87565b8114611aab57600080fd5b50565b600081519050611abd81611a97565b92915050565b600080600060608486031215611adc57611adb610e1a565b5b6000611aea86828701611950565b9350506020611afb86828701611950565b9250506040611b0c86828701611aae565b9150509250925092565b611b1f81610ee6565b8114611b2a57600080fd5b50565b600081519050611b3c81611b16565b92915050565b60008160020b9050919050565b611b5881611b42565b8114611b6357600080fd5b50565b600081519050611b7581611b4f565b92915050565b600061ffff82169050919050565b611b9281611b7b565b8114611b9d57600080fd5b50565b600081519050611baf81611b89565b92915050565b600060ff82169050919050565b611bcb81611bb5565b8114611bd657600080fd5b50565b600081519050611be881611bc2565b92915050565b60008115159050919050565b611c0381611bee565b8114611c0e57600080fd5b50565b600081519050611c2081611bfa565b92915050565b600080600080600080600060e0888a031215611c4557611c44610e1a565b5b6000611c538a828b01611b2d565b9750506020611c648a828b01611b66565b9650506040611c758a828b01611ba0565b9550506060611c868a828b01611ba0565b9450506080611c978a828b01611ba0565b93505060a0611ca88a828b01611bd9565b92505060c0611cb98a828b01611c11565b91505092959891949750929550565b600062ffffff82169050919050565b611ce081611cc8565b8114611ceb57600080fd5b50565b600081519050611cfd81611cd7565b92915050565b600060208284031215611d1957611d18610e1a565b5b6000611d2784828501611cee565b91505092915050565b600080600080600080600060e0888a031215611d4f57611d4e610e1a565b5b6000611d5d8a828b01611b2d565b9750506020611d6e8a828b01611b66565b9650506040611d7f8a828b01611ba0565b9550506060611d908a828b01611ba0565b9450506080611da18a828b01611bd9565b93505060a0611db28a828b01611bd9565b92505060c0611dc38a828b01611c11565b91505092959891949750929550565b7f556e6b6e6f776e2044455820666f723a20000000000000000000000000000000815250565b7f202d200000000000000000000000000000000000000000000000000000000000815250565b6000611e2982611dd2565b601182019150611e39828661168a565b9150611e4482611df8565b600382019150611e54828561168a565b9150611e5f82611df8565b600382019150611e6f828461168a565b9150819050949350505050565b7f556e6b6e6f776e2056657273696f6e20666f723a200000000000000000000000815250565b6000611ead82611e7c565b601582019150611ebd828661168a565b9150611ec882611df8565b600382019150611ed8828561168a565b9150611ee382611df8565b600382019150611ef3828461168a565b9150819050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611f3a82611007565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611f6c57611f6b611f00565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611fb2828461168a565b91508190509291505056fea2646970667358221220404c135873a056d97319cac725dba95af4c4eeae12e14fb65c9e696505a4601e64736f6c63430008130033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.