Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 453 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 23580421 | 151 days ago | IN | 0 ETH | 0.00006338 | ||||
| Approve | 23429296 | 172 days ago | IN | 0 ETH | 0.0000079 | ||||
| Approve | 23427633 | 172 days ago | IN | 0 ETH | 0.00003396 | ||||
| Approve | 23427620 | 172 days ago | IN | 0 ETH | 0.00006161 | ||||
| Approve | 23426874 | 172 days ago | IN | 0 ETH | 0.00007659 | ||||
| Approve | 23426855 | 172 days ago | IN | 0 ETH | 0.00007925 | ||||
| Approve | 23426550 | 172 days ago | IN | 0 ETH | 0.00012934 | ||||
| Approve | 23213286 | 202 days ago | IN | 0 ETH | 0.00012053 | ||||
| Approve | 23196386 | 204 days ago | IN | 0 ETH | 0.00010784 | ||||
| Approve | 23196376 | 204 days ago | IN | 0 ETH | 0.00010609 | ||||
| Approve | 23193563 | 205 days ago | IN | 0 ETH | 0.00010309 | ||||
| Approve | 23095236 | 218 days ago | IN | 0 ETH | 0.00001438 | ||||
| Approve | 23073336 | 221 days ago | IN | 0 ETH | 0.00001449 | ||||
| Approve | 22960748 | 237 days ago | IN | 0 ETH | 0.0001693 | ||||
| Transfer | 22937375 | 241 days ago | IN | 0 ETH | 0.00025014 | ||||
| Transfer | 22930603 | 241 days ago | IN | 0 ETH | 0.00015603 | ||||
| Approve | 22728150 | 270 days ago | IN | 0 ETH | 0.00002519 | ||||
| Transfer | 22272756 | 334 days ago | IN | 0 ETH | 0.00005357 | ||||
| Approve | 22256097 | 336 days ago | IN | 0 ETH | 0.00002422 | ||||
| Approve | 22044623 | 365 days ago | IN | 0 ETH | 0.00001833 | ||||
| Approve | 22044623 | 365 days ago | IN | 0 ETH | 0.00001735 | ||||
| Approve | 22016696 | 369 days ago | IN | 0 ETH | 0.00013592 | ||||
| Approve | 21974321 | 375 days ago | IN | 0 ETH | 0.00024969 | ||||
| Approve | 21881221 | 388 days ago | IN | 0 ETH | 0.00004384 | ||||
| Approve | 21817499 | 397 days ago | IN | 0 ETH | 0.00003775 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 23675696 | 137 days ago | 0.00935486 ETH | ||||
| Transfer | 23675696 | 137 days ago | 0.00935486 ETH | ||||
| Transfer | 23675696 | 137 days ago | 0.00935486 ETH | ||||
| Transfer | 23675696 | 137 days ago | 0.00935486 ETH | ||||
| Transfer | 23675696 | 137 days ago | 0.03741946 ETH | ||||
| Transfer | 23580423 | 151 days ago | 0.00003339 ETH | ||||
| Transfer | 23580423 | 151 days ago | 0.00003339 ETH | ||||
| Transfer | 23580423 | 151 days ago | 0.00003339 ETH | ||||
| Transfer | 23580423 | 151 days ago | 0.00003339 ETH | ||||
| Transfer | 23580423 | 151 days ago | 0.00013359 ETH | ||||
| Transfer | 23436240 | 171 days ago | 0.00056348 ETH | ||||
| Transfer | 23436240 | 171 days ago | 0.00056348 ETH | ||||
| Transfer | 23436240 | 171 days ago | 0.00056348 ETH | ||||
| Transfer | 23436240 | 171 days ago | 0.00056348 ETH | ||||
| Transfer | 23436240 | 171 days ago | 0.00225393 ETH | ||||
| Transfer | 23436230 | 171 days ago | 0.00081377 ETH | ||||
| Transfer | 23436230 | 171 days ago | 0.00081377 ETH | ||||
| Transfer | 23436230 | 171 days ago | 0.00081377 ETH | ||||
| Transfer | 23436230 | 171 days ago | 0.00081377 ETH | ||||
| Transfer | 23436230 | 171 days ago | 0.00325508 ETH | ||||
| Transfer | 23436148 | 171 days ago | 0.00092091 ETH | ||||
| Transfer | 23436148 | 171 days ago | 0.00092091 ETH | ||||
| Transfer | 23436148 | 171 days ago | 0.00092091 ETH | ||||
| Transfer | 23436148 | 171 days ago | 0.00092091 ETH | ||||
| Transfer | 23436148 | 171 days ago | 0.00368367 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
KROK
Compiler Version
v0.8.27+commit.40a35a09
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2024-09-26
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.27;
/**
Das ist Krok!
Website: https://krok.show
Telegram: https://t.me/krokshowchat
Twitter: https://x.com/krokshow
*/
/*
██ ██ ██████ ██████ ██ ██
██ ██ ██ ██ ██ ██ ██ ██
█████ ██████ ██ ██ █████
██ ██ ██ ██ ██ ██ ██ ██
██ ██ ██ ██ ██████ ██ ██
*/
/**
* @dev Standard ERC20 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
*/
interface IERC20Errors {
/**
* @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param balance Current balance for the interacting account.
* @param needed Minimum amount required to perform a transfer.
*/
error ERC20InsufficientBalance(
address sender,
uint256 balance,
uint256 needed
);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC20InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC20InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
* @param spender Address that may be allowed to operate on tokens without being their owner.
* @param allowance Amount of tokens a `spender` is allowed to operate with.
* @param needed Minimum amount required to perform a transfer.
*/
error ERC20InsufficientAllowance(
address spender,
uint256 allowance,
uint256 needed
);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC20InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `spender` to be approved. Used in approvals.
* @param spender Address that may be allowed to operate on tokens without being their owner.
*/
error ERC20InvalidSpender(address spender);
}
/**
* @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;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 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.
*
*
* 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;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @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 {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @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`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
/**
* @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 value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` 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 value
) external returns (bool);
}
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*/
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);
}
/**
* @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}.
*
* 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.
*/
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
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 returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual 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 returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual 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 `value`.
*/
function transfer(address to, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_transfer(owner, to, value);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender)
public
view
virtual
returns (uint256)
{
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* NOTE: If `value` 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 value)
public
virtual
returns (bool)
{
address owner = _msgSender();
_approve(owner, spender, value);
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 `value`.
* - the caller must have allowance for ``from``'s tokens of at least
* `value`.
*/
function transferFrom(
address from,
address to,
uint256 value
) public virtual returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, value);
_transfer(from, to, value);
return true;
}
/**
* @dev Moves a `value` amount of tokens from `from` to `to`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token taxes, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* NOTE: This function is not virtual, {_update} should be overridden instead.
*/
function _transfer(
address from,
address to,
uint256 value
) internal {
if (from == address(0)) {
revert ERC20InvalidSender(address(0));
}
if (to == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(from, to, value);
}
/**
* @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
* (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
* this function.
*
* Emits a {Transfer} event.
*/
function _update(
address from,
address to,
uint256 value
) internal virtual {
if (from == address(0)) {
// Overflow check required: The rest of the code assumes that totalSupply never overflows
_totalSupply += value;
} else {
uint256 fromBalance = _balances[from];
if (fromBalance < value) {
revert ERC20InsufficientBalance(from, fromBalance, value);
}
unchecked {
// Overflow not possible: value <= fromBalance <= totalSupply.
_balances[from] = fromBalance - value;
}
}
if (to == address(0)) {
unchecked {
// Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
_totalSupply -= value;
}
} else {
unchecked {
// Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
_balances[to] += value;
}
}
emit Transfer(from, to, value);
}
/**
* @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
* Relies on the `_update` mechanism
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* NOTE: This function is not virtual, {_update} should be overridden instead.
*/
function _mint(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(address(0), account, value);
}
/**
* @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
* Relies on the `_update` mechanism.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* NOTE: This function is not virtual, {_update} should be overridden instead
*/
function _burn(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidSender(address(0));
}
_update(account, address(0), value);
}
/**
* @dev Sets `value` 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.
*
* Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
*/
function _approve(
address owner,
address spender,
uint256 value
) internal {
_approve(owner, spender, value, true);
}
/**
* @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
*
* By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
* `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
* `Approval` event during `transferFrom` operations.
*
* Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
* true using the following override:
* ```
* function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
* super._approve(owner, spender, value, true);
* }
* ```
*
* Requirements are the same as {_approve}.
*/
function _approve(
address owner,
address spender,
uint256 value,
bool emitEvent
) internal virtual {
if (owner == address(0)) {
revert ERC20InvalidApprover(address(0));
}
if (spender == address(0)) {
revert ERC20InvalidSpender(address(0));
}
_allowances[owner][spender] = value;
if (emitEvent) {
emit Approval(owner, spender, value);
}
}
/**
* @dev Updates `owner` s allowance for `spender` based on spent `value`.
*
* Does not update the allowance value in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Does not emit an {Approval} event.
*/
function _spendAllowance(
address owner,
address spender,
uint256 value
) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
if (currentAllowance < value) {
revert ERC20InsufficientAllowance(
spender,
currentAllowance,
value
);
}
unchecked {
_approve(owner, spender, currentAllowance - value, false);
}
}
}
}
interface IUniswapV2Factory {
function createPair(address tokenA, address tokenB)
external
returns (address pair);
}
interface IUniswapV2Router {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function swapExactTokensForETH(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (
uint256 amountToken,
uint256 amountETH,
uint256 liquidity
);
}
contract KROK is ERC20, Ownable {
//Wallets
address[] internal taxWallets;
/// MAX AMOUNT PER BUY / SELL
uint256 internal maxAmountPerTx = MAX_SUPPLY / 50;
/// MAX WALLET AMOUNT
uint256 internal maxWalletAmount = MAX_SUPPLY / 50;
/// MAX SUPPLY
uint256 internal constant MAX_SUPPLY = 1_000_000_000 * 1e18;
/// PERCENT_DIVISOR
uint256 internal constant PERCENT_DIVISOR = 10_000;
/// TAX
uint256 internal constant totalBuyTax = 200;
uint256 internal constant totalSellTax = 200;
/// Threshold after which collected tax is sold for eth
uint256 internal constant swapTokensAtAmount = MAX_SUPPLY / 100_000; // = 0.01%
/// Trading flag
bool internal trading;
/// mapping for managing users which are excluded from taxes
mapping(address => bool) internal isExcluded;
/// @notice uniswapV2Router
IUniswapV2Router internal immutable uniswapV2Router;
/// @notice uniswapPair
address internal immutable uniswapPair;
/// swapping used during collected tokens are swapped for eth
bool internal swapping;
//// EVENTS
event TaxWalletTransferred(
address indexed oldTaxWallet,
address indexed newTaxWallet
);
//// MODIFIER
/**
* @dev Throws if the sender is not the tax wallet.
*/
modifier onlyTaxWallets() {
require(
addressExists(taxWallets, msg.sender),
"Not a Tax Wallet"
);
_;
}
function addressExists(address[] memory addresses, address _address)
internal
pure
returns (bool)
{
for (uint256 i = 0; i < addresses.length; i++) {
if (addresses[i] == _address) {
return true;
}
}
return false;
}
/** @notice create an erc20, initialize all required variables
* like owner, uniswap v2 router, taxes values and wallets values.
* excludes the owner and token address from taxes and limits.
* mints the total supply to the owner wallet.
*/
constructor() ERC20("KROK", "$krok") Ownable(msg.sender) {
uniswapV2Router = IUniswapV2Router(
0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
);
taxWallets = [
0x59247Ed344b4505f2Ad78Cfb4D68a97fBFf51425,
0x1C943C236c17Fce419F60B5828BebbE986E097e2,
0x962A99Ee3df178DDeA7f4388DC92669136803618,
0x758F3A7E9BefAEBF425dcb87fc8bF8399cd89222
];
uniswapPair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
address(this),
uniswapV2Router.WETH()
);
isExcluded[address(this)] = true;
isExcluded[msg.sender] = true;
isExcluded[address(0x0)] = true;
for (uint256 i = 0; i < taxWallets.length; i++) {
isExcluded[taxWallets[i]] = true;
}
trading = false;
_mint(msg.sender, MAX_SUPPLY);
}
/**
* @notice to recieve ETH from uniswapV2Router when swapping
*/
receive() external payable {}
/**
* @notice Allows the marketing wallet to claim stuck ERC20 tokens
* @dev Only the marketing wallet can call this function
* @param token The address of the ERC20 token to claim
* @param value The amount of tokens to claim
* @param wallet The address to transfer the claimed tokens to
*/
function claimStuckERC20(
address token,
uint256 value,
address wallet
) external onlyTaxWallets {
ERC20 ERC20Token = ERC20(token);
bool success = ERC20Token.transfer(wallet, value);
require(success, "ERC20 transfer failed");
}
/**
* @notice Allows the marketing wallet to claim stuck ERC20 tokens
* @dev Only the marketing wallet can call this function
* @param wallet The address to transfer the claimed tokens to
*/
function claimStuckEth(address wallet) external onlyTaxWallets {
require(wallet != address(0), "Wallet must not be 0x0 address");
uint256 balance = address(this).balance;
require(balance > 0, "No ETH to transfer");
payable(wallet).transfer(balance);
}
/**
* @notice Enable Trading
*/
function enableTrading() external onlyOwner {
require(!trading, "Trading already open");
require(address(this).balance > 0, "Needs ETH for liquidity");
_approve(address(this), address(uniswapV2Router), MAX_SUPPLY);
uniswapV2Router.addLiquidityETH{value: address(this).balance}(
address(this),
balanceOf(address(this)),
0,
0,
owner(),
block.timestamp
);
trading = true;
}
/**
* @notice Update the Tax Wallet wallet address
* @param newTaxWallet: The new address for the Tax wallet
*/
function transferTaxWallet(address newTaxWallet) external onlyTaxWallets {
require(
newTaxWallet != address(0x0) && newTaxWallet != address(0xdead),
"New Tax Wallet not 0x0 or 0xdead"
);
require(
!addressExists(taxWallets, newTaxWallet),
"New tax wallet already exists"
);
for (uint256 i = 0; i < taxWallets.length; i++) {
if (taxWallets[i] == msg.sender) {
taxWallets[i] = newTaxWallet;
break;
}
}
isExcluded[msg.sender] = false;
isExcluded[newTaxWallet] = true;
emit TaxWalletTransferred(msg.sender, newTaxWallet);
}
/**
* @notice Remove buy and sell restrictions
*/
function removeRestrictions() external onlyOwner {
maxAmountPerTx = MAX_SUPPLY;
maxWalletAmount = MAX_SUPPLY;
}
/**
* @notice Override for _update required by Solidity
* Manage fees on buy/sell and maxTxAmount/MaxWalletLimit
**/
function _update(
address from,
address to,
uint256 amount
) internal override {
require(
trading ||
isExcluded[from] ||
isExcluded[to] ||
(from == address(uniswapV2Router) && to == uniswapPair) ||
(to == address(uniswapV2Router) && from == uniswapPair),
"Trading disabled"
);
if (!(isExcluded[from] || isExcluded[to]) && trading) {
uint256 fee;
if (to != uniswapPair) {
require(
amount + balanceOf(to) <= maxWalletAmount,
"Max limit per wallet reached"
);
}
if (from == uniswapPair) {
require(
amount <= maxAmountPerTx,
"Max buy amount exceeded"
);
fee = (amount * totalBuyTax) / PERCENT_DIVISOR;
} else if (to == uniswapPair) {
require(
amount <= maxAmountPerTx,
"Max sell amount exceeded"
);
fee = (amount * totalSellTax) / PERCENT_DIVISOR;
}
amount = amount - fee;
if (fee > 0) {
super._update(from, address(this), fee);
}
}
uint256 contractBalance = balanceOf(address(this));
//Only swap into ETH when trading is happening
bool canSwap = contractBalance >= swapTokensAtAmount &&
from != uniswapPair &&
!isExcluded[from] &&
!swapping &&
trading;
if (canSwap) {
swapping = true;
swapAndDistribute(contractBalance);
swapping = false;
}
super._update(from, to, amount);
}
/**
* @notice The function swaps tokens for ETH, adds liquidity to the Uniswap V2 pair,
* and distributes fees according to the configured percentages.
*
* @param tokens The total amount of tokens to process for swapping and liquidity addition.
*
*/
function swapAndDistribute(uint256 tokens) private {
swapForEth(tokens);
if (address(this).balance > 0) {
uint256 balancePayout = address(this).balance / taxWallets.length;
for (uint256 i = 0; i < taxWallets.length; i++) {
payable(taxWallets[i]).transfer(balancePayout);
}
}
}
/**
* @notice Swaps the specified amount of tokens for ETH using the Uniswap V2 Router.
*
* @param tokens The amount of tokens to swap for ETH.
*
* @dev This function generates the Uniswap pair path for the token to WETH,
* checks the allowance for the token with the Uniswap V2 Router, and then makes
* the swap from tokens to ETH. It ensures that the swap supports fees on transfer tokens
* and sets a deadline for the swap transaction.
*/
function swapForEth(uint256 tokens) private {
// generate the Uniswap pair path of token -> WETH
address contractAddress = address(this);
address[] memory path = new address[](2);
path[0] = contractAddress;
path[1] = uniswapV2Router.WETH();
if (allowance(contractAddress, address(uniswapV2Router)) < tokens) {
_approve(
contractAddress,
address(uniswapV2Router),
type(uint256).max
);
}
// make the swap
uniswapV2Router.swapExactTokensForETH(
tokens,
0,
path,
contractAddress,
block.timestamp
);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldTaxWallet","type":"address"},{"indexed":true,"internalType":"address","name":"newTaxWallet","type":"address"}],"name":"TaxWalletTransferred","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":[{"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":"value","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":"token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"address","name":"wallet","type":"address"}],"name":"claimStuckERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"claimStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeRestrictions","outputs":[],"stateMutability":"nonpayable","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTaxWallet","type":"address"}],"name":"transferTaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60c060405261001b60326b033b2e3c9fd0803ce8000000610cd4565b60075561003560326b033b2e3c9fd0803ce8000000610cd4565b600855348015610043575f5ffd5b5033604051806040016040528060048152602001634b524f4b60e01b81525060405180604001604052806005815260200164246b726f6b60d81b815250816003908161008f9190610d83565b50600461009c8282610d83565b5050506001600160a01b0381166100cd57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6100d681610396565b50737a250d5630b4cf539739df2c5dacb4c659f2488d60809081526040805191820181527359247ed344b4505f2ad78cfb4d68a97fbff514258252731c943c236c17fce419f60b5828bebbe986e097e2602083015273962a99ee3df178ddea7f4388dc926691368036189082015273758f3a7e9befaebf425dcb87fc8bf8399cd89222606082015261016c906006906004610c49565b506080516001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101ab573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101cf9190610e3d565b6001600160a01b031663c9c65396306080516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561021c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102409190610e3d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801561028a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102ae9190610e3d565b6001600160a01b031660a052305f908152600a60205260408082208054600160ff19918216811790925533845291832080548316821790558280527f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e380549092161790555b600654811015610370576001600a5f6006848154811061033557610335610e6a565b5f918252602080832091909101546001600160a01b031683528201929092526040019020805460ff1916911515919091179055600101610313565b506009805460ff19169055610391336b033b2e3c9fd0803ce80000006103e7565b610ff2565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382166104105760405163ec442f0560e01b81525f60048201526024016100c4565b61041b5f838361041f565b5050565b60095460ff168061044757506001600160a01b0383165f908152600a602052604090205460ff165b8061046957506001600160a01b0382165f908152600a602052604090205460ff165b806104a557506080516001600160a01b0316836001600160a01b03161480156104a5575060a0516001600160a01b0316826001600160a01b0316145b806104e157506080516001600160a01b0316826001600160a01b03161480156104e1575060a0516001600160a01b0316836001600160a01b0316145b6105205760405162461bcd60e51b815260206004820152601060248201526f151c98591a5b99c8191a5cd8589b195960821b60448201526064016100c4565b6001600160a01b0383165f908152600a602052604090205460ff168061055d57506001600160a01b0382165f908152600a602052604090205460ff165b15801561056c575060095460ff165b15610733575f60a0516001600160a01b0316836001600160a01b031614610600576008546001600160a01b0384165f908152602081905260409020546105b29084610e7e565b11156106005760405162461bcd60e51b815260206004820152601c60248201527f4d6178206c696d6974207065722077616c6c657420726561636865640000000060448201526064016100c4565b60a0516001600160a01b0316846001600160a01b03160361068c5760075482111561066d5760405162461bcd60e51b815260206004820152601760248201527f4d61782062757920616d6f756e7420657863656564656400000000000000000060448201526064016100c4565b61271061067b60c884610e91565b6106859190610cd4565b9050610714565b60a0516001600160a01b0316836001600160a01b031603610714576007548211156106f95760405162461bcd60e51b815260206004820152601860248201527f4d61782073656c6c20616d6f756e74206578636565646564000000000000000060448201526064016100c4565b61271061070760c884610e91565b6107119190610cd4565b90505b61071e8183610ea8565b91508015610731576107318430836107fb565b505b305f908152602081905260408120549061075c620186a06b033b2e3c9fd0803ce8000000610cd4565b821015801561077f575060a0516001600160a01b0316856001600160a01b031614155b80156107a357506001600160a01b0385165f908152600a602052604090205460ff16155b80156107b25750600b5460ff16155b80156107c0575060095460ff165b905080156107e957600b805460ff191660011790556107de82610921565b600b805460ff191690555b6107f48585856107fb565b5050505050565b6001600160a01b038316610825578060025f82825461081a9190610e7e565b909155506108959050565b6001600160a01b0383165f90815260208190526040902054818110156108775760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016100c4565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166108b1576002805482900390556108cf565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161091491815260200190565b60405180910390a3505050565b61092a816109ac565b47156109a9576006545f9061093f9047610cd4565b90505f5b6006548110156109a6576006818154811061096057610960610e6a565b5f9182526020822001546040516001600160a01b039091169184156108fc02918591818181858888f1935050505015801561099d573d5f5f3e3d5ffd5b50600101610943565b50505b50565b60408051600280825260608201835230925f92919060208301908036833701905050905081815f815181106109e3576109e3610e6a565b60200260200101906001600160a01b031690816001600160a01b0316815250506080516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a41573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a659190610e3d565b81600181518110610a7857610a78610e6a565b60200260200101906001600160a01b031690816001600160a01b03168152505082610aab83608051610b4360201b60201c565b1015610ac557610ac5826080515f19610b6f60201b60201c565b6080516001600160a01b03166318cbafe5845f8486426040518663ffffffff1660e01b8152600401610afb959493929190610ebb565b5f604051808303815f875af1158015610b16573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b3d9190810190610f2b565b50505050565b6001600160a01b038083165f908152600160209081526040808320938516835292905220545b92915050565b6109a683838360016001600160a01b038416610ba05760405163e602df0560e01b81525f60048201526024016100c4565b6001600160a01b038316610bc957604051634a1406b160e11b81525f60048201526024016100c4565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015610b3d57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610c3b91815260200190565b60405180910390a350505050565b828054828255905f5260205f20908101928215610c9c579160200282015b82811115610c9c57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190610c67565b50610ca8929150610cac565b5090565b5b80821115610ca8575f8155600101610cad565b634e487b7160e01b5f52601160045260245ffd5b5f82610cee57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680610d1b57607f821691505b602082108103610d3957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156109a657805f5260205f20601f840160051c81016020851015610d645750805b601f840160051c820191505b818110156107f4575f8155600101610d70565b81516001600160401b03811115610d9c57610d9c610cf3565b610db081610daa8454610d07565b84610d3f565b6020601f821160018114610de2575f8315610dcb5750848201515b5f19600385901b1c1916600184901b1784556107f4565b5f84815260208120601f198516915b82811015610e115787850151825560209485019460019092019101610df1565b5084821015610e2e57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f60208284031215610e4d575f5ffd5b81516001600160a01b0381168114610e63575f5ffd5b9392505050565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610b6957610b69610cc0565b8082028115828204841417610b6957610b69610cc0565b81810381811115610b6957610b69610cc0565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b81811015610f0b5783516001600160a01b0316835260209384019390920191600101610ee4565b50506001600160a01b039590951660608401525050608001529392505050565b5f60208284031215610f3b575f5ffd5b81516001600160401b03811115610f50575f5ffd5b8201601f81018413610f60575f5ffd5b80516001600160401b03811115610f7957610f79610cf3565b604051600582901b90603f8201601f191681016001600160401b0381118282101715610fa757610fa7610cf3565b604052918252602081840181019290810187841115610fc4575f5ffd5b6020850194505b83851015610fe757845180825260209586019590935001610fcb565b509695505050505050565b60805160a051611a296110675f395f8181610e3501528181610ead01528181610f7401528181611020015281816110ca01526111c201525f81816105c5015281816105f801528181610df901528181610e710152818161146f015281816115270152818161155701526115940152611a295ff3fe6080604052600436106100f2575f3560e01c80638a8c523c11610087578063c345c4d511610057578063c345c4d514610285578063dd62ed3e146102a4578063e17514ab146102c3578063eab15e43146102e2575f5ffd5b80638a8c523c146102175780638da5cb5b1461022b57806395d89b4114610252578063a9059cbb14610266575f5ffd5b8063313ce567116100c2578063313ce567146101935780633d8f0453146101ae57806370a08231146101cf578063715018a614610203575f5ffd5b806306fdde03146100fd578063095ea7b31461012757806318160ddd1461015657806323b872dd14610174575f5ffd5b366100f957005b5f5ffd5b348015610108575f5ffd5b506101116102f6565b60405161011e9190611613565b60405180910390f35b348015610132575f5ffd5b5061014661014136600461165c565b610386565b604051901515815260200161011e565b348015610161575f5ffd5b506002545b60405190815260200161011e565b34801561017f575f5ffd5b5061014661018e366004611686565b61039f565b34801561019e575f5ffd5b506040516012815260200161011e565b3480156101b9575f5ffd5b506101cd6101c83660046116c4565b6103c2565b005b3480156101da575f5ffd5b506101666101e9366004611703565b6001600160a01b03165f9081526020819052604090205490565b34801561020e575f5ffd5b506101cd61050b565b348015610222575f5ffd5b506101cd61051e565b348015610236575f5ffd5b506005546040516001600160a01b03909116815260200161011e565b34801561025d575f5ffd5b506101116106f6565b348015610271575f5ffd5b5061014661028036600461165c565b610705565b348015610290575f5ffd5b506101cd61029f366004611703565b610712565b3480156102af575f5ffd5b506101666102be366004611725565b61085f565b3480156102ce575f5ffd5b506101cd6102dd366004611703565b610889565b3480156102ed575f5ffd5b506101cd610b12565b6060600380546103059061175c565b80601f01602080910402602001604051908101604052809291908181526020018280546103319061175c565b801561037c5780601f106103535761010080835404028352916020019161037c565b820191905f5260205f20905b81548152906001019060200180831161035f57829003601f168201915b5050505050905090565b5f33610393818585610b31565b60019150505b92915050565b5f336103ac858285610b3e565b6103b7858585610ba1565b506001949350505050565b610424600680548060200260200160405190810160405280929190818152602001828054801561041957602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116103fb575b505050505033610bfe565b6104495760405162461bcd60e51b815260040161044090611794565b60405180910390fd5b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284915f9183169063a9059cbb906044016020604051808303815f875af1158015610499573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104bd91906117be565b9050806105045760405162461bcd60e51b8152602060048201526015602482015274115490cc8c081d1c985b9cd9995c8819985a5b1959605a1b6044820152606401610440565b5050505050565b610513610c57565b61051c5f610c84565b565b610526610c57565b60095460ff16156105705760405162461bcd60e51b81526020600482015260146024820152732a3930b234b7339030b63932b0b23c9037b832b760611b6044820152606401610440565b5f47116105bf5760405162461bcd60e51b815260206004820152601760248201527f4e656564732045544820666f72206c69717569646974790000000000000000006044820152606401610440565b6105f6307f00000000000000000000000000000000000000000000000000000000000000006b033b2e3c9fd0803ce8000000610b31565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7194730610645306001600160a01b03165f9081526020819052604090205490565b5f5f6106596005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156106bf573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906106e491906117dd565b50506009805460ff1916600117905550565b6060600480546103059061175c565b5f33610393818585610ba1565b610772600680548060200260200160405190810160405280929190818152602001828054801561041957602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116103fb57505050505033610bfe565b61078e5760405162461bcd60e51b815260040161044090611794565b6001600160a01b0381166107e45760405162461bcd60e51b815260206004820152601e60248201527f57616c6c6574206d757374206e6f7420626520307830206164647265737300006044820152606401610440565b47806108275760405162461bcd60e51b815260206004820152601260248201527127379022aa24103a37903a3930b739b332b960711b6044820152606401610440565b6040516001600160a01b0383169082156108fc029083905f818181858888f1935050505015801561085a573d5f5f3e3d5ffd5b505050565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6108e9600680548060200260200160405190810160405280929190818152602001828054801561041957602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116103fb57505050505033610bfe565b6109055760405162461bcd60e51b815260040161044090611794565b6001600160a01b0381161580159061092857506001600160a01b03811661dead14155b6109745760405162461bcd60e51b815260206004820181905260248201527f4e6577205461782057616c6c6574206e6f7420307830206f72203078646561646044820152606401610440565b6109d660068054806020026020016040519081016040528092919081815260200182805480156109cb57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116109ad575b505050505082610bfe565b15610a235760405162461bcd60e51b815260206004820152601d60248201527f4e6577207461782077616c6c657420616c7265616479206578697374730000006044820152606401610440565b5f5b600654811015610ab157336001600160a01b031660068281548110610a4c57610a4c611808565b5f918252602090912001546001600160a01b031603610aa9578160068281548110610a7957610a79611808565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550610ab1565b600101610a25565b50335f818152600a6020526040808220805460ff199081169091556001600160a01b038516808452828420805490921660011790915590519092917f9b546d6a68d7369eead01c094bbbb1f9bc02a55bdb2a4da9ee3e8a41cc26e52391a350565b610b1a610c57565b6b033b2e3c9fd0803ce80000006007819055600855565b61085a8383836001610cd5565b5f610b49848461085f565b90505f198114610b9b5781811015610b8d57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610440565b610b9b84848484035f610cd5565b50505050565b6001600160a01b038316610bca57604051634b637e8f60e11b81525f6004820152602401610440565b6001600160a01b038216610bf35760405163ec442f0560e01b81525f6004820152602401610440565b61085a838383610da7565b5f805b8351811015610c4e57826001600160a01b0316848281518110610c2657610c26611808565b60200260200101516001600160a01b031603610c46576001915050610399565b600101610c01565b505f9392505050565b6005546001600160a01b0316331461051c5760405163118cdaa760e01b8152336004820152602401610440565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038416610cfe5760405163e602df0560e01b81525f6004820152602401610440565b6001600160a01b038316610d2757604051634a1406b160e11b81525f6004820152602401610440565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015610b9b57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610d9991815260200190565b60405180910390a350505050565b60095460ff1680610dcf57506001600160a01b0383165f908152600a602052604090205460ff165b80610df157506001600160a01b0382165f908152600a602052604090205460ff165b80610e6957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316148015610e6957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b80610ee157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316148015610ee157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b610f205760405162461bcd60e51b815260206004820152601060248201526f151c98591a5b99c8191a5cd8589b195960821b6044820152606401610440565b6001600160a01b0383165f908152600a602052604090205460ff1680610f5d57506001600160a01b0382165f908152600a602052604090205460ff165b158015610f6c575060095460ff165b1561118d575f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161461101e576008546001600160a01b0384165f90815260208190526040902054610fd09084611830565b111561101e5760405162461bcd60e51b815260206004820152601c60248201527f4d6178206c696d6974207065722077616c6c65742072656163686564000000006044820152606401610440565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316036110c8576007548211156110a95760405162461bcd60e51b815260206004820152601760248201527f4d61782062757920616d6f756e742065786365656465640000000000000000006044820152606401610440565b6127106110b760c884611843565b6110c1919061185a565b905061116e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03160361116e576007548211156111535760405162461bcd60e51b815260206004820152601860248201527f4d61782073656c6c20616d6f756e7420657863656564656400000000000000006044820152606401610440565b61271061116160c884611843565b61116b919061185a565b90505b6111788183611879565b9150801561118b5761118b843083611268565b505b305f90815260208190526040812054906111b6620186a06b033b2e3c9fd0803ce800000061185a565b82101580156111f757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b801561121b57506001600160a01b0385165f908152600a602052604090205460ff16155b801561122a5750600b5460ff16155b8015611238575060095460ff165b9050801561126157600b805460ff191660011790556112568261138e565b600b805460ff191690555b6105048585855b6001600160a01b038316611292578060025f8282546112879190611830565b909155506113029050565b6001600160a01b0383165f90815260208190526040902054818110156112e45760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610440565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b03821661131e5760028054829003905561133c565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161138191815260200190565b60405180910390a3505050565b61139781611416565b4715611413576006545f906113ac904761185a565b90505f5b60065481101561085a57600681815481106113cd576113cd611808565b5f9182526020822001546040516001600160a01b039091169184156108fc02918591818181858888f1935050505015801561140a573d5f5f3e3d5ffd5b506001016113b0565b50565b60408051600280825260608201835230925f92919060208301908036833701905050905081815f8151811061144d5761144d611808565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114c9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114ed91906118a0565b8160018151811061150057611500611808565b60200260200101906001600160a01b031690816001600160a01b0316815250508261154b837f000000000000000000000000000000000000000000000000000000000000000061085f565b101561157d5761157d827f00000000000000000000000000000000000000000000000000000000000000005f19610b31565b6040516318cbafe560e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906318cbafe5906115d19086905f908690889042906004016118bb565b5f604051808303815f875af11580156115ec573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b9b919081019061192b565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114611413575f5ffd5b5f5f6040838503121561166d575f5ffd5b823561167881611648565b946020939093013593505050565b5f5f5f60608486031215611698575f5ffd5b83356116a381611648565b925060208401356116b381611648565b929592945050506040919091013590565b5f5f5f606084860312156116d6575f5ffd5b83356116e181611648565b92506020840135915060408401356116f881611648565b809150509250925092565b5f60208284031215611713575f5ffd5b813561171e81611648565b9392505050565b5f5f60408385031215611736575f5ffd5b823561174181611648565b9150602083013561175181611648565b809150509250929050565b600181811c9082168061177057607f821691505b60208210810361178e57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526010908201526f139bdd08184815185e0815d85b1b195d60821b604082015260600190565b5f602082840312156117ce575f5ffd5b8151801515811461171e575f5ffd5b5f5f5f606084860312156117ef575f5ffd5b5050815160208301516040909301519094929350919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808201808211156103995761039961181c565b80820281158282048414176103995761039961181c565b5f8261187457634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156103995761039961181c565b634e487b7160e01b5f52604160045260245ffd5b5f602082840312156118b0575f5ffd5b815161171e81611648565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b8181101561190b5783516001600160a01b03168352602093840193909201916001016118e4565b50506001600160a01b039590951660608401525050608001529392505050565b5f6020828403121561193b575f5ffd5b815167ffffffffffffffff811115611951575f5ffd5b8201601f81018413611961575f5ffd5b805167ffffffffffffffff81111561197b5761197b61188c565b8060051b604051601f19603f830116810181811067ffffffffffffffff821117156119a8576119a861188c565b6040529182526020818401810192908101878411156119c5575f5ffd5b6020850194505b838510156119e8578451808252602095860195909350016119cc565b50969550505050505056fea2646970667358221220ca6756b5f93156916c0fb0207049dbe7682748b53eecda97c3aba3ec88a8549364736f6c634300081b0033
Deployed Bytecode
0x6080604052600436106100f2575f3560e01c80638a8c523c11610087578063c345c4d511610057578063c345c4d514610285578063dd62ed3e146102a4578063e17514ab146102c3578063eab15e43146102e2575f5ffd5b80638a8c523c146102175780638da5cb5b1461022b57806395d89b4114610252578063a9059cbb14610266575f5ffd5b8063313ce567116100c2578063313ce567146101935780633d8f0453146101ae57806370a08231146101cf578063715018a614610203575f5ffd5b806306fdde03146100fd578063095ea7b31461012757806318160ddd1461015657806323b872dd14610174575f5ffd5b366100f957005b5f5ffd5b348015610108575f5ffd5b506101116102f6565b60405161011e9190611613565b60405180910390f35b348015610132575f5ffd5b5061014661014136600461165c565b610386565b604051901515815260200161011e565b348015610161575f5ffd5b506002545b60405190815260200161011e565b34801561017f575f5ffd5b5061014661018e366004611686565b61039f565b34801561019e575f5ffd5b506040516012815260200161011e565b3480156101b9575f5ffd5b506101cd6101c83660046116c4565b6103c2565b005b3480156101da575f5ffd5b506101666101e9366004611703565b6001600160a01b03165f9081526020819052604090205490565b34801561020e575f5ffd5b506101cd61050b565b348015610222575f5ffd5b506101cd61051e565b348015610236575f5ffd5b506005546040516001600160a01b03909116815260200161011e565b34801561025d575f5ffd5b506101116106f6565b348015610271575f5ffd5b5061014661028036600461165c565b610705565b348015610290575f5ffd5b506101cd61029f366004611703565b610712565b3480156102af575f5ffd5b506101666102be366004611725565b61085f565b3480156102ce575f5ffd5b506101cd6102dd366004611703565b610889565b3480156102ed575f5ffd5b506101cd610b12565b6060600380546103059061175c565b80601f01602080910402602001604051908101604052809291908181526020018280546103319061175c565b801561037c5780601f106103535761010080835404028352916020019161037c565b820191905f5260205f20905b81548152906001019060200180831161035f57829003601f168201915b5050505050905090565b5f33610393818585610b31565b60019150505b92915050565b5f336103ac858285610b3e565b6103b7858585610ba1565b506001949350505050565b610424600680548060200260200160405190810160405280929190818152602001828054801561041957602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116103fb575b505050505033610bfe565b6104495760405162461bcd60e51b815260040161044090611794565b60405180910390fd5b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284915f9183169063a9059cbb906044016020604051808303815f875af1158015610499573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104bd91906117be565b9050806105045760405162461bcd60e51b8152602060048201526015602482015274115490cc8c081d1c985b9cd9995c8819985a5b1959605a1b6044820152606401610440565b5050505050565b610513610c57565b61051c5f610c84565b565b610526610c57565b60095460ff16156105705760405162461bcd60e51b81526020600482015260146024820152732a3930b234b7339030b63932b0b23c9037b832b760611b6044820152606401610440565b5f47116105bf5760405162461bcd60e51b815260206004820152601760248201527f4e656564732045544820666f72206c69717569646974790000000000000000006044820152606401610440565b6105f6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6b033b2e3c9fd0803ce8000000610b31565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d7194730610645306001600160a01b03165f9081526020819052604090205490565b5f5f6106596005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156106bf573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906106e491906117dd565b50506009805460ff1916600117905550565b6060600480546103059061175c565b5f33610393818585610ba1565b610772600680548060200260200160405190810160405280929190818152602001828054801561041957602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116103fb57505050505033610bfe565b61078e5760405162461bcd60e51b815260040161044090611794565b6001600160a01b0381166107e45760405162461bcd60e51b815260206004820152601e60248201527f57616c6c6574206d757374206e6f7420626520307830206164647265737300006044820152606401610440565b47806108275760405162461bcd60e51b815260206004820152601260248201527127379022aa24103a37903a3930b739b332b960711b6044820152606401610440565b6040516001600160a01b0383169082156108fc029083905f818181858888f1935050505015801561085a573d5f5f3e3d5ffd5b505050565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6108e9600680548060200260200160405190810160405280929190818152602001828054801561041957602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116103fb57505050505033610bfe565b6109055760405162461bcd60e51b815260040161044090611794565b6001600160a01b0381161580159061092857506001600160a01b03811661dead14155b6109745760405162461bcd60e51b815260206004820181905260248201527f4e6577205461782057616c6c6574206e6f7420307830206f72203078646561646044820152606401610440565b6109d660068054806020026020016040519081016040528092919081815260200182805480156109cb57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116109ad575b505050505082610bfe565b15610a235760405162461bcd60e51b815260206004820152601d60248201527f4e6577207461782077616c6c657420616c7265616479206578697374730000006044820152606401610440565b5f5b600654811015610ab157336001600160a01b031660068281548110610a4c57610a4c611808565b5f918252602090912001546001600160a01b031603610aa9578160068281548110610a7957610a79611808565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550610ab1565b600101610a25565b50335f818152600a6020526040808220805460ff199081169091556001600160a01b038516808452828420805490921660011790915590519092917f9b546d6a68d7369eead01c094bbbb1f9bc02a55bdb2a4da9ee3e8a41cc26e52391a350565b610b1a610c57565b6b033b2e3c9fd0803ce80000006007819055600855565b61085a8383836001610cd5565b5f610b49848461085f565b90505f198114610b9b5781811015610b8d57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610440565b610b9b84848484035f610cd5565b50505050565b6001600160a01b038316610bca57604051634b637e8f60e11b81525f6004820152602401610440565b6001600160a01b038216610bf35760405163ec442f0560e01b81525f6004820152602401610440565b61085a838383610da7565b5f805b8351811015610c4e57826001600160a01b0316848281518110610c2657610c26611808565b60200260200101516001600160a01b031603610c46576001915050610399565b600101610c01565b505f9392505050565b6005546001600160a01b0316331461051c5760405163118cdaa760e01b8152336004820152602401610440565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038416610cfe5760405163e602df0560e01b81525f6004820152602401610440565b6001600160a01b038316610d2757604051634a1406b160e11b81525f6004820152602401610440565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015610b9b57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610d9991815260200190565b60405180910390a350505050565b60095460ff1680610dcf57506001600160a01b0383165f908152600a602052604090205460ff165b80610df157506001600160a01b0382165f908152600a602052604090205460ff165b80610e6957507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316836001600160a01b0316148015610e6957507f000000000000000000000000df3437a32d17d8607c8f68ca66d7e851df7bbca76001600160a01b0316826001600160a01b0316145b80610ee157507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b0316148015610ee157507f000000000000000000000000df3437a32d17d8607c8f68ca66d7e851df7bbca76001600160a01b0316836001600160a01b0316145b610f205760405162461bcd60e51b815260206004820152601060248201526f151c98591a5b99c8191a5cd8589b195960821b6044820152606401610440565b6001600160a01b0383165f908152600a602052604090205460ff1680610f5d57506001600160a01b0382165f908152600a602052604090205460ff165b158015610f6c575060095460ff165b1561118d575f7f000000000000000000000000df3437a32d17d8607c8f68ca66d7e851df7bbca76001600160a01b0316836001600160a01b03161461101e576008546001600160a01b0384165f90815260208190526040902054610fd09084611830565b111561101e5760405162461bcd60e51b815260206004820152601c60248201527f4d6178206c696d6974207065722077616c6c65742072656163686564000000006044820152606401610440565b7f000000000000000000000000df3437a32d17d8607c8f68ca66d7e851df7bbca76001600160a01b0316846001600160a01b0316036110c8576007548211156110a95760405162461bcd60e51b815260206004820152601760248201527f4d61782062757920616d6f756e742065786365656465640000000000000000006044820152606401610440565b6127106110b760c884611843565b6110c1919061185a565b905061116e565b7f000000000000000000000000df3437a32d17d8607c8f68ca66d7e851df7bbca76001600160a01b0316836001600160a01b03160361116e576007548211156111535760405162461bcd60e51b815260206004820152601860248201527f4d61782073656c6c20616d6f756e7420657863656564656400000000000000006044820152606401610440565b61271061116160c884611843565b61116b919061185a565b90505b6111788183611879565b9150801561118b5761118b843083611268565b505b305f90815260208190526040812054906111b6620186a06b033b2e3c9fd0803ce800000061185a565b82101580156111f757507f000000000000000000000000df3437a32d17d8607c8f68ca66d7e851df7bbca76001600160a01b0316856001600160a01b031614155b801561121b57506001600160a01b0385165f908152600a602052604090205460ff16155b801561122a5750600b5460ff16155b8015611238575060095460ff165b9050801561126157600b805460ff191660011790556112568261138e565b600b805460ff191690555b6105048585855b6001600160a01b038316611292578060025f8282546112879190611830565b909155506113029050565b6001600160a01b0383165f90815260208190526040902054818110156112e45760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610440565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b03821661131e5760028054829003905561133c565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161138191815260200190565b60405180910390a3505050565b61139781611416565b4715611413576006545f906113ac904761185a565b90505f5b60065481101561085a57600681815481106113cd576113cd611808565b5f9182526020822001546040516001600160a01b039091169184156108fc02918591818181858888f1935050505015801561140a573d5f5f3e3d5ffd5b506001016113b0565b50565b60408051600280825260608201835230925f92919060208301908036833701905050905081815f8151811061144d5761144d611808565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114c9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114ed91906118a0565b8160018151811061150057611500611808565b60200260200101906001600160a01b031690816001600160a01b0316815250508261154b837f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d61085f565b101561157d5761157d827f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d5f19610b31565b6040516318cbafe560e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d16906318cbafe5906115d19086905f908690889042906004016118bb565b5f604051808303815f875af11580156115ec573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b9b919081019061192b565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114611413575f5ffd5b5f5f6040838503121561166d575f5ffd5b823561167881611648565b946020939093013593505050565b5f5f5f60608486031215611698575f5ffd5b83356116a381611648565b925060208401356116b381611648565b929592945050506040919091013590565b5f5f5f606084860312156116d6575f5ffd5b83356116e181611648565b92506020840135915060408401356116f881611648565b809150509250925092565b5f60208284031215611713575f5ffd5b813561171e81611648565b9392505050565b5f5f60408385031215611736575f5ffd5b823561174181611648565b9150602083013561175181611648565b809150509250929050565b600181811c9082168061177057607f821691505b60208210810361178e57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526010908201526f139bdd08184815185e0815d85b1b195d60821b604082015260600190565b5f602082840312156117ce575f5ffd5b8151801515811461171e575f5ffd5b5f5f5f606084860312156117ef575f5ffd5b5050815160208301516040909301519094929350919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808201808211156103995761039961181c565b80820281158282048414176103995761039961181c565b5f8261187457634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156103995761039961181c565b634e487b7160e01b5f52604160045260245ffd5b5f602082840312156118b0575f5ffd5b815161171e81611648565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b8181101561190b5783516001600160a01b03168352602093840193909201916001016118e4565b50506001600160a01b039590951660608401525050608001529392505050565b5f6020828403121561193b575f5ffd5b815167ffffffffffffffff811115611951575f5ffd5b8201601f81018413611961575f5ffd5b805167ffffffffffffffff81111561197b5761197b61188c565b8060051b604051601f19603f830116810181811067ffffffffffffffff821117156119a8576119a861188c565b6040529182526020818401810192908101878411156119c5575f5ffd5b6020850194505b838510156119e8578451808252602095860195909350016119cc565b50969550505050505056fea2646970667358221220ca6756b5f93156916c0fb0207049dbe7682748b53eecda97c3aba3ec88a8549364736f6c634300081b0033
Deployed Bytecode Sourcemap
21662:9976:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11066:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13400:222;;;;;;;;;;-1:-1:-1;13400:222:0;;;;;:::i;:::-;;:::i;:::-;;;1110:14:1;;1103:22;1085:41;;1073:2;1058:18;13400:222:0;945:187:1;12168:99:0;;;;;;;;;;-1:-1:-1;12247:12:0;;12168:99;;;1283:25:1;;;1271:2;1256:18;12168:99:0;1137:177:1;14200:283:0;;;;;;;;;;-1:-1:-1;14200:283:0;;;;;:::i;:::-;;:::i;12019:84::-;;;;;;;;;;-1:-1:-1;12019:84:0;;12093:2;1974:36:1;;1962:2;1947:18;12019:84:0;1832:184:1;25208:291:0;;;;;;;;;;-1:-1:-1;25208:291:0;;;;;:::i;:::-;;:::i;:::-;;12330:118;;;;;;;;;;-1:-1:-1;12330:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;12422:18:0;12395:7;12422:18;;;;;;;;;;;;12330:118;5524:103;;;;;;;;;;;;;:::i;26084:515::-;;;;;;;;;;;;;:::i;4849:87::-;;;;;;;;;;-1:-1:-1;4922:6:0;;4849:87;;-1:-1:-1;;;;;4922:6:0;;;2932:51:1;;2920:2;2905:18;4849:87:0;2786:203:1;11276:95:0;;;;;;;;;;;;;:::i;12653:182::-;;;;;;;;;;-1:-1:-1;12653:182:0;;;;;:::i;:::-;;:::i;25729:296::-;;;;;;;;;;-1:-1:-1;25729:296:0;;;;;:::i;:::-;;:::i;12898:183::-;;;;;;;;;;-1:-1:-1;12898:183:0;;;;;:::i;:::-;;:::i;26744:720::-;;;;;;;;;;-1:-1:-1;26744:720:0;;;;;:::i;:::-;;:::i;27539:134::-;;;;;;;;;;;;;:::i;11066:91::-;11111:13;11144:5;11137:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11066:91;:::o;13400:222::-;13500:4;3198:10;13561:31;3198:10;13577:7;13586:5;13561:8;:31::i;:::-;13610:4;13603:11;;;13400:222;;;;;:::o;14200:283::-;14321:4;3198:10;14379:37;14395:4;3198:10;14410:5;14379:15;:37::i;:::-;14427:26;14437:4;14443:2;14447:5;14427:9;:26::i;:::-;-1:-1:-1;14471:4:0;;14200:283;-1:-1:-1;;;;14200:283:0:o;25208:291::-;23097:37;23111:10;23097:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23097:37:0;;;;;;;;;;;;;;;;;;;;;23123:10;23097:13;:37::i;:::-;23075:103;;;;-1:-1:-1;;;23075:103:0;;;;;;;:::i;:::-;;;;;;;;;25405:34:::1;::::0;-1:-1:-1;;;25405:34:0;;-1:-1:-1;;;;;4309:32:1;;;25405:34:0::1;::::0;::::1;4291:51:1::0;4358:18;;;4351:34;;;25373:5:0;;25348:16:::1;::::0;25405:19;::::1;::::0;::::1;::::0;4264:18:1;;25405:34:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25390:49;;25458:7;25450:41;;;::::0;-1:-1:-1;;;25450:41:0;;4880:2:1;25450:41:0::1;::::0;::::1;4862:21:1::0;4919:2;4899:18;;;4892:30;-1:-1:-1;;;4938:18:1;;;4931:51;4999:18;;25450:41:0::1;4678:345:1::0;25450:41:0::1;25337:162;;25208:291:::0;;;:::o;5524:103::-;4735:13;:11;:13::i;:::-;5589:30:::1;5616:1;5589:18;:30::i;:::-;5524:103::o:0;26084:515::-;4735:13;:11;:13::i;:::-;26148:7:::1;::::0;::::1;;26147:8;26139:41;;;::::0;-1:-1:-1;;;26139:41:0;;5230:2:1;26139:41:0::1;::::0;::::1;5212:21:1::0;5269:2;5249:18;;;5242:30;-1:-1:-1;;;5288:18:1;;;5281:50;5348:18;;26139:41:0::1;5028:344:1::0;26139:41:0::1;26225:1;26201:21;:25;26193:61;;;::::0;-1:-1:-1;;;26193:61:0;;5579:2:1;26193:61:0::1;::::0;::::1;5561:21:1::0;5618:2;5598:18;;;5591:30;5657:25;5637:18;;;5630:53;5700:18;;26193:61:0::1;5377:347:1::0;26193:61:0::1;26267;26284:4;26299:15;21990:20;26267:8;:61::i;:::-;26341:15;-1:-1:-1::0;;;;;26341:31:0::1;;26380:21;26425:4;26445:24;26463:4;-1:-1:-1::0;;;;;12422:18:0;12395:7;12422:18;;;;;;;;;;;;12330:118;26445:24:::1;26484:1;26500;26516:7;4922:6:::0;;-1:-1:-1;;;;;4922:6:0;;4849:87;26516:7:::1;26341:223;::::0;::::1;::::0;;;-1:-1:-1;;;;;;26341:223:0;;;-1:-1:-1;;;;;6050:32:1;;;26341:223:0::1;::::0;::::1;6032:51:1::0;6099:18;;;6092:34;;;;6142:18;;;6135:34;;;;6185:18;;;6178:34;6249:32;;;6228:19;;;6221:61;26538:15:0::1;6298:19:1::0;;;6291:35;6004:19;;26341:223:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;26577:7:0::1;:14:::0;;-1:-1:-1;;26577:14:0::1;26587:4;26577:14;::::0;;-1:-1:-1;26084:515:0:o;11276:95::-;11323:13;11356:7;11349:14;;;;;:::i;12653:182::-;12722:4;3198:10;12778:27;3198:10;12795:2;12799:5;12778:9;:27::i;25729:296::-;23097:37;23111:10;23097:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23097:37:0;;;;;;;;;;;;;;;;;;;;23123:10;23097:13;:37::i;:::-;23075:103;;;;-1:-1:-1;;;23075:103:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25811:20:0;::::1;25803:63;;;::::0;-1:-1:-1;;;25803:63:0;;7000:2:1;25803:63:0::1;::::0;::::1;6982:21:1::0;7039:2;7019:18;;;7012:30;7078:32;7058:18;;;7051:60;7128:18;;25803:63:0::1;6798:354:1::0;25803:63:0::1;25897:21;25937:11:::0;25929:42:::1;;;::::0;-1:-1:-1;;;25929:42:0;;7359:2:1;25929:42:0::1;::::0;::::1;7341:21:1::0;7398:2;7378:18;;;7371:30;-1:-1:-1;;;7417:18:1;;;7410:48;7475:18;;25929:42:0::1;7157:342:1::0;25929:42:0::1;25984:33;::::0;-1:-1:-1;;;;;25984:24:0;::::1;::::0;:33;::::1;;;::::0;26009:7;;25984:33:::1;::::0;;;26009:7;25984:24;:33;::::1;;;;;;;;;;;;;;;;;;;;25792:233;25729:296:::0;:::o;12898:183::-;-1:-1:-1;;;;;13046:18:0;;;13014:7;13046:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12898:183::o;26744:720::-;23097:37;23111:10;23097:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23097:37:0;;;;;;;;;;;;;;;;;;;;23123:10;23097:13;:37::i;:::-;23075:103;;;;-1:-1:-1;;;23075:103:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26850:28:0;::::1;::::0;;::::1;::::0;:63:::1;;-1:-1:-1::0;;;;;;26882:31:0;::::1;26906:6;26882:31;;26850:63;26828:145;;;::::0;-1:-1:-1;;;26828:145:0;;7706:2:1;26828:145:0::1;::::0;::::1;7688:21:1::0;;;7725:18;;;7718:30;7784:34;7764:18;;;7757:62;7836:18;;26828:145:0::1;7504:356:1::0;26828:145:0::1;27007:39;27021:10;27007:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;27007:39:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;27033:12;27007:13;:39::i;:::-;27006:40;26984:119;;;::::0;-1:-1:-1;;;26984:119:0;;8067:2:1;26984:119:0::1;::::0;::::1;8049:21:1::0;8106:2;8086:18;;;8079:30;8145:31;8125:18;;;8118:59;8194:18;;26984:119:0::1;7865:353:1::0;26984:119:0::1;27121:9;27116:194;27140:10;:17:::0;27136:21;::::1;27116:194;;;27200:10;-1:-1:-1::0;;;;;27183:27:0::1;:10;27194:1;27183:13;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;27183:13:0::1;:27:::0;27179:120:::1;;27247:12;27231:10;27242:1;27231:13;;;;;;;;:::i;:::-;;;;;;;;;:28;;;;;-1:-1:-1::0;;;;;27231:28:0::1;;;;;-1:-1:-1::0;;;;;27231:28:0::1;;;;;;27278:5;;27179:120;27159:3;;27116:194;;;-1:-1:-1::0;27333:10:0::1;27347:5;27322:22:::0;;;:10:::1;:22;::::0;;;;;:30;;-1:-1:-1;;27322:30:0;;::::1;::::0;;;-1:-1:-1;;;;;27363:24:0;::::1;::::0;;;;;;:31;;;;::::1;27322:30:::0;27363:31:::1;::::0;;;27410:46;;27363:24;;27333:10;27410:46:::1;::::0;::::1;26744:720:::0;:::o;27539:134::-;4735:13;:11;:13::i;:::-;21990:20:::1;27599:14;:27:::0;;;27637:15:::1;:28:::0;27539:134::o;18362:164::-;18481:37;18490:5;18497:7;18506:5;18513:4;18481:8;:37::i;20155:603::-;20289:24;20316:25;20326:5;20333:7;20316:9;:25::i;:::-;20289:52;;-1:-1:-1;;20356:16:0;:37;20352:399;;20433:5;20414:16;:24;20410:214;;;20466:142;;-1:-1:-1;;;20466:142:0;;-1:-1:-1;;;;;8575:32:1;;20466:142:0;;;8557:51:1;8624:18;;;8617:34;;;8667:18;;;8660:34;;;8530:18;;20466:142:0;8355:345:1;20410:214:0;20667:57;20676:5;20683:7;20711:5;20692:16;:24;20718:5;20667:8;:57::i;:::-;20278:480;20155:603;;;:::o;14869:342::-;-1:-1:-1;;;;;14987:18:0;;14983:88;;15029:30;;-1:-1:-1;;;15029:30:0;;15056:1;15029:30;;;2932:51:1;2905:18;;15029:30:0;2786:203:1;14983:88:0;-1:-1:-1;;;;;15085:16:0;;15081:88;;15125:32;;-1:-1:-1;;;15125:32:0;;15154:1;15125:32;;;2932:51:1;2905:18;;15125:32:0;2786:203:1;15081:88:0;15179:24;15187:4;15193:2;15197:5;15179:7;:24::i;23206:320::-;23325:4;;23347:149;23371:9;:16;23367:1;:20;23347:149;;;23429:8;-1:-1:-1;;;;;23413:24:0;:9;23423:1;23413:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23413:24:0;;23409:76;;23465:4;23458:11;;;;;23409:76;23389:3;;23347:149;;;-1:-1:-1;23513:5:0;;23206:320;-1:-1:-1;;;23206:320:0:o;5014:166::-;4922:6;;-1:-1:-1;;;;;4922:6:0;3198:10;5074:23;5070:103;;5121:40;;-1:-1:-1;;;5121:40:0;;3198:10;5121:40;;;2932:51:1;2905:18;;5121:40:0;2786:203:1;5787:191:0;5880:6;;;-1:-1:-1;;;;;5897:17:0;;;-1:-1:-1;;;;;;5897:17:0;;;;;;;5930:40;;5880:6;;;5897:17;5880:6;;5930:40;;5861:16;;5930:40;5850:128;5787:191;:::o;19377:486::-;-1:-1:-1;;;;;19533:19:0;;19529:91;;19576:32;;-1:-1:-1;;;19576:32:0;;19605:1;19576:32;;;2932:51:1;2905:18;;19576:32:0;2786:203:1;19529:91:0;-1:-1:-1;;;;;19634:21:0;;19630:92;;19679:31;;-1:-1:-1;;;19679:31:0;;19707:1;19679:31;;;2932:51:1;2905:18;;19679:31:0;2786:203:1;19630:92:0;-1:-1:-1;;;;;19732:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;19778:78;;;;19829:7;-1:-1:-1;;;;;19813:31:0;19822:5;-1:-1:-1;;;;;19813:31:0;;19838:5;19813:31;;;;1283:25:1;;1271:2;1256:18;;1137:177;19813:31:0;;;;;;;;19377:486;;;;:::o;27824:1894::-;27968:7;;;;;:44;;-1:-1:-1;;;;;;27996:16:0;;;;;;:10;:16;;;;;;;;27968:44;:79;;;-1:-1:-1;;;;;;28033:14:0;;;;;;:10;:14;;;;;;;;27968:79;:155;;;;28085:15;-1:-1:-1;;;;;28069:32:0;:4;-1:-1:-1;;;;;28069:32:0;;:53;;;;;28111:11;-1:-1:-1;;;;;28105:17:0;:2;-1:-1:-1;;;;;28105:17:0;;28069:53;27968:231;;;;28159:15;-1:-1:-1;;;;;28145:30:0;:2;-1:-1:-1;;;;;28145:30:0;;:53;;;;;28187:11;-1:-1:-1;;;;;28179:19:0;:4;-1:-1:-1;;;;;28179:19:0;;28145:53;27946:297;;;;-1:-1:-1;;;27946:297:0;;8907:2:1;27946:297:0;;;8889:21:1;8946:2;8926:18;;;8919:30;-1:-1:-1;;;8965:18:1;;;8958:46;9021:18;;27946:297:0;8705:340:1;27946:297:0;-1:-1:-1;;;;;28262:16:0;;;;;;:10;:16;;;;;;;;;:34;;-1:-1:-1;;;;;;28282:14:0;;;;;;:10;:14;;;;;;;;28262:34;28260:37;:48;;;;-1:-1:-1;28301:7:0;;;;28260:48;28256:960;;;28325:11;28361;-1:-1:-1;;;;;28355:17:0;:2;-1:-1:-1;;;;;28355:17:0;;28351:201;;28449:15;;-1:-1:-1;;;;;12422:18:0;;12395:7;12422:18;;;;;;;;;;;28423:22;;:6;:22;:::i;:::-;:41;;28393:143;;;;-1:-1:-1;;;28393:143:0;;9514:2:1;28393:143:0;;;9496:21:1;9553:2;9533:18;;;9526:30;9592;9572:18;;;9565:58;9640:18;;28393:143:0;9312:352:1;28393:143:0;28578:11;-1:-1:-1;;;;;28570:19:0;:4;-1:-1:-1;;;;;28570:19:0;;28566:498;;28650:14;;28640:6;:24;;28610:121;;;;-1:-1:-1;;;28610:121:0;;9871:2:1;28610:121:0;;;9853:21:1;9910:2;9890:18;;;9883:30;9949:25;9929:18;;;9922:53;9992:18;;28610:121:0;9669:347:1;28610:121:0;22086:6;28757:20;22155:3;28757:6;:20;:::i;:::-;28756:40;;;;:::i;:::-;28750:46;;28566:498;;;28828:11;-1:-1:-1;;;;;28822:17:0;:2;-1:-1:-1;;;;;28822:17:0;;28818:246;;28900:14;;28890:6;:24;;28860:122;;;;-1:-1:-1;;;28860:122:0;;10618:2:1;28860:122:0;;;10600:21:1;10657:2;10637:18;;;10630:30;10696:26;10676:18;;;10669:54;10740:18;;28860:122:0;10416:348:1;28860:122:0;22086:6;29008:21;22206:3;29008:6;:21;:::i;:::-;29007:41;;;;:::i;:::-;29001:47;;28818:246;29089:12;29098:3;29089:6;:12;:::i;:::-;29080:21;-1:-1:-1;29122:7:0;;29118:87;;29150:39;29164:4;29178;29185:3;29150:13;:39::i;:::-;28310:906;28256:960;29272:4;29228:23;12422:18;;;;;;;;;;;;22327:20;22340:7;21990:20;22327;:::i;:::-;29362:15;:37;;:73;;;;;29424:11;-1:-1:-1;;;;;29416:19:0;:4;-1:-1:-1;;;;;29416:19:0;;;29362:73;:107;;;;-1:-1:-1;;;;;;29453:16:0;;;;;;:10;:16;;;;;;;;29452:17;29362:107;:133;;;;-1:-1:-1;29487:8:0;;;;29486:9;29362:133;:157;;;;-1:-1:-1;29512:7:0;;;;29362:157;29347:172;;29536:7;29532:135;;;29560:8;:15;;-1:-1:-1;;29560:15:0;29571:4;29560:15;;;29590:34;29608:15;29590:17;:34::i;:::-;29639:8;:16;;-1:-1:-1;;29639:16:0;;;29532:135;29679:31;29693:4;29699:2;29703:6;15535:1169;-1:-1:-1;;;;;15659:18:0;;15655:552;;15813:5;15797:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;15655:552:0;;-1:-1:-1;15655:552:0;;-1:-1:-1;;;;;15873:15:0;;15851:19;15873:15;;;;;;;;;;;15907:19;;;15903:117;;;15954:50;;-1:-1:-1;;;15954:50:0;;-1:-1:-1;;;;;8575:32:1;;15954:50:0;;;8557:51:1;8624:18;;;8617:34;;;8667:18;;;8660:34;;;8530:18;;15954:50:0;8355:345:1;15903:117:0;-1:-1:-1;;;;;16143:15:0;;:9;:15;;;;;;;;;;16161:19;;;;16143:37;;15655:552;-1:-1:-1;;;;;16223:16:0;;16219:435;;16389:12;:21;;;;;;;16219:435;;;-1:-1:-1;;;;;16605:13:0;;:9;:13;;;;;;;;;;:22;;;;;;16219:435;16686:2;-1:-1:-1;;;;;16671:25:0;16680:4;-1:-1:-1;;;;;16671:25:0;;16690:5;16671:25;;;;1283::1;;1271:2;1256:18;;1137:177;16671:25:0;;;;;;;;15535:1169;;;:::o;30020:364::-;30082:18;30093:6;30082:10;:18::i;:::-;30115:21;:25;30111:266;;30205:10;:17;30157:21;;30181:41;;:21;:41;:::i;:::-;30157:65;-1:-1:-1;30242:9:0;30237:129;30261:10;:17;30257:21;;30237:129;;;30312:10;30323:1;30312:13;;;;;;;;:::i;:::-;;;;;;;;;;30304:46;;-1:-1:-1;;;;;30312:13:0;;;;30304:46;;;;;30336:13;;30304:46;30312:13;30304:46;30336:13;30312;30304:46;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30280:3:0;;30237:129;;30111:266;30020:364;:::o;30893:742::-;31087:16;;;31101:1;31087:16;;;;;;;;31044:4;;31010:23;;31087:16;31101:1;31087:16;;;;;;;;;;-1:-1:-1;31087:16:0;31063:40;;31124:15;31114:4;31119:1;31114:7;;;;;;;;:::i;:::-;;;;;;:25;-1:-1:-1;;;;;31114:25:0;;;-1:-1:-1;;;;;31114:25:0;;;;;31160:15;-1:-1:-1;;;;;31160:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31150:4;31155:1;31150:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;31150:32:0;;;-1:-1:-1;;;;;31150:32:0;;;;;31254:6;31199:52;31209:15;31234;31199:9;:52::i;:::-;:61;31195:230;;;31277:136;31304:15;31346;-1:-1:-1;;31277:8:0;:136::i;:::-;31463:164;;-1:-1:-1;;;31463:164:0;;-1:-1:-1;;;;;31463:15:0;:37;;;;:164;;31515:6;;31536:1;;31552:4;;31571:15;;31601;;31463:164;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31463:164:0;;;;;;;;;;;;:::i;14:418:1:-;163:2;152:9;145:21;126:4;195:6;189:13;238:6;233:2;222:9;218:18;211:34;297:6;292:2;284:6;280:15;275:2;264:9;260:18;254:50;353:1;348:2;339:6;328:9;324:22;320:31;313:42;423:2;416;412:7;407:2;399:6;395:15;391:29;380:9;376:45;372:54;364:62;;;14:418;;;;:::o;437:131::-;-1:-1:-1;;;;;512:31:1;;502:42;;492:70;;558:1;555;548:12;573:367;641:6;649;702:2;690:9;681:7;677:23;673:32;670:52;;;718:1;715;708:12;670:52;757:9;744:23;776:31;801:5;776:31;:::i;:::-;826:5;904:2;889:18;;;;876:32;;-1:-1:-1;;;573:367:1:o;1319:508::-;1396:6;1404;1412;1465:2;1453:9;1444:7;1440:23;1436:32;1433:52;;;1481:1;1478;1471:12;1433:52;1520:9;1507:23;1539:31;1564:5;1539:31;:::i;:::-;1589:5;-1:-1:-1;1646:2:1;1631:18;;1618:32;1659:33;1618:32;1659:33;:::i;:::-;1319:508;;1711:7;;-1:-1:-1;;;1791:2:1;1776:18;;;;1763:32;;1319:508::o;2021:::-;2098:6;2106;2114;2167:2;2155:9;2146:7;2142:23;2138:32;2135:52;;;2183:1;2180;2173:12;2135:52;2222:9;2209:23;2241:31;2266:5;2241:31;:::i;:::-;2291:5;-1:-1:-1;2369:2:1;2354:18;;2341:32;;-1:-1:-1;2451:2:1;2436:18;;2423:32;2464:33;2423:32;2464:33;:::i;:::-;2516:7;2506:17;;;2021:508;;;;;:::o;2534:247::-;2593:6;2646:2;2634:9;2625:7;2621:23;2617:32;2614:52;;;2662:1;2659;2652:12;2614:52;2701:9;2688:23;2720:31;2745:5;2720:31;:::i;:::-;2770:5;2534:247;-1:-1:-1;;;2534:247:1:o;2994:388::-;3062:6;3070;3123:2;3111:9;3102:7;3098:23;3094:32;3091:52;;;3139:1;3136;3129:12;3091:52;3178:9;3165:23;3197:31;3222:5;3197:31;:::i;:::-;3247:5;-1:-1:-1;3304:2:1;3289:18;;3276:32;3317:33;3276:32;3317:33;:::i;:::-;3369:7;3359:17;;;2994:388;;;;;:::o;3387:380::-;3466:1;3462:12;;;;3509;;;3530:61;;3584:4;3576:6;3572:17;3562:27;;3530:61;3637:2;3629:6;3626:14;3606:18;3603:38;3600:161;;3683:10;3678:3;3674:20;3671:1;3664:31;3718:4;3715:1;3708:15;3746:4;3743:1;3736:15;3600:161;;3387:380;;;:::o;3772:340::-;3974:2;3956:21;;;4013:2;3993:18;;;3986:30;-1:-1:-1;;;4047:2:1;4032:18;;4025:46;4103:2;4088:18;;3772:340::o;4396:277::-;4463:6;4516:2;4504:9;4495:7;4491:23;4487:32;4484:52;;;4532:1;4529;4522:12;4484:52;4564:9;4558:16;4617:5;4610:13;4603:21;4596:5;4593:32;4583:60;;4639:1;4636;4629:12;6337:456;6425:6;6433;6441;6494:2;6482:9;6473:7;6469:23;6465:32;6462:52;;;6510:1;6507;6500:12;6462:52;-1:-1:-1;;6555:16:1;;6661:2;6646:18;;6640:25;6757:2;6742:18;;;6736:25;6555:16;;6640:25;;-1:-1:-1;6736:25:1;6337:456;-1:-1:-1;6337:456:1:o;8223:127::-;8284:10;8279:3;8275:20;8272:1;8265:31;8315:4;8312:1;8305:15;8339:4;8336:1;8329:15;9050:127;9111:10;9106:3;9102:20;9099:1;9092:31;9142:4;9139:1;9132:15;9166:4;9163:1;9156:15;9182:125;9247:9;;;9268:10;;;9265:36;;;9281:18;;:::i;10021:168::-;10094:9;;;10125;;10142:15;;;10136:22;;10122:37;10112:71;;10163:18;;:::i;10194:217::-;10234:1;10260;10250:132;;10304:10;10299:3;10295:20;10292:1;10285:31;10339:4;10336:1;10329:15;10367:4;10364:1;10357:15;10250:132;-1:-1:-1;10396:9:1;;10194:217::o;10769:128::-;10836:9;;;10857:11;;;10854:37;;;10871:18;;:::i;10902:127::-;10963:10;10958:3;10954:20;10951:1;10944:31;10994:4;10991:1;10984:15;11018:4;11015:1;11008:15;11034:251;11104:6;11157:2;11145:9;11136:7;11132:23;11128:32;11125:52;;;11173:1;11170;11163:12;11125:52;11205:9;11199:16;11224:31;11249:5;11224:31;:::i;11290:959::-;11552:4;11600:3;11589:9;11585:19;11631:6;11620:9;11613:25;11674:6;11669:2;11658:9;11654:18;11647:34;11717:3;11712:2;11701:9;11697:18;11690:31;11741:6;11776;11770:13;11807:6;11799;11792:22;11845:3;11834:9;11830:19;11823:26;;11884:2;11876:6;11872:15;11858:29;;11905:1;11915:195;11929:6;11926:1;11923:13;11915:195;;;11994:13;;-1:-1:-1;;;;;11990:39:1;11978:52;;12059:2;12085:15;;;;12050:12;;;;12026:1;11944:9;11915:195;;;-1:-1:-1;;;;;;;12166:32:1;;;;12161:2;12146:18;;12139:60;-1:-1:-1;;12230:3:1;12215:19;12208:35;12127:3;11290:959;-1:-1:-1;;;11290:959:1:o;12254:1165::-;12349:6;12402:2;12390:9;12381:7;12377:23;12373:32;12370:52;;;12418:1;12415;12408:12;12370:52;12451:9;12445:16;12484:18;12476:6;12473:30;12470:50;;;12516:1;12513;12506:12;12470:50;12539:22;;12592:4;12584:13;;12580:27;-1:-1:-1;12570:55:1;;12621:1;12618;12611:12;12570:55;12654:2;12648:9;12680:18;12672:6;12669:30;12666:56;;;12702:18;;:::i;:::-;12748:6;12745:1;12741:14;12784:2;12778:9;12847:2;12843:7;12838:2;12834;12830:11;12826:25;12818:6;12814:38;12918:6;12906:10;12903:22;12882:18;12870:10;12867:34;12864:62;12861:88;;;12929:18;;:::i;:::-;12965:2;12958:22;13015;;;13065:2;13095:11;;;13091:20;;;13015:22;13053:15;;13123:19;;;13120:39;;;13155:1;13152;13145:12;13120:39;13187:2;13183;13179:11;13168:22;;13199:189;13215:6;13210:3;13207:15;13199:189;;;13305:10;;13328:18;;;13375:2;13232:12;;;;13305:10;;-1:-1:-1;13366:12:1;13199:189;;;-1:-1:-1;13407:6:1;12254:1165;-1:-1:-1;;;;;;12254:1165:1:o
Swarm Source
ipfs://ca6756b5f93156916c0fb0207049dbe7682748b53eecda97c3aba3ec88a85493
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Token Allocations
ETH
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $2,111.48 | 0.000000000000000002 | <$0.000001 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.