Feature Tip: Add private address tag to any address under My Name Tag !
Overview
Max Total Supply
13,101.681563725668959867 SY-weETH
Holders
3,471 ( -0.086%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.011400827445126598 SY-weETHValue
$0.00Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
PendleWEEthSY
Compiler Version
v0.8.23+commit.f704f362
Optimization Enabled:
Yes with 1000000 runs
Other Settings:
berlin EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity 0.8.23;import "../../SYBase.sol";import "../../../../interfaces/EtherFi/IEtherFiLiquidityPool.sol";import "../../../../interfaces/EtherFi/IEtherFiWEEth.sol";contract PendleWEEthSY is SYBase {using PMath for int256;address public immutable weETH;address public immutable liquidityPool;address public immutable eETH;address public immutable referee;constructor(address _weETH, address _referee) SYBase("SY ether.fi weETH", "SY-weETH", _weETH) {weETH = _weETH;liquidityPool = IEtherFiWEEth(_weETH).liquidityPool();eETH = IEtherFiWEEth(_weETH).eETH();referee = _referee;_safeApproveInf(eETH, weETH);}/*///////////////////////////////////////////////////////////////DEPOSIT/REDEEM USING BASE TOKENS
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)pragma solidity ^0.8.2;import "../../utils/AddressUpgradeable.sol";/*** @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed* behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an* external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer* function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.** The initialization functions use a version number. Once a version number is used, it is consumed and cannot be* reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in* case an upgrade adds a module that needs to be initialized.** For example:** [.hljs-theme-light.nopadding]* ```solidity* contract MyToken is ERC20Upgradeable {* function initialize() initializer public {* __ERC20_init("MyToken", "MTK");* }* }
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)pragma solidity ^0.8.1;/*** @dev Collection of functions related to the address type*/library AddressUpgradeable {/*** @dev Returns true if `account` is a contract.** [IMPORTANT]* ====* It is unsafe to assume that an address for which this function returns* false is an externally-owned account (EOA) and not a contract.** Among others, `isContract` will return false for the following* types of addresses:** - an externally-owned account* - a contract in construction* - an address where a contract will be created* - an address where a contract lived, but was destroyed** Furthermore, `isContract` will also return true if the target contract within
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC5267.sol)pragma solidity ^0.8.0;interface IERC5267 {/*** @dev MAY be emitted to signal that the domain could have changed.*/event EIP712DomainChanged();/*** @dev returns the fields and values that describe the domain separator used by this contract for EIP-712* signature.*/function eip712Domain()externalviewreturns (bytes1 fields,string memory name,string memory version,uint256 chainId,address verifyingContract,bytes32 salt,uint256[] memory extensions
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)pragma solidity ^0.8.0;import "../utils/Context.sol";/*** @dev Contract module which allows children to implement an emergency stop* mechanism that can be triggered by an authorized account.** This module is used through inheritance. It will make available the* modifiers `whenNotPaused` and `whenPaused`, which can be applied to* the functions of your contract. Note that they will not be pausable by* simply including this module, only once the modifiers are put in place.*/abstract contract Pausable is Context {/*** @dev Emitted when the pause is triggered by `account`.*/event Paused(address account);/*** @dev Emitted when the pause is lifted by `account`.*/event Unpaused(address account);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)pragma solidity ^0.8.0;import "./IERC20.sol";import "./extensions/IERC20Metadata.sol";import "../../utils/Context.sol";/*** @dev Implementation of the {IERC20} interface.** This implementation is agnostic to the way tokens are created. This means* that a supply mechanism has to be added in a derived contract using {_mint}.* For a generic mechanism see {ERC20PresetMinterPauser}.** TIP: For a detailed writeup see our guide* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How* to implement supply mechanisms].** The default value of {decimals} is 18. To change this, you should override* this function so it returns a different value.** We have followed general OpenZeppelin Contracts guidelines: functions revert* instead returning `false` on failure. This behavior is nonetheless* conventional and does not conflict with the expectations of ERC20
12345678// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/extensions/draft-ERC20Permit.sol)pragma solidity ^0.8.0;// EIP-2612 is Final as of 2022-11-01. This file is deprecated.import "./ERC20Permit.sol";
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/extensions/ERC20Permit.sol)pragma solidity ^0.8.0;import "./IERC20Permit.sol";import "../ERC20.sol";import "../../../utils/cryptography/ECDSA.sol";import "../../../utils/cryptography/EIP712.sol";import "../../../utils/Counters.sol";/*** @dev Implementation 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.** _Available since v3.4._*/abstract contract ERC20Permit is ERC20, IERC20Permit, EIP712 {using Counters for Counters.Counter;mapping(address => Counters.Counter) private _nonces;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)pragma solidity ^0.8.0;import "../IERC20.sol";/*** @dev Interface for the optional metadata functions from the ERC20 standard.** _Available since v4.1._*/interface IERC20Metadata is IERC20 {/*** @dev Returns the name of the token.*/function name() external view returns (string memory);/*** @dev Returns the symbol of the token.*/function symbol() external view returns (string memory);/*** @dev Returns the decimals places of the token.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/extensions/IERC20Permit.sol)pragma solidity ^0.8.0;/*** @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 {/*** @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.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)pragma solidity ^0.8.0;/*** @dev Interface of the ERC20 standard as defined in the EIP.*/interface IERC20 {/*** @dev Emitted when `value` tokens are moved from one account (`from`) to* another (`to`).** Note that `value` may be zero.*/event Transfer(address indexed from, address indexed to, uint256 value);/*** @dev Emitted when the allowance of a `spender` for an `owner` is set by* a call to {approve}. `value` is the new allowance.*/event Approval(address indexed owner, address indexed spender, uint256 value);/*** @dev Returns the amount of tokens in existence.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.3) (token/ERC20/utils/SafeERC20.sol)pragma solidity ^0.8.0;import "../IERC20.sol";import "../extensions/IERC20Permit.sol";import "../../../utils/Address.sol";/*** @title SafeERC20* @dev Wrappers around ERC20 operations that throw on failure (when the token* contract returns false). Tokens that return no value (and instead revert or* throw on failure) are also supported, non-reverting calls are assumed to be* successful.* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.*/library SafeERC20 {using Address for address;/*** @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,* non-reverting calls are assumed to be successful.*/function safeTransfer(IERC20 token, address to, uint256 value) internal {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)pragma solidity ^0.8.1;/*** @dev Collection of functions related to the address type*/library Address {/*** @dev Returns true if `account` is a contract.** [IMPORTANT]* ====* It is unsafe to assume that an address for which this function returns* false is an externally-owned account (EOA) and not a contract.** Among others, `isContract` will return false for the following* types of addresses:** - an externally-owned account* - a contract in construction* - an address where a contract will be created* - an address where a contract lived, but was destroyed** Furthermore, `isContract` will also return true if the target contract within
123456789101112131415161718192021222324// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)pragma solidity ^0.8.0;/*** @dev Provides information about the current execution context, including the* sender of the transaction and its data. While these are generally available* via msg.sender and msg.data, they should not be accessed in such a direct* manner, since when dealing with meta-transactions the account sending and* paying for execution may not be the actual sender (as far as an application* is concerned).** This contract is only required for intermediate, library-like contracts.*/abstract contract Context {function _msgSender() internal view virtual returns (address) {return msg.sender;}function _msgData() internal view virtual returns (bytes calldata) {return msg.data;}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)pragma solidity ^0.8.0;/*** @title Counters* @author Matt Condon (@shrugs)* @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number* of elements in a mapping, issuing ERC721 ids, or counting request ids.** Include with `using Counters for Counters.Counter;`*/library Counters {struct Counter {// This variable should never be directly accessed by users of the library: interactions must be restricted to// the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add// this feature: see https://github.com/ethereum/solidity/issues/4637uint256 _value; // default: 0}function current(Counter storage counter) internal view returns (uint256) {return counter._value;}function increment(Counter storage counter) internal {
12345678// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/draft-EIP712.sol)pragma solidity ^0.8.0;// EIP-712 is Final as of 2022-08-11. This file is deprecated.import "./EIP712.sol";
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)pragma solidity ^0.8.0;import "../Strings.sol";/*** @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.** These functions can be used to verify that a message was signed by the holder* of the private keys of a given address.*/library ECDSA {enum RecoverError {NoError,InvalidSignature,InvalidSignatureLength,InvalidSignatureS,InvalidSignatureV // Deprecated in v4.8}function _throwError(RecoverError error) private pure {if (error == RecoverError.NoError) {return; // no error: do nothing} else if (error == RecoverError.InvalidSignature) {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/EIP712.sol)pragma solidity ^0.8.8;import "./ECDSA.sol";import "../ShortStrings.sol";import "../../interfaces/IERC5267.sol";/*** @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.** The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,* thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding* they need in their contracts using a combination of `abi.encode` and `keccak256`.** This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding* scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA* ({_hashTypedDataV4}).** The implementation of the domain separator was designed to be as efficient as possible while still properly updating* the chain id to protect against replay attacks on an eventual fork of the chain.** NOTE: This contract implements the version of the encoding known as "v4", as implemented by the JSON RPC method* https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].*
1234567891011121314151617181920212223242526// 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 infinityUp, // Toward infinityZero // 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) {
1234567891011121314151617181920212223242526// 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.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (utils/ShortStrings.sol)pragma solidity ^0.8.8;import "./StorageSlot.sol";// | string | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA |// | length | 0x BB |type ShortString is bytes32;/*** @dev This library provides functions to convert short memory strings* into a `ShortString` type that can be used as an immutable variable.** Strings of arbitrary length can be optimized using this library if* they are short enough (up to 31 bytes) by packing them with their* length (1 byte) in a single EVM word (32 bytes). Additionally, a* fallback mechanism can be used for every other case.** Usage example:** ```solidity* contract Named {* using ShortStrings for *;*
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.pragma solidity ^0.8.0;/*** @dev Library for reading and writing primitive types to specific storage slots.** Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.* This library helps with reading and writing to such slots without the need for inline assembly.** The functions in this library return Slot structs that contain a `value` member that can be used to read or write.** Example usage to set ERC1967 implementation slot:* ```solidity* contract ERC1967 {* bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;** function _getImplementation() internal view returns (address) {* return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;* }** function _setImplementation(address newImplementation) internal {* require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");* StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
1234567891011121314151617181920212223242526// 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-assemblyassembly {ptr := add(buffer, add(32, length))
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-later// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/ERC20.sol)pragma solidity ^0.8.0;import "@openzeppelin/contracts/token/ERC20/IERC20.sol";import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";import "@openzeppelin/contracts/utils/Context.sol";/*** @dev Pendle's ERC20 implementation, modified from @openzeppelin implementation* Changes are:* - comes with built-in reentrancy protection, storage-packed with totalSupply variable* - delete increaseAllowance / decreaseAllowance* - add nonReentrancy protection to transfer / transferFrom functions* - allow decimals to be passed in* - block self-transfer by default*/// solhint-disablecontract PendleERC20 is Context, IERC20, IERC20Metadata {uint8 private constant _NOT_ENTERED = 1;uint8 private constant _ENTERED = 2;mapping(address => uint256) private _balances;mapping(address => mapping(address => uint256)) private _allowances;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-later// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/ERC20.sol)pragma solidity ^0.8.0;import "./PendleERC20.sol";import "@openzeppelin/contracts/token/ERC20/IERC20.sol";import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";import "@openzeppelin/contracts/utils/Context.sol";import "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol";import "@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol";import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";import "@openzeppelin/contracts/utils/Counters.sol";/// @dev forked from OZ's ERC20Permitcontract PendleERC20Permit is PendleERC20, IERC20Permit, EIP712 {using Counters for Counters.Counter;mapping(address => Counters.Counter) private _nonces;// solhint-disable-next-line var-name-mixedcasebytes32 private constant _PERMIT_TYPEHASH =keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");constructor(string memory name_,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.0;library ArrayLib {function sum(uint256[] memory input) internal pure returns (uint256) {uint256 value = 0;for (uint256 i = 0; i < input.length; ) {value += input[i];unchecked {i++;}}return value;}/// @notice return index of the element if found, else return uint256.maxfunction find(address[] memory array, address element) internal pure returns (uint256 index) {uint256 length = array.length;for (uint256 i = 0; i < length; ) {if (array[i] == element) return i;unchecked {i++;}}return type(uint256).max;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.0;import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";contract BoringOwnableUpgradeableData {address public owner;address public pendingOwner;}abstract contract BoringOwnableUpgradeable is BoringOwnableUpgradeableData, Initializable {event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);function __BoringOwnable_init() internal onlyInitializing {owner = msg.sender;}/// @notice Transfers ownership to `newOwner`. Either directly or claimable by the new pending owner./// Can only be invoked by the current `owner`./// @param newOwner Address of the new owner./// @param direct True if `newOwner` should be set immediately. False if `newOwner` needs to use `claimOwnership`./// @param renounce Allows the `newOwner` to be `address(0)` if `direct` and `renounce` is True. Has no effect otherwise.function transferOwnership(address newOwner, bool direct, bool renounce) public onlyOwner {if (direct) {// Checksrequire(newOwner != address(0) || renounce, "Ownable: zero address");
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.0;library Errors {// BulkSellererror BulkInsufficientSyForTrade(uint256 currentAmount, uint256 requiredAmount);error BulkInsufficientTokenForTrade(uint256 currentAmount, uint256 requiredAmount);error BulkInSufficientSyOut(uint256 actualSyOut, uint256 requiredSyOut);error BulkInSufficientTokenOut(uint256 actualTokenOut, uint256 requiredTokenOut);error BulkInsufficientSyReceived(uint256 actualBalance, uint256 requiredBalance);error BulkNotMaintainer();error BulkNotAdmin();error BulkSellerAlreadyExisted(address token, address SY, address bulk);error BulkSellerInvalidToken(address token, address SY);error BulkBadRateTokenToSy(uint256 actualRate, uint256 currentRate, uint256 eps);error BulkBadRateSyToToken(uint256 actualRate, uint256 currentRate, uint256 eps);// APPROXerror ApproxFail();error ApproxParamsInvalid(uint256 guessMin, uint256 guessMax, uint256 eps);error ApproxBinarySearchInputInvalid(uint256 approxGuessMin,uint256 approxGuessMax,uint256 minGuessMin,uint256 maxGuessMax);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-later// This program is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License// along with this program. If not, see <http://www.gnu.org/licenses/>.pragma solidity ^0.8.0;/* solhint-disable private-vars-leading-underscore, reason-string */library PMath {uint256 internal constant ONE = 1e18; // 18 decimal placesint256 internal constant IONE = 1e18; // 18 decimal placesfunction subMax0(uint256 a, uint256 b) internal pure returns (uint256) {unchecked {return (a >= b ? a - b : 0);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.0;import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";import "../../interfaces/IWETH.sol";abstract contract TokenHelper {using SafeERC20 for IERC20;address internal constant NATIVE = address(0);uint256 internal constant LOWER_BOUND_APPROVAL = type(uint96).max / 2; // some tokens use 96 bits for approvalfunction _transferIn(address token, address from, uint256 amount) internal {if (token == NATIVE) require(msg.value == amount, "eth mismatch");else if (amount != 0) IERC20(token).safeTransferFrom(from, address(this), amount);}function _transferFrom(IERC20 token, address from, address to, uint256 amount) internal {if (amount != 0) token.safeTransferFrom(from, to, amount);}function _transferOut(address token, address to, uint256 amount) internal {if (amount == 0) return;if (token == NATIVE) {(bool success, ) = to.call{value: amount}("");
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.0;import "../../interfaces/IStandardizedYield.sol";import "../erc20/PendleERC20Permit.sol";import "../libraries/math/PMath.sol";import "../libraries/TokenHelper.sol";import "../libraries/ArrayLib.sol";import "../libraries/Errors.sol";import "../libraries/BoringOwnableUpgradeable.sol";import "@openzeppelin/contracts/security/Pausable.sol";abstract contract SYBase is IStandardizedYield, PendleERC20Permit, TokenHelper, BoringOwnableUpgradeable, Pausable {using PMath for uint256;address public immutable yieldToken;constructor(string memory _name,string memory _symbol,address _yieldToken) PendleERC20Permit(_name, _symbol, IERC20Metadata(_yieldToken).decimals()) initializer {yieldToken = _yieldToken;__BoringOwnable_init();}
12345678910111213141516// SPDX-License-Identifier: MITpragma solidity ^0.8.0;interface IEtherFiLiquidityPool {function totalValueOutOfLp() external view returns (uint128);function totalValueInLp() external view returns (uint128);function getTotalEtherClaimOf(address _user) external view returns (uint256);function getTotalPooledEther() external view returns (uint256);function sharesForAmount(uint256 _amount) external view returns (uint256);function sharesForWithdrawalAmount(uint256 _amount) external view returns (uint256);function amountForShare(uint256 _share) external view returns (uint256);// function deposit() external payable returns (uint256);function deposit(address _referral) external payable returns (uint256);// function deposit(address _user, address _referral) external payable returns (uint256);}
123456789101112// SPDX-License-Identifier: MITpragma solidity ^0.8.0;interface IEtherFiWEEth {function wrap(uint256 _eETHAmount) external returns (uint256);function unwrap(uint256 _weETHAmount) external returns (uint256);function eETH() external view returns (address);function liquidityPool() external view returns (address);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-later/** MIT License* ===========** Permission is hereby granted, free of charge, to any person obtaining a copy* of this software and associated documentation files (the "Software"), to deal* in the Software without restriction, including without limitation the rights* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell* copies of the Software, and to permit persons to whom the Software is* furnished to do so, subject to the following conditions:** The above copyright notice and this permission notice shall be included in all* copies or substantial portions of the Software.** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE*/pragma solidity ^0.8.0;import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-later/** MIT License* ===========** Permission is hereby granted, free of charge, to any person obtaining a copy* of this software and associated documentation files (the "Software"), to deal* in the Software without restriction, including without limitation the rights* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell* copies of the Software, and to permit persons to whom the Software is* furnished to do so, subject to the following conditions:** The above copyright notice and this permission notice shall be included in all* copies or substantial portions of the Software.** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE*/pragma solidity ^0.8.0;import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
123456789101112131415161718192021{"optimizer": {"enabled": true,"runs": 1000000},"viaIR": true,"evmVersion": "berlin","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":"_weETH","type":"address"},{"internalType":"address","name":"_referee","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidShortString","type":"error"},{"inputs":[{"internalType":"uint256","name":"actualSharesOut","type":"uint256"},{"internalType":"uint256","name":"requiredSharesOut","type":"uint256"}],"name":"SYInsufficientSharesOut","type":"error"},{"inputs":[{"internalType":"uint256","name":"actualTokenOut","type":"uint256"},{"internalType":"uint256","name":"requiredTokenOut","type":"uint256"}],"name":"SYInsufficientTokenOut","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SYInvalidTokenIn","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SYInvalidTokenOut","type":"error"},{"inputs":[],"name":"SYZeroDeposit","type":"error"},{"inputs":[],"name":"SYZeroRedeem","type":"error"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"StringTooLong","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address[]","name":"rewardTokens","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"rewardAmounts","type":"uint256[]"}],"name":"ClaimRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountDeposited","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountSyOut","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[],"name":"EIP712DomainChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountSyToRedeem","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokenOut","type":"uint256"}],"name":"Redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"accruedRewards","outputs":[{"internalType":"uint256[]","name":"rewardAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"assetInfo","outputs":[{"internalType":"enum IStandardizedYield.AssetType","name":"","type":"uint8"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimRewards","outputs":[{"internalType":"uint256[]","name":"rewardAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountTokenToDeposit","type":"uint256"},{"internalType":"uint256","name":"minSharesOut","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"amountSharesOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"eETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exchangeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardTokens","outputs":[{"internalType":"address[]","name":"rewardTokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokensIn","outputs":[{"internalType":"address[]","name":"res","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokensOut","outputs":[{"internalType":"address[]","name":"res","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"isValidTokenIn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"isValidTokenOut","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountTokenToDeposit","type":"uint256"}],"name":"previewDeposit","outputs":[{"internalType":"uint256","name":"amountSharesOut","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountSharesToRedeem","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"amountTokenOut","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amountSharesToRedeem","type":"uint256"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"minTokenOut","type":"uint256"},{"internalType":"bool","name":"burnFromInternalBalance","type":"bool"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"amountTokenOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"referee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardIndexesCurrent","outputs":[{"internalType":"uint256[]","name":"indexes","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardIndexesStored","outputs":[{"internalType":"uint256[]","name":"indexes","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"},{"internalType":"bool","name":"direct","type":"bool"},{"internalType":"bool","name":"renounce","type":"bool"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"yieldToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6102208060405234620004c657604081620047f58038038091620000248285620008e0565b833981010312620004c657620000486020620000408362000904565b920162000904565b90604051916200005883620008a8565b6011835260208301700a6b240cae8d0cae45cccd240eeca8aa89607b1b8152604051906200008682620008a8565b60088252670a6b25aeeca8aa8960c31b60208084019190915260405163313ce56760e01b81529590866004816001600160a01b0389165afa958615620004d4576000966200085a575b5060405195620000df87620008a8565b60018752603160f81b60208801908152825190946001600160401b03821162000664576003805492600184811c941680156200084f575b60208510146200077057601f9384811162000805575b508060208582116001146200079d5760009162000791575b508160011b9160001990841b1c19161781555b8151926001600160401b038411620006645760045492600184811c9416801562000786575b60208510146200077057838286951162000714575b50602091841160011462000686576000936200067a575b50508260011b92600019911b1c1916176004555b608052600280546001600160f81b0316600160f81b179055620001df8162000bb1565b61014052620001ee8662000d75565b6101605251902093846101005251902080610120524660c052604051937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6020860152604085015260608401524660808401523060a084015260a083528260c081011060018060401b0360c085011117620006645760c083016040528251602084012060a0523060e05260ff19603a5416603a5560095460ff8160a81c16159384809562000653575b801562000637575b15620005d7575060ff60a01b198116600160a01b1760095583620005be575b50610180928284526009549060ff8260a81c16156200056557600880546001600160a01b0319163317905562000527575b506101a082815260405163332d08e560e11b815290926020826004816001600160a01b0385165afa918215620004d457600092620004e0575b506101c09182526040516306f1b8f160e11b81529190602090839060049082906001600160a01b03165afa918215620004d4576000926200048b575b506101e0828152610200938452845190926200038d916001600160a01b03908116911662000935565b604051936138c7958662000f2e8739608051866114e7015260a05186612c0f015260c05186612cdb015260e05186612be001526101005186612c5e01526101205186612c8401526101405186610a6201526101605186610a8f01525185610ccb01525184818161064601528181610dea01528181611745015281816118c701528181612138015281816126ca01528181613125015261320f0152518381816110840152818161138901528181611c5701528181613186015261327001525182818161087d01528181611773015281816118f101528181611ebb015281816121660152818161269a015261271f0152518181816114500152611c290152f35b9091506020813d602011620004cb575b81620004aa60209383620008e0565b81010312620004c657620004be9062000904565b903862000364565b600080fd5b3d91506200049b565b6040513d6000823e3d90fd5b91506020823d6020116200051e575b81620004fe60209383620008e0565b81010312620004c65760206200051660049362000904565b925062000328565b3d9150620004ef565b60ff60a81b1916600955604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602090a138620002ef565b60405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608490fd5b61ffff60a01b191661010160a01b1760095538620002be565b60c060849162461bcd60e51b82820152602060c4820152602e60e48201527f496e697469616c697a61626c653a20636f6e747261637420697320616c7265616101048201526d191e481a5b9a5d1a585b1a5e995960921b61012482015201fd5b50303b1580156200029f5750600160ff8360a01c16146200029f565b50600160ff8360a01c161062000297565b634e487b7160e01b600052604160045260246000fd5b015191503880620001a8565b600460009081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b9450601f198616905b818110620006fb575090856001969594939210620006e0575b50505050811b01600455620001bc565b01519060f884600019921b161c1916905538808080620006d0565b92946020600181928886015181550196019301620006b7565b9091929350600460005260206000208380870160051c8201926020881062000766575b9487969594939291940160051c01905b81811062000756575062000191565b6000815586955060010162000747565b9250819262000737565b634e487b7160e01b600052602260045260246000fd5b93607f16936200017c565b90508601513862000144565b6000848152602081209250601f198416905b818110620007ec57509083600194939210620007d3575b5050811b01815562000157565b88015160001983861b60f8161c191690553880620007c6565b9192602060018192868d015181550194019201620007af565b8260005260206000208580840160051c8201926020851062000845575b0160051c01905b8181106200083857506200012c565b6000815560010162000829565b9250819262000822565b93607f169362000116565b6020969196813d6020116200089f575b816200087960209383620008e0565b810103126200089b57519060ff821682036200089857509438620000cf565b80fd5b5080fd5b3d91506200086a565b604081019081106001600160401b038211176200066457604052565b608081019081106001600160401b038211176200066457604052565b601f909101601f19168101906001600160401b038211908210176200066457604052565b51906001600160a01b0382168203620004c657565b6001600160401b0381116200066457601f01601f191660200190565b6001600160a01b03919082811690811562000bab57604091825180958195636eb1769f60e11b83523060048401521691826024830152602096879160449788915afa90811562000ba05760009162000b6d575b5060016001605f1b03116200099f575b5050505050565b82519060008087840163095ea7b360e01b948582528460248201528289820152888152620009cd81620008c4565b519082875af13d1562000b65573d620009e68162000919565b90620009f587519283620008e0565b81523d60008983013e5b8162000b27575b501562000af5579160009291838093865190898201938452602482015281198882015287815262000a3781620008c4565b51925af13d1562000aed573d62000a4e8162000919565b9062000a5d84519283620008e0565b81523d60008683013e5b8162000aaf575b501562000a7d57808062000998565b5162461bcd60e51b81526004810192909252600c60248301526b5361666520417070726f766560a01b90820152606490fd5b8091505184811591821562000aca575b505090503862000a6e565b8380929350010312620004c6578301518015158103620004c65780843862000abf565b606062000a67565b835162461bcd60e51b815260048101879052600c60248201526b5361666520417070726f766560a01b81870152606490fd5b8091505187811591821562000b42575b505090503862000a06565b8380929350010312620004c6578601518015158103620004c65780873862000b37565b6060620009ff565b90508581813d831162000b98575b62000b878183620008e0565b81010312620004c657513862000988565b503d62000b7b565b84513d6000823e3d90fd5b50505050565b8051602091908281101562000c50575090601f82511162000bef578082519201519080831062000be057501790565b82600019910360031b1b161790565b90604051809263305a27a960e01b82528060048301528251908160248401526000935b82851062000c36575050604492506000838284010152601f80199101168101030190fd5b848101820151868601604401529381019385935062000c12565b6001600160401b03811162000664576005928354926001938481811c9116801562000d6a575b838210146200077057601f811162000d33575b5081601f841160011462000cc9575092829391839260009462000cbd575b50501b916000199060031b1c191617905560ff90565b01519250388062000ca7565b919083601f1981168760005284600020946000905b8883831062000d18575050501062000cfe575b505050811b01905560ff90565b015160001960f88460031b161c1916905538808062000cf1565b85870151885590960195948501948793509081019062000cde565b8560005284601f846000209201871c820191601f8601881c015b82811062000d5d57505062000c89565b6000815501859062000d4d565b90607f169062000c76565b80516020908181101562000e035750601f82511162000da2578082519201519080831062000be057501790565b90604051809263305a27a960e01b82528060048301528251908160248401526000935b82851062000de9575050604492506000838284010152601f80199101168101030190fd5b848101820151868601604401529381019385935062000dc5565b906001600160401b0382116200066457600654926001938481811c9116801562000f22575b838210146200077057601f811162000ee8575b5081601f841160011462000e7c575092829391839260009462000e70575b50501b916000199060031b1c19161760065560ff90565b01519250388062000e59565b919083601f198116600660005284600020946000905b8883831062000ecd575050501062000eb3575b505050811b0160065560ff90565b015160001960f88460031b161c1916905538808062000ea5565b85870151885590960195948501948793509081019062000e92565b600660005284601f84600020920160051c820191601f860160051c015b82811062000f1557505062000e3b565b6000815501859062000f05565b90607f169062000e2856fe6080604081815260049182361015610022575b505050361561002057600080fd5b005b600092833560e01c91826306fdde03146121be57508163071bc3c9146120b8578163078dfbe714611f2e578163095ea7b314611edf5781630de371e214611e70578163128fced11461023e57816318160ddd14611e1257816320e8c565146117df578163213cae63146116db57816323b872dd1461150b578163313ce567146114af5781633644e515146114745781633b1bebd1146114055781633ba0b9a9146113095781633f4ba83a146111f95781634e71e0c8146110ea5781635c975abb146110a8578163665a11ca1461103957816370a0823114610fd8578163769f8e5d14610cef57816376d5de8514610c80578163784367d614610c3c5781637ecebe0014610bda5781638456cb5914610b2857816384b0196e14610a265781638da5cb5b146109d357816395d89b41146108a7578163a40bee501461082b578163a9059cbb14610757578163b8f82b26146106bb578163c4f59f9b1461066a578163c72bf7a5146105fb578163cbe52ae314610555578163d505accf1461030857508063da88ecb414610239578063dd62ed3e14610295578063e30c397814610243578063ef5cfb8c1461023e578063f8b2f991146102395763fa5a4f06146101ea5780610012565b346102355760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355760209061022c610227612382565b6126f0565b90519015158152f35b5080fd5b612460565b612401565b503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355760209073ffffffffffffffffffffffffffffffffffffffff600954169051908152f35b503461023557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557806020926102d0612382565b6102d86123aa565b73ffffffffffffffffffffffffffffffffffffffff91821683526001865283832091168252845220549051908152f35b839150346102355760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557610342612382565b61034a6123aa565b906044359260643560843560ff81168103610551578142116104f45773ffffffffffffffffffffffffffffffffffffffff90818516928389526007602052898920908154916001830190558a519060208201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98452868d840152858a1660608401528a608084015260a083015260c082015260c0815260e0810181811067ffffffffffffffff8211176104c8578b525190206104569161044e9161040d612bc9565b908c51917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a435922061345c565b9190916134f8565b160361046b5750610468939450612795565b80f35b60649060208751917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152fd5b60248b6041897f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b60648360208a51917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152fd5b8680fd5b905082346105f857827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105f8575061058f612382565b906105998261267f565b156105b4576020836105ad602435856131f5565b9051908152f35b73ffffffffffffffffffffffffffffffffffffffff60249351927f88a505610000000000000000000000000000000000000000000000000000000084521690820152fd5b80fd5b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355790816106b79251916106ab8361253c565b82525191829182612330565b0390f35b905082346105f857827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105f857506106f5612382565b906106ff826126f0565b15610713576020836105ad6024358561310b565b73ffffffffffffffffffffffffffffffffffffffff60249351927faeabe7180000000000000000000000000000000000000000000000000000000084521690820152fd5b50503461023557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020907f01000000000000000000000000000000000000000000000000000000000000006107b3612382565b61081c600254916107ca60028460f81c141561261a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809416176002556024359033612946565b60025416176002555160018152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557906012826060935192835273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166020840152820152f35b919050346109cf57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126109cf5780518381949084546108e98161249e565b918285526020966001928860018216918260001461098757505060011461092c575b85886106b78961091d848a0385612574565b519282849384528301906122d2565b815286935091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b82841061096f575050508201018161091d6106b73861090b565b8054848a018601528895508794909301928101610955565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168882015294151560051b8701909401945085935061091d92506106b7915038905061090b565b8280fd5b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355760209073ffffffffffffffffffffffffffffffffffffffff600854169051908152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576106b7610afc92610a867f0000000000000000000000000000000000000000000000000000000000000000612f10565b92610b09610ab37f000000000000000000000000000000000000000000000000000000000000000061304b565b91805192610ac08461253c565b84845281519788977f0f00000000000000000000000000000000000000000000000000000000000000895260e060208a015260e08901906122d2565b91878303908801526122d2565b9146606086015230608086015260a085015283820360c08501526123cd565b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355760207f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25891610b9f73ffffffffffffffffffffffffffffffffffffffff6008541633146125b5565b610ba76133f2565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00603a541617603a5551338152a180f35b5050346102355760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235578060209273ffffffffffffffffffffffffffffffffffffffff610c2c612382565b1681526007845220549051908152f35b5050346102355760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355760209061022c610c7b612382565b61267f565b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b905082346105f85760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105f857610d29612382565b916024356044359173ffffffffffffffffffffffffffffffffffffffff9081841693848103610fd457606435906084359687151588036105f85760025497610d7760028a60f81c141561261a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809a1617600255610dc88361267f565b15610fa5578615610f7d5789949392919015610f6e57610de88730612d01565b7f00000000000000000000000000000000000000000000000000000000000000008616888103610ec6575050610e219086998a91613302565b808810610e91576020888a7f01000000000000000000000000000000000000000000000000000000000000008a8a8a8a8a8651928352878984015216907faee47cdf925cf525fdae94f9777ee5a06cac37e1c41220d0a8a89ed154f62d1c863392a4600254161760025551908152f35b60449250878951927fbfee4ca00000000000000000000000000000000000000000000000000000000084528301526024820152fd5b81929394955060209060248d51809481937fde0e9a3e0000000000000000000000000000000000000000000000000000000083528c8b8401525af1918215610f635790818b96959493610f23575b505090610e2191998a91613302565b915091929394506020823d602011610f5b575b81610f4360209383612574565b810103126105f85750518893929190610e218c610f14565b3d9150610f36565b8b51903d90823e3d90fd5b610f788733612d01565b610de8565b848b517fc3d83b07000000000000000000000000000000000000000000000000000000008152fd5b602485898d51917f88a50561000000000000000000000000000000000000000000000000000000008352820152fd5b8580fd5b5050346102355760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235578060209273ffffffffffffffffffffffffffffffffffffffff61102a612382565b16815280845220549051908152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355760209060ff603a541690519015158152f35b919050346109cf57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126109cf576009549073ffffffffffffffffffffffffffffffffffffffff928383169182330361119c575050806008549384167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08680a37fffffffffffffffffffffffff0000000000000000000000000000000000000000809316176008551660095580f35b90602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602060248201527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e65726044820152fd5b9050346109cf57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126109cf5761124c73ffffffffffffffffffffffffffffffffffffffff6008541633146125b5565b603a549060ff8216156112ac57507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0060209216603a5551338152a180f35b60649060208451917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152fd5b919050346109cf57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126109cf57670de0b6b3a76400008151927f561bddf800000000000000000000000000000000000000000000000000000000845283015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156113fb5783926113c3575b6020838351908152f35b9091506020813d6020116113f3575b816113df60209383612574565b810103126109cf57602092505190386113b9565b3d91506113d2565b81513d85823e3d90fd5b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020906105ad612bc9565b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020905160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b839150346102355760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557611545612382565b61154d6123aa565b9060443592856002549561156760028860f81c141561261a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8098161760025573ffffffffffffffffffffffffffffffffffffffff8416815260016020528181203382526020522054907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611631575b6020877f01000000000000000000000000000000000000000000000000000000000000008861081c898989612946565b84821061167e575092602095949261081c92611671837f010000000000000000000000000000000000000000000000000000000000000097033383612795565b9250929495819450611601565b60649060208851917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152fd5b83833461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557805191611717836124f1565b60038352606036602085013761172c83612749565b73ffffffffffffffffffffffffffffffffffffffff90817f000000000000000000000000000000000000000000000000000000000000000016905261177084612785565b907f00000000000000000000000000000000000000000000000000000000000000001690528251600210156117b3576106b7935060608301525191829182612330565b806032857f4e487b71000000000000000000000000000000000000000000000000000000006024945252fd5b91905060807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126109cf57611814612382565b9261181d6123aa565b93604435936064359460029384549761183b868a60f81c141561261a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809a1617865561188b816126f0565b15611dcc578215611da45773ffffffffffffffffffffffffffffffffffffffff9081169485158015611d1257843403611cb5575b611c01575b827f00000000000000000000000000000000000000000000000000000000000000008316878114611bf8577f0000000000000000000000000000000000000000000000000000000000000000841680611b5c57506020906024475b8c5194859384927fea598cb00000000000000000000000000000000000000000000000000000000084528c8401525af1908115611b52578491611b1c575b50985b808a10611ae7575016928315611a8a576119786133f2565b888811610235578554908989168a831601908a8211611a5e57509380927f01000000000000000000000000000000000000000000000000000000000000009694927fff000000000000000000000000000000000000000000000000000000000000008c60209d98169116178855818152808b528881206119f98b825461290a565b90557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8b8a518c8152a3865190815287898201527f5fe47ed6d4225326d3303476197d782ded5a4e9c14f479dc9ec4992af4e85d59873392a482541617905551908152f35b8360116024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b60649060208851917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152fd5b856044918b8b51927fbc71f2ba0000000000000000000000000000000000000000000000000000000084528301526024820152fd5b90506020813d602011611b4a575b81611b3760209383612574565b81010312611b4657513861195d565b8380fd5b3d9150611b2a565b89513d86823e3d90fd5b60249192506020908b51928380927f70a08231000000000000000000000000000000000000000000000000000000008252308c8301525afa908115611bee57908592918391611bb2575b5090602460209261191f565b919250506020813d602011611be6575b81611bcf60209383612574565b81010312611be257518491906024611ba6565b8480fd5b3d9150611bc2565b8a513d87823e3d90fd5b50508398611960565b87517ff340fa01000000000000000000000000000000000000000000000000000000008152827f0000000000000000000000000000000000000000000000000000000000000000168682015260208160248188877f0000000000000000000000000000000000000000000000000000000000000000165af18015611b5257611c8a575b506118c4565b602090813d8311611cae575b611ca08183612574565b810103126109cf5738611c84565b503d611c96565b60648660208b51917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600c60248201527f657468206d69736d6174636800000000000000000000000000000000000000006044820152fd5b88517f23b872dd0000000000000000000000000000000000000000000000000000000060208201523360248201523060448201528560648201526064815260a0810181811067ffffffffffffffff821117611d78578a52611d739088613691565b6118bf565b60248660418a7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b8387517fa907f2f0000000000000000000000000000000000000000000000000000000008152fd5b6024908473ffffffffffffffffffffffffffffffffffffffff8951927faeabe7180000000000000000000000000000000000000000000000000000000084521690820152fd5b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600254169051908152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50503461023557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557602090611f27611f1d612382565b6024359033612795565b5160018152f35b919050346109cf5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126109cf57611f68612382565b91602435918215158303611be257604435928315158403610fd45773ffffffffffffffffffffffffffffffffffffffff948591611faa836008541633146125b5565b1561208657169283159081159161207e575b5015612021575050806008549283167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a37fffffffffffffffffffffffff0000000000000000000000000000000000000000809216176008556009541660095580f35b90602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601560248201527f4f776e61626c653a207a65726f206164647265737300000000000000000000006044820152fd5b905038611fbc565b9350505050167fffffffffffffffffffffffff0000000000000000000000000000000000000000600954161760095580f35b83833461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557805191606083019083821067ffffffffffffffff83111761219257506106b793508152600282528036602084013761211f82612749565b73ffffffffffffffffffffffffffffffffffffffff90817f000000000000000000000000000000000000000000000000000000000000000016905261216383612785565b907f00000000000000000000000000000000000000000000000000000000000000001690525191829182612330565b806041867f4e487b71000000000000000000000000000000000000000000000000000000006024945252fd5b84843461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355782826003546121fc8161249e565b908184526020956001918760018216918260001461228d575050600114612231575b5050506106b7929161091d910385612574565b9190869350600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b828410612275575050508201018161091d6106b761221e565b8054848a01860152889550879490930192810161225c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168782015293151560051b8601909301935084925061091d91506106b7905061221e565b919082519283825260005b84811061231c5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b6020818301810151848301820152016122dd565b602090602060408183019282815285518094520193019160005b828110612358575050505090565b835173ffffffffffffffffffffffffffffffffffffffff168552938101939281019260010161234a565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036123a557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036123a557565b90815180825260208080930193019160005b8281106123ed575050505090565b8351855293810193928101926001016123df565b346123a55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126123a557612438612382565b506106b76040516124488161253c565b600081526040519182916020835260208301906123cd565b346123a55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126123a5576106b76040516124488161253c565b90600182811c921680156124e7575b60208310146124b857565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f16916124ad565b6080810190811067ffffffffffffffff82111761250d57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6020810190811067ffffffffffffffff82111761250d57604052565b6040810190811067ffffffffffffffff82111761250d57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761250d57604052565b156125bc57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b1561262157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff809116817f00000000000000000000000000000000000000000000000000000000000000001681149182156126c857505090565b7f00000000000000000000000000000000000000000000000000000000000000001614919050565b73ffffffffffffffffffffffffffffffffffffffff809116801591821561271d575b82156126c857505090565b7f0000000000000000000000000000000000000000000000000000000000000000811682149250612712565b8051156127565760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051600110156127565760400190565b73ffffffffffffffffffffffffffffffffffffffff80911691821561288757169182156128035760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925918360005260018252604060002085600052825280604060002055604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b9190820180921161291757565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff809116918215612b455716918215612ac157828214612a635761297c6133f2565b6000828152806020526040812054918083106129df57604082827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9587602096528286520382822055868152206129d482825461290a565b9055604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f45524332303a207472616e7366657220746f2073656c660000000000000000006044820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301480612cd8575b15612c31577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff82111761250d5760405251902090565b507f00000000000000000000000000000000000000000000000000000000000000004614612c08565b73ffffffffffffffffffffffffffffffffffffffff168015612e8c57612d256133f2565b600091818352826020526040832054818110612e08578190838552846020520360408420557effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808211611b46576002549080831681831603818111612ddb57917fff000000000000000000000000000000000000000000000000000000000000007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef949260209416911617600255604051908152a3565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152fd5b60ff8114612f665760ff811690601f8211612f3c5760405191612f3283612558565b8252602082015290565b60046040517fb3512b0c000000000000000000000000000000000000000000000000000000008152fd5b50604051600554816000612f798361249e565b808352926020906001908181169081156130085750600114612fa7575b5050612fa492500382612574565b90565b91509260056000527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0936000925b828410612ff05750612fa49450505081016020013880612f96565b85548785018301529485019486945092810192612fd5565b905060209350612fa49592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201013880612f96565b60ff811461306d5760ff811690601f8211612f3c5760405191612f3283612558565b506040516006548160006130808361249e565b8083529260209060019081811690811561300857506001146130aa575050612fa492500382612574565b91509260066000527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f936000925b8284106130f35750612fa49450505081016020013880612f96565b855487850183015294850194869450928101926130d8565b73ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082160361314f575090565b906020906024604051809481937f3a53acb000000000000000000000000000000000000000000000000000000000835260048301527f0000000000000000000000000000000000000000000000000000000000000000165afa9081156131e9576000916131ba575090565b90506020813d6020116131e1575b816131d560209383612574565b810103126123a5575190565b3d91506131c8565b6040513d6000823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff9081167f0000000000000000000000000000000000000000000000000000000000000000821603613239575090565b906020906024604051809481937f561bddf800000000000000000000000000000000000000000000000000000000835260048301527f0000000000000000000000000000000000000000000000000000000000000000165afa9081156131e9576000916131ba575090565b3d156132fd573d9067ffffffffffffffff821161250d57604051916132f160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184612574565b82523d6000602084013e565b606090565b82156133ed5773ffffffffffffffffffffffffffffffffffffffff908116908161339f575050600080809381935af16133396132a4565b501561334157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6574682073656e64206661696c656400000000000000000000000000000000006044820152fd5b926133eb93604051937fa9059cbb0000000000000000000000000000000000000000000000000000000060208601521660248401526044830152604482526133e6826124f1565b613691565b565b505050565b60ff603a54166133fe57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152fd5b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083116134ec5791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa156134df57815173ffffffffffffffffffffffffffffffffffffffff8116156134d9579190565b50600190565b50604051903d90823e3d90fd5b50505050600090600390565b600581101561366257806135095750565b6001810361356f5760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152fd5b600281036135d55760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152fd5b6003146135de57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff16906136fe6040516136b781612558565b6020938482527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564858301526000808587829751910182855af16136f86132a4565b916137c1565b80519182159184831561379d575b5050509050156137195750565b608490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b919381809450010312610235578201519081151582036105f857508038808461370c565b9192901561383c57508151156137d5575090565b3b156137de5790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b82519091501561384f5750805190602001fd5b61388d906040519182917f08c379a00000000000000000000000000000000000000000000000000000000083526020600484015260248301906122d2565b0390fdfea2646970667358221220c350fa4770636ed45e79b93376eb9f53b5f69dcea3dfcab38e6aa02de11bcd5664736f6c63430008170033000000000000000000000000cd5fe23c85820f7b72d0926fc9b05b43e359b7ee0000000000000000000000008119ec16f0573b7dac7c0cb94eb504fb32456ee1
Deployed Bytecode
0x6080604081815260049182361015610022575b505050361561002057600080fd5b005b600092833560e01c91826306fdde03146121be57508163071bc3c9146120b8578163078dfbe714611f2e578163095ea7b314611edf5781630de371e214611e70578163128fced11461023e57816318160ddd14611e1257816320e8c565146117df578163213cae63146116db57816323b872dd1461150b578163313ce567146114af5781633644e515146114745781633b1bebd1146114055781633ba0b9a9146113095781633f4ba83a146111f95781634e71e0c8146110ea5781635c975abb146110a8578163665a11ca1461103957816370a0823114610fd8578163769f8e5d14610cef57816376d5de8514610c80578163784367d614610c3c5781637ecebe0014610bda5781638456cb5914610b2857816384b0196e14610a265781638da5cb5b146109d357816395d89b41146108a7578163a40bee501461082b578163a9059cbb14610757578163b8f82b26146106bb578163c4f59f9b1461066a578163c72bf7a5146105fb578163cbe52ae314610555578163d505accf1461030857508063da88ecb414610239578063dd62ed3e14610295578063e30c397814610243578063ef5cfb8c1461023e578063f8b2f991146102395763fa5a4f06146101ea5780610012565b346102355760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355760209061022c610227612382565b6126f0565b90519015158152f35b5080fd5b612460565b612401565b503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355760209073ffffffffffffffffffffffffffffffffffffffff600954169051908152f35b503461023557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557806020926102d0612382565b6102d86123aa565b73ffffffffffffffffffffffffffffffffffffffff91821683526001865283832091168252845220549051908152f35b839150346102355760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557610342612382565b61034a6123aa565b906044359260643560843560ff81168103610551578142116104f45773ffffffffffffffffffffffffffffffffffffffff90818516928389526007602052898920908154916001830190558a519060208201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98452868d840152858a1660608401528a608084015260a083015260c082015260c0815260e0810181811067ffffffffffffffff8211176104c8578b525190206104569161044e9161040d612bc9565b908c51917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a435922061345c565b9190916134f8565b160361046b5750610468939450612795565b80f35b60649060208751917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152fd5b60248b6041897f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b60648360208a51917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152fd5b8680fd5b905082346105f857827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105f8575061058f612382565b906105998261267f565b156105b4576020836105ad602435856131f5565b9051908152f35b73ffffffffffffffffffffffffffffffffffffffff60249351927f88a505610000000000000000000000000000000000000000000000000000000084521690820152fd5b80fd5b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020905173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000cd5fe23c85820f7b72d0926fc9b05b43e359b7ee168152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355790816106b79251916106ab8361253c565b82525191829182612330565b0390f35b905082346105f857827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105f857506106f5612382565b906106ff826126f0565b15610713576020836105ad6024358561310b565b73ffffffffffffffffffffffffffffffffffffffff60249351927faeabe7180000000000000000000000000000000000000000000000000000000084521690820152fd5b50503461023557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020907f01000000000000000000000000000000000000000000000000000000000000006107b3612382565b61081c600254916107ca60028460f81c141561261a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809416176002556024359033612946565b60025416176002555160018152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557906012826060935192835273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000035fa164735182de50811e8e2e824cfb9b6118ac2166020840152820152f35b919050346109cf57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126109cf5780518381949084546108e98161249e565b918285526020966001928860018216918260001461098757505060011461092c575b85886106b78961091d848a0385612574565b519282849384528301906122d2565b815286935091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b82841061096f575050508201018161091d6106b73861090b565b8054848a018601528895508794909301928101610955565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168882015294151560051b8701909401945085935061091d92506106b7915038905061090b565b8280fd5b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355760209073ffffffffffffffffffffffffffffffffffffffff600854169051908152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576106b7610afc92610a867f53592065746865722e6669207765455448000000000000000000000000000011612f10565b92610b09610ab37f310000000000000000000000000000000000000000000000000000000000000161304b565b91805192610ac08461253c565b84845281519788977f0f00000000000000000000000000000000000000000000000000000000000000895260e060208a015260e08901906122d2565b91878303908801526122d2565b9146606086015230608086015260a085015283820360c08501526123cd565b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355760207f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25891610b9f73ffffffffffffffffffffffffffffffffffffffff6008541633146125b5565b610ba76133f2565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00603a541617603a5551338152a180f35b5050346102355760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235578060209273ffffffffffffffffffffffffffffffffffffffff610c2c612382565b1681526007845220549051908152f35b5050346102355760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355760209061022c610c7b612382565b61267f565b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020905173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000cd5fe23c85820f7b72d0926fc9b05b43e359b7ee168152f35b905082346105f85760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105f857610d29612382565b916024356044359173ffffffffffffffffffffffffffffffffffffffff9081841693848103610fd457606435906084359687151588036105f85760025497610d7760028a60f81c141561261a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809a1617600255610dc88361267f565b15610fa5578615610f7d5789949392919015610f6e57610de88730612d01565b7f000000000000000000000000cd5fe23c85820f7b72d0926fc9b05b43e359b7ee8616888103610ec6575050610e219086998a91613302565b808810610e91576020888a7f01000000000000000000000000000000000000000000000000000000000000008a8a8a8a8a8651928352878984015216907faee47cdf925cf525fdae94f9777ee5a06cac37e1c41220d0a8a89ed154f62d1c863392a4600254161760025551908152f35b60449250878951927fbfee4ca00000000000000000000000000000000000000000000000000000000084528301526024820152fd5b81929394955060209060248d51809481937fde0e9a3e0000000000000000000000000000000000000000000000000000000083528c8b8401525af1918215610f635790818b96959493610f23575b505090610e2191998a91613302565b915091929394506020823d602011610f5b575b81610f4360209383612574565b810103126105f85750518893929190610e218c610f14565b3d9150610f36565b8b51903d90823e3d90fd5b610f788733612d01565b610de8565b848b517fc3d83b07000000000000000000000000000000000000000000000000000000008152fd5b602485898d51917f88a50561000000000000000000000000000000000000000000000000000000008352820152fd5b8580fd5b5050346102355760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235578060209273ffffffffffffffffffffffffffffffffffffffff61102a612382565b16815280845220549051908152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020905173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000308861a430be4cce5502d0a12724771fc6daf216168152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355760209060ff603a541690519015158152f35b919050346109cf57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126109cf576009549073ffffffffffffffffffffffffffffffffffffffff928383169182330361119c575050806008549384167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08680a37fffffffffffffffffffffffff0000000000000000000000000000000000000000809316176008551660095580f35b90602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602060248201527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e65726044820152fd5b9050346109cf57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126109cf5761124c73ffffffffffffffffffffffffffffffffffffffff6008541633146125b5565b603a549060ff8216156112ac57507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0060209216603a5551338152a180f35b60649060208451917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152fd5b919050346109cf57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126109cf57670de0b6b3a76400008151927f561bddf800000000000000000000000000000000000000000000000000000000845283015260208260248173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000308861a430be4cce5502d0a12724771fc6daf216165afa9182156113fb5783926113c3575b6020838351908152f35b9091506020813d6020116113f3575b816113df60209383612574565b810103126109cf57602092505190386113b9565b3d91506113d2565b81513d85823e3d90fd5b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000008119ec16f0573b7dac7c0cb94eb504fb32456ee1168152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020906105ad612bc9565b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020905160ff7f0000000000000000000000000000000000000000000000000000000000000012168152f35b839150346102355760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557611545612382565b61154d6123aa565b9060443592856002549561156760028860f81c141561261a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8098161760025573ffffffffffffffffffffffffffffffffffffffff8416815260016020528181203382526020522054907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611631575b6020877f01000000000000000000000000000000000000000000000000000000000000008861081c898989612946565b84821061167e575092602095949261081c92611671837f010000000000000000000000000000000000000000000000000000000000000097033383612795565b9250929495819450611601565b60649060208851917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152fd5b83833461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557805191611717836124f1565b60038352606036602085013761172c83612749565b73ffffffffffffffffffffffffffffffffffffffff90817f000000000000000000000000cd5fe23c85820f7b72d0926fc9b05b43e359b7ee16905261177084612785565b907f00000000000000000000000035fa164735182de50811e8e2e824cfb9b6118ac21690528251600210156117b3576106b7935060608301525191829182612330565b806032857f4e487b71000000000000000000000000000000000000000000000000000000006024945252fd5b91905060807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126109cf57611814612382565b9261181d6123aa565b93604435936064359460029384549761183b868a60f81c141561261a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809a1617865561188b816126f0565b15611dcc578215611da45773ffffffffffffffffffffffffffffffffffffffff9081169485158015611d1257843403611cb5575b611c01575b827f000000000000000000000000cd5fe23c85820f7b72d0926fc9b05b43e359b7ee8316878114611bf8577f00000000000000000000000035fa164735182de50811e8e2e824cfb9b6118ac2841680611b5c57506020906024475b8c5194859384927fea598cb00000000000000000000000000000000000000000000000000000000084528c8401525af1908115611b52578491611b1c575b50985b808a10611ae7575016928315611a8a576119786133f2565b888811610235578554908989168a831601908a8211611a5e57509380927f01000000000000000000000000000000000000000000000000000000000000009694927fff000000000000000000000000000000000000000000000000000000000000008c60209d98169116178855818152808b528881206119f98b825461290a565b90557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8b8a518c8152a3865190815287898201527f5fe47ed6d4225326d3303476197d782ded5a4e9c14f479dc9ec4992af4e85d59873392a482541617905551908152f35b8360116024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b60649060208851917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152fd5b856044918b8b51927fbc71f2ba0000000000000000000000000000000000000000000000000000000084528301526024820152fd5b90506020813d602011611b4a575b81611b3760209383612574565b81010312611b4657513861195d565b8380fd5b3d9150611b2a565b89513d86823e3d90fd5b60249192506020908b51928380927f70a08231000000000000000000000000000000000000000000000000000000008252308c8301525afa908115611bee57908592918391611bb2575b5090602460209261191f565b919250506020813d602011611be6575b81611bcf60209383612574565b81010312611be257518491906024611ba6565b8480fd5b3d9150611bc2565b8a513d87823e3d90fd5b50508398611960565b87517ff340fa01000000000000000000000000000000000000000000000000000000008152827f0000000000000000000000008119ec16f0573b7dac7c0cb94eb504fb32456ee1168682015260208160248188877f000000000000000000000000308861a430be4cce5502d0a12724771fc6daf216165af18015611b5257611c8a575b506118c4565b602090813d8311611cae575b611ca08183612574565b810103126109cf5738611c84565b503d611c96565b60648660208b51917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600c60248201527f657468206d69736d6174636800000000000000000000000000000000000000006044820152fd5b88517f23b872dd0000000000000000000000000000000000000000000000000000000060208201523360248201523060448201528560648201526064815260a0810181811067ffffffffffffffff821117611d78578a52611d739088613691565b6118bf565b60248660418a7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b8387517fa907f2f0000000000000000000000000000000000000000000000000000000008152fd5b6024908473ffffffffffffffffffffffffffffffffffffffff8951927faeabe7180000000000000000000000000000000000000000000000000000000084521690820152fd5b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600254169051908152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000035fa164735182de50811e8e2e824cfb9b6118ac2168152f35b50503461023557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557602090611f27611f1d612382565b6024359033612795565b5160018152f35b919050346109cf5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126109cf57611f68612382565b91602435918215158303611be257604435928315158403610fd45773ffffffffffffffffffffffffffffffffffffffff948591611faa836008541633146125b5565b1561208657169283159081159161207e575b5015612021575050806008549283167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a37fffffffffffffffffffffffff0000000000000000000000000000000000000000809216176008556009541660095580f35b90602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601560248201527f4f776e61626c653a207a65726f206164647265737300000000000000000000006044820152fd5b905038611fbc565b9350505050167fffffffffffffffffffffffff0000000000000000000000000000000000000000600954161760095580f35b83833461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557805191606083019083821067ffffffffffffffff83111761219257506106b793508152600282528036602084013761211f82612749565b73ffffffffffffffffffffffffffffffffffffffff90817f000000000000000000000000cd5fe23c85820f7b72d0926fc9b05b43e359b7ee16905261216383612785565b907f00000000000000000000000035fa164735182de50811e8e2e824cfb9b6118ac21690525191829182612330565b806041867f4e487b71000000000000000000000000000000000000000000000000000000006024945252fd5b84843461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355782826003546121fc8161249e565b908184526020956001918760018216918260001461228d575050600114612231575b5050506106b7929161091d910385612574565b9190869350600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b828410612275575050508201018161091d6106b761221e565b8054848a01860152889550879490930192810161225c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168782015293151560051b8601909301935084925061091d91506106b7905061221e565b919082519283825260005b84811061231c5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b6020818301810151848301820152016122dd565b602090602060408183019282815285518094520193019160005b828110612358575050505090565b835173ffffffffffffffffffffffffffffffffffffffff168552938101939281019260010161234a565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036123a557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036123a557565b90815180825260208080930193019160005b8281106123ed575050505090565b8351855293810193928101926001016123df565b346123a55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126123a557612438612382565b506106b76040516124488161253c565b600081526040519182916020835260208301906123cd565b346123a55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126123a5576106b76040516124488161253c565b90600182811c921680156124e7575b60208310146124b857565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f16916124ad565b6080810190811067ffffffffffffffff82111761250d57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6020810190811067ffffffffffffffff82111761250d57604052565b6040810190811067ffffffffffffffff82111761250d57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761250d57604052565b156125bc57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b1561262157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff809116817f00000000000000000000000035fa164735182de50811e8e2e824cfb9b6118ac21681149182156126c857505090565b7f000000000000000000000000cd5fe23c85820f7b72d0926fc9b05b43e359b7ee1614919050565b73ffffffffffffffffffffffffffffffffffffffff809116801591821561271d575b82156126c857505090565b7f00000000000000000000000035fa164735182de50811e8e2e824cfb9b6118ac2811682149250612712565b8051156127565760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051600110156127565760400190565b73ffffffffffffffffffffffffffffffffffffffff80911691821561288757169182156128035760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925918360005260018252604060002085600052825280604060002055604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b9190820180921161291757565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff809116918215612b455716918215612ac157828214612a635761297c6133f2565b6000828152806020526040812054918083106129df57604082827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9587602096528286520382822055868152206129d482825461290a565b9055604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f45524332303a207472616e7366657220746f2073656c660000000000000000006044820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ac0047886a985071476a1186be89222659970d6516301480612cd8575b15612c31577f72077fa1efac6f4c5a6f4b35113d8fb1736ed5cdcea743a62ecb3d07d81253cc90565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f55a280d0796fe7cc7eb923679a23e99923e723b2c0f1e630bc8409759e07995960408201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff82111761250d5760405251902090565b507f00000000000000000000000000000000000000000000000000000000000000014614612c08565b73ffffffffffffffffffffffffffffffffffffffff168015612e8c57612d256133f2565b600091818352826020526040832054818110612e08578190838552846020520360408420557effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808211611b46576002549080831681831603818111612ddb57917fff000000000000000000000000000000000000000000000000000000000000007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef949260209416911617600255604051908152a3565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152fd5b60ff8114612f665760ff811690601f8211612f3c5760405191612f3283612558565b8252602082015290565b60046040517fb3512b0c000000000000000000000000000000000000000000000000000000008152fd5b50604051600554816000612f798361249e565b808352926020906001908181169081156130085750600114612fa7575b5050612fa492500382612574565b90565b91509260056000527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0936000925b828410612ff05750612fa49450505081016020013880612f96565b85548785018301529485019486945092810192612fd5565b905060209350612fa49592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201013880612f96565b60ff811461306d5760ff811690601f8211612f3c5760405191612f3283612558565b506040516006548160006130808361249e565b8083529260209060019081811690811561300857506001146130aa575050612fa492500382612574565b91509260066000527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f936000925b8284106130f35750612fa49450505081016020013880612f96565b855487850183015294850194869450928101926130d8565b73ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000cd5fe23c85820f7b72d0926fc9b05b43e359b7ee82160361314f575090565b906020906024604051809481937f3a53acb000000000000000000000000000000000000000000000000000000000835260048301527f000000000000000000000000308861a430be4cce5502d0a12724771fc6daf216165afa9081156131e9576000916131ba575090565b90506020813d6020116131e1575b816131d560209383612574565b810103126123a5575190565b3d91506131c8565b6040513d6000823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000cd5fe23c85820f7b72d0926fc9b05b43e359b7ee821603613239575090565b906020906024604051809481937f561bddf800000000000000000000000000000000000000000000000000000000835260048301527f000000000000000000000000308861a430be4cce5502d0a12724771fc6daf216165afa9081156131e9576000916131ba575090565b3d156132fd573d9067ffffffffffffffff821161250d57604051916132f160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184612574565b82523d6000602084013e565b606090565b82156133ed5773ffffffffffffffffffffffffffffffffffffffff908116908161339f575050600080809381935af16133396132a4565b501561334157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6574682073656e64206661696c656400000000000000000000000000000000006044820152fd5b926133eb93604051937fa9059cbb0000000000000000000000000000000000000000000000000000000060208601521660248401526044830152604482526133e6826124f1565b613691565b565b505050565b60ff603a54166133fe57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152fd5b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083116134ec5791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa156134df57815173ffffffffffffffffffffffffffffffffffffffff8116156134d9579190565b50600190565b50604051903d90823e3d90fd5b50505050600090600390565b600581101561366257806135095750565b6001810361356f5760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152fd5b600281036135d55760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152fd5b6003146135de57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff16906136fe6040516136b781612558565b6020938482527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564858301526000808587829751910182855af16136f86132a4565b916137c1565b80519182159184831561379d575b5050509050156137195750565b608490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b919381809450010312610235578201519081151582036105f857508038808461370c565b9192901561383c57508151156137d5575090565b3b156137de5790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b82519091501561384f5750805190602001fd5b61388d906040519182917f08c379a00000000000000000000000000000000000000000000000000000000083526020600484015260248301906122d2565b0390fdfea2646970667358221220c350fa4770636ed45e79b93376eb9f53b5f69dcea3dfcab38e6aa02de11bcd5664736f6c63430008170033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000cd5fe23c85820f7b72d0926fc9b05b43e359b7ee0000000000000000000000008119ec16f0573b7dac7c0cb94eb504fb32456ee1
-----Decoded View---------------
Arg [0] : _weETH (address): 0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee
Arg [1] : _referee (address): 0x8119EC16F0573B7dAc7C0CB94EB504FB32456ee1
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000cd5fe23c85820f7b72d0926fc9b05b43e359b7ee
Arg [1] : 0000000000000000000000008119ec16f0573b7dac7c0cb94eb504fb32456ee1
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.