More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 20,640 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 425360445 | 7 days ago | IN | 0 ETH | 0.00000051 | ||||
| Approve | 425257686 | 8 days ago | IN | 0 ETH | 0.0000005 | ||||
| Approve | 425257662 | 8 days ago | IN | 0 ETH | 0.00000051 | ||||
| Approve | 425255536 | 8 days ago | IN | 0 ETH | 0.00000053 | ||||
| Approve | 425227692 | 8 days ago | IN | 0 ETH | 0.0000005 | ||||
| Approve | 425227656 | 8 days ago | IN | 0 ETH | 0.0000005 | ||||
| Approve | 425165524 | 8 days ago | IN | 0 ETH | 0.00000051 | ||||
| Approve | 423409500 | 13 days ago | IN | 0 ETH | 0.00000049 | ||||
| Approve | 417432800 | 30 days ago | IN | 0 ETH | 0.00000024 | ||||
| Approve | 417432680 | 30 days ago | IN | 0 ETH | 0.00000024 | ||||
| Approve | 417149679 | 31 days ago | IN | 0 ETH | 0.00000092 | ||||
| Approve | 417147685 | 31 days ago | IN | 0 ETH | 0.00000036 | ||||
| Approve | 413306490 | 42 days ago | IN | 0 ETH | 0.00000027 | ||||
| Approve | 412650849 | 44 days ago | IN | 0 ETH | 0.00000047 | ||||
| Approve | 404225222 | 68 days ago | IN | 0 ETH | 0.00000025 | ||||
| Vest | 397927682 | 87 days ago | IN | 0 ETH | 0.00000238 | ||||
| Vest | 397927622 | 87 days ago | IN | 0 ETH | 0.0000037 | ||||
| Approve | 396404082 | 91 days ago | IN | 0 ETH | 0.00003199 | ||||
| Approve | 396404063 | 91 days ago | IN | 0 ETH | 0.00003195 | ||||
| Approve | 396315417 | 91 days ago | IN | 0 ETH | 0.00000027 | ||||
| Approve | 396315400 | 91 days ago | IN | 0 ETH | 0.00000028 | ||||
| Approve | 396315382 | 91 days ago | IN | 0 ETH | 0.00000029 | ||||
| Approve | 391725754 | 104 days ago | IN | 0 ETH | 0.00000025 | ||||
| Approve | 390578356 | 108 days ago | IN | 0 ETH | 0.00000026 | ||||
| Approve | 389986763 | 110 days ago | IN | 0 ETH | 0.0000003 |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
xGND
Compiler Version
v0.8.12+commit.f00d7308
Contract Source Code (Solidity)
/**
*Submitted for verification at Arbiscan.io on 2023-04-24
*/
// File: @openzeppelin/contracts/security/ReentrancyGuard.sol
// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be _NOT_ENTERED
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
// File: @openzeppelin/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)
pragma solidity ^0.8.0;
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
* now has built in overflow checking.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the subtraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v4.8.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
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
* the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
*
* _Available since v4.8._
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata,
string memory errorMessage
) internal view returns (bytes memory) {
if (success) {
if (returndata.length == 0) {
// only check isContract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
require(isContract(target), "Address: call to non-contract");
}
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
/**
* @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason or using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
function _revert(bytes memory returndata, string memory errorMessage) private pure {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
// File: @openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-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.
* - `deadline` must be a timestamp in the future.
* - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
* over the EIP712-formatted function arguments.
* - the signature must use ``owner``'s current nonce (see {nonces}).
*
* For more information on the signature format, see the
* https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
* section].
*/
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
/**
* @dev Returns the current nonce for `owner`. This value must be
* included whenever a signature is generated for {permit}.
*
* Every successful call to {permit} increases ``owner``'s nonce by one. This
* prevents a signature from being used multiple times.
*/
function nonces(address owner) external view returns (uint256);
/**
* @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
*/
// solhint-disable-next-line func-name-mixedcase
function DOMAIN_SEPARATOR() external view returns (bytes32);
}
// File: @openzeppelin/contracts/utils/Context.sol
// 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;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v4.6.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.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}
// File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)
pragma solidity ^0.8.0;
/**
* @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;
function safeTransfer(
IERC20 token,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(
IERC20 token,
address spender,
uint256 value
) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
require(
(value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
uint256 newAllowance = token.allowance(address(this), spender) + value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
uint256 newAllowance = oldAllowance - value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
}
function safePermit(
IERC20Permit token,
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) internal {
uint256 nonceBefore = token.nonces(owner);
token.permit(owner, spender, value, deadline, v, r, s);
uint256 nonceAfter = token.nonces(owner);
require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) {
// Return data is optional
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
// File: @openzeppelin/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
* applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* The default value of {decimals} is 18. To select a different value for
* {decimals} you should overload it.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5.05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {ERC20} uses, unless this function is
* overridden;
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address to, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_approve(owner, spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
* - the caller must have allowance for ``from``'s tokens of at least
* `amount`.
*/
function transferFrom(
address from,
address to,
uint256 amount
) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, allowance(owner, spender) + addedValue);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `from` to `to`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
*/
function _transfer(
address from,
address to,
uint256 amount
) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[from] = fromBalance - amount;
// Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
// decrementing then incrementing.
_balances[to] += amount;
}
emit Transfer(from, to, amount);
_afterTokenTransfer(from, to, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
unchecked {
// Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
_balances[account] += amount;
}
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
// Overflow not possible: amount <= accountBalance <= totalSupply.
_totalSupply -= amount;
}
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Updates `owner` s allowance for `spender` based on spent `amount`.
*
* Does not update the allowance amount in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Might emit an {Approval} event.
*/
function _spendAllowance(
address owner,
address spender,
uint256 amount
) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* has been transferred to `to`.
* - when `from` is zero, `amount` tokens have been minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens have been burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}
// File: src/xGND.sol
pragma solidity 0.8.12;
interface token is IERC20 {
function mint(address recipient, uint256 _amount) external;
function burn(address _from, uint256 _amount) external ;
}
interface staking {
function allocateVestRP(uint256 _pid, uint256 _amount, address _user) external;
function deallocateVestRP(uint256 _pid, uint256 _amount, address _user) external;
}
contract xGND is ERC20("xGND", "xGND"), Ownable , ReentrancyGuard{
token public GND;
staking public divContract;
constructor(token _token) {
GND = _token;
_mint(msg.sender, 38000e18);
}
using SafeERC20 for IERC20;
using SafeMath for uint256;
struct vestPosition {
uint256 totalVested;
uint256 lastInteractionTime;
uint256 VestPeriod;
}
mapping (address => vestPosition[]) public userInfo;
mapping (address => uint256) public userPositions;
uint256 public vestingPeriod = 200 days;
uint256 public shortVestingPeriod = 20 days;
function mint(address recipient, uint256 _amount) onlyOwner external {
_mint(recipient, _amount);
}
function burn(uint256 _amount) external {
_burn(msg.sender, _amount);
}
function remainTime(address _address, uint256 id) public view returns(uint256) {
uint256 timePass = block.timestamp.sub(userInfo[_address][id].lastInteractionTime);
uint256 remain;
if (timePass >= userInfo[msg.sender][id].VestPeriod){
remain = 0;
}
else {
remain = userInfo[msg.sender][id].VestPeriod- timePass;
}
return remain;
}
function vest(uint256 _amount) external nonReentrant {
require(this.balanceOf(msg.sender) >= _amount, "xGND balance too low");
userInfo[msg.sender].push(vestPosition({
totalVested: _amount,
lastInteractionTime: block.timestamp,
VestPeriod: vestingPeriod
}));
divContract.allocateVestRP(0, _amount.mul(100).div(200), msg.sender);
userPositions[msg.sender] += 1;
_burn(msg.sender, _amount);
}
function vestHalf(uint256 _amount) external nonReentrant {
require(this.balanceOf(msg.sender) >= _amount, "xGND balance too low");
userInfo[msg.sender].push(vestPosition({
totalVested: _amount.mul(100).div(200),
lastInteractionTime: block.timestamp,
VestPeriod: shortVestingPeriod
}));
divContract.allocateVestRP(0, _amount.mul(100).div(400), msg.sender);
userPositions[msg.sender] += 1;
_burn(msg.sender, _amount);
}
function lock(uint256 _amount) external nonReentrant {
require(GND.balanceOf(msg.sender) >= _amount, "GND balance too low");
uint256 amountOut = _amount;
_mint(msg.sender, amountOut);
GND.burn(msg.sender, _amount);
}
function claim(uint256 id) external nonReentrant {
require(remainTime(msg.sender, id) == 0, "vesting not end");
vestPosition storage position = userInfo[msg.sender][id];
uint256 claimAmount = position.totalVested;
position.totalVested = 0;
divContract.deallocateVestRP(0, claimAmount.mul(100).div(200), msg.sender);
GND.mint(msg.sender, claimAmount);
}
function updateStakers(staking _div) external onlyOwner {
divContract = _div;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract token","name":"_token","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"GND","outputs":[{"internalType":"contract token","name":"","type":"address"}],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"divContract","outputs":[{"internalType":"contract staking","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"remainTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shortVestingPeriod","outputs":[{"internalType":"uint256","name":"","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"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract staking","name":"_div","type":"address"}],"name":"updateStakers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"totalVested","type":"uint256"},{"internalType":"uint256","name":"lastInteractionTime","type":"uint256"},{"internalType":"uint256","name":"VestPeriod","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userPositions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"vest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"vestHalf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vestingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
6080604052630107ac00600b55621a5e00600c553480156200002057600080fd5b506040516200358d3803806200358d8339818101604052810190620000469190620004e6565b6040518060400160405280600481526020017f78474e44000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f78474e44000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000ca929190620003b8565b508060049080519060200190620000e3929190620003b8565b50505062000106620000fa6200017260201b60201c565b6200017a60201b60201c565b600160068190555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200016b3369080bfbefcb5f0bc000006200024060201b60201c565b50620006c4565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620002b3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002aa9062000579565b60405180910390fd5b620002c760008383620003ae60201b60201c565b8060026000828254620002db9190620005d4565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200038e919062000642565b60405180910390a3620003aa60008383620003b360201b60201c565b5050565b505050565b505050565b828054620003c6906200068e565b90600052602060002090601f016020900481019282620003ea576000855562000436565b82601f106200040557805160ff191683800117855562000436565b8280016001018555821562000436579182015b828111156200043557825182559160200191906001019062000418565b5b50905062000445919062000449565b5090565b5b80821115620004645760008160009055506001016200044a565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200049a826200046d565b9050919050565b6000620004ae826200048d565b9050919050565b620004c081620004a1565b8114620004cc57600080fd5b50565b600081519050620004e081620004b5565b92915050565b600060208284031215620004ff57620004fe62000468565b5b60006200050f84828501620004cf565b91505092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000561601f8362000518565b91506200056e8262000529565b602082019050919050565b60006020820190508181036000830152620005948162000552565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620005e1826200059b565b9150620005ee836200059b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620006265762000625620005a5565b5b828201905092915050565b6200063c816200059b565b82525050565b600060208201905062000659600083018462000631565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006a757607f821691505b60208210811415620006be57620006bd6200065f565b5b50919050565b612eb980620006d46000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c8063613cf420116100f9578063a457c2d711610097578063dd3dc92711610071578063dd3dc9271461051d578063dd4670641461053b578063dd62ed3e14610557578063f2fde38b14610587576101c4565b8063a457c2d7146104a1578063a9059cbb146104d1578063dac8296614610501576101c4565b8063715018a6116100d3578063715018a61461043d5780637313ee5a146104475780638da5cb5b1461046557806395d89b4114610483576101c4565b8063613cf420146103c15780636a760b80146103f157806370a082311461040d576101c4565b8063313ce567116101665780633950935111610140578063395093511461033b57806340c10f191461036b57806342966c6814610387578063442126da146103a3576101c4565b8063313ce567146102e357806335d9982514610301578063379607f51461031f576101c4565b806318160ddd116101a257806318160ddd146102475780631bd9c7261461026557806321ce919d1461028157806323b872dd146102b3576101c4565b8063060d21ba146101c957806306fdde03146101f9578063095ea7b314610217575b600080fd5b6101e360048036038101906101de9190611f8c565b6105a3565b6040516101f09190611fdb565b60405180910390f35b61020161070d565b60405161020e919061208f565b60405180910390f35b610231600480360381019061022c9190611f8c565b61079f565b60405161023e91906120cc565b60405180910390f35b61024f6107c2565b60405161025c9190611fdb565b60405180910390f35b61027f600480360381019061027a9190612125565b6107cc565b005b61029b60048036038101906102969190611f8c565b610818565b6040516102aa93929190612152565b60405180910390f35b6102cd60048036038101906102c89190612189565b61085f565b6040516102da91906120cc565b60405180910390f35b6102eb61088e565b6040516102f891906121f8565b60405180910390f35b610309610897565b6040516103169190612272565b60405180910390f35b6103396004803603810190610334919061228d565b6108bd565b005b61035560048036038101906103509190611f8c565b610adb565b60405161036291906120cc565b60405180910390f35b61038560048036038101906103809190611f8c565b610b12565b005b6103a1600480360381019061039c919061228d565b610b28565b005b6103ab610b35565b6040516103b89190611fdb565b60405180910390f35b6103db60048036038101906103d691906122ba565b610b3b565b6040516103e89190611fdb565b60405180910390f35b61040b6004803603810190610406919061228d565b610b53565b005b610427600480360381019061042291906122ba565b610de0565b6040516104349190611fdb565b60405180910390f35b610445610e28565b005b61044f610e3c565b60405161045c9190611fdb565b60405180910390f35b61046d610e42565b60405161047a91906122f6565b60405180910390f35b61048b610e6c565b604051610498919061208f565b60405180910390f35b6104bb60048036038101906104b69190611f8c565b610efe565b6040516104c891906120cc565b60405180910390f35b6104eb60048036038101906104e69190611f8c565b610f75565b6040516104f891906120cc565b60405180910390f35b61051b6004803603810190610516919061228d565b610f98565b005b61052561124c565b6040516105329190612332565b60405180910390f35b6105556004803603810190610550919061228d565b611272565b005b610571600480360381019061056c919061234d565b611402565b60405161057e9190611fdb565b60405180910390f35b6105a1600480360381019061059c91906122ba565b611489565b005b60008061061b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002084815481106105fa576105f961238d565b5b9060005260206000209060030201600101544261150d90919063ffffffff16565b90506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002084815481106106705761066f61238d565b5b90600052602060002090600302016002015482106106915760009050610702565b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002085815481106106e3576106e261238d565b5b9060005260206000209060030201600201546106ff91906123eb565b90505b809250505092915050565b60606003805461071c9061244e565b80601f01602080910402602001604051908101604052809291908181526020018280546107489061244e565b80156107955780601f1061076a57610100808354040283529160200191610795565b820191906000526020600020905b81548152906001019060200180831161077857829003601f168201915b5050505050905090565b6000806107aa611523565b90506107b781858561152b565b600191505092915050565b6000600254905090565b6107d46116f6565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6009602052816000526040600020818154811061083457600080fd5b9060005260206000209060030201600091509150508060000154908060010154908060020154905083565b60008061086a611523565b9050610877858285611774565b610882858585611800565b60019150509392505050565b60006012905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108c5611a78565b60006108d133836105a3565b14610911576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610908906124cc565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106109645761096361238d565b5b9060005260206000209060030201905060008160000154905060008260000181905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633ce5d62260006109ee60c86109e0606487611ac890919063ffffffff16565b611ade90919063ffffffff16565b336040518463ffffffff1660e01b8152600401610a0d93929190612527565b600060405180830381600087803b158015610a2757600080fd5b505af1158015610a3b573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933836040518363ffffffff1660e01b8152600401610a9c92919061255e565b600060405180830381600087803b158015610ab657600080fd5b505af1158015610aca573d6000803e3d6000fd5b505050505050610ad8611af4565b50565b600080610ae6611523565b9050610b07818585610af88589611402565b610b029190612587565b61152b565b600191505092915050565b610b1a6116f6565b610b248282611afe565b5050565b610b323382611c55565b50565b600c5481565b600a6020528060005260406000206000915090505481565b610b5b611a78565b803073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610b9591906122f6565b602060405180830381865afa158015610bb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd691906125f2565b1015610c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0e9061266b565b60405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405280838152602001428152602001600b5481525090806001815401808255809150506001900390600052602060002090600302016000909190919091506000820151816000015560208201518160010155604082015181600201555050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637b9342e76000610d2360c8610d15606487611ac890919063ffffffff16565b611ade90919063ffffffff16565b336040518463ffffffff1660e01b8152600401610d4293929190612527565b600060405180830381600087803b158015610d5c57600080fd5b505af1158015610d70573d6000803e3d6000fd5b505050506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610dc49190612587565b92505081905550610dd53382611c55565b610ddd611af4565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e306116f6565b610e3a6000611e23565b565b600b5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e7b9061244e565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea79061244e565b8015610ef45780601f10610ec957610100808354040283529160200191610ef4565b820191906000526020600020905b815481529060010190602001808311610ed757829003601f168201915b5050505050905090565b600080610f09611523565b90506000610f178286611402565b905083811015610f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f53906126fd565b60405180910390fd5b610f69828686840361152b565b60019250505092915050565b600080610f80611523565b9050610f8d818585611800565b600191505092915050565b610fa0611a78565b803073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610fda91906122f6565b602060405180830381865afa158015610ff7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101b91906125f2565b101561105c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110539061266b565b60405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180606001604052806110cd60c86110bf606487611ac890919063ffffffff16565b611ade90919063ffffffff16565b8152602001428152602001600c5481525090806001815401808255809150506001900390600052602060002090600302016000909190919091506000820151816000015560208201518160010155604082015181600201555050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637b9342e7600061118f610190611181606487611ac890919063ffffffff16565b611ade90919063ffffffff16565b336040518463ffffffff1660e01b81526004016111ae93929190612527565b600060405180830381600087803b1580156111c857600080fd5b505af11580156111dc573d6000803e3d6000fd5b505050506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112309190612587565b925050819055506112413382611c55565b611249611af4565b50565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61127a611a78565b80600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016112d691906122f6565b602060405180830381865afa1580156112f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131791906125f2565b1015611358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134f90612769565b60405180910390fd5b60008190506113673382611afe565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33846040518363ffffffff1660e01b81526004016113c492919061255e565b600060405180830381600087803b1580156113de57600080fd5b505af11580156113f2573d6000803e3d6000fd5b50505050506113ff611af4565b50565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6114916116f6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f8906127fb565b60405180910390fd5b61150a81611e23565b50565b6000818361151b91906123eb565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561159b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115929061288d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561160b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116029061291f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116e99190611fdb565b60405180910390a3505050565b6116fe611523565b73ffffffffffffffffffffffffffffffffffffffff1661171c610e42565b73ffffffffffffffffffffffffffffffffffffffff1614611772576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117699061298b565b60405180910390fd5b565b60006117808484611402565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146117fa57818110156117ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e3906129f7565b60405180910390fd5b6117f9848484840361152b565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186790612a89565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d790612b1b565b60405180910390fd5b6118eb838383611ee9565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196890612bad565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a5f9190611fdb565b60405180910390a3611a72848484611eee565b50505050565b60026006541415611abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab590612c19565b60405180910390fd5b6002600681905550565b60008183611ad69190612c39565b905092915050565b60008183611aec9190612cc2565b905092915050565b6001600681905550565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6590612d3f565b60405180910390fd5b611b7a60008383611ee9565b8060026000828254611b8c9190612587565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611c3d9190611fdb565b60405180910390a3611c5160008383611eee565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbc90612dd1565b60405180910390fd5b611cd182600083611ee9565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4e90612e63565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e0a9190611fdb565b60405180910390a3611e1e83600084611eee565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611f2382611ef8565b9050919050565b611f3381611f18565b8114611f3e57600080fd5b50565b600081359050611f5081611f2a565b92915050565b6000819050919050565b611f6981611f56565b8114611f7457600080fd5b50565b600081359050611f8681611f60565b92915050565b60008060408385031215611fa357611fa2611ef3565b5b6000611fb185828601611f41565b9250506020611fc285828601611f77565b9150509250929050565b611fd581611f56565b82525050565b6000602082019050611ff06000830184611fcc565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612030578082015181840152602081019050612015565b8381111561203f576000848401525b50505050565b6000601f19601f8301169050919050565b600061206182611ff6565b61206b8185612001565b935061207b818560208601612012565b61208481612045565b840191505092915050565b600060208201905081810360008301526120a98184612056565b905092915050565b60008115159050919050565b6120c6816120b1565b82525050565b60006020820190506120e160008301846120bd565b92915050565b60006120f282611f18565b9050919050565b612102816120e7565b811461210d57600080fd5b50565b60008135905061211f816120f9565b92915050565b60006020828403121561213b5761213a611ef3565b5b600061214984828501612110565b91505092915050565b60006060820190506121676000830186611fcc565b6121746020830185611fcc565b6121816040830184611fcc565b949350505050565b6000806000606084860312156121a2576121a1611ef3565b5b60006121b086828701611f41565b93505060206121c186828701611f41565b92505060406121d286828701611f77565b9150509250925092565b600060ff82169050919050565b6121f2816121dc565b82525050565b600060208201905061220d60008301846121e9565b92915050565b6000819050919050565b600061223861223361222e84611ef8565b612213565b611ef8565b9050919050565b600061224a8261221d565b9050919050565b600061225c8261223f565b9050919050565b61226c81612251565b82525050565b60006020820190506122876000830184612263565b92915050565b6000602082840312156122a3576122a2611ef3565b5b60006122b184828501611f77565b91505092915050565b6000602082840312156122d0576122cf611ef3565b5b60006122de84828501611f41565b91505092915050565b6122f081611f18565b82525050565b600060208201905061230b60008301846122e7565b92915050565b600061231c8261223f565b9050919050565b61232c81612311565b82525050565b60006020820190506123476000830184612323565b92915050565b6000806040838503121561236457612363611ef3565b5b600061237285828601611f41565b925050602061238385828601611f41565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006123f682611f56565b915061240183611f56565b925082821015612414576124136123bc565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061246657607f821691505b6020821081141561247a5761247961241f565b5b50919050565b7f76657374696e67206e6f7420656e640000000000000000000000000000000000600082015250565b60006124b6600f83612001565b91506124c182612480565b602082019050919050565b600060208201905081810360008301526124e5816124a9565b9050919050565b6000819050919050565b600061251161250c612507846124ec565b612213565b611f56565b9050919050565b612521816124f6565b82525050565b600060608201905061253c6000830186612518565b6125496020830185611fcc565b61255660408301846122e7565b949350505050565b600060408201905061257360008301856122e7565b6125806020830184611fcc565b9392505050565b600061259282611f56565b915061259d83611f56565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156125d2576125d16123bc565b5b828201905092915050565b6000815190506125ec81611f60565b92915050565b60006020828403121561260857612607611ef3565b5b6000612616848285016125dd565b91505092915050565b7f78474e442062616c616e636520746f6f206c6f77000000000000000000000000600082015250565b6000612655601483612001565b91506126608261261f565b602082019050919050565b6000602082019050818103600083015261268481612648565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006126e7602583612001565b91506126f28261268b565b604082019050919050565b60006020820190508181036000830152612716816126da565b9050919050565b7f474e442062616c616e636520746f6f206c6f7700000000000000000000000000600082015250565b6000612753601383612001565b915061275e8261271d565b602082019050919050565b6000602082019050818103600083015261278281612746565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006127e5602683612001565b91506127f082612789565b604082019050919050565b60006020820190508181036000830152612814816127d8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612877602483612001565b91506128828261281b565b604082019050919050565b600060208201905081810360008301526128a68161286a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612909602283612001565b9150612914826128ad565b604082019050919050565b60006020820190508181036000830152612938816128fc565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612975602083612001565b91506129808261293f565b602082019050919050565b600060208201905081810360008301526129a481612968565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006129e1601d83612001565b91506129ec826129ab565b602082019050919050565b60006020820190508181036000830152612a10816129d4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612a73602583612001565b9150612a7e82612a17565b604082019050919050565b60006020820190508181036000830152612aa281612a66565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612b05602383612001565b9150612b1082612aa9565b604082019050919050565b60006020820190508181036000830152612b3481612af8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612b97602683612001565b9150612ba282612b3b565b604082019050919050565b60006020820190508181036000830152612bc681612b8a565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000612c03601f83612001565b9150612c0e82612bcd565b602082019050919050565b60006020820190508181036000830152612c3281612bf6565b9050919050565b6000612c4482611f56565b9150612c4f83611f56565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c8857612c876123bc565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612ccd82611f56565b9150612cd883611f56565b925082612ce857612ce7612c93565b5b828204905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612d29601f83612001565b9150612d3482612cf3565b602082019050919050565b60006020820190508181036000830152612d5881612d1c565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612dbb602183612001565b9150612dc682612d5f565b604082019050919050565b60006020820190508181036000830152612dea81612dae565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000612e4d602283612001565b9150612e5882612df1565b604082019050919050565b60006020820190508181036000830152612e7c81612e40565b905091905056fea2646970667358221220f9afb9d74c7f83575da858856c13090ad0c203fd4100120992d4718182982d7664736f6c634300080c0033000000000000000000000000d67a097dce9d4474737e6871684ae3c05460f571
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101c45760003560e01c8063613cf420116100f9578063a457c2d711610097578063dd3dc92711610071578063dd3dc9271461051d578063dd4670641461053b578063dd62ed3e14610557578063f2fde38b14610587576101c4565b8063a457c2d7146104a1578063a9059cbb146104d1578063dac8296614610501576101c4565b8063715018a6116100d3578063715018a61461043d5780637313ee5a146104475780638da5cb5b1461046557806395d89b4114610483576101c4565b8063613cf420146103c15780636a760b80146103f157806370a082311461040d576101c4565b8063313ce567116101665780633950935111610140578063395093511461033b57806340c10f191461036b57806342966c6814610387578063442126da146103a3576101c4565b8063313ce567146102e357806335d9982514610301578063379607f51461031f576101c4565b806318160ddd116101a257806318160ddd146102475780631bd9c7261461026557806321ce919d1461028157806323b872dd146102b3576101c4565b8063060d21ba146101c957806306fdde03146101f9578063095ea7b314610217575b600080fd5b6101e360048036038101906101de9190611f8c565b6105a3565b6040516101f09190611fdb565b60405180910390f35b61020161070d565b60405161020e919061208f565b60405180910390f35b610231600480360381019061022c9190611f8c565b61079f565b60405161023e91906120cc565b60405180910390f35b61024f6107c2565b60405161025c9190611fdb565b60405180910390f35b61027f600480360381019061027a9190612125565b6107cc565b005b61029b60048036038101906102969190611f8c565b610818565b6040516102aa93929190612152565b60405180910390f35b6102cd60048036038101906102c89190612189565b61085f565b6040516102da91906120cc565b60405180910390f35b6102eb61088e565b6040516102f891906121f8565b60405180910390f35b610309610897565b6040516103169190612272565b60405180910390f35b6103396004803603810190610334919061228d565b6108bd565b005b61035560048036038101906103509190611f8c565b610adb565b60405161036291906120cc565b60405180910390f35b61038560048036038101906103809190611f8c565b610b12565b005b6103a1600480360381019061039c919061228d565b610b28565b005b6103ab610b35565b6040516103b89190611fdb565b60405180910390f35b6103db60048036038101906103d691906122ba565b610b3b565b6040516103e89190611fdb565b60405180910390f35b61040b6004803603810190610406919061228d565b610b53565b005b610427600480360381019061042291906122ba565b610de0565b6040516104349190611fdb565b60405180910390f35b610445610e28565b005b61044f610e3c565b60405161045c9190611fdb565b60405180910390f35b61046d610e42565b60405161047a91906122f6565b60405180910390f35b61048b610e6c565b604051610498919061208f565b60405180910390f35b6104bb60048036038101906104b69190611f8c565b610efe565b6040516104c891906120cc565b60405180910390f35b6104eb60048036038101906104e69190611f8c565b610f75565b6040516104f891906120cc565b60405180910390f35b61051b6004803603810190610516919061228d565b610f98565b005b61052561124c565b6040516105329190612332565b60405180910390f35b6105556004803603810190610550919061228d565b611272565b005b610571600480360381019061056c919061234d565b611402565b60405161057e9190611fdb565b60405180910390f35b6105a1600480360381019061059c91906122ba565b611489565b005b60008061061b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002084815481106105fa576105f961238d565b5b9060005260206000209060030201600101544261150d90919063ffffffff16565b90506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002084815481106106705761066f61238d565b5b90600052602060002090600302016002015482106106915760009050610702565b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002085815481106106e3576106e261238d565b5b9060005260206000209060030201600201546106ff91906123eb565b90505b809250505092915050565b60606003805461071c9061244e565b80601f01602080910402602001604051908101604052809291908181526020018280546107489061244e565b80156107955780601f1061076a57610100808354040283529160200191610795565b820191906000526020600020905b81548152906001019060200180831161077857829003601f168201915b5050505050905090565b6000806107aa611523565b90506107b781858561152b565b600191505092915050565b6000600254905090565b6107d46116f6565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6009602052816000526040600020818154811061083457600080fd5b9060005260206000209060030201600091509150508060000154908060010154908060020154905083565b60008061086a611523565b9050610877858285611774565b610882858585611800565b60019150509392505050565b60006012905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108c5611a78565b60006108d133836105a3565b14610911576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610908906124cc565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106109645761096361238d565b5b9060005260206000209060030201905060008160000154905060008260000181905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633ce5d62260006109ee60c86109e0606487611ac890919063ffffffff16565b611ade90919063ffffffff16565b336040518463ffffffff1660e01b8152600401610a0d93929190612527565b600060405180830381600087803b158015610a2757600080fd5b505af1158015610a3b573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933836040518363ffffffff1660e01b8152600401610a9c92919061255e565b600060405180830381600087803b158015610ab657600080fd5b505af1158015610aca573d6000803e3d6000fd5b505050505050610ad8611af4565b50565b600080610ae6611523565b9050610b07818585610af88589611402565b610b029190612587565b61152b565b600191505092915050565b610b1a6116f6565b610b248282611afe565b5050565b610b323382611c55565b50565b600c5481565b600a6020528060005260406000206000915090505481565b610b5b611a78565b803073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610b9591906122f6565b602060405180830381865afa158015610bb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd691906125f2565b1015610c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0e9061266b565b60405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405280838152602001428152602001600b5481525090806001815401808255809150506001900390600052602060002090600302016000909190919091506000820151816000015560208201518160010155604082015181600201555050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637b9342e76000610d2360c8610d15606487611ac890919063ffffffff16565b611ade90919063ffffffff16565b336040518463ffffffff1660e01b8152600401610d4293929190612527565b600060405180830381600087803b158015610d5c57600080fd5b505af1158015610d70573d6000803e3d6000fd5b505050506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610dc49190612587565b92505081905550610dd53382611c55565b610ddd611af4565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e306116f6565b610e3a6000611e23565b565b600b5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e7b9061244e565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea79061244e565b8015610ef45780601f10610ec957610100808354040283529160200191610ef4565b820191906000526020600020905b815481529060010190602001808311610ed757829003601f168201915b5050505050905090565b600080610f09611523565b90506000610f178286611402565b905083811015610f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f53906126fd565b60405180910390fd5b610f69828686840361152b565b60019250505092915050565b600080610f80611523565b9050610f8d818585611800565b600191505092915050565b610fa0611a78565b803073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610fda91906122f6565b602060405180830381865afa158015610ff7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101b91906125f2565b101561105c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110539061266b565b60405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180606001604052806110cd60c86110bf606487611ac890919063ffffffff16565b611ade90919063ffffffff16565b8152602001428152602001600c5481525090806001815401808255809150506001900390600052602060002090600302016000909190919091506000820151816000015560208201518160010155604082015181600201555050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637b9342e7600061118f610190611181606487611ac890919063ffffffff16565b611ade90919063ffffffff16565b336040518463ffffffff1660e01b81526004016111ae93929190612527565b600060405180830381600087803b1580156111c857600080fd5b505af11580156111dc573d6000803e3d6000fd5b505050506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112309190612587565b925050819055506112413382611c55565b611249611af4565b50565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61127a611a78565b80600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016112d691906122f6565b602060405180830381865afa1580156112f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131791906125f2565b1015611358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134f90612769565b60405180910390fd5b60008190506113673382611afe565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33846040518363ffffffff1660e01b81526004016113c492919061255e565b600060405180830381600087803b1580156113de57600080fd5b505af11580156113f2573d6000803e3d6000fd5b50505050506113ff611af4565b50565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6114916116f6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f8906127fb565b60405180910390fd5b61150a81611e23565b50565b6000818361151b91906123eb565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561159b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115929061288d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561160b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116029061291f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116e99190611fdb565b60405180910390a3505050565b6116fe611523565b73ffffffffffffffffffffffffffffffffffffffff1661171c610e42565b73ffffffffffffffffffffffffffffffffffffffff1614611772576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117699061298b565b60405180910390fd5b565b60006117808484611402565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146117fa57818110156117ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e3906129f7565b60405180910390fd5b6117f9848484840361152b565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186790612a89565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d790612b1b565b60405180910390fd5b6118eb838383611ee9565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196890612bad565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a5f9190611fdb565b60405180910390a3611a72848484611eee565b50505050565b60026006541415611abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab590612c19565b60405180910390fd5b6002600681905550565b60008183611ad69190612c39565b905092915050565b60008183611aec9190612cc2565b905092915050565b6001600681905550565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6590612d3f565b60405180910390fd5b611b7a60008383611ee9565b8060026000828254611b8c9190612587565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611c3d9190611fdb565b60405180910390a3611c5160008383611eee565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbc90612dd1565b60405180910390fd5b611cd182600083611ee9565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4e90612e63565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e0a9190611fdb565b60405180910390a3611e1e83600084611eee565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611f2382611ef8565b9050919050565b611f3381611f18565b8114611f3e57600080fd5b50565b600081359050611f5081611f2a565b92915050565b6000819050919050565b611f6981611f56565b8114611f7457600080fd5b50565b600081359050611f8681611f60565b92915050565b60008060408385031215611fa357611fa2611ef3565b5b6000611fb185828601611f41565b9250506020611fc285828601611f77565b9150509250929050565b611fd581611f56565b82525050565b6000602082019050611ff06000830184611fcc565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612030578082015181840152602081019050612015565b8381111561203f576000848401525b50505050565b6000601f19601f8301169050919050565b600061206182611ff6565b61206b8185612001565b935061207b818560208601612012565b61208481612045565b840191505092915050565b600060208201905081810360008301526120a98184612056565b905092915050565b60008115159050919050565b6120c6816120b1565b82525050565b60006020820190506120e160008301846120bd565b92915050565b60006120f282611f18565b9050919050565b612102816120e7565b811461210d57600080fd5b50565b60008135905061211f816120f9565b92915050565b60006020828403121561213b5761213a611ef3565b5b600061214984828501612110565b91505092915050565b60006060820190506121676000830186611fcc565b6121746020830185611fcc565b6121816040830184611fcc565b949350505050565b6000806000606084860312156121a2576121a1611ef3565b5b60006121b086828701611f41565b93505060206121c186828701611f41565b92505060406121d286828701611f77565b9150509250925092565b600060ff82169050919050565b6121f2816121dc565b82525050565b600060208201905061220d60008301846121e9565b92915050565b6000819050919050565b600061223861223361222e84611ef8565b612213565b611ef8565b9050919050565b600061224a8261221d565b9050919050565b600061225c8261223f565b9050919050565b61226c81612251565b82525050565b60006020820190506122876000830184612263565b92915050565b6000602082840312156122a3576122a2611ef3565b5b60006122b184828501611f77565b91505092915050565b6000602082840312156122d0576122cf611ef3565b5b60006122de84828501611f41565b91505092915050565b6122f081611f18565b82525050565b600060208201905061230b60008301846122e7565b92915050565b600061231c8261223f565b9050919050565b61232c81612311565b82525050565b60006020820190506123476000830184612323565b92915050565b6000806040838503121561236457612363611ef3565b5b600061237285828601611f41565b925050602061238385828601611f41565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006123f682611f56565b915061240183611f56565b925082821015612414576124136123bc565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061246657607f821691505b6020821081141561247a5761247961241f565b5b50919050565b7f76657374696e67206e6f7420656e640000000000000000000000000000000000600082015250565b60006124b6600f83612001565b91506124c182612480565b602082019050919050565b600060208201905081810360008301526124e5816124a9565b9050919050565b6000819050919050565b600061251161250c612507846124ec565b612213565b611f56565b9050919050565b612521816124f6565b82525050565b600060608201905061253c6000830186612518565b6125496020830185611fcc565b61255660408301846122e7565b949350505050565b600060408201905061257360008301856122e7565b6125806020830184611fcc565b9392505050565b600061259282611f56565b915061259d83611f56565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156125d2576125d16123bc565b5b828201905092915050565b6000815190506125ec81611f60565b92915050565b60006020828403121561260857612607611ef3565b5b6000612616848285016125dd565b91505092915050565b7f78474e442062616c616e636520746f6f206c6f77000000000000000000000000600082015250565b6000612655601483612001565b91506126608261261f565b602082019050919050565b6000602082019050818103600083015261268481612648565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006126e7602583612001565b91506126f28261268b565b604082019050919050565b60006020820190508181036000830152612716816126da565b9050919050565b7f474e442062616c616e636520746f6f206c6f7700000000000000000000000000600082015250565b6000612753601383612001565b915061275e8261271d565b602082019050919050565b6000602082019050818103600083015261278281612746565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006127e5602683612001565b91506127f082612789565b604082019050919050565b60006020820190508181036000830152612814816127d8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612877602483612001565b91506128828261281b565b604082019050919050565b600060208201905081810360008301526128a68161286a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612909602283612001565b9150612914826128ad565b604082019050919050565b60006020820190508181036000830152612938816128fc565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612975602083612001565b91506129808261293f565b602082019050919050565b600060208201905081810360008301526129a481612968565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006129e1601d83612001565b91506129ec826129ab565b602082019050919050565b60006020820190508181036000830152612a10816129d4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612a73602583612001565b9150612a7e82612a17565b604082019050919050565b60006020820190508181036000830152612aa281612a66565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612b05602383612001565b9150612b1082612aa9565b604082019050919050565b60006020820190508181036000830152612b3481612af8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612b97602683612001565b9150612ba282612b3b565b604082019050919050565b60006020820190508181036000830152612bc681612b8a565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000612c03601f83612001565b9150612c0e82612bcd565b602082019050919050565b60006020820190508181036000830152612c3281612bf6565b9050919050565b6000612c4482611f56565b9150612c4f83611f56565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c8857612c876123bc565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612ccd82611f56565b9150612cd883611f56565b925082612ce857612ce7612c93565b5b828204905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612d29601f83612001565b9150612d3482612cf3565b602082019050919050565b60006020820190508181036000830152612d5881612d1c565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612dbb602183612001565b9150612dc682612d5f565b604082019050919050565b60006020820190508181036000830152612dea81612dae565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000612e4d602283612001565b9150612e5882612df1565b604082019050919050565b60006020820190508181036000830152612e7c81612e40565b905091905056fea2646970667358221220f9afb9d74c7f83575da858856c13090ad0c203fd4100120992d4718182982d7664736f6c634300080c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d67a097dce9d4474737e6871684ae3c05460f571
-----Decoded View---------------
Arg [0] : _token (address): 0xD67A097dCE9d4474737e6871684aE3c05460F571
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000d67a097dce9d4474737e6871684ae3c05460f571
Deployed Bytecode Sourcemap
47248:3126:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48122:424;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35635:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37986:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36755:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50276:93;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47683:51;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;38767:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36597:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47344:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49855:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39471:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47898:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48028:86;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47845:43;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47741:49;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48556:495;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36926:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24556:103;;;:::i;:::-;;47799:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23908:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35854:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40212:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37259:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49058:522;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47321:16;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49588:259;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37515:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24814:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48122:424;48192:7;48212:16;48231:63;48251:8;:18;48260:8;48251:18;;;;;;;;;;;;;;;48270:2;48251:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:42;;;48231:15;:19;;:63;;;;:::i;:::-;48212:82;;48305:14;48346:8;:20;48355:10;48346:20;;;;;;;;;;;;;;;48367:2;48346:24;;;;;;;;:::i;:::-;;;;;;;;;;;;:35;;;48334:8;:47;48330:185;;48406:1;48397:10;;48330:185;;;48495:8;48458;:20;48467:10;48458:20;;;;;;;;;;;;;;;48479:2;48458:24;;;;;;;;:::i;:::-;;;;;;;;;;;;:35;;;:45;;;;:::i;:::-;48449:54;;48330:185;48532:6;48525:13;;;;48122:424;;;;:::o;35635:100::-;35689:13;35722:5;35715:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35635:100;:::o;37986:201::-;38069:4;38086:13;38102:12;:10;:12::i;:::-;38086:28;;38125:32;38134:5;38141:7;38150:6;38125:8;:32::i;:::-;38175:4;38168:11;;;37986:201;;;;:::o;36755:108::-;36816:7;36843:12;;36836:19;;36755:108;:::o;50276:93::-;23794:13;:11;:13::i;:::-;50357:4:::1;50343:11;;:18;;;;;;;;;;;;;;;;;;50276:93:::0;:::o;47683:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38767:295::-;38898:4;38915:15;38933:12;:10;:12::i;:::-;38915:30;;38956:38;38972:4;38978:7;38987:6;38956:15;:38::i;:::-;39005:27;39015:4;39021:2;39025:6;39005:9;:27::i;:::-;39050:4;39043:11;;;38767:295;;;;;:::o;36597:93::-;36655:5;36680:2;36673:9;;36597:93;:::o;47344:26::-;;;;;;;;;;;;;:::o;49855:413::-;2345:21;:19;:21::i;:::-;49955:1:::1;49925:26;49936:10;49948:2;49925:10;:26::i;:::-;:31;49917:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;49987:29;50019:8;:20;50028:10;50019:20;;;;;;;;;;;;;;;50040:2;50019:24;;;;;;;;:::i;:::-;;;;;;;;;;;;49987:56;;50054:19;50076:8;:20;;;50054:42;;50130:1;50107:8;:20;;:24;;;;50142:11;;;;;;;;;;;:28;;;50171:1;50174:29;50199:3;50174:20;50190:3;50174:11;:15;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;50205:10;50142:74;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;50227:3;;;;;;;;;;;:8;;;50236:10;50248:11;50227:33;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;49904:364;;2389:20:::0;:18;:20::i;:::-;49855:413;:::o;39471:238::-;39559:4;39576:13;39592:12;:10;:12::i;:::-;39576:28;;39615:64;39624:5;39631:7;39668:10;39640:25;39650:5;39657:7;39640:9;:25::i;:::-;:38;;;;:::i;:::-;39615:8;:64::i;:::-;39697:4;39690:11;;;39471:238;;;;:::o;47898:122::-;23794:13;:11;:13::i;:::-;47985:25:::1;47991:9;48002:7;47985:5;:25::i;:::-;47898:122:::0;;:::o;48028:86::-;48080:26;48086:10;48098:7;48080:5;:26::i;:::-;48028:86;:::o;47845:43::-;;;;:::o;47741:49::-;;;;;;;;;;;;;;;;;:::o;48556:495::-;2345:21;:19;:21::i;:::-;48660:7:::1;48630:4;:14;;;48645:10;48630:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;;48622:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;48705:8;:20;48714:10;48705:20;;;;;;;;;;;;;;;48731:151;;;;;;;;48772:7;48731:151;;;;48815:15;48731:151;;;;48857:13;;48731:151;;::::0;48705:178:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48896:11;;;;;;;;;;;:26;;;48923:1;48926:25;48947:3;48926:16;48938:3;48926:7;:11;;:16;;;;:::i;:::-;:20;;:25;;;;:::i;:::-;48953:10;48896:68;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;49004:1;48975:13;:25;48989:10;48975:25;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;49017:26;49023:10;49035:7;49017:5;:26::i;:::-;2389:20:::0;:18;:20::i;:::-;48556:495;:::o;36926:127::-;37000:7;37027:9;:18;37037:7;37027:18;;;;;;;;;;;;;;;;37020:25;;36926:127;;;:::o;24556:103::-;23794:13;:11;:13::i;:::-;24621:30:::1;24648:1;24621:18;:30::i;:::-;24556:103::o:0;47799:39::-;;;;:::o;23908:87::-;23954:7;23981:6;;;;;;;;;;;23974:13;;23908:87;:::o;35854:104::-;35910:13;35943:7;35936:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35854:104;:::o;40212:436::-;40305:4;40322:13;40338:12;:10;:12::i;:::-;40322:28;;40361:24;40388:25;40398:5;40405:7;40388:9;:25::i;:::-;40361:52;;40452:15;40432:16;:35;;40424:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40545:60;40554:5;40561:7;40589:15;40570:16;:34;40545:8;:60::i;:::-;40636:4;40629:11;;;;40212:436;;;;:::o;37259:193::-;37338:4;37355:13;37371:12;:10;:12::i;:::-;37355:28;;37394;37404:5;37411:2;37415:6;37394:9;:28::i;:::-;37440:4;37433:11;;;37259:193;;;;:::o;49058:522::-;2345:21;:19;:21::i;:::-;49166:7:::1;49136:4;:14;;;49151:10;49136:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;;49128:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;49211:8;:20;49220:10;49211:20;;;;;;;;;;;;;;;49237:174;;;;;;;;49278:25;49299:3;49278:16;49290:3;49278:7;:11;;:16;;;;:::i;:::-;:20;;:25;;;;:::i;:::-;49237:174;;;;49339:15;49237:174;;;;49381:18;;49237:174;;::::0;49211:201:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49425:11;;;;;;;;;;;:26;;;49452:1;49455:25;49476:3;49455:16;49467:3;49455:7;:11;;:16;;;;:::i;:::-;:20;;:25;;;;:::i;:::-;49482:10;49425:68;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;49533:1;49504:13;:25;49518:10;49504:25;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;49546:26;49552:10;49564:7;49546:5;:26::i;:::-;2389:20:::0;:18;:20::i;:::-;49058:522;:::o;47321:16::-;;;;;;;;;;;;;:::o;49588:259::-;2345:21;:19;:21::i;:::-;49691:7:::1;49662:3;;;;;;;;;;;:13;;;49676:10;49662:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;;49654:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49733:17;49753:7;49733:27;;49771:28;49777:10;49789:9;49771:5;:28::i;:::-;49810:3;;;;;;;;;;;:8;;;49819:10;49831:7;49810:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;49641:206;2389:20:::0;:18;:20::i;:::-;49588:259;:::o;37515:151::-;37604:7;37631:11;:18;37643:5;37631:18;;;;;;;;;;;;;;;:27;37650:7;37631:27;;;;;;;;;;;;;;;;37624:34;;37515:151;;;;:::o;24814:201::-;23794:13;:11;:13::i;:::-;24923:1:::1;24903:22;;:8;:22;;;;24895:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24979:28;24998:8;24979:18;:28::i;:::-;24814:201:::0;:::o;6203:98::-;6261:7;6292:1;6288;:5;;;;:::i;:::-;6281:12;;6203:98;;;;:::o;22459:::-;22512:7;22539:10;22532:17;;22459:98;:::o;44239:380::-;44392:1;44375:19;;:5;:19;;;;44367:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44473:1;44454:21;;:7;:21;;;;44446:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44557:6;44527:11;:18;44539:5;44527:18;;;;;;;;;;;;;;;:27;44546:7;44527:27;;;;;;;;;;;;;;;:36;;;;44595:7;44579:32;;44588:5;44579:32;;;44604:6;44579:32;;;;;;:::i;:::-;;;;;;;;44239:380;;;:::o;24073:132::-;24148:12;:10;:12::i;:::-;24137:23;;:7;:5;:7::i;:::-;:23;;;24129:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24073:132::o;44910:453::-;45045:24;45072:25;45082:5;45089:7;45072:9;:25::i;:::-;45045:52;;45132:17;45112:16;:37;45108:248;;45194:6;45174:16;:26;;45166:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45278:51;45287:5;45294:7;45322:6;45303:16;:25;45278:8;:51::i;:::-;45108:248;45034:329;44910:453;;;:::o;41118:840::-;41265:1;41249:18;;:4;:18;;;;41241:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41342:1;41328:16;;:2;:16;;;;41320:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41397:38;41418:4;41424:2;41428:6;41397:20;:38::i;:::-;41448:19;41470:9;:15;41480:4;41470:15;;;;;;;;;;;;;;;;41448:37;;41519:6;41504:11;:21;;41496:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;41636:6;41622:11;:20;41604:9;:15;41614:4;41604:15;;;;;;;;;;;;;;;:38;;;;41839:6;41822:9;:13;41832:2;41822:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;41889:2;41874:26;;41883:4;41874:26;;;41893:6;41874:26;;;;;;:::i;:::-;;;;;;;;41913:37;41933:4;41939:2;41943:6;41913:19;:37::i;:::-;41230:728;41118:840;;;:::o;2425:293::-;1827:1;2559:7;;:19;;2551:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1827:1;2692:7;:18;;;;2425:293::o;6560:98::-;6618:7;6649:1;6645;:5;;;;:::i;:::-;6638:12;;6560:98;;;;:::o;6959:::-;7017:7;7048:1;7044;:5;;;;:::i;:::-;7037:12;;6959:98;;;;:::o;2726:213::-;1783:1;2909:7;:22;;;;2726:213::o;42245:548::-;42348:1;42329:21;;:7;:21;;;;42321:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;42399:49;42428:1;42432:7;42441:6;42399:20;:49::i;:::-;42477:6;42461:12;;:22;;;;;;;:::i;:::-;;;;;;;;42654:6;42632:9;:18;42642:7;42632:18;;;;;;;;;;;;;;;;:28;;;;;;;;;;;42708:7;42687:37;;42704:1;42687:37;;;42717:6;42687:37;;;;;;:::i;:::-;;;;;;;;42737:48;42765:1;42769:7;42778:6;42737:19;:48::i;:::-;42245:548;;:::o;43126:675::-;43229:1;43210:21;;:7;:21;;;;43202:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43282:49;43303:7;43320:1;43324:6;43282:20;:49::i;:::-;43344:22;43369:9;:18;43379:7;43369:18;;;;;;;;;;;;;;;;43344:43;;43424:6;43406:14;:24;;43398:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;43543:6;43526:14;:23;43505:9;:18;43515:7;43505:18;;;;;;;;;;;;;;;:44;;;;43660:6;43644:12;;:22;;;;;;;;;;;43721:1;43695:37;;43704:7;43695:37;;;43725:6;43695:37;;;;;;:::i;:::-;;;;;;;;43745:48;43765:7;43782:1;43786:6;43745:19;:48::i;:::-;43191:610;43126:675;;:::o;25175:191::-;25249:16;25268:6;;;;;;;;;;;25249:25;;25294:8;25285:6;;:17;;;;;;;;;;;;;;;;;;25349:8;25318:40;;25339:8;25318:40;;;;;;;;;;;;25238:128;25175:191;:::o;45963:125::-;;;;:::o;46692:124::-;;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:99::-;2081:6;2115:5;2109:12;2099:22;;2029:99;;;:::o;2134:169::-;2218:11;2252:6;2247:3;2240:19;2292:4;2287:3;2283:14;2268:29;;2134:169;;;;:::o;2309:307::-;2377:1;2387:113;2401:6;2398:1;2395:13;2387:113;;;2486:1;2481:3;2477:11;2471:18;2467:1;2462:3;2458:11;2451:39;2423:2;2420:1;2416:10;2411:15;;2387:113;;;2518:6;2515:1;2512:13;2509:101;;;2598:1;2589:6;2584:3;2580:16;2573:27;2509:101;2358:258;2309:307;;;:::o;2622:102::-;2663:6;2714:2;2710:7;2705:2;2698:5;2694:14;2690:28;2680:38;;2622:102;;;:::o;2730:364::-;2818:3;2846:39;2879:5;2846:39;:::i;:::-;2901:71;2965:6;2960:3;2901:71;:::i;:::-;2894:78;;2981:52;3026:6;3021:3;3014:4;3007:5;3003:16;2981:52;:::i;:::-;3058:29;3080:6;3058:29;:::i;:::-;3053:3;3049:39;3042:46;;2822:272;2730:364;;;;:::o;3100:313::-;3213:4;3251:2;3240:9;3236:18;3228:26;;3300:9;3294:4;3290:20;3286:1;3275:9;3271:17;3264:47;3328:78;3401:4;3392:6;3328:78;:::i;:::-;3320:86;;3100:313;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:112::-;3899:7;3928:24;3946:5;3928:24;:::i;:::-;3917:35;;3846:112;;;:::o;3964:154::-;4053:40;4087:5;4053:40;:::i;:::-;4046:5;4043:51;4033:79;;4108:1;4105;4098:12;4033:79;3964:154;:::o;4124:171::-;4186:5;4224:6;4211:20;4202:29;;4240:49;4283:5;4240:49;:::i;:::-;4124:171;;;;:::o;4301:361::-;4376:6;4425:2;4413:9;4404:7;4400:23;4396:32;4393:119;;;4431:79;;:::i;:::-;4393:119;4551:1;4576:69;4637:7;4628:6;4617:9;4613:22;4576:69;:::i;:::-;4566:79;;4522:133;4301:361;;;;:::o;4668:442::-;4817:4;4855:2;4844:9;4840:18;4832:26;;4868:71;4936:1;4925:9;4921:17;4912:6;4868:71;:::i;:::-;4949:72;5017:2;5006:9;5002:18;4993:6;4949:72;:::i;:::-;5031;5099:2;5088:9;5084:18;5075:6;5031:72;:::i;:::-;4668:442;;;;;;:::o;5116:619::-;5193:6;5201;5209;5258:2;5246:9;5237:7;5233:23;5229:32;5226:119;;;5264:79;;:::i;:::-;5226:119;5384:1;5409:53;5454:7;5445:6;5434:9;5430:22;5409:53;:::i;:::-;5399:63;;5355:117;5511:2;5537:53;5582:7;5573:6;5562:9;5558:22;5537:53;:::i;:::-;5527:63;;5482:118;5639:2;5665:53;5710:7;5701:6;5690:9;5686:22;5665:53;:::i;:::-;5655:63;;5610:118;5116:619;;;;;:::o;5741:86::-;5776:7;5816:4;5809:5;5805:16;5794:27;;5741:86;;;:::o;5833:112::-;5916:22;5932:5;5916:22;:::i;:::-;5911:3;5904:35;5833:112;;:::o;5951:214::-;6040:4;6078:2;6067:9;6063:18;6055:26;;6091:67;6155:1;6144:9;6140:17;6131:6;6091:67;:::i;:::-;5951:214;;;;:::o;6171:60::-;6199:3;6220:5;6213:12;;6171:60;;;:::o;6237:142::-;6287:9;6320:53;6338:34;6347:24;6365:5;6347:24;:::i;:::-;6338:34;:::i;:::-;6320:53;:::i;:::-;6307:66;;6237:142;;;:::o;6385:126::-;6435:9;6468:37;6499:5;6468:37;:::i;:::-;6455:50;;6385:126;;;:::o;6517:142::-;6583:9;6616:37;6647:5;6616:37;:::i;:::-;6603:50;;6517:142;;;:::o;6665:163::-;6768:53;6815:5;6768:53;:::i;:::-;6763:3;6756:66;6665:163;;:::o;6834:254::-;6943:4;6981:2;6970:9;6966:18;6958:26;;6994:87;7078:1;7067:9;7063:17;7054:6;6994:87;:::i;:::-;6834:254;;;;:::o;7094:329::-;7153:6;7202:2;7190:9;7181:7;7177:23;7173:32;7170:119;;;7208:79;;:::i;:::-;7170:119;7328:1;7353:53;7398:7;7389:6;7378:9;7374:22;7353:53;:::i;:::-;7343:63;;7299:117;7094:329;;;;:::o;7429:::-;7488:6;7537:2;7525:9;7516:7;7512:23;7508:32;7505:119;;;7543:79;;:::i;:::-;7505:119;7663:1;7688:53;7733:7;7724:6;7713:9;7709:22;7688:53;:::i;:::-;7678:63;;7634:117;7429:329;;;;:::o;7764:118::-;7851:24;7869:5;7851:24;:::i;:::-;7846:3;7839:37;7764:118;;:::o;7888:222::-;7981:4;8019:2;8008:9;8004:18;7996:26;;8032:71;8100:1;8089:9;8085:17;8076:6;8032:71;:::i;:::-;7888:222;;;;:::o;8116:140::-;8180:9;8213:37;8244:5;8213:37;:::i;:::-;8200:50;;8116:140;;;:::o;8262:159::-;8363:51;8408:5;8363:51;:::i;:::-;8358:3;8351:64;8262:159;;:::o;8427:250::-;8534:4;8572:2;8561:9;8557:18;8549:26;;8585:85;8667:1;8656:9;8652:17;8643:6;8585:85;:::i;:::-;8427:250;;;;:::o;8683:474::-;8751:6;8759;8808:2;8796:9;8787:7;8783:23;8779:32;8776:119;;;8814:79;;:::i;:::-;8776:119;8934:1;8959:53;9004:7;8995:6;8984:9;8980:22;8959:53;:::i;:::-;8949:63;;8905:117;9061:2;9087:53;9132:7;9123:6;9112:9;9108:22;9087:53;:::i;:::-;9077:63;;9032:118;8683:474;;;;;:::o;9163:180::-;9211:77;9208:1;9201:88;9308:4;9305:1;9298:15;9332:4;9329:1;9322:15;9349:180;9397:77;9394:1;9387:88;9494:4;9491:1;9484:15;9518:4;9515:1;9508:15;9535:191;9575:4;9595:20;9613:1;9595:20;:::i;:::-;9590:25;;9629:20;9647:1;9629:20;:::i;:::-;9624:25;;9668:1;9665;9662:8;9659:34;;;9673:18;;:::i;:::-;9659:34;9718:1;9715;9711:9;9703:17;;9535:191;;;;:::o;9732:180::-;9780:77;9777:1;9770:88;9877:4;9874:1;9867:15;9901:4;9898:1;9891:15;9918:320;9962:6;9999:1;9993:4;9989:12;9979:22;;10046:1;10040:4;10036:12;10067:18;10057:81;;10123:4;10115:6;10111:17;10101:27;;10057:81;10185:2;10177:6;10174:14;10154:18;10151:38;10148:84;;;10204:18;;:::i;:::-;10148:84;9969:269;9918:320;;;:::o;10244:165::-;10384:17;10380:1;10372:6;10368:14;10361:41;10244:165;:::o;10415:366::-;10557:3;10578:67;10642:2;10637:3;10578:67;:::i;:::-;10571:74;;10654:93;10743:3;10654:93;:::i;:::-;10772:2;10767:3;10763:12;10756:19;;10415:366;;;:::o;10787:419::-;10953:4;10991:2;10980:9;10976:18;10968:26;;11040:9;11034:4;11030:20;11026:1;11015:9;11011:17;11004:47;11068:131;11194:4;11068:131;:::i;:::-;11060:139;;10787:419;;;:::o;11212:85::-;11257:7;11286:5;11275:16;;11212:85;;;:::o;11303:158::-;11361:9;11394:61;11412:42;11421:32;11447:5;11421:32;:::i;:::-;11412:42;:::i;:::-;11394:61;:::i;:::-;11381:74;;11303:158;;;:::o;11467:147::-;11562:45;11601:5;11562:45;:::i;:::-;11557:3;11550:58;11467:147;;:::o;11620:458::-;11777:4;11815:2;11804:9;11800:18;11792:26;;11828:79;11904:1;11893:9;11889:17;11880:6;11828:79;:::i;:::-;11917:72;11985:2;11974:9;11970:18;11961:6;11917:72;:::i;:::-;11999;12067:2;12056:9;12052:18;12043:6;11999:72;:::i;:::-;11620:458;;;;;;:::o;12084:332::-;12205:4;12243:2;12232:9;12228:18;12220:26;;12256:71;12324:1;12313:9;12309:17;12300:6;12256:71;:::i;:::-;12337:72;12405:2;12394:9;12390:18;12381:6;12337:72;:::i;:::-;12084:332;;;;;:::o;12422:305::-;12462:3;12481:20;12499:1;12481:20;:::i;:::-;12476:25;;12515:20;12533:1;12515:20;:::i;:::-;12510:25;;12669:1;12601:66;12597:74;12594:1;12591:81;12588:107;;;12675:18;;:::i;:::-;12588:107;12719:1;12716;12712:9;12705:16;;12422:305;;;;:::o;12733:143::-;12790:5;12821:6;12815:13;12806:22;;12837:33;12864:5;12837:33;:::i;:::-;12733:143;;;;:::o;12882:351::-;12952:6;13001:2;12989:9;12980:7;12976:23;12972:32;12969:119;;;13007:79;;:::i;:::-;12969:119;13127:1;13152:64;13208:7;13199:6;13188:9;13184:22;13152:64;:::i;:::-;13142:74;;13098:128;12882:351;;;;:::o;13239:170::-;13379:22;13375:1;13367:6;13363:14;13356:46;13239:170;:::o;13415:366::-;13557:3;13578:67;13642:2;13637:3;13578:67;:::i;:::-;13571:74;;13654:93;13743:3;13654:93;:::i;:::-;13772:2;13767:3;13763:12;13756:19;;13415:366;;;:::o;13787:419::-;13953:4;13991:2;13980:9;13976:18;13968:26;;14040:9;14034:4;14030:20;14026:1;14015:9;14011:17;14004:47;14068:131;14194:4;14068:131;:::i;:::-;14060:139;;13787:419;;;:::o;14212:224::-;14352:34;14348:1;14340:6;14336:14;14329:58;14421:7;14416:2;14408:6;14404:15;14397:32;14212:224;:::o;14442:366::-;14584:3;14605:67;14669:2;14664:3;14605:67;:::i;:::-;14598:74;;14681:93;14770:3;14681:93;:::i;:::-;14799:2;14794:3;14790:12;14783:19;;14442:366;;;:::o;14814:419::-;14980:4;15018:2;15007:9;15003:18;14995:26;;15067:9;15061:4;15057:20;15053:1;15042:9;15038:17;15031:47;15095:131;15221:4;15095:131;:::i;:::-;15087:139;;14814:419;;;:::o;15239:169::-;15379:21;15375:1;15367:6;15363:14;15356:45;15239:169;:::o;15414:366::-;15556:3;15577:67;15641:2;15636:3;15577:67;:::i;:::-;15570:74;;15653:93;15742:3;15653:93;:::i;:::-;15771:2;15766:3;15762:12;15755:19;;15414:366;;;:::o;15786:419::-;15952:4;15990:2;15979:9;15975:18;15967:26;;16039:9;16033:4;16029:20;16025:1;16014:9;16010:17;16003:47;16067:131;16193:4;16067:131;:::i;:::-;16059:139;;15786:419;;;:::o;16211:225::-;16351:34;16347:1;16339:6;16335:14;16328:58;16420:8;16415:2;16407:6;16403:15;16396:33;16211:225;:::o;16442:366::-;16584:3;16605:67;16669:2;16664:3;16605:67;:::i;:::-;16598:74;;16681:93;16770:3;16681:93;:::i;:::-;16799:2;16794:3;16790:12;16783:19;;16442:366;;;:::o;16814:419::-;16980:4;17018:2;17007:9;17003:18;16995:26;;17067:9;17061:4;17057:20;17053:1;17042:9;17038:17;17031:47;17095:131;17221:4;17095:131;:::i;:::-;17087:139;;16814:419;;;:::o;17239:223::-;17379:34;17375:1;17367:6;17363:14;17356:58;17448:6;17443:2;17435:6;17431:15;17424:31;17239:223;:::o;17468:366::-;17610:3;17631:67;17695:2;17690:3;17631:67;:::i;:::-;17624:74;;17707:93;17796:3;17707:93;:::i;:::-;17825:2;17820:3;17816:12;17809:19;;17468:366;;;:::o;17840:419::-;18006:4;18044:2;18033:9;18029:18;18021:26;;18093:9;18087:4;18083:20;18079:1;18068:9;18064:17;18057:47;18121:131;18247:4;18121:131;:::i;:::-;18113:139;;17840:419;;;:::o;18265:221::-;18405:34;18401:1;18393:6;18389:14;18382:58;18474:4;18469:2;18461:6;18457:15;18450:29;18265:221;:::o;18492:366::-;18634:3;18655:67;18719:2;18714:3;18655:67;:::i;:::-;18648:74;;18731:93;18820:3;18731:93;:::i;:::-;18849:2;18844:3;18840:12;18833:19;;18492:366;;;:::o;18864:419::-;19030:4;19068:2;19057:9;19053:18;19045:26;;19117:9;19111:4;19107:20;19103:1;19092:9;19088:17;19081:47;19145:131;19271:4;19145:131;:::i;:::-;19137:139;;18864:419;;;:::o;19289:182::-;19429:34;19425:1;19417:6;19413:14;19406:58;19289:182;:::o;19477:366::-;19619:3;19640:67;19704:2;19699:3;19640:67;:::i;:::-;19633:74;;19716:93;19805:3;19716:93;:::i;:::-;19834:2;19829:3;19825:12;19818:19;;19477:366;;;:::o;19849:419::-;20015:4;20053:2;20042:9;20038:18;20030:26;;20102:9;20096:4;20092:20;20088:1;20077:9;20073:17;20066:47;20130:131;20256:4;20130:131;:::i;:::-;20122:139;;19849:419;;;:::o;20274:179::-;20414:31;20410:1;20402:6;20398:14;20391:55;20274:179;:::o;20459:366::-;20601:3;20622:67;20686:2;20681:3;20622:67;:::i;:::-;20615:74;;20698:93;20787:3;20698:93;:::i;:::-;20816:2;20811:3;20807:12;20800:19;;20459:366;;;:::o;20831:419::-;20997:4;21035:2;21024:9;21020:18;21012:26;;21084:9;21078:4;21074:20;21070:1;21059:9;21055:17;21048:47;21112:131;21238:4;21112:131;:::i;:::-;21104:139;;20831:419;;;:::o;21256:224::-;21396:34;21392:1;21384:6;21380:14;21373:58;21465:7;21460:2;21452:6;21448:15;21441:32;21256:224;:::o;21486:366::-;21628:3;21649:67;21713:2;21708:3;21649:67;:::i;:::-;21642:74;;21725:93;21814:3;21725:93;:::i;:::-;21843:2;21838:3;21834:12;21827:19;;21486:366;;;:::o;21858:419::-;22024:4;22062:2;22051:9;22047:18;22039:26;;22111:9;22105:4;22101:20;22097:1;22086:9;22082:17;22075:47;22139:131;22265:4;22139:131;:::i;:::-;22131:139;;21858:419;;;:::o;22283:222::-;22423:34;22419:1;22411:6;22407:14;22400:58;22492:5;22487:2;22479:6;22475:15;22468:30;22283:222;:::o;22511:366::-;22653:3;22674:67;22738:2;22733:3;22674:67;:::i;:::-;22667:74;;22750:93;22839:3;22750:93;:::i;:::-;22868:2;22863:3;22859:12;22852:19;;22511:366;;;:::o;22883:419::-;23049:4;23087:2;23076:9;23072:18;23064:26;;23136:9;23130:4;23126:20;23122:1;23111:9;23107:17;23100:47;23164:131;23290:4;23164:131;:::i;:::-;23156:139;;22883:419;;;:::o;23308:225::-;23448:34;23444:1;23436:6;23432:14;23425:58;23517:8;23512:2;23504:6;23500:15;23493:33;23308:225;:::o;23539:366::-;23681:3;23702:67;23766:2;23761:3;23702:67;:::i;:::-;23695:74;;23778:93;23867:3;23778:93;:::i;:::-;23896:2;23891:3;23887:12;23880:19;;23539:366;;;:::o;23911:419::-;24077:4;24115:2;24104:9;24100:18;24092:26;;24164:9;24158:4;24154:20;24150:1;24139:9;24135:17;24128:47;24192:131;24318:4;24192:131;:::i;:::-;24184:139;;23911:419;;;:::o;24336:181::-;24476:33;24472:1;24464:6;24460:14;24453:57;24336:181;:::o;24523:366::-;24665:3;24686:67;24750:2;24745:3;24686:67;:::i;:::-;24679:74;;24762:93;24851:3;24762:93;:::i;:::-;24880:2;24875:3;24871:12;24864:19;;24523:366;;;:::o;24895:419::-;25061:4;25099:2;25088:9;25084:18;25076:26;;25148:9;25142:4;25138:20;25134:1;25123:9;25119:17;25112:47;25176:131;25302:4;25176:131;:::i;:::-;25168:139;;24895:419;;;:::o;25320:348::-;25360:7;25383:20;25401:1;25383:20;:::i;:::-;25378:25;;25417:20;25435:1;25417:20;:::i;:::-;25412:25;;25605:1;25537:66;25533:74;25530:1;25527:81;25522:1;25515:9;25508:17;25504:105;25501:131;;;25612:18;;:::i;:::-;25501:131;25660:1;25657;25653:9;25642:20;;25320:348;;;;:::o;25674:180::-;25722:77;25719:1;25712:88;25819:4;25816:1;25809:15;25843:4;25840:1;25833:15;25860:185;25900:1;25917:20;25935:1;25917:20;:::i;:::-;25912:25;;25951:20;25969:1;25951:20;:::i;:::-;25946:25;;25990:1;25980:35;;25995:18;;:::i;:::-;25980:35;26037:1;26034;26030:9;26025:14;;25860:185;;;;:::o;26051:181::-;26191:33;26187:1;26179:6;26175:14;26168:57;26051:181;:::o;26238:366::-;26380:3;26401:67;26465:2;26460:3;26401:67;:::i;:::-;26394:74;;26477:93;26566:3;26477:93;:::i;:::-;26595:2;26590:3;26586:12;26579:19;;26238:366;;;:::o;26610:419::-;26776:4;26814:2;26803:9;26799:18;26791:26;;26863:9;26857:4;26853:20;26849:1;26838:9;26834:17;26827:47;26891:131;27017:4;26891:131;:::i;:::-;26883:139;;26610:419;;;:::o;27035:220::-;27175:34;27171:1;27163:6;27159:14;27152:58;27244:3;27239:2;27231:6;27227:15;27220:28;27035:220;:::o;27261:366::-;27403:3;27424:67;27488:2;27483:3;27424:67;:::i;:::-;27417:74;;27500:93;27589:3;27500:93;:::i;:::-;27618:2;27613:3;27609:12;27602:19;;27261:366;;;:::o;27633:419::-;27799:4;27837:2;27826:9;27822:18;27814:26;;27886:9;27880:4;27876:20;27872:1;27861:9;27857:17;27850:47;27914:131;28040:4;27914:131;:::i;:::-;27906:139;;27633:419;;;:::o;28058:221::-;28198:34;28194:1;28186:6;28182:14;28175:58;28267:4;28262:2;28254:6;28250:15;28243:29;28058:221;:::o;28285:366::-;28427:3;28448:67;28512:2;28507:3;28448:67;:::i;:::-;28441:74;;28524:93;28613:3;28524:93;:::i;:::-;28642:2;28637:3;28633:12;28626:19;;28285:366;;;:::o;28657:419::-;28823:4;28861:2;28850:9;28846:18;28838:26;;28910:9;28904:4;28900:20;28896:1;28885:9;28881:17;28874:47;28938:131;29064:4;28938:131;:::i;:::-;28930:139;;28657:419;;;:::o
Swarm Source
ipfs://f9afb9d74c7f83575da858856c13090ad0c203fd4100120992d4718182982d76
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$99.95
Net Worth in ETH
0.043402
Token Allocations
WETH
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ARB | 100.00% | $2,305.78 | 0.0433 | $99.95 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.