Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 45 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 24277229 | 43 days ago | IN | 0 ETH | 0.00000947 | ||||
| Claim | 17783484 | 951 days ago | IN | 0 ETH | 0.00144521 | ||||
| Approve | 17712749 | 961 days ago | IN | 0 ETH | 0.00048761 | ||||
| Transfer | 17712729 | 961 days ago | IN | 0 ETH | 0.00061062 | ||||
| Transfer From | 17712716 | 961 days ago | IN | 0 ETH | 0.00044313 | ||||
| Approve | 17712703 | 961 days ago | IN | 0 ETH | 0.00082828 | ||||
| Transfer From | 17712699 | 961 days ago | IN | 0 ETH | 0.00047658 | ||||
| Approve | 17712683 | 961 days ago | IN | 0 ETH | 0.00082824 | ||||
| Transfer From | 17712625 | 961 days ago | IN | 0 ETH | 0.00053876 | ||||
| Transfer From | 17712611 | 961 days ago | IN | 0 ETH | 0.0004981 | ||||
| Claim | 17550214 | 984 days ago | IN | 0 ETH | 0.00148389 | ||||
| Claim | 17548027 | 984 days ago | IN | 0 ETH | 0.00094904 | ||||
| Approve | 17546710 | 984 days ago | IN | 0 ETH | 0.00067999 | ||||
| Claim | 17546702 | 984 days ago | IN | 0 ETH | 0.00102423 | ||||
| Approve | 17545390 | 984 days ago | IN | 0 ETH | 0.00034939 | ||||
| Approve | 17545383 | 984 days ago | IN | 0 ETH | 0.00063438 | ||||
| Claim | 17545194 | 984 days ago | IN | 0 ETH | 0.00111161 | ||||
| Claim | 17545130 | 984 days ago | IN | 0 ETH | 0.00152345 | ||||
| Approve | 17545105 | 984 days ago | IN | 0 ETH | 0.00068434 | ||||
| Transfer | 17544877 | 984 days ago | IN | 0 ETH | 0.00080598 | ||||
| Transfer | 17544872 | 984 days ago | IN | 0 ETH | 0.00096562 | ||||
| Transfer | 17544868 | 984 days ago | IN | 0 ETH | 0.00090608 | ||||
| Transfer | 17544862 | 984 days ago | IN | 0 ETH | 0.0009111 | ||||
| Transfer | 17544859 | 984 days ago | IN | 0 ETH | 0.0007269 | ||||
| Claim | 17544857 | 984 days ago | IN | 0 ETH | 0.00169036 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Teth
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-05-31
*/
// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
*
* Furthermore, `isContract` will also return true if the target contract within
* the same transaction is already scheduled for destruction by `SELFDESTRUCT`,
* which only has an effect at the end of a transaction.
* ====
*
* [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://consensys.net/diligence/blog/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.8.0/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/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.9.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. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling 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.9.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
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/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.9.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].
*
* The default value of {decimals} is 18. To change this, you should override
* this function so it returns a different value.
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
* 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}.
*
* 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 default value returned by this function, unless
* it's 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: contracts/TETH.sol
pragma solidity ^0.8.9;
contract Teth is ERC20, Ownable {
using Address for address;
struct Transaction {
address from;
address to;
uint256 amount;
uint256 timestamp;
}
mapping(uint256 => Transaction) public transactions;
mapping(address => bool) public addressHolders;
mapping(address => bool) private hasClaimed;
uint256 public totalClaimCount; // Declare totalClaimCount variable
uint256 public transactionCount;
uint256 private constant DECIMALS = 18;
uint256 private constant MAX_SUPPLY = 6574686572 * (10 ** DECIMALS);
uint256 private constant OWNER = 74657468 * (10 ** DECIMALS);
uint256 private constant CONTRIBUTOR1 = 50014552 * (10 ** DECIMALS);
uint256 private constant CONTRIBUTOR2 = 50014552 * (10 ** DECIMALS);
uint256 private constant CLAIM_AMOUNT_1 = 1280000 * (10 ** DECIMALS);
uint256 private constant CLAIM_AMOUNT_2 = 640000 * (10 ** DECIMALS);
uint256 private constant CLAIM_AMOUNT_3 = 320000 * (10 ** DECIMALS);
uint256 private constant CLAIM_AMOUNT_4 = 160000 * (10 ** DECIMALS);
uint256 private constant CLAIM_AMOUNT_5 = 80000 * (10 ** DECIMALS);
uint256 private constant CLAIM_COUNT_1 = 1000;
uint256 private constant CLAIM_COUNT_2 = 2000;
uint256 private constant CLAIM_COUNT_3 = 4000;
uint256 private constant CLAIM_COUNT_4 = 8000;
uint256 private constant CLAIM_COUNT_5 = 16000;
string public constant WhitePaperURL = "https://gateway.ipfs.io/ipfs/bafybeifszpdud2jgoldrkq7jgtelcstctq7bzhnjryxjbziv3sv6jvqxsq";
address private constant own = 0x221245e40CfADF1dEE4Fb846ECFae08f3E242310;
address private constant con2 = 0x7DAb7C750715149b1a23250494855D43fccE54f7;
constructor() ERC20("Teth", "TETH") {
_mint(msg.sender, MAX_SUPPLY); // Mint the maximum supply to the msg.sender
Transaction memory transaction = Transaction(address(0), msg.sender, MAX_SUPPLY, block.timestamp);
transactions[transactionCount] = transaction;
transactionCount++;
_transfer(msg.sender, address(own), OWNER); // Transfer the tokens to the contract Contributor 1
_transfer(msg.sender, address(con2), CONTRIBUTOR2); // Transfer the tokens to the contract Contributor 2
uint256 remainingTokens = MAX_SUPPLY - OWNER - CONTRIBUTOR1 - CONTRIBUTOR2;
_transfer(msg.sender, address(this), remainingTokens); // Transfer the remaining tokens to the contract
_transferOwnership(address(own));
addressHolders[msg.sender] = true;
}
function _updateAddressHolders(address /* sender */, address recipient, uint256 /* amount */) internal {
if (!addressHolders[recipient]) {
addressHolders[recipient] = true;
}
}
function batchTransfer(address[] memory recipients, uint256[] memory amounts) public returns (bool) {
require(recipients.length == amounts.length, "Arrays length mismatch");
uint256 totalAmount = 0;
for (uint256 i = 0; i < recipients.length; i++) {
address recipient = recipients[i];
uint256 amount = amounts[i];
totalAmount += amount;
_transfer(msg.sender, recipient, amount);
}
require(totalAmount <= balanceOf(msg.sender), "Insufficient balance");
return true;
}
function claim() public {
require(!hasClaimed[msg.sender], "Already claimed");
// Mark the address as claimed
hasClaimed[msg.sender] = true;
// Determine the claim amount based on the order of wallet addresses
uint256 claimAmount;
if (totalClaimCount < CLAIM_COUNT_1) {
claimAmount = CLAIM_AMOUNT_1;
} else if (totalClaimCount < CLAIM_COUNT_1 + CLAIM_COUNT_2) {
claimAmount = CLAIM_AMOUNT_2;
} else if (totalClaimCount < CLAIM_COUNT_1 + CLAIM_COUNT_2 + CLAIM_COUNT_3) {
claimAmount = CLAIM_AMOUNT_3;
} else if (totalClaimCount < CLAIM_COUNT_1 + CLAIM_COUNT_2 + CLAIM_COUNT_3 + CLAIM_COUNT_4) {
claimAmount = CLAIM_AMOUNT_4;
} else {
claimAmount = CLAIM_AMOUNT_5;
}
// Decrement the total claim count
totalClaimCount++;
// Transfer the claim amount to the caller
_transfer(address(this), msg.sender, claimAmount);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"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":"WhitePaperURL","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressHolders","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"batchTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":[{"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":[],"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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaimCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transactionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"transactions","outputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"timestamp","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"}]Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280600481526020017f54657468000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f544554480000000000000000000000000000000000000000000000000000000081525081600390816200008f919062000b62565b508060049081620000a1919062000b62565b505050620000c4620000b86200041260201b60201c565b6200041a60201b60201c565b620000f7336012600a620000d9919062000dcc565b640187e1c16c620000eb919062000e1d565b620004e060201b60201c565b60006040518060800160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff1681526020016012600a6200014d919062000dcc565b640187e1c16c6200015f919062000e1d565b81526020014281525090508060066000600a54815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015560608201518160030155905050600a60008154809291906200023a9062000e68565b9190505550620002863373221245e40cfadf1dee4fb846ecfae08f3e2423106012600a62000269919062000dcc565b6304732ebc6200027a919062000e1d565b6200064d60201b60201c565b620002cd33737dab7c750715149b1a23250494855d43fcce54f76012600a620002b0919062000dcc565b6302fb2958620002c1919062000e1d565b6200064d60201b60201c565b60006012600a620002df919062000dcc565b6302fb2958620002f0919062000e1d565b6012600a62000300919062000dcc565b6302fb295862000311919062000e1d565b6012600a62000321919062000dcc565b6304732ebc62000332919062000e1d565b6012600a62000342919062000dcc565b640187e1c16c62000354919062000e1d565b62000360919062000eb5565b6200036c919062000eb5565b62000378919062000eb5565b90506200038d3330836200064d60201b60201c565b620003b273221245e40cfadf1dee4fb846ecfae08f3e2423106200041a60201b60201c565b6001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050620011a4565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000552576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005499062000f51565b60405180910390fd5b6200056660008383620008de60201b60201c565b80600260008282546200057a919062000f73565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200062d919062000fbf565b60405180910390a36200064960008383620008e360201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620006bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006b69062001052565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000731576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200072890620010ea565b60405180910390fd5b62000744838383620008de60201b60201c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015620007cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007c49062001182565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051620008bd919062000fbf565b60405180910390a3620008d8848484620008e360201b60201c565b50505050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200096a57607f821691505b60208210810362000980576200097f62000922565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009ea7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009ab565b620009f68683620009ab565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a4362000a3d62000a378462000a0e565b62000a18565b62000a0e565b9050919050565b6000819050919050565b62000a5f8362000a22565b62000a7762000a6e8262000a4a565b848454620009b8565b825550505050565b600090565b62000a8e62000a7f565b62000a9b81848462000a54565b505050565b5b8181101562000ac35762000ab760008262000a84565b60018101905062000aa1565b5050565b601f82111562000b125762000adc8162000986565b62000ae7846200099b565b8101602085101562000af7578190505b62000b0f62000b06856200099b565b83018262000aa0565b50505b505050565b600082821c905092915050565b600062000b376000198460080262000b17565b1980831691505092915050565b600062000b52838362000b24565b9150826002028217905092915050565b62000b6d82620008e8565b67ffffffffffffffff81111562000b895762000b88620008f3565b5b62000b95825462000951565b62000ba282828562000ac7565b600060209050601f83116001811462000bda576000841562000bc5578287015190505b62000bd1858262000b44565b86555062000c41565b601f19841662000bea8662000986565b60005b8281101562000c145784890151825560018201915060208501945060208101905062000bed565b8683101562000c34578489015162000c30601f89168262000b24565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000cd75780860481111562000caf5762000cae62000c49565b5b600185161562000cbf5780820291505b808102905062000ccf8562000c78565b945062000c8f565b94509492505050565b60008262000cf2576001905062000dc5565b8162000d02576000905062000dc5565b816001811462000d1b576002811462000d265762000d5c565b600191505062000dc5565b60ff84111562000d3b5762000d3a62000c49565b5b8360020a91508482111562000d555762000d5462000c49565b5b5062000dc5565b5060208310610133831016604e8410600b841016171562000d965782820a90508381111562000d905762000d8f62000c49565b5b62000dc5565b62000da5848484600162000c85565b9250905081840481111562000dbf5762000dbe62000c49565b5b81810290505b9392505050565b600062000dd98262000a0e565b915062000de68362000a0e565b925062000e157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000ce0565b905092915050565b600062000e2a8262000a0e565b915062000e378362000a0e565b925082820262000e478162000a0e565b9150828204841483151762000e615762000e6062000c49565b5b5092915050565b600062000e758262000a0e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362000eaa5762000ea962000c49565b5b600182019050919050565b600062000ec28262000a0e565b915062000ecf8362000a0e565b925082820390508181111562000eea5762000ee962000c49565b5b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f39601f8362000ef0565b915062000f468262000f01565b602082019050919050565b6000602082019050818103600083015262000f6c8162000f2a565b9050919050565b600062000f808262000a0e565b915062000f8d8362000a0e565b925082820190508082111562000fa85762000fa762000c49565b5b92915050565b62000fb98162000a0e565b82525050565b600060208201905062000fd6600083018462000fae565b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006200103a60258362000ef0565b9150620010478262000fdc565b604082019050919050565b600060208201905081810360008301526200106d816200102b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000620010d260238362000ef0565b9150620010df8262001074565b604082019050919050565b600060208201905081810360008301526200110581620010c3565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006200116a60268362000ef0565b915062001177826200110c565b604082019050919050565b600060208201905081810360008301526200119d816200115b565b9050919050565b61220380620011b46000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063715018a6116100b8578063a457c2d71161007c578063a457c2d714610345578063a9059cbb14610375578063b77bf600146103a5578063dd62ed3e146103c3578063e7e7092c146103f3578063f2fde38b1461042357610137565b8063715018a61461029c57806388d695b2146102a65780638da5cb5b146102d657806395d89b41146102f45780639ace38c21461031257610137565b8063390b221d116100ff578063390b221d146101f657806339509351146102145780633b39ccc9146102445780634e71d92d1461026257806370a082311461026c57610137565b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461018a57806323b872dd146101a8578063313ce567146101d8575b600080fd5b61014461043f565b60405161015191906112e1565b60405180910390f35b610174600480360381019061016f91906113ab565b6104d1565b6040516101819190611406565b60405180910390f35b6101926104f4565b60405161019f9190611430565b60405180910390f35b6101c260048036038101906101bd919061144b565b6104fe565b6040516101cf9190611406565b60405180910390f35b6101e061052d565b6040516101ed91906114ba565b60405180910390f35b6101fe610536565b60405161020b91906112e1565b60405180910390f35b61022e600480360381019061022991906113ab565b610552565b60405161023b9190611406565b60405180910390f35b61024c610589565b6040516102599190611430565b60405180910390f35b61026a61058f565b005b610286600480360381019061028191906114d5565b6107c8565b6040516102939190611430565b60405180910390f35b6102a4610810565b005b6102c060048036038101906102bb919061170d565b610824565b6040516102cd9190611406565b60405180910390f35b6102de61093a565b6040516102eb9190611794565b60405180910390f35b6102fc610964565b60405161030991906112e1565b60405180910390f35b61032c600480360381019061032791906117af565b6109f6565b60405161033c94939291906117dc565b60405180910390f35b61035f600480360381019061035a91906113ab565b610a66565b60405161036c9190611406565b60405180910390f35b61038f600480360381019061038a91906113ab565b610add565b60405161039c9190611406565b60405180910390f35b6103ad610b00565b6040516103ba9190611430565b60405180910390f35b6103dd60048036038101906103d89190611821565b610b06565b6040516103ea9190611430565b60405180910390f35b61040d600480360381019061040891906114d5565b610b8d565b60405161041a9190611406565b60405180910390f35b61043d600480360381019061043891906114d5565b610bad565b005b60606003805461044e90611890565b80601f016020809104026020016040519081016040528092919081815260200182805461047a90611890565b80156104c75780601f1061049c576101008083540402835291602001916104c7565b820191906000526020600020905b8154815290600101906020018083116104aa57829003601f168201915b5050505050905090565b6000806104dc610c30565b90506104e9818585610c38565b600191505092915050565b6000600254905090565b600080610509610c30565b9050610516858285610e01565b610521858585610e8d565b60019150509392505050565b60006012905090565b6040518060800160405280605881526020016121766058913981565b60008061055d610c30565b905061057e81858561056f8589610b06565b61057991906118f0565b610c38565b600191505092915050565b60095481565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561061c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061390611970565b60405180910390fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006103e860095410156106a5576012600a6106909190611ac3565b6213880061069e9190611b0e565b90506107a2565b6107d06103e86106b591906118f0565b60095410156106e1576012600a6106cc9190611ac3565b6209c4006106da9190611b0e565b90506107a1565b610fa06107d06103e86106f491906118f0565b6106fe91906118f0565b600954101561072a576012600a6107159190611ac3565b6204e2006107239190611b0e565b90506107a0565b611f40610fa06107d06103e861074091906118f0565b61074a91906118f0565b61075491906118f0565b6009541015610780576012600a61076b9190611ac3565b620271006107799190611b0e565b905061079f565b6012600a61078e9190611ac3565b6201388061079c9190611b0e565b90505b5b5b5b600960008154809291906107b590611b50565b91905055506107c5303383610e8d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610818611103565b6108226000611181565b565b6000815183511461086a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086190611be4565b60405180910390fd5b6000805b84518110156108e357600085828151811061088c5761088b611c04565b5b6020026020010151905060008583815181106108ab576108aa611c04565b5b6020026020010151905080846108c191906118f0565b93506108ce338383610e8d565b505080806108db90611b50565b91505061086e565b506108ed336107c8565b81111561092f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092690611c7f565b60405180910390fd5b600191505092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461097390611890565b80601f016020809104026020016040519081016040528092919081815260200182805461099f90611890565b80156109ec5780601f106109c1576101008083540402835291602001916109ec565b820191906000526020600020905b8154815290600101906020018083116109cf57829003601f168201915b5050505050905090565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154905084565b600080610a71610c30565b90506000610a7f8286610b06565b905083811015610ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abb90611d11565b60405180910390fd5b610ad18286868403610c38565b60019250505092915050565b600080610ae8610c30565b9050610af5818585610e8d565b600191505092915050565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60076020528060005260406000206000915054906101000a900460ff1681565b610bb5611103565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1b90611da3565b60405180910390fd5b610c2d81611181565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90611e35565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90611ec7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610df49190611430565b60405180910390a3505050565b6000610e0d8484610b06565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610e875781811015610e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7090611f33565b60405180910390fd5b610e868484848403610c38565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef390611fc5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6290612057565b60405180910390fd5b610f76838383611247565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff3906120e9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110ea9190611430565b60405180910390a36110fd84848461124c565b50505050565b61110b610c30565b73ffffffffffffffffffffffffffffffffffffffff1661112961093a565b73ffffffffffffffffffffffffffffffffffffffff161461117f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117690612155565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561128b578082015181840152602081019050611270565b60008484015250505050565b6000601f19601f8301169050919050565b60006112b382611251565b6112bd818561125c565b93506112cd81856020860161126d565b6112d681611297565b840191505092915050565b600060208201905081810360008301526112fb81846112a8565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061134282611317565b9050919050565b61135281611337565b811461135d57600080fd5b50565b60008135905061136f81611349565b92915050565b6000819050919050565b61138881611375565b811461139357600080fd5b50565b6000813590506113a58161137f565b92915050565b600080604083850312156113c2576113c161130d565b5b60006113d085828601611360565b92505060206113e185828601611396565b9150509250929050565b60008115159050919050565b611400816113eb565b82525050565b600060208201905061141b60008301846113f7565b92915050565b61142a81611375565b82525050565b60006020820190506114456000830184611421565b92915050565b6000806000606084860312156114645761146361130d565b5b600061147286828701611360565b935050602061148386828701611360565b925050604061149486828701611396565b9150509250925092565b600060ff82169050919050565b6114b48161149e565b82525050565b60006020820190506114cf60008301846114ab565b92915050565b6000602082840312156114eb576114ea61130d565b5b60006114f984828501611360565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61153f82611297565b810181811067ffffffffffffffff8211171561155e5761155d611507565b5b80604052505050565b6000611571611303565b905061157d8282611536565b919050565b600067ffffffffffffffff82111561159d5761159c611507565b5b602082029050602081019050919050565b600080fd5b60006115c66115c184611582565b611567565b905080838252602082019050602084028301858111156115e9576115e86115ae565b5b835b8181101561161257806115fe8882611360565b8452602084019350506020810190506115eb565b5050509392505050565b600082601f83011261163157611630611502565b5b81356116418482602086016115b3565b91505092915050565b600067ffffffffffffffff82111561166557611664611507565b5b602082029050602081019050919050565b60006116896116848461164a565b611567565b905080838252602082019050602084028301858111156116ac576116ab6115ae565b5b835b818110156116d557806116c18882611396565b8452602084019350506020810190506116ae565b5050509392505050565b600082601f8301126116f4576116f3611502565b5b8135611704848260208601611676565b91505092915050565b600080604083850312156117245761172361130d565b5b600083013567ffffffffffffffff81111561174257611741611312565b5b61174e8582860161161c565b925050602083013567ffffffffffffffff81111561176f5761176e611312565b5b61177b858286016116df565b9150509250929050565b61178e81611337565b82525050565b60006020820190506117a96000830184611785565b92915050565b6000602082840312156117c5576117c461130d565b5b60006117d384828501611396565b91505092915050565b60006080820190506117f16000830187611785565b6117fe6020830186611785565b61180b6040830185611421565b6118186060830184611421565b95945050505050565b600080604083850312156118385761183761130d565b5b600061184685828601611360565b925050602061185785828601611360565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806118a857607f821691505b6020821081036118bb576118ba611861565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006118fb82611375565b915061190683611375565b925082820190508082111561191e5761191d6118c1565b5b92915050565b7f416c726561647920636c61696d65640000000000000000000000000000000000600082015250565b600061195a600f8361125c565b915061196582611924565b602082019050919050565b600060208201905081810360008301526119898161194d565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156119e7578086048111156119c3576119c26118c1565b5b60018516156119d25780820291505b80810290506119e085611990565b94506119a7565b94509492505050565b600082611a005760019050611abc565b81611a0e5760009050611abc565b8160018114611a245760028114611a2e57611a5d565b6001915050611abc565b60ff841115611a4057611a3f6118c1565b5b8360020a915084821115611a5757611a566118c1565b5b50611abc565b5060208310610133831016604e8410600b8410161715611a925782820a905083811115611a8d57611a8c6118c1565b5b611abc565b611a9f848484600161199d565b92509050818404811115611ab657611ab56118c1565b5b81810290505b9392505050565b6000611ace82611375565b9150611ad983611375565b9250611b067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846119f0565b905092915050565b6000611b1982611375565b9150611b2483611375565b9250828202611b3281611375565b91508282048414831517611b4957611b486118c1565b5b5092915050565b6000611b5b82611375565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611b8d57611b8c6118c1565b5b600182019050919050565b7f417272617973206c656e677468206d69736d6174636800000000000000000000600082015250565b6000611bce60168361125c565b9150611bd982611b98565b602082019050919050565b60006020820190508181036000830152611bfd81611bc1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000611c6960148361125c565b9150611c7482611c33565b602082019050919050565b60006020820190508181036000830152611c9881611c5c565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611cfb60258361125c565b9150611d0682611c9f565b604082019050919050565b60006020820190508181036000830152611d2a81611cee565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611d8d60268361125c565b9150611d9882611d31565b604082019050919050565b60006020820190508181036000830152611dbc81611d80565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611e1f60248361125c565b9150611e2a82611dc3565b604082019050919050565b60006020820190508181036000830152611e4e81611e12565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611eb160228361125c565b9150611ebc82611e55565b604082019050919050565b60006020820190508181036000830152611ee081611ea4565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611f1d601d8361125c565b9150611f2882611ee7565b602082019050919050565b60006020820190508181036000830152611f4c81611f10565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611faf60258361125c565b9150611fba82611f53565b604082019050919050565b60006020820190508181036000830152611fde81611fa2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061204160238361125c565b915061204c82611fe5565b604082019050919050565b6000602082019050818103600083015261207081612034565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006120d360268361125c565b91506120de82612077565b604082019050919050565b60006020820190508181036000830152612102816120c6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061213f60208361125c565b915061214a82612109565b602082019050919050565b6000602082019050818103600083015261216e81612132565b905091905056fe68747470733a2f2f676174657761792e697066732e696f2f697066732f6261667962656966737a70647564326a676f6c64726b71376a6774656c63737463747137627a686e6a7279786a627a6976337376366a7671787371a26469706673582212201a88997f768badc39628a3984d6417abb5b9b4f53b177c611611c32980b0e9df64736f6c63430008120033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101375760003560e01c8063715018a6116100b8578063a457c2d71161007c578063a457c2d714610345578063a9059cbb14610375578063b77bf600146103a5578063dd62ed3e146103c3578063e7e7092c146103f3578063f2fde38b1461042357610137565b8063715018a61461029c57806388d695b2146102a65780638da5cb5b146102d657806395d89b41146102f45780639ace38c21461031257610137565b8063390b221d116100ff578063390b221d146101f657806339509351146102145780633b39ccc9146102445780634e71d92d1461026257806370a082311461026c57610137565b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461018a57806323b872dd146101a8578063313ce567146101d8575b600080fd5b61014461043f565b60405161015191906112e1565b60405180910390f35b610174600480360381019061016f91906113ab565b6104d1565b6040516101819190611406565b60405180910390f35b6101926104f4565b60405161019f9190611430565b60405180910390f35b6101c260048036038101906101bd919061144b565b6104fe565b6040516101cf9190611406565b60405180910390f35b6101e061052d565b6040516101ed91906114ba565b60405180910390f35b6101fe610536565b60405161020b91906112e1565b60405180910390f35b61022e600480360381019061022991906113ab565b610552565b60405161023b9190611406565b60405180910390f35b61024c610589565b6040516102599190611430565b60405180910390f35b61026a61058f565b005b610286600480360381019061028191906114d5565b6107c8565b6040516102939190611430565b60405180910390f35b6102a4610810565b005b6102c060048036038101906102bb919061170d565b610824565b6040516102cd9190611406565b60405180910390f35b6102de61093a565b6040516102eb9190611794565b60405180910390f35b6102fc610964565b60405161030991906112e1565b60405180910390f35b61032c600480360381019061032791906117af565b6109f6565b60405161033c94939291906117dc565b60405180910390f35b61035f600480360381019061035a91906113ab565b610a66565b60405161036c9190611406565b60405180910390f35b61038f600480360381019061038a91906113ab565b610add565b60405161039c9190611406565b60405180910390f35b6103ad610b00565b6040516103ba9190611430565b60405180910390f35b6103dd60048036038101906103d89190611821565b610b06565b6040516103ea9190611430565b60405180910390f35b61040d600480360381019061040891906114d5565b610b8d565b60405161041a9190611406565b60405180910390f35b61043d600480360381019061043891906114d5565b610bad565b005b60606003805461044e90611890565b80601f016020809104026020016040519081016040528092919081815260200182805461047a90611890565b80156104c75780601f1061049c576101008083540402835291602001916104c7565b820191906000526020600020905b8154815290600101906020018083116104aa57829003601f168201915b5050505050905090565b6000806104dc610c30565b90506104e9818585610c38565b600191505092915050565b6000600254905090565b600080610509610c30565b9050610516858285610e01565b610521858585610e8d565b60019150509392505050565b60006012905090565b6040518060800160405280605881526020016121766058913981565b60008061055d610c30565b905061057e81858561056f8589610b06565b61057991906118f0565b610c38565b600191505092915050565b60095481565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561061c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061390611970565b60405180910390fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006103e860095410156106a5576012600a6106909190611ac3565b6213880061069e9190611b0e565b90506107a2565b6107d06103e86106b591906118f0565b60095410156106e1576012600a6106cc9190611ac3565b6209c4006106da9190611b0e565b90506107a1565b610fa06107d06103e86106f491906118f0565b6106fe91906118f0565b600954101561072a576012600a6107159190611ac3565b6204e2006107239190611b0e565b90506107a0565b611f40610fa06107d06103e861074091906118f0565b61074a91906118f0565b61075491906118f0565b6009541015610780576012600a61076b9190611ac3565b620271006107799190611b0e565b905061079f565b6012600a61078e9190611ac3565b6201388061079c9190611b0e565b90505b5b5b5b600960008154809291906107b590611b50565b91905055506107c5303383610e8d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610818611103565b6108226000611181565b565b6000815183511461086a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086190611be4565b60405180910390fd5b6000805b84518110156108e357600085828151811061088c5761088b611c04565b5b6020026020010151905060008583815181106108ab576108aa611c04565b5b6020026020010151905080846108c191906118f0565b93506108ce338383610e8d565b505080806108db90611b50565b91505061086e565b506108ed336107c8565b81111561092f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092690611c7f565b60405180910390fd5b600191505092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461097390611890565b80601f016020809104026020016040519081016040528092919081815260200182805461099f90611890565b80156109ec5780601f106109c1576101008083540402835291602001916109ec565b820191906000526020600020905b8154815290600101906020018083116109cf57829003601f168201915b5050505050905090565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154905084565b600080610a71610c30565b90506000610a7f8286610b06565b905083811015610ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abb90611d11565b60405180910390fd5b610ad18286868403610c38565b60019250505092915050565b600080610ae8610c30565b9050610af5818585610e8d565b600191505092915050565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60076020528060005260406000206000915054906101000a900460ff1681565b610bb5611103565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1b90611da3565b60405180910390fd5b610c2d81611181565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90611e35565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90611ec7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610df49190611430565b60405180910390a3505050565b6000610e0d8484610b06565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610e875781811015610e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7090611f33565b60405180910390fd5b610e868484848403610c38565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef390611fc5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6290612057565b60405180910390fd5b610f76838383611247565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff3906120e9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110ea9190611430565b60405180910390a36110fd84848461124c565b50505050565b61110b610c30565b73ffffffffffffffffffffffffffffffffffffffff1661112961093a565b73ffffffffffffffffffffffffffffffffffffffff161461117f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117690612155565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561128b578082015181840152602081019050611270565b60008484015250505050565b6000601f19601f8301169050919050565b60006112b382611251565b6112bd818561125c565b93506112cd81856020860161126d565b6112d681611297565b840191505092915050565b600060208201905081810360008301526112fb81846112a8565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061134282611317565b9050919050565b61135281611337565b811461135d57600080fd5b50565b60008135905061136f81611349565b92915050565b6000819050919050565b61138881611375565b811461139357600080fd5b50565b6000813590506113a58161137f565b92915050565b600080604083850312156113c2576113c161130d565b5b60006113d085828601611360565b92505060206113e185828601611396565b9150509250929050565b60008115159050919050565b611400816113eb565b82525050565b600060208201905061141b60008301846113f7565b92915050565b61142a81611375565b82525050565b60006020820190506114456000830184611421565b92915050565b6000806000606084860312156114645761146361130d565b5b600061147286828701611360565b935050602061148386828701611360565b925050604061149486828701611396565b9150509250925092565b600060ff82169050919050565b6114b48161149e565b82525050565b60006020820190506114cf60008301846114ab565b92915050565b6000602082840312156114eb576114ea61130d565b5b60006114f984828501611360565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61153f82611297565b810181811067ffffffffffffffff8211171561155e5761155d611507565b5b80604052505050565b6000611571611303565b905061157d8282611536565b919050565b600067ffffffffffffffff82111561159d5761159c611507565b5b602082029050602081019050919050565b600080fd5b60006115c66115c184611582565b611567565b905080838252602082019050602084028301858111156115e9576115e86115ae565b5b835b8181101561161257806115fe8882611360565b8452602084019350506020810190506115eb565b5050509392505050565b600082601f83011261163157611630611502565b5b81356116418482602086016115b3565b91505092915050565b600067ffffffffffffffff82111561166557611664611507565b5b602082029050602081019050919050565b60006116896116848461164a565b611567565b905080838252602082019050602084028301858111156116ac576116ab6115ae565b5b835b818110156116d557806116c18882611396565b8452602084019350506020810190506116ae565b5050509392505050565b600082601f8301126116f4576116f3611502565b5b8135611704848260208601611676565b91505092915050565b600080604083850312156117245761172361130d565b5b600083013567ffffffffffffffff81111561174257611741611312565b5b61174e8582860161161c565b925050602083013567ffffffffffffffff81111561176f5761176e611312565b5b61177b858286016116df565b9150509250929050565b61178e81611337565b82525050565b60006020820190506117a96000830184611785565b92915050565b6000602082840312156117c5576117c461130d565b5b60006117d384828501611396565b91505092915050565b60006080820190506117f16000830187611785565b6117fe6020830186611785565b61180b6040830185611421565b6118186060830184611421565b95945050505050565b600080604083850312156118385761183761130d565b5b600061184685828601611360565b925050602061185785828601611360565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806118a857607f821691505b6020821081036118bb576118ba611861565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006118fb82611375565b915061190683611375565b925082820190508082111561191e5761191d6118c1565b5b92915050565b7f416c726561647920636c61696d65640000000000000000000000000000000000600082015250565b600061195a600f8361125c565b915061196582611924565b602082019050919050565b600060208201905081810360008301526119898161194d565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156119e7578086048111156119c3576119c26118c1565b5b60018516156119d25780820291505b80810290506119e085611990565b94506119a7565b94509492505050565b600082611a005760019050611abc565b81611a0e5760009050611abc565b8160018114611a245760028114611a2e57611a5d565b6001915050611abc565b60ff841115611a4057611a3f6118c1565b5b8360020a915084821115611a5757611a566118c1565b5b50611abc565b5060208310610133831016604e8410600b8410161715611a925782820a905083811115611a8d57611a8c6118c1565b5b611abc565b611a9f848484600161199d565b92509050818404811115611ab657611ab56118c1565b5b81810290505b9392505050565b6000611ace82611375565b9150611ad983611375565b9250611b067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846119f0565b905092915050565b6000611b1982611375565b9150611b2483611375565b9250828202611b3281611375565b91508282048414831517611b4957611b486118c1565b5b5092915050565b6000611b5b82611375565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611b8d57611b8c6118c1565b5b600182019050919050565b7f417272617973206c656e677468206d69736d6174636800000000000000000000600082015250565b6000611bce60168361125c565b9150611bd982611b98565b602082019050919050565b60006020820190508181036000830152611bfd81611bc1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000611c6960148361125c565b9150611c7482611c33565b602082019050919050565b60006020820190508181036000830152611c9881611c5c565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611cfb60258361125c565b9150611d0682611c9f565b604082019050919050565b60006020820190508181036000830152611d2a81611cee565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611d8d60268361125c565b9150611d9882611d31565b604082019050919050565b60006020820190508181036000830152611dbc81611d80565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611e1f60248361125c565b9150611e2a82611dc3565b604082019050919050565b60006020820190508181036000830152611e4e81611e12565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611eb160228361125c565b9150611ebc82611e55565b604082019050919050565b60006020820190508181036000830152611ee081611ea4565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611f1d601d8361125c565b9150611f2882611ee7565b602082019050919050565b60006020820190508181036000830152611f4c81611f10565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611faf60258361125c565b9150611fba82611f53565b604082019050919050565b60006020820190508181036000830152611fde81611fa2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061204160238361125c565b915061204c82611fe5565b604082019050919050565b6000602082019050818103600083015261207081612034565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006120d360268361125c565b91506120de82612077565b604082019050919050565b60006020820190508181036000830152612102816120c6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061213f60208361125c565b915061214a82612109565b602082019050919050565b6000602082019050818103600083015261216e81612132565b905091905056fe68747470733a2f2f676174657761792e697066732e696f2f697066732f6261667962656966737a70647564326a676f6c64726b71376a6774656c63737463747137627a686e6a7279786a627a6976337376366a7671787371a26469706673582212201a88997f768badc39628a3984d6417abb5b9b4f53b177c611611c32980b0e9df64736f6c63430008120033
Deployed Bytecode Sourcemap
30041:4445:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18980:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21340:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20109:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22121:261;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19951:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31493:129;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22791:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30409:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33456:1027;;;:::i;:::-;;20280:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12435:103;;;:::i;:::-;;32866:582;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11794:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19199:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30246:51;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;23532:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20613:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30482:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20869:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30304:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12693:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18980:100;19034:13;19067:5;19060:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18980:100;:::o;21340:201::-;21423:4;21440:13;21456:12;:10;:12::i;:::-;21440:28;;21479:32;21488:5;21495:7;21504:6;21479:8;:32::i;:::-;21529:4;21522:11;;;21340:201;;;;:::o;20109:108::-;20170:7;20197:12;;20190:19;;20109:108;:::o;22121:261::-;22218:4;22235:15;22253:12;:10;:12::i;:::-;22235:30;;22276:38;22292:4;22298:7;22307:6;22276:15;:38::i;:::-;22325:27;22335:4;22341:2;22345:6;22325:9;:27::i;:::-;22370:4;22363:11;;;22121:261;;;;;:::o;19951:93::-;20009:5;20034:2;20027:9;;19951:93;:::o;31493:129::-;;;;;;;;;;;;;;;;;;;:::o;22791:238::-;22879:4;22896:13;22912:12;:10;:12::i;:::-;22896:28;;22935:64;22944:5;22951:7;22988:10;22960:25;22970:5;22977:7;22960:9;:25::i;:::-;:38;;;;:::i;:::-;22935:8;:64::i;:::-;23017:4;23010:11;;;22791:238;;;;:::o;30409:30::-;;;;:::o;33456:1027::-;33500:10;:22;33511:10;33500:22;;;;;;;;;;;;;;;;;;;;;;;;;33499:23;33491:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;33620:4;33595:10;:22;33606:10;33595:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33715:19;31267:4;33749:15;;:31;33745:543;;;30558:2;30909;:14;;;;:::i;:::-;30898:7;:26;;;;:::i;:::-;33797:28;;33745:543;;;31319:4;31267;33865:29;;;;:::i;:::-;33847:15;;:47;33843:445;;;30558:2;30983;:14;;;;:::i;:::-;30973:6;:25;;;;:::i;:::-;33911:28;;33843:445;;;31371:4;31319;31267;33979:29;;;;:::i;:::-;:45;;;;:::i;:::-;33961:15;;:63;33957:331;;;30558:2;31057;:14;;;;:::i;:::-;31047:6;:25;;;;:::i;:::-;34041:28;;33957:331;;;31423:4;31371;31319;31267;34109:29;;;;:::i;:::-;:45;;;;:::i;:::-;:61;;;;:::i;:::-;34091:15;;:79;34087:201;;;30558:2;31131;:14;;;;:::i;:::-;31121:6;:25;;;;:::i;:::-;34187:28;;34087:201;;;30558:2;31204;:14;;;;:::i;:::-;31195:5;:24;;;;:::i;:::-;34248:28;;34087:201;33957:331;33843:445;33745:543;34344:15;;:17;;;;;;;;;:::i;:::-;;;;;;34426:49;34444:4;34451:10;34463:11;34426:9;:49::i;:::-;33480:1003;33456:1027::o;20280:127::-;20354:7;20381:9;:18;20391:7;20381:18;;;;;;;;;;;;;;;;20374:25;;20280:127;;;:::o;12435:103::-;11680:13;:11;:13::i;:::-;12500:30:::1;12527:1;12500:18;:30::i;:::-;12435:103::o:0;32866:582::-;32960:4;33006:7;:14;32985:10;:17;:35;32977:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;33060:19;33099:9;33094:241;33118:10;:17;33114:1;:21;33094:241;;;33157:17;33177:10;33188:1;33177:13;;;;;;;;:::i;:::-;;;;;;;;33157:33;;33205:14;33222:7;33230:1;33222:10;;;;;;;;:::i;:::-;;;;;;;;33205:27;;33262:6;33247:21;;;;;:::i;:::-;;;33283:40;33293:10;33305:9;33316:6;33283:9;:40::i;:::-;33142:193;;33137:3;;;;;:::i;:::-;;;;33094:241;;;;33370:21;33380:10;33370:9;:21::i;:::-;33355:11;:36;;33347:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;33436:4;33429:11;;;32866:582;;;;:::o;11794:87::-;11840:7;11867:6;;;;;;;;;;;11860:13;;11794:87;:::o;19199:104::-;19255:13;19288:7;19281:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19199:104;:::o;30246:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23532:436::-;23625:4;23642:13;23658:12;:10;:12::i;:::-;23642:28;;23681:24;23708:25;23718:5;23725:7;23708:9;:25::i;:::-;23681:52;;23772:15;23752:16;:35;;23744:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;23865:60;23874:5;23881:7;23909:15;23890:16;:34;23865:8;:60::i;:::-;23956:4;23949:11;;;;23532:436;;;;:::o;20613:193::-;20692:4;20709:13;20725:12;:10;:12::i;:::-;20709:28;;20748;20758:5;20765:2;20769:6;20748:9;:28::i;:::-;20794:4;20787:11;;;20613:193;;;;:::o;30482:31::-;;;;:::o;20869:151::-;20958:7;20985:11;:18;20997:5;20985:18;;;;;;;;;;;;;;;:27;21004:7;20985:27;;;;;;;;;;;;;;;;20978:34;;20869:151;;;;:::o;30304:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;12693:201::-;11680:13;:11;:13::i;:::-;12802:1:::1;12782:22;;:8;:22;;::::0;12774:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;12858:28;12877:8;12858:18;:28::i;:::-;12693:201:::0;:::o;10345:98::-;10398:7;10425:10;10418:17;;10345:98;:::o;27525:346::-;27644:1;27627:19;;:5;:19;;;27619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27725:1;27706:21;;:7;:21;;;27698:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27809:6;27779:11;:18;27791:5;27779:18;;;;;;;;;;;;;;;:27;27798:7;27779:27;;;;;;;;;;;;;;;:36;;;;27847:7;27831:32;;27840:5;27831:32;;;27856:6;27831:32;;;;;;:::i;:::-;;;;;;;;27525:346;;;:::o;28162:419::-;28263:24;28290:25;28300:5;28307:7;28290:9;:25::i;:::-;28263:52;;28350:17;28330:16;:37;28326:248;;28412:6;28392:16;:26;;28384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28496:51;28505:5;28512:7;28540:6;28521:16;:25;28496:8;:51::i;:::-;28326:248;28252:329;28162:419;;;:::o;24438:806::-;24551:1;24535:18;;:4;:18;;;24527:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24628:1;24614:16;;:2;:16;;;24606:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24683:38;24704:4;24710:2;24714:6;24683:20;:38::i;:::-;24734:19;24756:9;:15;24766:4;24756:15;;;;;;;;;;;;;;;;24734:37;;24805:6;24790:11;:21;;24782:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;24922:6;24908:11;:20;24890:9;:15;24900:4;24890:15;;;;;;;;;;;;;;;:38;;;;25125:6;25108:9;:13;25118:2;25108:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;25175:2;25160:26;;25169:4;25160:26;;;25179:6;25160:26;;;;;;:::i;:::-;;;;;;;;25199:37;25219:4;25225:2;25229:6;25199:19;:37::i;:::-;24516:728;24438:806;;;:::o;11959:132::-;12034:12;:10;:12::i;:::-;12023:23;;:7;:5;:7::i;:::-;:23;;;12015:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11959:132::o;13054:191::-;13128:16;13147:6;;;;;;;;;;;13128:25;;13173:8;13164:6;;:17;;;;;;;;;;;;;;;;;;13228:8;13197:40;;13218:8;13197:40;;;;;;;;;;;;13117:128;13054:191;:::o;29181:91::-;;;;:::o;29876:90::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:329::-;4912:6;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;4853:329;;;;:::o;5188:117::-;5297:1;5294;5287:12;5311:180;5359:77;5356:1;5349:88;5456:4;5453:1;5446:15;5480:4;5477:1;5470:15;5497:281;5580:27;5602:4;5580:27;:::i;:::-;5572:6;5568:40;5710:6;5698:10;5695:22;5674:18;5662:10;5659:34;5656:62;5653:88;;;5721:18;;:::i;:::-;5653:88;5761:10;5757:2;5750:22;5540:238;5497:281;;:::o;5784:129::-;5818:6;5845:20;;:::i;:::-;5835:30;;5874:33;5902:4;5894:6;5874:33;:::i;:::-;5784:129;;;:::o;5919:311::-;5996:4;6086:18;6078:6;6075:30;6072:56;;;6108:18;;:::i;:::-;6072:56;6158:4;6150:6;6146:17;6138:25;;6218:4;6212;6208:15;6200:23;;5919:311;;;:::o;6236:117::-;6345:1;6342;6335:12;6376:710;6472:5;6497:81;6513:64;6570:6;6513:64;:::i;:::-;6497:81;:::i;:::-;6488:90;;6598:5;6627:6;6620:5;6613:21;6661:4;6654:5;6650:16;6643:23;;6714:4;6706:6;6702:17;6694:6;6690:30;6743:3;6735:6;6732:15;6729:122;;;6762:79;;:::i;:::-;6729:122;6877:6;6860:220;6894:6;6889:3;6886:15;6860:220;;;6969:3;6998:37;7031:3;7019:10;6998:37;:::i;:::-;6993:3;6986:50;7065:4;7060:3;7056:14;7049:21;;6936:144;6920:4;6915:3;6911:14;6904:21;;6860:220;;;6864:21;6478:608;;6376:710;;;;;:::o;7109:370::-;7180:5;7229:3;7222:4;7214:6;7210:17;7206:27;7196:122;;7237:79;;:::i;:::-;7196:122;7354:6;7341:20;7379:94;7469:3;7461:6;7454:4;7446:6;7442:17;7379:94;:::i;:::-;7370:103;;7186:293;7109:370;;;;:::o;7485:311::-;7562:4;7652:18;7644:6;7641:30;7638:56;;;7674:18;;:::i;:::-;7638:56;7724:4;7716:6;7712:17;7704:25;;7784:4;7778;7774:15;7766:23;;7485:311;;;:::o;7819:710::-;7915:5;7940:81;7956:64;8013:6;7956:64;:::i;:::-;7940:81;:::i;:::-;7931:90;;8041:5;8070:6;8063:5;8056:21;8104:4;8097:5;8093:16;8086:23;;8157:4;8149:6;8145:17;8137:6;8133:30;8186:3;8178:6;8175:15;8172:122;;;8205:79;;:::i;:::-;8172:122;8320:6;8303:220;8337:6;8332:3;8329:15;8303:220;;;8412:3;8441:37;8474:3;8462:10;8441:37;:::i;:::-;8436:3;8429:50;8508:4;8503:3;8499:14;8492:21;;8379:144;8363:4;8358:3;8354:14;8347:21;;8303:220;;;8307:21;7921:608;;7819:710;;;;;:::o;8552:370::-;8623:5;8672:3;8665:4;8657:6;8653:17;8649:27;8639:122;;8680:79;;:::i;:::-;8639:122;8797:6;8784:20;8822:94;8912:3;8904:6;8897:4;8889:6;8885:17;8822:94;:::i;:::-;8813:103;;8629:293;8552:370;;;;:::o;8928:894::-;9046:6;9054;9103:2;9091:9;9082:7;9078:23;9074:32;9071:119;;;9109:79;;:::i;:::-;9071:119;9257:1;9246:9;9242:17;9229:31;9287:18;9279:6;9276:30;9273:117;;;9309:79;;:::i;:::-;9273:117;9414:78;9484:7;9475:6;9464:9;9460:22;9414:78;:::i;:::-;9404:88;;9200:302;9569:2;9558:9;9554:18;9541:32;9600:18;9592:6;9589:30;9586:117;;;9622:79;;:::i;:::-;9586:117;9727:78;9797:7;9788:6;9777:9;9773:22;9727:78;:::i;:::-;9717:88;;9512:303;8928:894;;;;;:::o;9828:118::-;9915:24;9933:5;9915:24;:::i;:::-;9910:3;9903:37;9828:118;;:::o;9952:222::-;10045:4;10083:2;10072:9;10068:18;10060:26;;10096:71;10164:1;10153:9;10149:17;10140:6;10096:71;:::i;:::-;9952:222;;;;:::o;10180:329::-;10239:6;10288:2;10276:9;10267:7;10263:23;10259:32;10256:119;;;10294:79;;:::i;:::-;10256:119;10414:1;10439:53;10484:7;10475:6;10464:9;10460:22;10439:53;:::i;:::-;10429:63;;10385:117;10180:329;;;;:::o;10515:553::-;10692:4;10730:3;10719:9;10715:19;10707:27;;10744:71;10812:1;10801:9;10797:17;10788:6;10744:71;:::i;:::-;10825:72;10893:2;10882:9;10878:18;10869:6;10825:72;:::i;:::-;10907;10975:2;10964:9;10960:18;10951:6;10907:72;:::i;:::-;10989;11057:2;11046:9;11042:18;11033:6;10989:72;:::i;:::-;10515:553;;;;;;;:::o;11074:474::-;11142:6;11150;11199:2;11187:9;11178:7;11174:23;11170:32;11167:119;;;11205:79;;:::i;:::-;11167:119;11325:1;11350:53;11395:7;11386:6;11375:9;11371:22;11350:53;:::i;:::-;11340:63;;11296:117;11452:2;11478:53;11523:7;11514:6;11503:9;11499:22;11478:53;:::i;:::-;11468:63;;11423:118;11074:474;;;;;:::o;11554:180::-;11602:77;11599:1;11592:88;11699:4;11696:1;11689:15;11723:4;11720:1;11713:15;11740:320;11784:6;11821:1;11815:4;11811:12;11801:22;;11868:1;11862:4;11858:12;11889:18;11879:81;;11945:4;11937:6;11933:17;11923:27;;11879:81;12007:2;11999:6;11996:14;11976:18;11973:38;11970:84;;12026:18;;:::i;:::-;11970:84;11791:269;11740:320;;;:::o;12066:180::-;12114:77;12111:1;12104:88;12211:4;12208:1;12201:15;12235:4;12232:1;12225:15;12252:191;12292:3;12311:20;12329:1;12311:20;:::i;:::-;12306:25;;12345:20;12363:1;12345:20;:::i;:::-;12340:25;;12388:1;12385;12381:9;12374:16;;12409:3;12406:1;12403:10;12400:36;;;12416:18;;:::i;:::-;12400:36;12252:191;;;;:::o;12449:165::-;12589:17;12585:1;12577:6;12573:14;12566:41;12449:165;:::o;12620:366::-;12762:3;12783:67;12847:2;12842:3;12783:67;:::i;:::-;12776:74;;12859:93;12948:3;12859:93;:::i;:::-;12977:2;12972:3;12968:12;12961:19;;12620:366;;;:::o;12992:419::-;13158:4;13196:2;13185:9;13181:18;13173:26;;13245:9;13239:4;13235:20;13231:1;13220:9;13216:17;13209:47;13273:131;13399:4;13273:131;:::i;:::-;13265:139;;12992:419;;;:::o;13417:102::-;13459:8;13506:5;13503:1;13499:13;13478:34;;13417:102;;;:::o;13525:848::-;13586:5;13593:4;13617:6;13608:15;;13641:5;13632:14;;13655:712;13676:1;13666:8;13663:15;13655:712;;;13771:4;13766:3;13762:14;13756:4;13753:24;13750:50;;;13780:18;;:::i;:::-;13750:50;13830:1;13820:8;13816:16;13813:451;;;14245:4;14238:5;14234:16;14225:25;;13813:451;14295:4;14289;14285:15;14277:23;;14325:32;14348:8;14325:32;:::i;:::-;14313:44;;13655:712;;;13525:848;;;;;;;:::o;14379:1073::-;14433:5;14624:8;14614:40;;14645:1;14636:10;;14647:5;;14614:40;14673:4;14663:36;;14690:1;14681:10;;14692:5;;14663:36;14759:4;14807:1;14802:27;;;;14843:1;14838:191;;;;14752:277;;14802:27;14820:1;14811:10;;14822:5;;;14838:191;14883:3;14873:8;14870:17;14867:43;;;14890:18;;:::i;:::-;14867:43;14939:8;14936:1;14932:16;14923:25;;14974:3;14967:5;14964:14;14961:40;;;14981:18;;:::i;:::-;14961:40;15014:5;;;14752:277;;15138:2;15128:8;15125:16;15119:3;15113:4;15110:13;15106:36;15088:2;15078:8;15075:16;15070:2;15064:4;15061:12;15057:35;15041:111;15038:246;;;15194:8;15188:4;15184:19;15175:28;;15229:3;15222:5;15219:14;15216:40;;;15236:18;;:::i;:::-;15216:40;15269:5;;15038:246;15309:42;15347:3;15337:8;15331:4;15328:1;15309:42;:::i;:::-;15294:57;;;;15383:4;15378:3;15374:14;15367:5;15364:25;15361:51;;;15392:18;;:::i;:::-;15361:51;15441:4;15434:5;15430:16;15421:25;;14379:1073;;;;;;:::o;15458:285::-;15518:5;15542:23;15560:4;15542:23;:::i;:::-;15534:31;;15586:27;15604:8;15586:27;:::i;:::-;15574:39;;15632:104;15669:66;15659:8;15653:4;15632:104;:::i;:::-;15623:113;;15458:285;;;;:::o;15749:410::-;15789:7;15812:20;15830:1;15812:20;:::i;:::-;15807:25;;15846:20;15864:1;15846:20;:::i;:::-;15841:25;;15901:1;15898;15894:9;15923:30;15941:11;15923:30;:::i;:::-;15912:41;;16102:1;16093:7;16089:15;16086:1;16083:22;16063:1;16056:9;16036:83;16013:139;;16132:18;;:::i;:::-;16013:139;15797:362;15749:410;;;;:::o;16165:233::-;16204:3;16227:24;16245:5;16227:24;:::i;:::-;16218:33;;16273:66;16266:5;16263:77;16260:103;;16343:18;;:::i;:::-;16260:103;16390:1;16383:5;16379:13;16372:20;;16165:233;;;:::o;16404:172::-;16544:24;16540:1;16532:6;16528:14;16521:48;16404:172;:::o;16582:366::-;16724:3;16745:67;16809:2;16804:3;16745:67;:::i;:::-;16738:74;;16821:93;16910:3;16821:93;:::i;:::-;16939:2;16934:3;16930:12;16923:19;;16582:366;;;:::o;16954:419::-;17120:4;17158:2;17147:9;17143:18;17135:26;;17207:9;17201:4;17197:20;17193:1;17182:9;17178:17;17171:47;17235:131;17361:4;17235:131;:::i;:::-;17227:139;;16954:419;;;:::o;17379:180::-;17427:77;17424:1;17417:88;17524:4;17521:1;17514:15;17548:4;17545:1;17538:15;17565:170;17705:22;17701:1;17693:6;17689:14;17682:46;17565:170;:::o;17741:366::-;17883:3;17904:67;17968:2;17963:3;17904:67;:::i;:::-;17897:74;;17980:93;18069:3;17980:93;:::i;:::-;18098:2;18093:3;18089:12;18082:19;;17741:366;;;:::o;18113:419::-;18279:4;18317:2;18306:9;18302:18;18294:26;;18366:9;18360:4;18356:20;18352:1;18341:9;18337:17;18330:47;18394:131;18520:4;18394:131;:::i;:::-;18386:139;;18113:419;;;:::o;18538:224::-;18678:34;18674:1;18666:6;18662:14;18655:58;18747:7;18742:2;18734:6;18730:15;18723:32;18538:224;:::o;18768:366::-;18910:3;18931:67;18995:2;18990:3;18931:67;:::i;:::-;18924:74;;19007:93;19096:3;19007:93;:::i;:::-;19125:2;19120:3;19116:12;19109:19;;18768:366;;;:::o;19140:419::-;19306:4;19344:2;19333:9;19329:18;19321:26;;19393:9;19387:4;19383:20;19379:1;19368:9;19364:17;19357:47;19421:131;19547:4;19421:131;:::i;:::-;19413:139;;19140:419;;;:::o;19565:225::-;19705:34;19701:1;19693:6;19689:14;19682:58;19774:8;19769:2;19761:6;19757:15;19750:33;19565:225;:::o;19796:366::-;19938:3;19959:67;20023:2;20018:3;19959:67;:::i;:::-;19952:74;;20035:93;20124:3;20035:93;:::i;:::-;20153:2;20148:3;20144:12;20137:19;;19796:366;;;:::o;20168:419::-;20334:4;20372:2;20361:9;20357:18;20349:26;;20421:9;20415:4;20411:20;20407:1;20396:9;20392:17;20385:47;20449:131;20575:4;20449:131;:::i;:::-;20441:139;;20168:419;;;:::o;20593:223::-;20733:34;20729:1;20721:6;20717:14;20710:58;20802:6;20797:2;20789:6;20785:15;20778:31;20593:223;:::o;20822:366::-;20964:3;20985:67;21049:2;21044:3;20985:67;:::i;:::-;20978:74;;21061:93;21150:3;21061:93;:::i;:::-;21179:2;21174:3;21170:12;21163:19;;20822:366;;;:::o;21194:419::-;21360:4;21398:2;21387:9;21383:18;21375:26;;21447:9;21441:4;21437:20;21433:1;21422:9;21418:17;21411:47;21475:131;21601:4;21475:131;:::i;:::-;21467:139;;21194:419;;;:::o;21619:221::-;21759:34;21755:1;21747:6;21743:14;21736:58;21828:4;21823:2;21815:6;21811:15;21804:29;21619:221;:::o;21846:366::-;21988:3;22009:67;22073:2;22068:3;22009:67;:::i;:::-;22002:74;;22085:93;22174:3;22085:93;:::i;:::-;22203:2;22198:3;22194:12;22187:19;;21846:366;;;:::o;22218:419::-;22384:4;22422:2;22411:9;22407:18;22399:26;;22471:9;22465:4;22461:20;22457:1;22446:9;22442:17;22435:47;22499:131;22625:4;22499:131;:::i;:::-;22491:139;;22218:419;;;:::o;22643:179::-;22783:31;22779:1;22771:6;22767:14;22760:55;22643:179;:::o;22828:366::-;22970:3;22991:67;23055:2;23050:3;22991:67;:::i;:::-;22984:74;;23067:93;23156:3;23067:93;:::i;:::-;23185:2;23180:3;23176:12;23169:19;;22828:366;;;:::o;23200:419::-;23366:4;23404:2;23393:9;23389:18;23381:26;;23453:9;23447:4;23443:20;23439:1;23428:9;23424:17;23417:47;23481:131;23607:4;23481:131;:::i;:::-;23473:139;;23200:419;;;:::o;23625:224::-;23765:34;23761:1;23753:6;23749:14;23742:58;23834:7;23829:2;23821:6;23817:15;23810:32;23625:224;:::o;23855:366::-;23997:3;24018:67;24082:2;24077:3;24018:67;:::i;:::-;24011:74;;24094:93;24183:3;24094:93;:::i;:::-;24212:2;24207:3;24203:12;24196:19;;23855:366;;;:::o;24227:419::-;24393:4;24431:2;24420:9;24416:18;24408:26;;24480:9;24474:4;24470:20;24466:1;24455:9;24451:17;24444:47;24508:131;24634:4;24508:131;:::i;:::-;24500:139;;24227:419;;;:::o;24652:222::-;24792:34;24788:1;24780:6;24776:14;24769:58;24861:5;24856:2;24848:6;24844:15;24837:30;24652:222;:::o;24880:366::-;25022:3;25043:67;25107:2;25102:3;25043:67;:::i;:::-;25036:74;;25119:93;25208:3;25119:93;:::i;:::-;25237:2;25232:3;25228:12;25221:19;;24880:366;;;:::o;25252:419::-;25418:4;25456:2;25445:9;25441:18;25433:26;;25505:9;25499:4;25495:20;25491:1;25480:9;25476:17;25469:47;25533:131;25659:4;25533:131;:::i;:::-;25525:139;;25252:419;;;:::o;25677:225::-;25817:34;25813:1;25805:6;25801:14;25794:58;25886:8;25881:2;25873:6;25869:15;25862:33;25677:225;:::o;25908:366::-;26050:3;26071:67;26135:2;26130:3;26071:67;:::i;:::-;26064:74;;26147:93;26236:3;26147:93;:::i;:::-;26265:2;26260:3;26256:12;26249:19;;25908:366;;;:::o;26280:419::-;26446:4;26484:2;26473:9;26469:18;26461:26;;26533:9;26527:4;26523:20;26519:1;26508:9;26504:17;26497:47;26561:131;26687:4;26561:131;:::i;:::-;26553:139;;26280:419;;;:::o;26705:182::-;26845:34;26841:1;26833:6;26829:14;26822:58;26705:182;:::o;26893:366::-;27035:3;27056:67;27120:2;27115:3;27056:67;:::i;:::-;27049:74;;27132:93;27221:3;27132:93;:::i;:::-;27250:2;27245:3;27241:12;27234:19;;26893:366;;;:::o;27265:419::-;27431:4;27469:2;27458:9;27454:18;27446:26;;27518:9;27512:4;27508:20;27504:1;27493:9;27489:17;27482:47;27546:131;27672:4;27546:131;:::i;:::-;27538:139;;27265:419;;;:::o
Swarm Source
ipfs://1a88997f768badc39628a3984d6417abb5b9b4f53b177c611611c32980b0e9df
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.