ERC-20
Overview
Max Total Supply
189,516.147171 ERC20 ***
Holders
664
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 6 Decimals)
Balance
102 ERC20 ***Value
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
InterestToken
Compiler Version
v0.8.0+commit.c7dfd78e
Optimization Enabled:
Yes with 7500 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; import "./libraries/ERC20Permit.sol"; import "./libraries/DateString.sol"; import "./interfaces/IInterestToken.sol"; import "./interfaces/ITranche.sol"; contract InterestToken is ERC20Permit, IInterestToken { // The tranche address which controls the minting ITranche public immutable tranche; /// @dev Initializes the ERC20 and writes the correct names /// @param _tranche The tranche contract address /// @param _strategySymbol The symbol of the associated WrappedPosition contract /// @param _timestamp The unlock time on the tranche /// @param _decimals The decimal encoding for this token constructor( address _tranche, string memory _strategySymbol, uint256 _timestamp, uint8 _decimals ) ERC20Permit( _processName("Element Yield Token ", _strategySymbol, _timestamp), _processSymbol("eY", _strategySymbol, _timestamp) ) { tranche = ITranche(_tranche); _setupDecimals(_decimals); } /// @notice We use this function to add the date to the name string /// @param _name start of the name /// @param _strategySymbol the strategy symbol /// @param _timestamp the unix second timestamp to be encoded and added to the end of the string function _processName( string memory _name, string memory _strategySymbol, uint256 _timestamp ) internal returns (string memory) { // Set the name in the super name = _name; // Use the library to write the rest DateString._encodeAndWriteTimestamp(_strategySymbol, _timestamp, name); // load and return the name return name; } /// @notice We use this function to add the date to the name string /// @param _symbol start of the symbol /// @param _strategySymbol the strategy symbol /// @param _timestamp the unix second timestamp to be encoded and added to the end of the string function _processSymbol( string memory _symbol, string memory _strategySymbol, uint256 _timestamp ) internal returns (string memory) { // Set the symbol in the super symbol = _symbol; // Use the library to write the rest DateString._encodeAndWriteTimestamp( _strategySymbol, _timestamp, symbol ); // load and return the name return symbol; } /// @dev Aliasing of the lookup method for the supply of yield tokens which /// improves our ERC20 compatibility. /// @return The total supply of yield tokens function totalSupply() external view returns (uint256) { return uint256(tranche.interestSupply()); } /// @dev Prevents execution if the caller isn't the tranche modifier onlyMintAuthority() { require( msg.sender == address(tranche), "caller is not an authorized minter" ); _; } /// @dev Mints tokens to an address /// @param _account The account to mint to /// @param _amount The amount to mint function mint(address _account, uint256 _amount) external override onlyMintAuthority { _mint(_account, _amount); } /// @dev Burns tokens from an address /// @param _account The account to burn from /// @param _amount The amount of token to burn function burn(address _account, uint256 _amount) external override onlyMintAuthority { _burn(_account, _amount); } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; import "../interfaces/IERC20Permit.sol"; // This default erc20 library is designed for max efficiency and security. // WARNING: By default it does not include totalSupply which breaks the ERC20 standard // to use a fully standard compliant ERC20 use 'ERC20PermitWithSupply" abstract contract ERC20Permit is IERC20Permit { // --- ERC20 Data --- // The name of the erc20 token string public name; // The symbol of the erc20 token string public override symbol; // The decimals of the erc20 token, should default to 18 for new tokens uint8 public override decimals; // A mapping which tracks user token balances mapping(address => uint256) public override balanceOf; // A mapping which tracks which addresses a user allows to move their tokens mapping(address => mapping(address => uint256)) public override allowance; // A mapping which tracks the permit signature nonces for users mapping(address => uint256) public override nonces; // --- EIP712 niceties --- // solhint-disable-next-line var-name-mixedcase bytes32 public override DOMAIN_SEPARATOR; // bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9; /// @notice Initializes the erc20 contract /// @param name_ the value 'name' will be set to /// @param symbol_ the value 'symbol' will be set to /// @dev decimals default to 18 and must be reset by an inheriting contract for /// non standard decimal values constructor(string memory name_, string memory symbol_) { // Set the state variables name = name_; symbol = symbol_; decimals = 18; // By setting these addresses to 0 attempting to execute a transfer to // either of them will revert. This is a gas efficient way to prevent // a common user mistake where they transfer to the token address. // These values are not considered 'real' tokens and so are not included // in 'total supply' which only contains minted tokens. balanceOf[address(0)] = type(uint256).max; balanceOf[address(this)] = type(uint256).max; // Optional extra state manipulation _extraConstruction(); // Computes the EIP 712 domain separator which prevents user signed messages for // this contract to be replayed in other contracts. // https://eips.ethereum.org/EIPS/eip-712 DOMAIN_SEPARATOR = keccak256( abi.encode( keccak256( "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" ), keccak256(bytes(name)), keccak256(bytes("1")), block.chainid, address(this) ) ); } /// @notice An optional override function to execute and change state before immutable assignment function _extraConstruction() internal virtual {} // --- Token --- /// @notice Allows a token owner to send tokens to another address /// @param recipient The address which will be credited with the tokens /// @param amount The amount user token to send /// @return returns true on success, reverts on failure so cannot return false. /// @dev transfers to this contract address or 0 will fail function transfer(address recipient, uint256 amount) public virtual override returns (bool) { // We forward this call to 'transferFrom' return transferFrom(msg.sender, recipient, amount); } /// @notice Transfers an amount of erc20 from a spender to a receipt /// @param spender The source of the ERC20 tokens /// @param recipient The destination of the ERC20 tokens /// @param amount the number of tokens to send /// @return returns true on success and reverts on failure /// @dev will fail transfers which send funds to this contract or 0 function transferFrom( address spender, address recipient, uint256 amount ) public virtual override returns (bool) { // Load balance and allowance uint256 balance = balanceOf[spender]; require(balance >= amount, "ERC20: insufficient-balance"); // We potentially have to change allowances if (spender != msg.sender) { // Loading the allowance in the if block prevents vanilla transfers // from paying for the sload. uint256 allowed = allowance[spender][msg.sender]; // If the allowance is max we do not reduce it // Note - This means that max allowances will be more gas efficient // by not requiring a sstore on 'transferFrom' if (allowed != type(uint256).max) { require(allowed >= amount, "ERC20: insufficient-allowance"); allowance[spender][msg.sender] = allowed - amount; } } // Update the balances balanceOf[spender] = balance - amount; // Note - In the constructor we initialize the 'balanceOf' of address 0 and // the token address to uint256.max and so in 8.0 transfers to those // addresses revert on this step. balanceOf[recipient] = balanceOf[recipient] + amount; // Emit the needed event emit Transfer(spender, recipient, amount); // Return that this call succeeded return true; } /// @notice This internal minting function allows inheriting contracts /// to mint tokens in the way they wish. /// @param account the address which will receive the token. /// @param amount the amount of token which they will receive /// @dev This function is virtual so that it can be overridden, if you /// are reviewing this contract for security you should ensure to /// check for overrides function _mint(address account, uint256 amount) internal virtual { // Add tokens to the account balanceOf[account] = balanceOf[account] + amount; // Emit an event to track the minting emit Transfer(address(0), account, amount); } /// @notice This internal burning function allows inheriting contracts to /// burn tokens in the way they see fit. /// @param account the account to remove tokens from /// @param amount the amount of tokens to remove /// @dev This function is virtual so that it can be overridden, if you /// are reviewing this contract for security you should ensure to /// check for overrides function _burn(address account, uint256 amount) internal virtual { // Reduce the balance of the account balanceOf[account] = balanceOf[account] - amount; // Emit an event tracking transfers emit Transfer(account, address(0), amount); } /// @notice This function allows a user to approve an account which can transfer /// tokens on their behalf. /// @param account The account which will be approve to transfer tokens /// @param amount The approval amount, if set to uint256.max the allowance does not go down on transfers. /// @return returns true for compatibility with the ERC20 standard function approve(address account, uint256 amount) public virtual override returns (bool) { // Set the senders allowance for account to amount allowance[msg.sender][account] = amount; // Emit an event to track approvals emit Approval(msg.sender, account, amount); return true; } /// @notice This function allows a caller who is not the owner of an account to execute the functionality of 'approve' with the owners signature. /// @param owner the owner of the account which is having the new approval set /// @param spender the address which will be allowed to spend owner's tokens /// @param value the new allowance value /// @param deadline the timestamp which the signature must be submitted by to be valid /// @param v Extra ECDSA data which allows public key recovery from signature assumed to be 27 or 28 /// @param r The r component of the ECDSA signature /// @param s The s component of the ECDSA signature /// @dev The signature for this function follows EIP 712 standard and should be generated with the /// eth_signTypedData JSON RPC call instead of the eth_sign JSON RPC call. If using out of date /// parity signing libraries the v component may need to be adjusted. Also it is very rare but possible /// for v to be other values, those values are not supported. function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external override { // The EIP 712 digest for this function bytes32 digest = keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR, keccak256( abi.encode( PERMIT_TYPEHASH, owner, spender, value, nonces[owner], deadline ) ) ) ); // Require that the owner is not zero require(owner != address(0), "ERC20: invalid-address-0"); // Require that we have a valid signature from the owner require(owner == ecrecover(digest, v, r, s), "ERC20: invalid-permit"); // Require that the signature is not expired require( deadline == 0 || block.timestamp <= deadline, "ERC20: permit-expired" ); // Format the signature to the default format require( uint256(s) <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0, "ERC20: invalid signature 's' value" ); // Increment the signature nonce to prevent replay nonces[owner]++; // Set the allowance to the new value allowance[owner][spender] = value; // Emit an approval event to be able to track this happening emit Approval(owner, spender, value); } /// @notice Internal function which allows inheriting contract to set custom decimals /// @param decimals_ the new decimal value function _setupDecimals(uint8 decimals_) internal { // Set the decimals decimals = decimals_; } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; library DateString { uint256 public constant SECONDS_PER_DAY = 24 * 60 * 60; uint256 public constant SECONDS_PER_HOUR = 60 * 60; uint256 public constant SECONDS_PER_MINUTE = 60; int256 public constant OFFSET19700101 = 2440588; // This function was forked from https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary // ------------------------------------------------------------------------ // Calculate year/month/day from the number of days since 1970/01/01 using // the date conversion algorithm from // http://aa.usno.navy.mil/faq/docs/JD_Formula.php // and adding the offset 2440588 so that 1970/01/01 is day 0 // // int L = days + 68569 + offset // int N = 4 * L / 146097 // L = L - (146097 * N + 3) / 4 // year = 4000 * (L + 1) / 1461001 // L = L - 1461 * year / 4 + 31 // month = 80 * L / 2447 // dd = L - 2447 * month / 80 // L = month / 11 // month = month + 2 - 12 * L // year = 100 * (N - 49) + year + L // ------------------------------------------------------------------------ // solhint-disable-next-line private-vars-leading-underscore function _daysToDate(uint256 _days) internal pure returns ( uint256 year, uint256 month, uint256 day ) { int256 __days = int256(_days); // solhint-disable-next-line var-name-mixedcase int256 L = __days + 68569 + OFFSET19700101; // solhint-disable-next-line var-name-mixedcase int256 N = (4 * L) / 146097; L = L - (146097 * N + 3) / 4; int256 _year = (4000 * (L + 1)) / 1461001; L = L - (1461 * _year) / 4 + 31; int256 _month = (80 * L) / 2447; int256 _day = L - (2447 * _month) / 80; L = _month / 11; _month = _month + 2 - 12 * L; _year = 100 * (N - 49) + _year + L; year = uint256(_year); month = uint256(_month); day = uint256(_day); } /// @dev Writes a prefix and an timestamp encoding to an output storage location /// This function is designed to only work with ASCII encoded strings. No emojis please. /// @param _prefix The string to write before the timestamp /// @param _timestamp the timestamp to encode and store /// @param _output the storage location of the output string /// NOTE - Current cost ~90k if gas is problem revisit and use assembly to remove the extra /// sstore s. function encodeAndWriteTimestamp( string memory _prefix, uint256 _timestamp, string storage _output ) external { _encodeAndWriteTimestamp(_prefix, _timestamp, _output); } /// @dev Sn internal version of the above function 'encodeAndWriteTimestamp' // solhint-disable-next-line function _encodeAndWriteTimestamp( string memory _prefix, uint256 _timestamp, string storage _output ) internal { // Cast the prefix string to a byte array bytes memory bytePrefix = bytes(_prefix); // Cast the output string to a byte array bytes storage bytesOutput = bytes(_output); // Copy the bytes from the prefix onto the byte array // NOTE - IF PREFIX CONTAINS NON-ASCII CHARS THIS WILL CAUSE AN INCORRECT STRING LENGTH for (uint256 i = 0; i < bytePrefix.length; i++) { bytesOutput.push(bytePrefix[i]); } // Add a '-' to the string to separate the prefix from the the date bytesOutput.push(bytes1("-")); // Add the date string timestampToDateString(_timestamp, _output); } /// @dev Converts a unix second encoded timestamp to a date format (year, month, day) /// then writes the string encoding of that to the output pointer. /// @param _timestamp the unix seconds timestamp /// @param _outputPointer the storage pointer to change. function timestampToDateString( uint256 _timestamp, string storage _outputPointer ) public { _timestampToDateString(_timestamp, _outputPointer); } /// @dev Sn internal version of the above function 'timestampToDateString' // solhint-disable-next-line function _timestampToDateString( uint256 _timestamp, string storage _outputPointer ) internal { // We pretend the string is a 'bytes' only push UTF8 encodings to it bytes storage output = bytes(_outputPointer); // First we get the day month and year (uint256 year, uint256 month, uint256 day) = _daysToDate( _timestamp / SECONDS_PER_DAY ); // First we add encoded day to the string { // Round out the second digit uint256 firstDigit = day / 10; // add it to the encoded byte for '0' output.push(bytes1(uint8(bytes1("0")) + uint8(firstDigit))); // Extract the second digit uint256 secondDigit = day % 10; // add it to the string output.push(bytes1(uint8(bytes1("0")) + uint8(secondDigit))); } // Next we encode the month string and add it if (month == 1) { stringPush(output, "J", "A", "N"); } else if (month == 2) { stringPush(output, "F", "E", "B"); } else if (month == 3) { stringPush(output, "M", "A", "R"); } else if (month == 4) { stringPush(output, "A", "P", "R"); } else if (month == 5) { stringPush(output, "M", "A", "Y"); } else if (month == 6) { stringPush(output, "J", "U", "N"); } else if (month == 7) { stringPush(output, "J", "U", "L"); } else if (month == 8) { stringPush(output, "A", "U", "G"); } else if (month == 9) { stringPush(output, "S", "E", "P"); } else if (month == 10) { stringPush(output, "O", "C", "T"); } else if (month == 11) { stringPush(output, "N", "O", "V"); } else if (month == 12) { stringPush(output, "D", "E", "C"); } else { revert("date decoding error"); } // We take the last two digits of the year // Hopefully that's enough { uint256 lastDigits = year % 100; // Round out the second digit uint256 firstDigit = lastDigits / 10; // add it to the encoded byte for '0' output.push(bytes1(uint8(bytes1("0")) + uint8(firstDigit))); // Extract the second digit uint256 secondDigit = lastDigits % 10; // add it to the string output.push(bytes1(uint8(bytes1("0")) + uint8(secondDigit))); } } function stringPush( bytes storage output, bytes1 data1, bytes1 data2, bytes1 data3 ) internal { output.push(data1); output.push(data2); output.push(data3); } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; import "./IERC20Permit.sol"; interface IInterestToken is IERC20Permit { function mint(address _account, uint256 _amount) external; function burn(address _account, uint256 _amount) external; }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; import "./IERC20Permit.sol"; import "./IInterestToken.sol"; interface ITranche is IERC20Permit { function deposit(uint256 _shares, address destination) external returns (uint256, uint256); function prefundedDeposit(address _destination) external returns (uint256, uint256); function withdrawPrincipal(uint256 _amount, address _destination) external returns (uint256); function withdrawInterest(uint256 _amount, address _destination) external returns (uint256); function interestToken() external view returns (IInterestToken); function interestSupply() external view returns (uint128); }
// Forked from openzepplin // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC20.sol"; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit is IERC20 { /** * @dev Sets `value` as the allowance of `spender` over `owner`'s tokens, * given `owner`'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for `permit`, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; interface IERC20 { function symbol() external view returns (string memory); function balanceOf(address account) external view returns (uint256); // Note this is non standard but nearly all ERC20 have exposed decimal functions function decimals() external view returns (uint8); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); }
{ "optimizer": { "enabled": true, "runs": 7500 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_tranche","type":"address"},{"internalType":"string","name":"_strategySymbol","type":"string"},{"internalType":"uint256","name":"_timestamp","type":"uint256"},{"internalType":"uint8","name":"_decimals","type":"uint8"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"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":"account","type":"address"},{"internalType":"uint256","name":"amount","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":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tranche","outputs":[{"internalType":"contract ITranche","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040523480156200001157600080fd5b506040516200322338038062003223833981016040819052620000349162000d36565b60408051808201909152601481527f456c656d656e74205969656c6420546f6b656e20000000000000000000000000602082015262000075908484620001de565b604080518082019091526002815261655960f01b60208201526200009b908585620002ac565b8151620000b090600090602085019062000c79565b508051620000c690600190602084019062000c79565b506002805460ff1916601217905560036020526000197f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff819055306000908152604090205562000115620002ed565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600060405162000147919062000e44565b60408051918290038220828201825260018352603160f81b60209384015290516200019a93927fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc691469130910162000ee9565b60408051601f19818403018152919052805160209091012060065550506001600160601b0319606085901b16608052620001d481620002ef565b505050506200119a565b8251606090620001f690600090602087019062000c79565b5062000210838360006200030560201b620009f01760201c565b600080546200021f90620010e6565b80601f01602080910402602001604051908101604052809291908181526020018280546200024d90620010e6565b80156200029e5780601f1062000272576101008083540402835291602001916200029e565b820191906000526020600020905b8154815290600101906020018083116200028057829003601f168201915b505050505090509392505050565b8251606090620002c490600190602087019062000c79565b50620002de838360016200030560201b620009f01760201c565b600180546200021f90620010e6565b565b6002805460ff191660ff92909216919091179055565b828160005b8251811015620003d957818382815181106200033657634e487b7160e01b600052603260045260246000fd5b602001015160f81c60f81b90808054806200035190620010e6565b80601f8114620003615762000377565b83600052602060002060ff1984168155603f9350505b50600291909101909155815460011615620003a15790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff02191690600160f81b840402179055508080620003d09062001123565b9150506200030a565b5080602d60f81b9080805480620003f090620010e6565b80601f8114620004005762000416565b83600052602060002060ff1984168155603f9350505b50600291909101909155815460011615620004405790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff02191690600160f81b840402179055506200047484846200047b60201b60201c565b5050505050565b6200048782826200048b565b5050565b8060008080620004a9620004a3620151808862000ffb565b6200093b565b919450925090506000620004bf600a8362000ffb565b905084620004cf82603062000f9f565b60f81b9080805480620004e290620010e6565b80601f8114620004f25762000508565b83600052602060002060ff1984168155603f9350505b50600291909101909155815460011615620005325790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff02191690600160f81b840402179055506000600a8362000565919062001141565b9050856200057582603062000f9f565b60f81b90808054806200058890620010e6565b80601f81146200059857620005ae565b83600052602060002060ff1984168155603f9350505b50600291909101909155815460011615620005d85790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff02191690600160f81b840402179055505050816001141562000626576200062084602560f91b604160f81b602760f91b62000ae7565b620007d5565b81600214156200064a576200062084602360f91b604560f81b602160f91b62000ae7565b81600314156200066e576200062084604d60f81b604160f81b602960f91b62000ae7565b816004141562000692576200062084604160f81b600560fc1b602960f91b62000ae7565b8160051415620006b6576200062084604d60f81b604160f81b605960f81b62000ae7565b8160061415620006da576200062084602560f91b605560f81b602760f91b62000ae7565b8160071415620006fe576200062084602560f91b605560f81b601360fa1b62000ae7565b816008141562000722576200062084604160f81b605560f81b604760f81b62000ae7565b816009141562000746576200062084605360f81b604560f81b600560fc1b62000ae7565b81600a14156200076a576200062084604f60f81b604360f81b601560fa1b62000ae7565b81600b14156200078e576200062084602760f91b604f60f81b602b60f91b62000ae7565b81600c1415620007b2576200062084601160fa1b604560f81b604360f81b62000ae7565b60405162461bcd60e51b8152600401620007cc9062000f15565b60405180910390fd5b6000620007e460648562001141565b90506000620007f5600a8362000ffb565b9050856200080582603062000f9f565b60f81b90808054806200081890620010e6565b80601f811462000828576200083e565b83600052602060002060ff1984168155603f9350505b50600291909101909155815460011615620008685790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff02191690600160f81b840402179055506000600a836200089b919062001141565b905086620008ab82603062000f9f565b60f81b9080805480620008be90620010e6565b80601f8114620008ce57620008e4565b83600052602060002060ff1984168155603f9350505b506002919091019091558154600116156200090e5790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff02191690600160f81b84040217905550505050505050505050565b60008080838162253d8c620009548362010bd962000f58565b62000960919062000f58565b9050600062023ab16200097583600462001012565b62000981919062000fc7565b90506004620009948262023ab162001012565b620009a190600362000f58565b620009ad919062000fc7565b620009b99083620010a1565b9150600062164b09620009ce84600162000f58565b620009dc90610fa062001012565b620009e8919062000fc7565b90506004620009fa826105b562001012565b62000a06919062000fc7565b62000a129084620010a1565b62000a1f90601f62000f58565b9250600061098f62000a3385605062001012565b62000a3f919062000fc7565b90506000605062000a538361098f62001012565b62000a5f919062000fc7565b62000a6b9086620010a1565b905062000a7a600b8362000fc7565b945062000a8985600c62001012565b62000a9683600262000f58565b62000aa29190620010a1565b9150848362000ab3603187620010a1565b62000ac090606462001012565b62000acc919062000f58565b62000ad8919062000f58565b9a919950975095505050505050565b8383908080548062000af990620010e6565b80601f811462000b095762000b1f565b83600052602060002060ff1984168155603f9350505b5060029190910190915581546001161562000b495790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff02191690600160f81b840402179055508382908080548062000b7d90620010e6565b80601f811462000b8d5762000ba3565b83600052602060002060ff1984168155603f9350505b5060029190910190915581546001161562000bcd5790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff02191690600160f81b840402179055508381908080548062000c0190620010e6565b80601f811462000c115762000c27565b83600052602060002060ff1984168155603f9350505b5060029190910190915581546001161562000c515790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff02191690600160f81b8404021790555050505050565b82805462000c8790620010e6565b90600052602060002090601f01602090048101928262000cab576000855562000cf6565b82601f1062000cc657805160ff191683800117855562000cf6565b8280016001018555821562000cf6579182015b8281111562000cf657825182559160200191906001019062000cd9565b5062000d0492915062000d08565b5090565b5b8082111562000d04576000815560010162000d09565b805160ff8116811462000d3157600080fd5b919050565b6000806000806080858703121562000d4c578384fd5b84516001600160a01b038116811462000d63578485fd5b602086810151919550906001600160401b038082111562000d82578586fd5b818801915088601f83011262000d96578586fd5b81518181111562000dab5762000dab62001184565b604051601f8201601f191681018501838111828210171562000dd15762000dd162001184565b60405281815283820185018b101562000de8578788fd5b8792505b8183101562000e0b578383018501518184018601529184019162000dec565b8183111562000e1c57878583830101525b80975050505050506040850151915062000e396060860162000d1f565b905092959194509250565b815460009081906002810460018083168062000e6157607f831692505b602080841082141562000e8257634e487b7160e01b87526022600452602487fd5b81801562000e99576001811462000eab5762000edb565b60ff1986168952848901965062000edb565b62000eb68a62000f4c565b885b8681101562000ed35781548b82015290850190830162000eb8565b505084890196505b509498975050505050505050565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b60208082526013908201527f64617465206465636f64696e67206572726f7200000000000000000000000000604082015260600190565b60009081526020902090565b600080821280156001600160ff1b038490038513161562000f7d5762000f7d62001158565b600160ff1b839003841281161562000f995762000f9962001158565b50500190565b600060ff821660ff84168060ff0382111562000fbf5762000fbf62001158565b019392505050565b60008262000fd95762000fd96200116e565b600160ff1b82146000198414161562000ff65762000ff662001158565b500590565b6000826200100d576200100d6200116e565b500490565b60006001600160ff1b03818413828413808216868404861116156200103b576200103b62001158565b600160ff1b848712828116878305891216156200105c576200105c62001158565b8587129250878205871284841616156200107a576200107a62001158565b8785058712818416161562001093576200109362001158565b505050929093029392505050565b60008083128015600160ff1b850184121615620010c257620010c262001158565b6001600160ff1b0384018313811615620010e057620010e062001158565b50500390565b600281046001821680620010fb57607f821691505b602082108114156200111d57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156200113a576200113a62001158565b5060010190565b6000826200115357620011536200116e565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60805160601c612055620011ce6000396000818161033d015281816106160152818161066301526106ce01526120556000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80636ebc0af1116100975780639dc29fac116100665780639dc29fac146101e8578063a9059cbb146101fb578063d505accf1461020e578063dd62ed3e1461022157610100565b80636ebc0af1146101a557806370a08231146101ba5780637ecebe00146101cd57806395d89b41146101e057610100565b806330adf81f116100d357806330adf81f1461016b578063313ce567146101735780633644e5151461018857806340c10f191461019057610100565b806306fdde0314610105578063095ea7b31461012357806318160ddd1461014357806323b872dd14610158575b600080fd5b61010d610234565b60405161011a9190611a2d565b60405180910390f35b61013661013136600461190a565b6102c2565b60405161011a9190611999565b61014b610339565b60405161011a91906119a4565b61013661016636600461185e565b6103f0565b61014b6105cb565b61017b6105ef565b60405161011a9190611ca2565b61014b6105f8565b6101a361019e36600461190a565b6105fe565b005b6101ad610661565b60405161011a9190611a0c565b61014b6101c8366004611812565b610685565b61014b6101db366004611812565b610697565b61010d6106a9565b6101a36101f636600461190a565b6106b6565b61013661020936600461190a565b610715565b6101a361021c366004611899565b610729565b61014b61022f36600461182c565b6109d3565b6000805461024190611f20565b80601f016020809104026020016040519081016040528092919081815260200182805461026d90611f20565b80156102ba5780601f1061028f576101008083540402835291602001916102ba565b820191906000526020600020905b81548152906001019060200180831161029d57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103289086906119a4565b60405180910390a350600192915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663041be7c26040518163ffffffff1660e01b815260040160206040518083038186803b1580156103a157600080fd5b505afa1580156103b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d99190611933565b6fffffffffffffffffffffffffffffffff16905090565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120548281101561043f5760405162461bcd60e51b815260040161043690611c0e565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff851633146105125773ffffffffffffffffffffffffffffffffffffffff851660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461051057838110156104d45760405162461bcd60e51b815260040161043690611a9e565b6104de8482611f09565b73ffffffffffffffffffffffffffffffffffffffff871660009081526004602090815260408083203384529091529020555b505b61051c8382611f09565b73ffffffffffffffffffffffffffffffffffffffff8087166000908152600360205260408082209390935590861681522054610559908490611d24565b73ffffffffffffffffffffffffffffffffffffffff80861660008181526003602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906105b89087906119a4565b60405180910390a3506001949350505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60025460ff1681565b60065481565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146106535760405162461bcd60e51b815260040161043690611c45565b61065d8282610b84565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60036020526000908152604090205481565b60056020526000908152604090205481565b6001805461024190611f20565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461070b5760405162461bcd60e51b815260040161043690611c45565b61065d8282610c1d565b60006107223384846103f0565b9392505050565b60065473ffffffffffffffffffffffffffffffffffffffff8816600090815260056020908152604080832054905192939261078f927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928d928d928d92918d91016119ad565b604051602081830303815290604052805190602001206040516020016107b6929190611963565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120905073ffffffffffffffffffffffffffffffffffffffff88166108215760405162461bcd60e51b815260040161043690611b69565b6001818585856040516000815260200160405260405161084494939291906119ee565b6020604051602081039080840390855afa158015610866573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146108ba5760405162461bcd60e51b815260040161043690611ba0565b8415806108c75750844211155b6108e35760405162461bcd60e51b815260040161043690611bd7565b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156109235760405162461bcd60e51b815260040161043690611ad5565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260056020526040812080549161095483611f74565b909155505073ffffffffffffffffffffffffffffffffffffffff8089166000818152600460209081526040808320948c168084529490915290819020899055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906109c1908a906119a4565b60405180910390a35050505050505050565b600460209081526000928352604080842090915290825290205481565b828160005b8251811015610ad35781838281518110610a38577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b9080805480610a5190611f20565b80601f8114610a5f57610a75565b83600052602060002060ff1984168155603f9350505b50600291909101909155815460011615610a9e5790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff02191690600160f81b840402179055508080610acb90611f74565b9150506109f5565b50807f2d000000000000000000000000000000000000000000000000000000000000009080805480610b0490611f20565b80601f8114610b1257610b28565b83600052602060002060ff1984168155603f9350505b50600291909101909155815460011615610b515790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff02191690600160f81b84040217905550610b7d8484610ca7565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040902054610bb5908290611d24565b73ffffffffffffffffffffffffffffffffffffffff83166000818152600360205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c119085906119a4565b60405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040902054610c4e908290611f09565b73ffffffffffffffffffffffffffffffffffffffff83166000818152600360205260408082209390935591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c119085906119a4565b61065d82828060008080610cc6610cc16201518088611dc9565b6114f2565b919450925090506000610cda600a83611dc9565b905084610ce8826030611d3c565b60f81b9080805480610cf990611f20565b80601f8114610d0757610d1d565b83600052602060002060ff1984168155603f9350505b50600291909101909155815460011615610d465790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff02191690600160f81b840402179055506000600a83610d779190611fad565b905085610d85826030611d3c565b60f81b9080805480610d9690611f20565b80601f8114610da457610dba565b83600052602060002060ff1984168155603f9350505b50600291909101909155815460011615610de35790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff02191690600160f81b8404021790555050508160011415610e8157610e7c847f4a000000000000000000000000000000000000000000000000000000000000007f41000000000000000000000000000000000000000000000000000000000000007f4e00000000000000000000000000000000000000000000000000000000000000611666565b6113a0565b8160021415610ef657610e7c847f46000000000000000000000000000000000000000000000000000000000000007f45000000000000000000000000000000000000000000000000000000000000007f4200000000000000000000000000000000000000000000000000000000000000611666565b8160031415610f6b57610e7c847f4d000000000000000000000000000000000000000000000000000000000000007f41000000000000000000000000000000000000000000000000000000000000007f5200000000000000000000000000000000000000000000000000000000000000611666565b8160041415610fe057610e7c847f41000000000000000000000000000000000000000000000000000000000000007f50000000000000000000000000000000000000000000000000000000000000007f5200000000000000000000000000000000000000000000000000000000000000611666565b816005141561105557610e7c847f4d000000000000000000000000000000000000000000000000000000000000007f41000000000000000000000000000000000000000000000000000000000000007f5900000000000000000000000000000000000000000000000000000000000000611666565b81600614156110ca57610e7c847f4a000000000000000000000000000000000000000000000000000000000000007f55000000000000000000000000000000000000000000000000000000000000007f4e00000000000000000000000000000000000000000000000000000000000000611666565b816007141561113f57610e7c847f4a000000000000000000000000000000000000000000000000000000000000007f55000000000000000000000000000000000000000000000000000000000000007f4c00000000000000000000000000000000000000000000000000000000000000611666565b81600814156111b457610e7c847f41000000000000000000000000000000000000000000000000000000000000007f55000000000000000000000000000000000000000000000000000000000000007f4700000000000000000000000000000000000000000000000000000000000000611666565b816009141561122957610e7c847f53000000000000000000000000000000000000000000000000000000000000007f45000000000000000000000000000000000000000000000000000000000000007f5000000000000000000000000000000000000000000000000000000000000000611666565b81600a141561129e57610e7c847f4f000000000000000000000000000000000000000000000000000000000000007f43000000000000000000000000000000000000000000000000000000000000007f5400000000000000000000000000000000000000000000000000000000000000611666565b81600b141561131357610e7c847f4e000000000000000000000000000000000000000000000000000000000000007f4f000000000000000000000000000000000000000000000000000000000000007f5600000000000000000000000000000000000000000000000000000000000000611666565b81600c141561138857610e7c847f44000000000000000000000000000000000000000000000000000000000000007f45000000000000000000000000000000000000000000000000000000000000007f4300000000000000000000000000000000000000000000000000000000000000611666565b60405162461bcd60e51b815260040161043690611b32565b60006113ad606485611fad565b905060006113bc600a83611dc9565b9050856113ca826030611d3c565b60f81b90808054806113db90611f20565b80601f81146113e9576113ff565b83600052602060002060ff1984168155603f9350505b506002919091019091558154600116156114285790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff02191690600160f81b840402179055506000600a836114599190611fad565b905086611467826030611d3c565b60f81b908080548061147890611f20565b80601f81146114865761149c565b83600052602060002060ff1984168155603f9350505b506002919091019091558154600116156114c55790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff02191690600160f81b84040217905550505050505050505050565b60008080838162253d8c6115098362010bd9611cb0565b6115139190611cb0565b9050600062023ab1611526836004611ddd565b6115309190611d61565b905060046115418262023ab1611ddd565b61154c906003611cb0565b6115569190611d61565b6115609083611e95565b9150600062164b09611573846001611cb0565b61157f90610fa0611ddd565b6115899190611d61565b90506004611599826105b5611ddd565b6115a39190611d61565b6115ad9084611e95565b6115b890601f611cb0565b9250600061098f6115ca856050611ddd565b6115d49190611d61565b9050600060506115e68361098f611ddd565b6115f09190611d61565b6115fa9086611e95565b9050611607600b83611d61565b945061161485600c611ddd565b61161f836002611cb0565b6116299190611e95565b91508483611638603187611e95565b611643906064611ddd565b61164d9190611cb0565b6116579190611cb0565b9a919950975095505050505050565b8383908080548061167690611f20565b80601f81146116845761169a565b83600052602060002060ff1984168155603f9350505b506002919091019091558154600116156116c35790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff02191690600160f81b84040217905550838290808054806116f590611f20565b80601f811461170357611719565b83600052602060002060ff1984168155603f9350505b506002919091019091558154600116156117425790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff02191690600160f81b840402179055508381908080548061177490611f20565b80601f811461178257611798565b83600052602060002060ff1984168155603f9350505b506002919091019091558154600116156117c15790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff02191690600160f81b8404021790555050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461180d57600080fd5b919050565b600060208284031215611823578081fd5b610722826117e9565b6000806040838503121561183e578081fd5b611847836117e9565b9150611855602084016117e9565b90509250929050565b600080600060608486031215611872578081fd5b61187b846117e9565b9250611889602085016117e9565b9150604084013590509250925092565b600080600080600080600060e0888a0312156118b3578283fd5b6118bc886117e9565b96506118ca602089016117e9565b95506040880135945060608801359350608088013560ff811681146118ed578384fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561191c578182fd5b611925836117e9565b946020939093013593505050565b600060208284031215611944578081fd5b81516fffffffffffffffffffffffffffffffff81168114610722578182fd5b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b901515815260200190565b90815260200190565b95865273ffffffffffffffffffffffffffffffffffffffff94851660208701529290931660408501526060840152608083019190915260a082015260c00190565b93845260ff9290921660208401526040830152606082015260800190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6000602080835283518082850152825b81811015611a5957858101830151858201604001528201611a3d565b81811115611a6a5783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6020808252601d908201527f45524332303a20696e73756666696369656e742d616c6c6f77616e6365000000604082015260600190565b60208082526022908201527f45524332303a20696e76616c6964207369676e6174757265202773272076616c60408201527f7565000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526013908201527f64617465206465636f64696e67206572726f7200000000000000000000000000604082015260600190565b60208082526018908201527f45524332303a20696e76616c69642d616464726573732d300000000000000000604082015260600190565b60208082526015908201527f45524332303a20696e76616c69642d7065726d69740000000000000000000000604082015260600190565b60208082526015908201527f45524332303a207065726d69742d657870697265640000000000000000000000604082015260600190565b6020808252601b908201527f45524332303a20696e73756666696369656e742d62616c616e63650000000000604082015260600190565b60208082526022908201527f63616c6c6572206973206e6f7420616e20617574686f72697a6564206d696e7460408201527f6572000000000000000000000000000000000000000000000000000000000000606082015260800190565b60ff91909116815260200190565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615611cea57611cea611fc1565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615611d1e57611d1e611fc1565b50500190565b60008219821115611d3757611d37611fc1565b500190565b600060ff821660ff84168060ff03821115611d5957611d59611fc1565b019392505050565b600082611d7057611d70611ff0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615611dc457611dc4611fc1565b500590565b600082611dd857611dd8611ff0565b500490565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81841382841385830485118282161615611e1c57611e1c611fc1565b7f800000000000000000000000000000000000000000000000000000000000000084871286820588128184161615611e5657611e56611fc1565b858712925087820587128484161615611e7157611e71611fc1565b87850587128184161615611e8757611e87611fc1565b505050929093029392505050565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615611ecf57611ecf611fc1565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615611f0357611f03611fc1565b50500390565b600082821015611f1b57611f1b611fc1565b500390565b600281046001821680611f3457607f821691505b60208210811415611f6e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611fa657611fa6611fc1565b5060010190565b600082611fbc57611fbc611ff0565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea2646970667358221220e89408a6949d45297d5a5b5197a2478cb56d82afb6608863c04c8c8fa2c106b264736f6c63430008000033000000000000000000000000f38c3e836be9cd35072055ff6a9ba570e0b70797000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000617c2dae000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000067976555344430000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101005760003560e01c80636ebc0af1116100975780639dc29fac116100665780639dc29fac146101e8578063a9059cbb146101fb578063d505accf1461020e578063dd62ed3e1461022157610100565b80636ebc0af1146101a557806370a08231146101ba5780637ecebe00146101cd57806395d89b41146101e057610100565b806330adf81f116100d357806330adf81f1461016b578063313ce567146101735780633644e5151461018857806340c10f191461019057610100565b806306fdde0314610105578063095ea7b31461012357806318160ddd1461014357806323b872dd14610158575b600080fd5b61010d610234565b60405161011a9190611a2d565b60405180910390f35b61013661013136600461190a565b6102c2565b60405161011a9190611999565b61014b610339565b60405161011a91906119a4565b61013661016636600461185e565b6103f0565b61014b6105cb565b61017b6105ef565b60405161011a9190611ca2565b61014b6105f8565b6101a361019e36600461190a565b6105fe565b005b6101ad610661565b60405161011a9190611a0c565b61014b6101c8366004611812565b610685565b61014b6101db366004611812565b610697565b61010d6106a9565b6101a36101f636600461190a565b6106b6565b61013661020936600461190a565b610715565b6101a361021c366004611899565b610729565b61014b61022f36600461182c565b6109d3565b6000805461024190611f20565b80601f016020809104026020016040519081016040528092919081815260200182805461026d90611f20565b80156102ba5780601f1061028f576101008083540402835291602001916102ba565b820191906000526020600020905b81548152906001019060200180831161029d57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103289086906119a4565b60405180910390a350600192915050565b60007f000000000000000000000000f38c3e836be9cd35072055ff6a9ba570e0b7079773ffffffffffffffffffffffffffffffffffffffff1663041be7c26040518163ffffffff1660e01b815260040160206040518083038186803b1580156103a157600080fd5b505afa1580156103b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d99190611933565b6fffffffffffffffffffffffffffffffff16905090565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120548281101561043f5760405162461bcd60e51b815260040161043690611c0e565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff851633146105125773ffffffffffffffffffffffffffffffffffffffff851660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461051057838110156104d45760405162461bcd60e51b815260040161043690611a9e565b6104de8482611f09565b73ffffffffffffffffffffffffffffffffffffffff871660009081526004602090815260408083203384529091529020555b505b61051c8382611f09565b73ffffffffffffffffffffffffffffffffffffffff8087166000908152600360205260408082209390935590861681522054610559908490611d24565b73ffffffffffffffffffffffffffffffffffffffff80861660008181526003602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906105b89087906119a4565b60405180910390a3506001949350505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60025460ff1681565b60065481565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000f38c3e836be9cd35072055ff6a9ba570e0b7079716146106535760405162461bcd60e51b815260040161043690611c45565b61065d8282610b84565b5050565b7f000000000000000000000000f38c3e836be9cd35072055ff6a9ba570e0b7079781565b60036020526000908152604090205481565b60056020526000908152604090205481565b6001805461024190611f20565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000f38c3e836be9cd35072055ff6a9ba570e0b70797161461070b5760405162461bcd60e51b815260040161043690611c45565b61065d8282610c1d565b60006107223384846103f0565b9392505050565b60065473ffffffffffffffffffffffffffffffffffffffff8816600090815260056020908152604080832054905192939261078f927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928d928d928d92918d91016119ad565b604051602081830303815290604052805190602001206040516020016107b6929190611963565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120905073ffffffffffffffffffffffffffffffffffffffff88166108215760405162461bcd60e51b815260040161043690611b69565b6001818585856040516000815260200160405260405161084494939291906119ee565b6020604051602081039080840390855afa158015610866573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146108ba5760405162461bcd60e51b815260040161043690611ba0565b8415806108c75750844211155b6108e35760405162461bcd60e51b815260040161043690611bd7565b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156109235760405162461bcd60e51b815260040161043690611ad5565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260056020526040812080549161095483611f74565b909155505073ffffffffffffffffffffffffffffffffffffffff8089166000818152600460209081526040808320948c168084529490915290819020899055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906109c1908a906119a4565b60405180910390a35050505050505050565b600460209081526000928352604080842090915290825290205481565b828160005b8251811015610ad35781838281518110610a38577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b9080805480610a5190611f20565b80601f8114610a5f57610a75565b83600052602060002060ff1984168155603f9350505b50600291909101909155815460011615610a9e5790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff02191690600160f81b840402179055508080610acb90611f74565b9150506109f5565b50807f2d000000000000000000000000000000000000000000000000000000000000009080805480610b0490611f20565b80601f8114610b1257610b28565b83600052602060002060ff1984168155603f9350505b50600291909101909155815460011615610b515790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff02191690600160f81b84040217905550610b7d8484610ca7565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040902054610bb5908290611d24565b73ffffffffffffffffffffffffffffffffffffffff83166000818152600360205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c119085906119a4565b60405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040902054610c4e908290611f09565b73ffffffffffffffffffffffffffffffffffffffff83166000818152600360205260408082209390935591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c119085906119a4565b61065d82828060008080610cc6610cc16201518088611dc9565b6114f2565b919450925090506000610cda600a83611dc9565b905084610ce8826030611d3c565b60f81b9080805480610cf990611f20565b80601f8114610d0757610d1d565b83600052602060002060ff1984168155603f9350505b50600291909101909155815460011615610d465790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff02191690600160f81b840402179055506000600a83610d779190611fad565b905085610d85826030611d3c565b60f81b9080805480610d9690611f20565b80601f8114610da457610dba565b83600052602060002060ff1984168155603f9350505b50600291909101909155815460011615610de35790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff02191690600160f81b8404021790555050508160011415610e8157610e7c847f4a000000000000000000000000000000000000000000000000000000000000007f41000000000000000000000000000000000000000000000000000000000000007f4e00000000000000000000000000000000000000000000000000000000000000611666565b6113a0565b8160021415610ef657610e7c847f46000000000000000000000000000000000000000000000000000000000000007f45000000000000000000000000000000000000000000000000000000000000007f4200000000000000000000000000000000000000000000000000000000000000611666565b8160031415610f6b57610e7c847f4d000000000000000000000000000000000000000000000000000000000000007f41000000000000000000000000000000000000000000000000000000000000007f5200000000000000000000000000000000000000000000000000000000000000611666565b8160041415610fe057610e7c847f41000000000000000000000000000000000000000000000000000000000000007f50000000000000000000000000000000000000000000000000000000000000007f5200000000000000000000000000000000000000000000000000000000000000611666565b816005141561105557610e7c847f4d000000000000000000000000000000000000000000000000000000000000007f41000000000000000000000000000000000000000000000000000000000000007f5900000000000000000000000000000000000000000000000000000000000000611666565b81600614156110ca57610e7c847f4a000000000000000000000000000000000000000000000000000000000000007f55000000000000000000000000000000000000000000000000000000000000007f4e00000000000000000000000000000000000000000000000000000000000000611666565b816007141561113f57610e7c847f4a000000000000000000000000000000000000000000000000000000000000007f55000000000000000000000000000000000000000000000000000000000000007f4c00000000000000000000000000000000000000000000000000000000000000611666565b81600814156111b457610e7c847f41000000000000000000000000000000000000000000000000000000000000007f55000000000000000000000000000000000000000000000000000000000000007f4700000000000000000000000000000000000000000000000000000000000000611666565b816009141561122957610e7c847f53000000000000000000000000000000000000000000000000000000000000007f45000000000000000000000000000000000000000000000000000000000000007f5000000000000000000000000000000000000000000000000000000000000000611666565b81600a141561129e57610e7c847f4f000000000000000000000000000000000000000000000000000000000000007f43000000000000000000000000000000000000000000000000000000000000007f5400000000000000000000000000000000000000000000000000000000000000611666565b81600b141561131357610e7c847f4e000000000000000000000000000000000000000000000000000000000000007f4f000000000000000000000000000000000000000000000000000000000000007f5600000000000000000000000000000000000000000000000000000000000000611666565b81600c141561138857610e7c847f44000000000000000000000000000000000000000000000000000000000000007f45000000000000000000000000000000000000000000000000000000000000007f4300000000000000000000000000000000000000000000000000000000000000611666565b60405162461bcd60e51b815260040161043690611b32565b60006113ad606485611fad565b905060006113bc600a83611dc9565b9050856113ca826030611d3c565b60f81b90808054806113db90611f20565b80601f81146113e9576113ff565b83600052602060002060ff1984168155603f9350505b506002919091019091558154600116156114285790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff02191690600160f81b840402179055506000600a836114599190611fad565b905086611467826030611d3c565b60f81b908080548061147890611f20565b80601f81146114865761149c565b83600052602060002060ff1984168155603f9350505b506002919091019091558154600116156114c55790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff02191690600160f81b84040217905550505050505050505050565b60008080838162253d8c6115098362010bd9611cb0565b6115139190611cb0565b9050600062023ab1611526836004611ddd565b6115309190611d61565b905060046115418262023ab1611ddd565b61154c906003611cb0565b6115569190611d61565b6115609083611e95565b9150600062164b09611573846001611cb0565b61157f90610fa0611ddd565b6115899190611d61565b90506004611599826105b5611ddd565b6115a39190611d61565b6115ad9084611e95565b6115b890601f611cb0565b9250600061098f6115ca856050611ddd565b6115d49190611d61565b9050600060506115e68361098f611ddd565b6115f09190611d61565b6115fa9086611e95565b9050611607600b83611d61565b945061161485600c611ddd565b61161f836002611cb0565b6116299190611e95565b91508483611638603187611e95565b611643906064611ddd565b61164d9190611cb0565b6116579190611cb0565b9a919950975095505050505050565b8383908080548061167690611f20565b80601f81146116845761169a565b83600052602060002060ff1984168155603f9350505b506002919091019091558154600116156116c35790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff02191690600160f81b84040217905550838290808054806116f590611f20565b80601f811461170357611719565b83600052602060002060ff1984168155603f9350505b506002919091019091558154600116156117425790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff02191690600160f81b840402179055508381908080548061177490611f20565b80601f811461178257611798565b83600052602060002060ff1984168155603f9350505b506002919091019091558154600116156117c15790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff02191690600160f81b8404021790555050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461180d57600080fd5b919050565b600060208284031215611823578081fd5b610722826117e9565b6000806040838503121561183e578081fd5b611847836117e9565b9150611855602084016117e9565b90509250929050565b600080600060608486031215611872578081fd5b61187b846117e9565b9250611889602085016117e9565b9150604084013590509250925092565b600080600080600080600060e0888a0312156118b3578283fd5b6118bc886117e9565b96506118ca602089016117e9565b95506040880135945060608801359350608088013560ff811681146118ed578384fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561191c578182fd5b611925836117e9565b946020939093013593505050565b600060208284031215611944578081fd5b81516fffffffffffffffffffffffffffffffff81168114610722578182fd5b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b901515815260200190565b90815260200190565b95865273ffffffffffffffffffffffffffffffffffffffff94851660208701529290931660408501526060840152608083019190915260a082015260c00190565b93845260ff9290921660208401526040830152606082015260800190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6000602080835283518082850152825b81811015611a5957858101830151858201604001528201611a3d565b81811115611a6a5783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6020808252601d908201527f45524332303a20696e73756666696369656e742d616c6c6f77616e6365000000604082015260600190565b60208082526022908201527f45524332303a20696e76616c6964207369676e6174757265202773272076616c60408201527f7565000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526013908201527f64617465206465636f64696e67206572726f7200000000000000000000000000604082015260600190565b60208082526018908201527f45524332303a20696e76616c69642d616464726573732d300000000000000000604082015260600190565b60208082526015908201527f45524332303a20696e76616c69642d7065726d69740000000000000000000000604082015260600190565b60208082526015908201527f45524332303a207065726d69742d657870697265640000000000000000000000604082015260600190565b6020808252601b908201527f45524332303a20696e73756666696369656e742d62616c616e63650000000000604082015260600190565b60208082526022908201527f63616c6c6572206973206e6f7420616e20617574686f72697a6564206d696e7460408201527f6572000000000000000000000000000000000000000000000000000000000000606082015260800190565b60ff91909116815260200190565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615611cea57611cea611fc1565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615611d1e57611d1e611fc1565b50500190565b60008219821115611d3757611d37611fc1565b500190565b600060ff821660ff84168060ff03821115611d5957611d59611fc1565b019392505050565b600082611d7057611d70611ff0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615611dc457611dc4611fc1565b500590565b600082611dd857611dd8611ff0565b500490565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81841382841385830485118282161615611e1c57611e1c611fc1565b7f800000000000000000000000000000000000000000000000000000000000000084871286820588128184161615611e5657611e56611fc1565b858712925087820587128484161615611e7157611e71611fc1565b87850587128184161615611e8757611e87611fc1565b505050929093029392505050565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615611ecf57611ecf611fc1565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615611f0357611f03611fc1565b50500390565b600082821015611f1b57611f1b611fc1565b500390565b600281046001821680611f3457607f821691505b60208210811415611f6e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611fa657611fa6611fc1565b5060010190565b600082611fbc57611fbc611ff0565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea2646970667358221220e89408a6949d45297d5a5b5197a2478cb56d82afb6608863c04c8c8fa2c106b264736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f38c3e836be9cd35072055ff6a9ba570e0b70797000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000617c2dae000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000067976555344430000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _tranche (address): 0xf38c3E836Be9cD35072055Ff6a9Ba570e0B70797
Arg [1] : _strategySymbol (string): yvUSDC
Arg [2] : _timestamp (uint256): 1635528110
Arg [3] : _decimals (uint8): 6
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000f38c3e836be9cd35072055ff6a9ba570e0b70797
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 00000000000000000000000000000000000000000000000000000000617c2dae
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [5] : 7976555344430000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.