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 1,063 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 23702789 | 6 days ago | IN | 0 ETH | 0.00001582 | ||||
| Approve | 23702787 | 6 days ago | IN | 0 ETH | 0.00002767 | ||||
| Approve | 23630616 | 16 days ago | IN | 0 ETH | 0.00007189 | ||||
| Approve | 23614791 | 18 days ago | IN | 0 ETH | 0.00007619 | ||||
| Approve | 23583358 | 22 days ago | IN | 0 ETH | 0.00005463 | ||||
| Approve | 23428083 | 44 days ago | IN | 0 ETH | 0.00003433 | ||||
| Approve | 23328424 | 58 days ago | IN | 0 ETH | 0.00000996 | ||||
| Approve | 23305595 | 61 days ago | IN | 0 ETH | 0.00003859 | ||||
| Approve | 23240285 | 70 days ago | IN | 0 ETH | 0.00007461 | ||||
| Approve | 23236806 | 71 days ago | IN | 0 ETH | 0.00006554 | ||||
| Approve | 23224513 | 73 days ago | IN | 0 ETH | 0.0000604 | ||||
| Approve | 23210149 | 75 days ago | IN | 0 ETH | 0.00001116 | ||||
| Approve | 23164340 | 81 days ago | IN | 0 ETH | 0.00000439 | ||||
| Approve | 23161044 | 81 days ago | IN | 0 ETH | 0.00001982 | ||||
| Approve | 23112198 | 88 days ago | IN | 0 ETH | 0.00008768 | ||||
| Approve | 23054452 | 96 days ago | IN | 0 ETH | 0.00002106 | ||||
| Approve | 23054452 | 96 days ago | IN | 0 ETH | 0.00002111 | ||||
| Approve | 22988600 | 105 days ago | IN | 0 ETH | 0.00002222 | ||||
| Approve | 22969370 | 108 days ago | IN | 0 ETH | 0.0000683 | ||||
| Approve | 22969366 | 108 days ago | IN | 0 ETH | 0.00007287 | ||||
| Transfer | 22951804 | 111 days ago | IN | 0 ETH | 0.00006034 | ||||
| Approve | 22942924 | 112 days ago | IN | 0 ETH | 0.00061044 | ||||
| Approve | 22935973 | 113 days ago | IN | 0 ETH | 0.00019704 | ||||
| Approve | 22933049 | 113 days ago | IN | 0 ETH | 0.00056346 | ||||
| Approve | 22923093 | 115 days ago | IN | 0 ETH | 0.00003373 |
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers.
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
|||
|---|---|---|---|---|---|---|---|---|
| Balance Of | 23728639 | 2 days ago | 0 ETH | |||||
| Balance Of | 23728639 | 2 days ago | 0 ETH | |||||
| Balance Of | 23728639 | 2 days ago | 0 ETH | |||||
| Balance Of | 23728639 | 2 days ago | 0 ETH | |||||
| Transfer From | 23728639 | 2 days ago | 0 ETH | |||||
| Swap Exact Token... | 23728639 | 2 days ago | 0 ETH | |||||
| Get Amounts Out | 23728639 | 2 days ago | 0 ETH | |||||
| Transfer From | 23728639 | 2 days ago | 0 ETH | |||||
| Approve | 23728639 | 2 days ago | 0 ETH | |||||
| Balance Of | 23702790 | 6 days ago | 0 ETH | |||||
| Balance Of | 23702790 | 6 days ago | 0 ETH | |||||
| Balance Of | 23702790 | 6 days ago | 0 ETH | |||||
| Balance Of | 23702790 | 6 days ago | 0 ETH | |||||
| Transfer From | 23702790 | 6 days ago | 0 ETH | |||||
| Swap Exact Token... | 23702790 | 6 days ago | 0 ETH | |||||
| Get Amounts Out | 23702790 | 6 days ago | 0 ETH | |||||
| Transfer From | 23702790 | 6 days ago | 0 ETH | |||||
| Balance Of | 23630616 | 16 days ago | 0 ETH | |||||
| Balance Of | 23630616 | 16 days ago | 0 ETH | |||||
| Balance Of | 23630616 | 16 days ago | 0 ETH | |||||
| Balance Of | 23630616 | 16 days ago | 0 ETH | |||||
| Transfer From | 23630616 | 16 days ago | 0 ETH | |||||
| Swap Exact Token... | 23630616 | 16 days ago | 0 ETH | |||||
| Get Amounts Out | 23630616 | 16 days ago | 0 ETH | |||||
| Transfer | 23630616 | 16 days ago | 0 ETH |
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Token
Compiler Version
v0.8.30+commit.73712a01
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2025-06-12
*/
// SPDX-License-Identifier: MIT
//https://tryopus.io
//https://x.com/TryOpus
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC-20 standard as defined in the ERC.
*/
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);
}
// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface for the optional metadata functions from the ERC-20 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);
}
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @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;
}
}
// File: @openzeppelin/contracts/interfaces/draft-IERC6093.sol
// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;
/**
* @dev Standard ERC-20 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 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 Standard ERC-721 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.
*/
interface IERC721Errors {
/**
* @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.
* Used in balance queries.
* @param owner Address of the current owner of a token.
*/
error ERC721InvalidOwner(address owner);
/**
* @dev Indicates a `tokenId` whose `owner` is the zero address.
* @param tokenId Identifier number of a token.
*/
error ERC721NonexistentToken(uint256 tokenId);
/**
* @dev Indicates an error related to the ownership over a particular token. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param tokenId Identifier number of a token.
* @param owner Address of the current owner of a token.
*/
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC721InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC721InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `operator`’s approval. Used in transfers.
* @param operator Address that may be allowed to operate on tokens without being their owner.
* @param tokenId Identifier number of a token.
*/
error ERC721InsufficientApproval(address operator, uint256 tokenId);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC721InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `operator` to be approved. Used in approvals.
* @param operator Address that may be allowed to operate on tokens without being their owner.
*/
error ERC721InvalidOperator(address operator);
}
/**
* @dev Standard ERC-1155 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.
*/
interface IERC1155Errors {
/**
* @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.
* @param tokenId Identifier number of a token.
*/
error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC1155InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC1155InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `operator`’s approval. Used in transfers.
* @param operator Address that may be allowed to operate on tokens without being their owner.
* @param owner Address of the current owner of a token.
*/
error ERC1155MissingApprovalForAll(address operator, address owner);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC1155InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `operator` to be approved. Used in approvals.
* @param operator Address that may be allowed to operate on tokens without being their owner.
*/
error ERC1155InvalidOperator(address operator);
/**
* @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
* Used in batch transfers.
* @param idsLength Length of the array of token identifiers
* @param valuesLength Length of the array of token amounts
*/
error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}
// File: @openzeppelin/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts (last updated v5.3.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.20;
/**
* @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 ERC-20
* applications.
*/
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
mapping(address account => uint256) private _balances;
mapping(address account => mapping(address spender => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* Both 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}.
*
* Skips emitting an {Approval} event indicating an allowance update. This is not
* required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].
*
* 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 fees, 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:
*
* ```solidity
* 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);
}
}
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
/**
* @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.
*
* The initial owner is set to the address provided by the deployer. 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;
/**
* @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`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_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: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol
pragma solidity >=0.6.2;
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountA, uint amountB);
function removeLiquidityETHWithPermit(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol
pragma solidity >=0.6.2;
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol
pragma solidity >=0.5.0;
interface IUniswapV2Factory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB) external view returns (address pair);
function allPairs(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
// File: .deploys/opus/opus.sol
//https://tryopus.io
//https://x.com/TryOpus
pragma solidity ^0.8.28;
contract Token is ERC20, Ownable {
uint256 public immutable MAX_SUPPLY;
address public immutable pair;
address public treasury;
IUniswapV2Router02 private constant _router =
IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
address private immutable _weth;
address private immutable _deployer;
uint256 public startBlock;
uint256 public startBlockTime;
uint256 private raiseAmount;
mapping(address account => bool) public isExcludedFromFees;
mapping(address account => bool) public isExcludedFromMaxWallet;
mapping(address origin => mapping(uint256 blockNumber => uint256 txCount))
public maxBuyTxsPerBlockPerOrigin;
uint256 private _maxBuyTxsPerBlockPerOrigin = 15;
mapping(uint256 blockNumber => uint256 txCount) public maxBuyTxsPerBlock;
uint256 private _maxBuyTxsPerBlock = 100;
constructor(
string memory name,
string memory symbol,
uint256 maxSupply,
address _treasury
) ERC20(name, symbol) Ownable(msg.sender) {
MAX_SUPPLY = maxSupply;
_weth = _router.WETH();
pair = IUniswapV2Factory(_router.factory()).createPair(
address(this),
_weth
);
isExcludedFromFees[msg.sender] = true;
isExcludedFromFees[address(this)] = true;
isExcludedFromFees[pair] = true;
isExcludedFromFees[treasury] = true;
isExcludedFromMaxWallet[msg.sender] = true;
isExcludedFromMaxWallet[address(this)] = true;
isExcludedFromMaxWallet[pair] = true;
isExcludedFromMaxWallet[treasury] = true;
_mint(msg.sender, maxSupply);
_approve(msg.sender, address(_router), type(uint256).max);
treasury = _treasury;
_deployer = msg.sender;
_approve(address(this), address(_router), type(uint256).max);
}
function setTreasury(address newTreasury) external {
require(newTreasury != address(0), "treasury-is-0");
require(
msg.sender == _deployer || msg.sender == owner(),
"only-deployer"
);
treasury = newTreasury;
}
function enableTrading() external onlyOwner {
require(startBlock == 0, "trading-already-enabled");
startBlock = block.number;
startBlockTime = block.timestamp;
}
function setExcludedFromFees(
address account,
bool excluded
) external onlyOwner {
isExcludedFromFees[account] = excluded;
}
function setExcludedFromMaxWallet(
address account,
bool excluded
) external onlyOwner {
isExcludedFromMaxWallet[account] = excluded;
}
function feesAndMaxWallet()
external
view
returns (uint256 _feeBps, uint256 _maxWallet)
{
return _feesAndMaxWallet();
}
function _feesAndMaxWallet()
internal
view
returns (uint256 _feeBps, uint256 _maxWallet)
{
if (startBlockTime == 0) {
return (0, 0);
}
uint256 _diffSeconds = block.timestamp - startBlockTime;
if (_diffSeconds < 3600) {
// 1 min
if (_diffSeconds < 60) {
_feeBps = 2500; // 25%
_maxWallet = MAX_SUPPLY / 400; // 0.25%
return (_feeBps, _maxWallet);
}
// 2-5 min
if (_diffSeconds < 300) {
_feeBps = 2000; // 20%
_maxWallet = MAX_SUPPLY / 333; // 0.3%
return (_feeBps, _maxWallet);
}
// 6-8 min
if (_diffSeconds < 480) {
_feeBps = 2000; // 20%
_maxWallet = MAX_SUPPLY / 166; // 0.6%
return (_feeBps, _maxWallet);
}
if (_diffSeconds < 900) {
// 9-15 min
_feeBps = 1000; // 10%
_maxWallet = MAX_SUPPLY / 100; // 1%
return (_feeBps, _maxWallet);
}
_feeBps = 500; // 5%
_maxWallet = MAX_SUPPLY / 88; // 1.2%
return (_feeBps, _maxWallet);
}
if (raiseAmount < 500 ether) {
_feeBps = 400; // 4%;
} else if (raiseAmount < 700 ether) {
_feeBps = 300; // 3%;
} else if (raiseAmount < 900 ether) {
_feeBps = 200; // 2%;
} else {
_feeBps = 0; // 0%;
}
_maxWallet = MAX_SUPPLY; // no limit
return (_feeBps, _maxWallet);
}
function _update(
address from,
address to,
uint256 value
) internal override {
(uint256 _feeBps, uint256 _maxWallet) = _feesAndMaxWallet();
bool isBuy = from == pair;
if (isBuy || to == pair) {
require(
startBlock > 0 || isExcludedFromFees[to],
"trading-not-enabled"
);
if (_feeBps != 0) {
if (isBuy && !isExcludedFromFees[to]) {
if (
startBlockTime > 0 &&
block.timestamp - startBlockTime < 180
) {
require(
maxBuyTxsPerBlockPerOrigin[tx.origin][
block.number
] < _maxBuyTxsPerBlockPerOrigin,
"max-buy-txs-per-block-per-origin-exceeded"
);
maxBuyTxsPerBlockPerOrigin[tx.origin][block.number]++;
require(
maxBuyTxsPerBlock[block.number] <
_maxBuyTxsPerBlock,
"max-buy-txs-per-block-exceeded"
);
maxBuyTxsPerBlock[block.number]++;
}
uint256 fee = (value * _feeBps) / 10000;
value -= fee;
super._update(from, address(this), fee);
}
if (!isBuy && !isExcludedFromFees[from]) {
uint256 fee = (value * _feeBps) / 10000;
value -= fee;
super._update(from, address(this), fee);
_swapTokensForEth();
}
} else {
// sell any remaining tokens after cap is reached
if (!isBuy && !isExcludedFromFees[from]) {
_swapTokensForEth();
}
}
}
require(
isExcludedFromMaxWallet[to] || value + balanceOf(to) <= _maxWallet,
"max-wallet-size-exceeded"
);
super._update(from, to, value);
}
function _swapTokensForEth() internal {
uint256 startDiff = block.timestamp - startBlockTime;
if (startDiff < 300) {
return;
}
uint256 _tokenAmount = balanceOf(address(this));
if (_tokenAmount == 0) {
return;
}
address[] memory _path = new address[](2);
_path[0] = _weth;
_path[1] = address(this);
// sell max 1 eth worth of tokens
uint256 _maxTokenAmount = _router.getAmountsOut(1 ether, _path)[1];
if (_tokenAmount > _maxTokenAmount) {
_tokenAmount = _maxTokenAmount;
}
_path[0] = address(this);
_path[1] = _weth;
uint256 _treasuryBalanceBefore = address(treasury).balance;
_router.swapExactTokensForETHSupportingFeeOnTransferTokens(
_tokenAmount,
0,
_path,
treasury,
block.timestamp
);
uint256 _treasuryBalanceAfter = address(treasury).balance;
raiseAmount += _treasuryBalanceAfter - _treasuryBalanceBefore;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"address","name":"_treasury","type":"address"}],"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":"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":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"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":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesAndMaxWallet","outputs":[{"internalType":"uint256","name":"_feeBps","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"maxBuyTxsPerBlock","outputs":[{"internalType":"uint256","name":"txCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"origin","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"maxBuyTxsPerBlockPerOrigin","outputs":[{"internalType":"uint256","name":"txCount","type":"uint256"}],"stateMutability":"view","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludedFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startBlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
610100604052600f600d556064600f5534801561001a575f5ffd5b50604051614d9d380380614d9d833981810160405281019061003c919061187f565b338484816003908161004e9190611b22565b50806004908161005e9190611b22565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100d1575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100c89190611c00565b60405180910390fd5b6100e0816106d260201b60201c565b508160808181525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610146573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061016a9190611c19565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101fa573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061021e9190611c19565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060c0516040518363ffffffff1660e01b815260040161025a929190611c44565b6020604051808303815f875af1158015610276573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061029a9190611c19565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506001600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506105cb338361079560201b60201c565b61061033737a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61081a60201b60201c565b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff16815250506106c930737a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61081a60201b60201c565b505050506122fd565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610805575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016107fc9190611c00565b60405180910390fd5b6108165f838361083260201b60201c565b5050565b61082d8383836001610d5560201b60201c565b505050565b5f5f610842610f2460201b60201c565b915091505f60a05173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614905080806108b3575060a05173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b15610c8f575f600754118061090e5750600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61094d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094490611cc5565b60405180910390fd5b5f8314610c24578080156109a85750600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610b7a575f6008541180156109cb575060b4600854426109c99190611d10565b105b15610b3d57600d54600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f4381526020019081526020015f205410610a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5790611db3565b60405180910390fd5b600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f4381526020019081526020015f205f815480929190610abc90611dd1565b9190505550600f54600e5f4381526020019081526020015f205410610b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0d90611e62565b60405180910390fd5b600e5f4381526020019081526020015f205f815480929190610b3790611dd1565b91905055505b5f6127108486610b4d9190611e80565b610b579190611eee565b90508085610b659190611d10565b9450610b7887308361107160201b60201c565b505b80158015610bcf5750600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610c1f575f6127108486610be49190611e80565b610bee9190611eee565b90508085610bfc9190611d10565b9450610c0f87308361107160201b60201c565b610c1d61128a60201b60201c565b505b610c8e565b80158015610c795750600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610c8d57610c8c61128a60201b60201c565b5b5b5b600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680610cfd575081610cef8661166060201b60201c565b85610cfa9190611f1e565b11155b610d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3390611f9b565b60405180910390fd5b610d4d86868661107160201b60201c565b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610dc5575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610dbc9190611c00565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e35575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610e2c9190611c00565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610f1e578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610f159190611fc8565b60405180910390a35b50505050565b5f5f5f60085403610f3a575f5f9150915061106d565b5f60085442610f499190611d10565b9050610e1081101561100a57603c811015610f7b576109c49250610190608051610f739190611eee565b91505061106d565b61012c811015610fa2576107d0925061014d608051610f9a9190611eee565b91505061106d565b6101e0811015610fc8576107d0925060a6608051610fc09190611eee565b91505061106d565b610384811015610fee576103e892506064608051610fe69190611eee565b91505061106d565b6101f4925060586080516110029190611eee565b91505061106d565b681b1ae4d6e2ef5000006009541015611027576101909250611066565b6825f273933db570000060095410156110445761012c9250611065565b6830ca024f987b90000060095410156110605760c89250611064565b5f92505b5b5b6080519150505b9091565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110c1578060025f8282546110b59190611f1e565b9250508190555061118f565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561114a578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161114193929190611fe1565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111d6578060025f8282540392505081905550611220565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161127d9190611fc8565b60405180910390a3505050565b5f600854426112999190611d10565b905061012c8110156112ab575061165e565b5f6112bb3061166060201b60201c565b90505f81036112cb57505061165e565b5f600267ffffffffffffffff8111156112e7576112e66116ce565b5b6040519080825280602002602001820160405280156113155781602001602082028036833780820191505090505b50905060c051815f8151811061132e5761132d612016565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061137d5761137c612016565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663d06ca61f670de0b6b3a7640000846040518363ffffffff1660e01b815260040161140f929190612133565b5f60405180830381865afa158015611429573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906114519190612225565b60018151811061146457611463612016565b5b602002602001015190508083111561147a578092505b30825f8151811061148e5761148d612016565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060c051826001815181106114df576114de612016565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16319050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947855f8660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016115cb9594939291906122a5565b5f604051808303815f87803b1580156115e2575f5ffd5b505af11580156115f4573d5f5f3e3d5ffd5b505050505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1631905081816116409190611d10565b60095f8282546116509190611f1e565b925050819055505050505050505b565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611704826116be565b810181811067ffffffffffffffff82111715611723576117226116ce565b5b80604052505050565b5f6117356116a5565b905061174182826116fb565b919050565b5f67ffffffffffffffff8211156117605761175f6116ce565b5b611769826116be565b9050602081019050919050565b8281835e5f83830152505050565b5f61179661179184611746565b61172c565b9050828152602081018484840111156117b2576117b16116ba565b5b6117bd848285611776565b509392505050565b5f82601f8301126117d9576117d86116b6565b5b81516117e9848260208601611784565b91505092915050565b5f819050919050565b611804816117f2565b811461180e575f5ffd5b50565b5f8151905061181f816117fb565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61184e82611825565b9050919050565b61185e81611844565b8114611868575f5ffd5b50565b5f8151905061187981611855565b92915050565b5f5f5f5f60808587031215611897576118966116ae565b5b5f85015167ffffffffffffffff8111156118b4576118b36116b2565b5b6118c0878288016117c5565b945050602085015167ffffffffffffffff8111156118e1576118e06116b2565b5b6118ed878288016117c5565b93505060406118fe87828801611811565b925050606061190f8782880161186b565b91505092959194509250565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061196957607f821691505b60208210810361197c5761197b611925565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026119de7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826119a3565b6119e886836119a3565b95508019841693508086168417925050509392505050565b5f819050919050565b5f611a23611a1e611a19846117f2565b611a00565b6117f2565b9050919050565b5f819050919050565b611a3c83611a09565b611a50611a4882611a2a565b8484546119af565b825550505050565b5f5f905090565b611a67611a58565b611a72818484611a33565b505050565b5b81811015611a9557611a8a5f82611a5f565b600181019050611a78565b5050565b601f821115611ada57611aab81611982565b611ab484611994565b81016020851015611ac3578190505b611ad7611acf85611994565b830182611a77565b50505b505050565b5f82821c905092915050565b5f611afa5f1984600802611adf565b1980831691505092915050565b5f611b128383611aeb565b9150826002028217905092915050565b611b2b8261191b565b67ffffffffffffffff811115611b4457611b436116ce565b5b611b4e8254611952565b611b59828285611a99565b5f60209050601f831160018114611b8a575f8415611b78578287015190505b611b828582611b07565b865550611be9565b601f198416611b9886611982565b5f5b82811015611bbf57848901518255600182019150602085019450602081019050611b9a565b86831015611bdc5784890151611bd8601f891682611aeb565b8355505b6001600288020188555050505b505050505050565b611bfa81611844565b82525050565b5f602082019050611c135f830184611bf1565b92915050565b5f60208284031215611c2e57611c2d6116ae565b5b5f611c3b8482850161186b565b91505092915050565b5f604082019050611c575f830185611bf1565b611c646020830184611bf1565b9392505050565b5f82825260208201905092915050565b7f74726164696e672d6e6f742d656e61626c6564000000000000000000000000005f82015250565b5f611caf601383611c6b565b9150611cba82611c7b565b602082019050919050565b5f6020820190508181035f830152611cdc81611ca3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611d1a826117f2565b9150611d25836117f2565b9250828203905081811115611d3d57611d3c611ce3565b5b92915050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d7065722d6f726967696e5f8201527f2d65786365656465640000000000000000000000000000000000000000000000602082015250565b5f611d9d602983611c6b565b9150611da882611d43565b604082019050919050565b5f6020820190508181035f830152611dca81611d91565b9050919050565b5f611ddb826117f2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611e0d57611e0c611ce3565b5b600182019050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d657863656564656400005f82015250565b5f611e4c601e83611c6b565b9150611e5782611e18565b602082019050919050565b5f6020820190508181035f830152611e7981611e40565b9050919050565b5f611e8a826117f2565b9150611e95836117f2565b9250828202611ea3816117f2565b91508282048414831517611eba57611eb9611ce3565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611ef8826117f2565b9150611f03836117f2565b925082611f1357611f12611ec1565b5b828204905092915050565b5f611f28826117f2565b9150611f33836117f2565b9250828201905080821115611f4b57611f4a611ce3565b5b92915050565b7f6d61782d77616c6c65742d73697a652d657863656564656400000000000000005f82015250565b5f611f85601883611c6b565b9150611f9082611f51565b602082019050919050565b5f6020820190508181035f830152611fb281611f79565b9050919050565b611fc2816117f2565b82525050565b5f602082019050611fdb5f830184611fb9565b92915050565b5f606082019050611ff45f830186611bf1565b6120016020830185611fb9565b61200e6040830184611fb9565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f61206661206161205c84612043565b611a00565b6117f2565b9050919050565b6120768161204c565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6120ae81611844565b82525050565b5f6120bf83836120a5565b60208301905092915050565b5f602082019050919050565b5f6120e18261207c565b6120eb8185612086565b93506120f683612096565b805f5b8381101561212657815161210d88826120b4565b9750612118836120cb565b9250506001810190506120f9565b5085935050505092915050565b5f6040820190506121465f83018561206d565b818103602083015261215881846120d7565b90509392505050565b5f67ffffffffffffffff82111561217b5761217a6116ce565b5b602082029050602081019050919050565b5f5ffd5b5f6121a261219d84612161565b61172c565b905080838252602082019050602084028301858111156121c5576121c461218c565b5b835b818110156121ee57806121da8882611811565b8452602084019350506020810190506121c7565b5050509392505050565b5f82601f83011261220c5761220b6116b6565b5b815161221c848260208601612190565b91505092915050565b5f6020828403121561223a576122396116ae565b5b5f82015167ffffffffffffffff811115612257576122566116b2565b5b612263848285016121f8565b91505092915050565b5f819050919050565b5f61228f61228a6122858461226c565b611a00565b6117f2565b9050919050565b61229f81612275565b82525050565b5f60a0820190506122b85f830188611fb9565b6122c56020830187612296565b81810360408301526122d781866120d7565b90506122e66060830185611bf1565b6122f36080830184611fb9565b9695505050505050565b60805160a05160c05160e051612a2e61236f5f395f610a3a01525f8181611a580152611c2601525f81816109040152818161129101526112e901525f818161063d01528181610ef401528181610f3901528181610f7d01528181610fc101528181610ffb015261108a0152612a2e5ff3fe608060405234801561000f575f5ffd5b506004361061018c575f3560e01c806361d027b3116100dc57806395d89b4111610095578063a9059cbb1161006f578063a9059cbb14610477578063dd62ed3e146104a7578063f0f44260146104d7578063f2fde38b146104f35761018c565b806395d89b411461041c578063a25ba1831461043a578063a8aa1b31146104595761018c565b806361d027b31461036c5780636dd3d39f1461038a57806370a08231146103ba578063715018a6146103ea5780638a8c523c146103f45780638da5cb5b146103fe5761018c565b806323b872dd11610149578063412201041161012357806341220104146102e657806348cd4cb1146103025780634fbee19314610320578063590ffdce146103505761018c565b806323b872dd1461027a578063313ce567146102aa57806332cb6b0c146102c85761018c565b806306fdde0314610190578063095ea7b3146101ae5780630c18d4ce146101de5780630fe3fe7d146101fc57806318160ddd1461022c57806321b024861461024a575b5f5ffd5b61019861050f565b6040516101a59190611e4a565b60405180910390f35b6101c860048036038101906101c39190611f08565b61059f565b6040516101d59190611f60565b60405180910390f35b6101e66105c1565b6040516101f39190611f88565b60405180910390f35b61021660048036038101906102119190611f08565b6105c7565b6040516102239190611f88565b60405180910390f35b6102346105e7565b6040516102419190611f88565b60405180910390f35b610264600480360381019061025f9190611fa1565b6105f0565b6040516102719190611f88565b60405180910390f35b610294600480360381019061028f9190611fcc565b610605565b6040516102a19190611f60565b60405180910390f35b6102b2610633565b6040516102bf9190612037565b60405180910390f35b6102d061063b565b6040516102dd9190611f88565b60405180910390f35b61030060048036038101906102fb919061207a565b61065f565b005b61030a6106bf565b6040516103179190611f88565b60405180910390f35b61033a600480360381019061033591906120b8565b6106c5565b6040516103479190611f60565b60405180910390f35b61036a6004803603810190610365919061207a565b6106e2565b005b610374610742565b60405161038191906120f2565b60405180910390f35b6103a4600480360381019061039f91906120b8565b610767565b6040516103b19190611f60565b60405180910390f35b6103d460048036038101906103cf91906120b8565b610784565b6040516103e19190611f88565b60405180910390f35b6103f26107c9565b005b6103fc6107dc565b005b610406610838565b60405161041391906120f2565b60405180910390f35b610424610860565b6040516104319190611e4a565b60405180910390f35b6104426108f0565b60405161045092919061210b565b60405180910390f35b610461610902565b60405161046e91906120f2565b60405180910390f35b610491600480360381019061048c9190611f08565b610926565b60405161049e9190611f60565b60405180910390f35b6104c160048036038101906104bc9190612132565b610948565b6040516104ce9190611f88565b60405180910390f35b6104f160048036038101906104ec91906120b8565b6109ca565b005b61050d600480360381019061050891906120b8565b610b46565b005b60606003805461051e9061219d565b80601f016020809104026020016040519081016040528092919081815260200182805461054a9061219d565b80156105955780601f1061056c57610100808354040283529160200191610595565b820191905f5260205f20905b81548152906001019060200180831161057857829003601f168201915b5050505050905090565b5f5f6105a9610bca565b90506105b6818585610bd1565b600191505092915050565b60085481565b600c602052815f5260405f20602052805f5260405f205f91509150505481565b5f600254905090565b600e602052805f5260405f205f915090505481565b5f5f61060f610bca565b905061061c858285610be3565b610627858585610c76565b60019150509392505050565b5f6012905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b610667610d66565b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60075481565b600a602052805f5260405f205f915054906101000a900460ff1681565b6106ea610d66565b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b602052805f5260405f205f915054906101000a900460ff1681565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6107d1610d66565b6107da5f610ded565b565b6107e4610d66565b5f60075414610828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081f90612217565b60405180910390fd5b4360078190555042600881905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461086f9061219d565b80601f016020809104026020016040519081016040528092919081815260200182805461089b9061219d565b80156108e65780601f106108bd576101008083540402835291602001916108e6565b820191905f5260205f20905b8154815290600101906020018083116108c957829003601f168201915b5050505050905090565b5f5f6108fa610eb0565b915091509091565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f5f610930610bca565b905061093d818585610c76565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f9061227f565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ac45750610a95610838565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afa906122e7565b60405180910390fd5b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b4e610d66565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610bbe575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610bb591906120f2565b60405180910390fd5b610bc781610ded565b50565b5f33905090565b610bde83838360016110b1565b505050565b5f610bee8484610948565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811015610c705781811015610c61578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610c5893929190612305565b60405180910390fd5b610c6f84848484035f6110b1565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ce6575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610cdd91906120f2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d56575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610d4d91906120f2565b60405180910390fd5b610d61838383611280565b505050565b610d6e610bca565b73ffffffffffffffffffffffffffffffffffffffff16610d8c610838565b73ffffffffffffffffffffffffffffffffffffffff1614610deb57610daf610bca565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610de291906120f2565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f5f5f60085403610ec6575f5f915091506110ad565b5f60085442610ed59190612367565b9050610e1081101561102c57603c811015610f25576109c492506101907f0000000000000000000000000000000000000000000000000000000000000000610f1d91906123c7565b9150506110ad565b61012c811015610f6a576107d0925061014d7f0000000000000000000000000000000000000000000000000000000000000000610f6291906123c7565b9150506110ad565b6101e0811015610fae576107d0925060a67f0000000000000000000000000000000000000000000000000000000000000000610fa691906123c7565b9150506110ad565b610384811015610ff2576103e8925060647f0000000000000000000000000000000000000000000000000000000000000000610fea91906123c7565b9150506110ad565b6101f4925060587f000000000000000000000000000000000000000000000000000000000000000061102491906123c7565b9150506110ad565b681b1ae4d6e2ef5000006009541015611049576101909250611088565b6825f273933db570000060095410156110665761012c9250611087565b6830ca024f987b90000060095410156110825760c89250611086565b5f92505b5b5b7f00000000000000000000000000000000000000000000000000000000000000009150505b9091565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611121575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161111891906120f2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611191575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161118891906120f2565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801561127a578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516112719190611f88565b60405180910390a35b50505050565b5f5f61128a610eb0565b915091505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16149050808061133757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156116fb575f60075411806113925750600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6113d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c890612441565b60405180910390fd5b5f83146116965780801561142c5750600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156115f8575f60085411801561144f575060b46008544261144d9190612367565b105b156115c157600d54600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f4381526020019081526020015f2054106114e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114db906124cf565b60405180910390fd5b600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f4381526020019081526020015f205f815480929190611540906124ed565b9190505550600f54600e5f4381526020019081526020015f20541061159a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115919061257e565b60405180910390fd5b600e5f4381526020019081526020015f205f8154809291906115bb906124ed565b91905055505b5f61271084866115d1919061259c565b6115db91906123c7565b905080856115e99190612367565b94506115f68730836117b5565b505b8015801561164d5750600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611691575f6127108486611662919061259c565b61166c91906123c7565b9050808561167a9190612367565b94506116878730836117b5565b61168f6119ce565b505b6116fa565b801580156116eb5750600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156116f9576116f86119ce565b5b5b5b600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061176357508161175586610784565b8561176091906125dd565b11155b6117a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117999061265a565b60405180910390fd5b6117ad8686866117b5565b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611805578060025f8282546117f991906125dd565b925050819055506118d3565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561188e578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161188593929190612305565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361191a578060025f8282540392505081905550611964565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119c19190611f88565b60405180910390a3505050565b5f600854426119dd9190612367565b905061012c8110156119ef5750611dd8565b5f6119f930610784565b90505f8103611a09575050611dd8565b5f600267ffffffffffffffff811115611a2557611a24612678565b5b604051908082528060200260200182016040528015611a535781602001602082028036833780820191505090505b5090507f0000000000000000000000000000000000000000000000000000000000000000815f81518110611a8a57611a896126a5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110611ad957611ad86126a5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663d06ca61f670de0b6b3a7640000846040518363ffffffff1660e01b8152600401611b6b9291906127cb565b5f60405180830381865afa158015611b85573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611bad9190612920565b600181518110611bc057611bbf6126a5565b5b6020026020010151905080831115611bd6578092505b30825f81518110611bea57611be96126a5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000082600181518110611c5957611c586126a5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16319050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947855f8660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611d459594939291906129a0565b5f604051808303815f87803b158015611d5c575f5ffd5b505af1158015611d6e573d5f5f3e3d5ffd5b505050505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163190508181611dba9190612367565b60095f828254611dca91906125dd565b925050819055505050505050505b565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611e1c82611dda565b611e268185611de4565b9350611e36818560208601611df4565b611e3f81611e02565b840191505092915050565b5f6020820190508181035f830152611e628184611e12565b905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611ea482611e7b565b9050919050565b611eb481611e9a565b8114611ebe575f5ffd5b50565b5f81359050611ecf81611eab565b92915050565b5f819050919050565b611ee781611ed5565b8114611ef1575f5ffd5b50565b5f81359050611f0281611ede565b92915050565b5f5f60408385031215611f1e57611f1d611e73565b5b5f611f2b85828601611ec1565b9250506020611f3c85828601611ef4565b9150509250929050565b5f8115159050919050565b611f5a81611f46565b82525050565b5f602082019050611f735f830184611f51565b92915050565b611f8281611ed5565b82525050565b5f602082019050611f9b5f830184611f79565b92915050565b5f60208284031215611fb657611fb5611e73565b5b5f611fc384828501611ef4565b91505092915050565b5f5f5f60608486031215611fe357611fe2611e73565b5b5f611ff086828701611ec1565b935050602061200186828701611ec1565b925050604061201286828701611ef4565b9150509250925092565b5f60ff82169050919050565b6120318161201c565b82525050565b5f60208201905061204a5f830184612028565b92915050565b61205981611f46565b8114612063575f5ffd5b50565b5f8135905061207481612050565b92915050565b5f5f604083850312156120905761208f611e73565b5b5f61209d85828601611ec1565b92505060206120ae85828601612066565b9150509250929050565b5f602082840312156120cd576120cc611e73565b5b5f6120da84828501611ec1565b91505092915050565b6120ec81611e9a565b82525050565b5f6020820190506121055f8301846120e3565b92915050565b5f60408201905061211e5f830185611f79565b61212b6020830184611f79565b9392505050565b5f5f6040838503121561214857612147611e73565b5b5f61215585828601611ec1565b925050602061216685828601611ec1565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806121b457607f821691505b6020821081036121c7576121c6612170565b5b50919050565b7f74726164696e672d616c72656164792d656e61626c65640000000000000000005f82015250565b5f612201601783611de4565b915061220c826121cd565b602082019050919050565b5f6020820190508181035f83015261222e816121f5565b9050919050565b7f74726561737572792d69732d30000000000000000000000000000000000000005f82015250565b5f612269600d83611de4565b915061227482612235565b602082019050919050565b5f6020820190508181035f8301526122968161225d565b9050919050565b7f6f6e6c792d6465706c6f796572000000000000000000000000000000000000005f82015250565b5f6122d1600d83611de4565b91506122dc8261229d565b602082019050919050565b5f6020820190508181035f8301526122fe816122c5565b9050919050565b5f6060820190506123185f8301866120e3565b6123256020830185611f79565b6123326040830184611f79565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61237182611ed5565b915061237c83611ed5565b92508282039050818111156123945761239361233a565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6123d182611ed5565b91506123dc83611ed5565b9250826123ec576123eb61239a565b5b828204905092915050565b7f74726164696e672d6e6f742d656e61626c6564000000000000000000000000005f82015250565b5f61242b601383611de4565b9150612436826123f7565b602082019050919050565b5f6020820190508181035f8301526124588161241f565b9050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d7065722d6f726967696e5f8201527f2d65786365656465640000000000000000000000000000000000000000000000602082015250565b5f6124b9602983611de4565b91506124c48261245f565b604082019050919050565b5f6020820190508181035f8301526124e6816124ad565b9050919050565b5f6124f782611ed5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036125295761252861233a565b5b600182019050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d657863656564656400005f82015250565b5f612568601e83611de4565b915061257382612534565b602082019050919050565b5f6020820190508181035f8301526125958161255c565b9050919050565b5f6125a682611ed5565b91506125b183611ed5565b92508282026125bf81611ed5565b915082820484148315176125d6576125d561233a565b5b5092915050565b5f6125e782611ed5565b91506125f283611ed5565b925082820190508082111561260a5761260961233a565b5b92915050565b7f6d61782d77616c6c65742d73697a652d657863656564656400000000000000005f82015250565b5f612644601883611de4565b915061264f82612610565b602082019050919050565b5f6020820190508181035f83015261267181612638565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f819050919050565b5f6126fe6126f96126f4846126d2565b6126db565b611ed5565b9050919050565b61270e816126e4565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61274681611e9a565b82525050565b5f612757838361273d565b60208301905092915050565b5f602082019050919050565b5f61277982612714565b612783818561271e565b935061278e8361272e565b805f5b838110156127be5781516127a5888261274c565b97506127b083612763565b925050600181019050612791565b5085935050505092915050565b5f6040820190506127de5f830185612705565b81810360208301526127f0818461276f565b90509392505050565b5f5ffd5b61280682611e02565b810181811067ffffffffffffffff8211171561282557612824612678565b5b80604052505050565b5f612837611e6a565b905061284382826127fd565b919050565b5f67ffffffffffffffff82111561286257612861612678565b5b602082029050602081019050919050565b5f5ffd5b5f8151905061288581611ede565b92915050565b5f61289d61289884612848565b61282e565b905080838252602082019050602084028301858111156128c0576128bf612873565b5b835b818110156128e957806128d58882612877565b8452602084019350506020810190506128c2565b5050509392505050565b5f82601f830112612907576129066127f9565b5b815161291784826020860161288b565b91505092915050565b5f6020828403121561293557612934611e73565b5b5f82015167ffffffffffffffff81111561295257612951611e77565b5b61295e848285016128f3565b91505092915050565b5f819050919050565b5f61298a61298561298084612967565b6126db565b611ed5565b9050919050565b61299a81612970565b82525050565b5f60a0820190506129b35f830188611f79565b6129c06020830187612991565b81810360408301526129d2818661276f565b90506129e160608301856120e3565b6129ee6080830184611f79565b969550505050505056fea26469706673582212206f6e282d48988be445b75abc40478e0801250b0445aad61690d36b8338a9417164736f6c634300081e0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000084595161401484a00000000000000000000000000000096a2efddb955cbca197f5dafcda2b2a22bbe894100000000000000000000000000000000000000000000000000000000000000044f7075730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044f50555300000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561000f575f5ffd5b506004361061018c575f3560e01c806361d027b3116100dc57806395d89b4111610095578063a9059cbb1161006f578063a9059cbb14610477578063dd62ed3e146104a7578063f0f44260146104d7578063f2fde38b146104f35761018c565b806395d89b411461041c578063a25ba1831461043a578063a8aa1b31146104595761018c565b806361d027b31461036c5780636dd3d39f1461038a57806370a08231146103ba578063715018a6146103ea5780638a8c523c146103f45780638da5cb5b146103fe5761018c565b806323b872dd11610149578063412201041161012357806341220104146102e657806348cd4cb1146103025780634fbee19314610320578063590ffdce146103505761018c565b806323b872dd1461027a578063313ce567146102aa57806332cb6b0c146102c85761018c565b806306fdde0314610190578063095ea7b3146101ae5780630c18d4ce146101de5780630fe3fe7d146101fc57806318160ddd1461022c57806321b024861461024a575b5f5ffd5b61019861050f565b6040516101a59190611e4a565b60405180910390f35b6101c860048036038101906101c39190611f08565b61059f565b6040516101d59190611f60565b60405180910390f35b6101e66105c1565b6040516101f39190611f88565b60405180910390f35b61021660048036038101906102119190611f08565b6105c7565b6040516102239190611f88565b60405180910390f35b6102346105e7565b6040516102419190611f88565b60405180910390f35b610264600480360381019061025f9190611fa1565b6105f0565b6040516102719190611f88565b60405180910390f35b610294600480360381019061028f9190611fcc565b610605565b6040516102a19190611f60565b60405180910390f35b6102b2610633565b6040516102bf9190612037565b60405180910390f35b6102d061063b565b6040516102dd9190611f88565b60405180910390f35b61030060048036038101906102fb919061207a565b61065f565b005b61030a6106bf565b6040516103179190611f88565b60405180910390f35b61033a600480360381019061033591906120b8565b6106c5565b6040516103479190611f60565b60405180910390f35b61036a6004803603810190610365919061207a565b6106e2565b005b610374610742565b60405161038191906120f2565b60405180910390f35b6103a4600480360381019061039f91906120b8565b610767565b6040516103b19190611f60565b60405180910390f35b6103d460048036038101906103cf91906120b8565b610784565b6040516103e19190611f88565b60405180910390f35b6103f26107c9565b005b6103fc6107dc565b005b610406610838565b60405161041391906120f2565b60405180910390f35b610424610860565b6040516104319190611e4a565b60405180910390f35b6104426108f0565b60405161045092919061210b565b60405180910390f35b610461610902565b60405161046e91906120f2565b60405180910390f35b610491600480360381019061048c9190611f08565b610926565b60405161049e9190611f60565b60405180910390f35b6104c160048036038101906104bc9190612132565b610948565b6040516104ce9190611f88565b60405180910390f35b6104f160048036038101906104ec91906120b8565b6109ca565b005b61050d600480360381019061050891906120b8565b610b46565b005b60606003805461051e9061219d565b80601f016020809104026020016040519081016040528092919081815260200182805461054a9061219d565b80156105955780601f1061056c57610100808354040283529160200191610595565b820191905f5260205f20905b81548152906001019060200180831161057857829003601f168201915b5050505050905090565b5f5f6105a9610bca565b90506105b6818585610bd1565b600191505092915050565b60085481565b600c602052815f5260405f20602052805f5260405f205f91509150505481565b5f600254905090565b600e602052805f5260405f205f915090505481565b5f5f61060f610bca565b905061061c858285610be3565b610627858585610c76565b60019150509392505050565b5f6012905090565b7f000000000000000000000000000000000000000000084595161401484a00000081565b610667610d66565b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60075481565b600a602052805f5260405f205f915054906101000a900460ff1681565b6106ea610d66565b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b602052805f5260405f205f915054906101000a900460ff1681565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6107d1610d66565b6107da5f610ded565b565b6107e4610d66565b5f60075414610828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081f90612217565b60405180910390fd5b4360078190555042600881905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461086f9061219d565b80601f016020809104026020016040519081016040528092919081815260200182805461089b9061219d565b80156108e65780601f106108bd576101008083540402835291602001916108e6565b820191905f5260205f20905b8154815290600101906020018083116108c957829003601f168201915b5050505050905090565b5f5f6108fa610eb0565b915091509091565b7f000000000000000000000000ed5012d5a48a93670d6b42a19157135c33c7911a81565b5f5f610930610bca565b905061093d818585610c76565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f9061227f565b60405180910390fd5b7f0000000000000000000000003d4faecea1b86dbee970ed21c4bea43d33e328b373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ac45750610a95610838565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afa906122e7565b60405180910390fd5b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b4e610d66565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610bbe575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610bb591906120f2565b60405180910390fd5b610bc781610ded565b50565b5f33905090565b610bde83838360016110b1565b505050565b5f610bee8484610948565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811015610c705781811015610c61578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610c5893929190612305565b60405180910390fd5b610c6f84848484035f6110b1565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ce6575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610cdd91906120f2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d56575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610d4d91906120f2565b60405180910390fd5b610d61838383611280565b505050565b610d6e610bca565b73ffffffffffffffffffffffffffffffffffffffff16610d8c610838565b73ffffffffffffffffffffffffffffffffffffffff1614610deb57610daf610bca565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610de291906120f2565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f5f5f60085403610ec6575f5f915091506110ad565b5f60085442610ed59190612367565b9050610e1081101561102c57603c811015610f25576109c492506101907f000000000000000000000000000000000000000000084595161401484a000000610f1d91906123c7565b9150506110ad565b61012c811015610f6a576107d0925061014d7f000000000000000000000000000000000000000000084595161401484a000000610f6291906123c7565b9150506110ad565b6101e0811015610fae576107d0925060a67f000000000000000000000000000000000000000000084595161401484a000000610fa691906123c7565b9150506110ad565b610384811015610ff2576103e8925060647f000000000000000000000000000000000000000000084595161401484a000000610fea91906123c7565b9150506110ad565b6101f4925060587f000000000000000000000000000000000000000000084595161401484a00000061102491906123c7565b9150506110ad565b681b1ae4d6e2ef5000006009541015611049576101909250611088565b6825f273933db570000060095410156110665761012c9250611087565b6830ca024f987b90000060095410156110825760c89250611086565b5f92505b5b5b7f000000000000000000000000000000000000000000084595161401484a0000009150505b9091565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611121575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161111891906120f2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611191575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161118891906120f2565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801561127a578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516112719190611f88565b60405180910390a35b50505050565b5f5f61128a610eb0565b915091505f7f000000000000000000000000ed5012d5a48a93670d6b42a19157135c33c7911a73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16149050808061133757507f000000000000000000000000ed5012d5a48a93670d6b42a19157135c33c7911a73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156116fb575f60075411806113925750600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6113d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c890612441565b60405180910390fd5b5f83146116965780801561142c5750600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156115f8575f60085411801561144f575060b46008544261144d9190612367565b105b156115c157600d54600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f4381526020019081526020015f2054106114e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114db906124cf565b60405180910390fd5b600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f4381526020019081526020015f205f815480929190611540906124ed565b9190505550600f54600e5f4381526020019081526020015f20541061159a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115919061257e565b60405180910390fd5b600e5f4381526020019081526020015f205f8154809291906115bb906124ed565b91905055505b5f61271084866115d1919061259c565b6115db91906123c7565b905080856115e99190612367565b94506115f68730836117b5565b505b8015801561164d5750600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611691575f6127108486611662919061259c565b61166c91906123c7565b9050808561167a9190612367565b94506116878730836117b5565b61168f6119ce565b505b6116fa565b801580156116eb5750600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156116f9576116f86119ce565b5b5b5b600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061176357508161175586610784565b8561176091906125dd565b11155b6117a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117999061265a565b60405180910390fd5b6117ad8686866117b5565b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611805578060025f8282546117f991906125dd565b925050819055506118d3565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561188e578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161188593929190612305565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361191a578060025f8282540392505081905550611964565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119c19190611f88565b60405180910390a3505050565b5f600854426119dd9190612367565b905061012c8110156119ef5750611dd8565b5f6119f930610784565b90505f8103611a09575050611dd8565b5f600267ffffffffffffffff811115611a2557611a24612678565b5b604051908082528060200260200182016040528015611a535781602001602082028036833780820191505090505b5090507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2815f81518110611a8a57611a896126a5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110611ad957611ad86126a5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663d06ca61f670de0b6b3a7640000846040518363ffffffff1660e01b8152600401611b6b9291906127cb565b5f60405180830381865afa158015611b85573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611bad9190612920565b600181518110611bc057611bbf6126a5565b5b6020026020010151905080831115611bd6578092505b30825f81518110611bea57611be96126a5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc282600181518110611c5957611c586126a5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16319050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947855f8660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611d459594939291906129a0565b5f604051808303815f87803b158015611d5c575f5ffd5b505af1158015611d6e573d5f5f3e3d5ffd5b505050505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163190508181611dba9190612367565b60095f828254611dca91906125dd565b925050819055505050505050505b565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611e1c82611dda565b611e268185611de4565b9350611e36818560208601611df4565b611e3f81611e02565b840191505092915050565b5f6020820190508181035f830152611e628184611e12565b905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611ea482611e7b565b9050919050565b611eb481611e9a565b8114611ebe575f5ffd5b50565b5f81359050611ecf81611eab565b92915050565b5f819050919050565b611ee781611ed5565b8114611ef1575f5ffd5b50565b5f81359050611f0281611ede565b92915050565b5f5f60408385031215611f1e57611f1d611e73565b5b5f611f2b85828601611ec1565b9250506020611f3c85828601611ef4565b9150509250929050565b5f8115159050919050565b611f5a81611f46565b82525050565b5f602082019050611f735f830184611f51565b92915050565b611f8281611ed5565b82525050565b5f602082019050611f9b5f830184611f79565b92915050565b5f60208284031215611fb657611fb5611e73565b5b5f611fc384828501611ef4565b91505092915050565b5f5f5f60608486031215611fe357611fe2611e73565b5b5f611ff086828701611ec1565b935050602061200186828701611ec1565b925050604061201286828701611ef4565b9150509250925092565b5f60ff82169050919050565b6120318161201c565b82525050565b5f60208201905061204a5f830184612028565b92915050565b61205981611f46565b8114612063575f5ffd5b50565b5f8135905061207481612050565b92915050565b5f5f604083850312156120905761208f611e73565b5b5f61209d85828601611ec1565b92505060206120ae85828601612066565b9150509250929050565b5f602082840312156120cd576120cc611e73565b5b5f6120da84828501611ec1565b91505092915050565b6120ec81611e9a565b82525050565b5f6020820190506121055f8301846120e3565b92915050565b5f60408201905061211e5f830185611f79565b61212b6020830184611f79565b9392505050565b5f5f6040838503121561214857612147611e73565b5b5f61215585828601611ec1565b925050602061216685828601611ec1565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806121b457607f821691505b6020821081036121c7576121c6612170565b5b50919050565b7f74726164696e672d616c72656164792d656e61626c65640000000000000000005f82015250565b5f612201601783611de4565b915061220c826121cd565b602082019050919050565b5f6020820190508181035f83015261222e816121f5565b9050919050565b7f74726561737572792d69732d30000000000000000000000000000000000000005f82015250565b5f612269600d83611de4565b915061227482612235565b602082019050919050565b5f6020820190508181035f8301526122968161225d565b9050919050565b7f6f6e6c792d6465706c6f796572000000000000000000000000000000000000005f82015250565b5f6122d1600d83611de4565b91506122dc8261229d565b602082019050919050565b5f6020820190508181035f8301526122fe816122c5565b9050919050565b5f6060820190506123185f8301866120e3565b6123256020830185611f79565b6123326040830184611f79565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61237182611ed5565b915061237c83611ed5565b92508282039050818111156123945761239361233a565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6123d182611ed5565b91506123dc83611ed5565b9250826123ec576123eb61239a565b5b828204905092915050565b7f74726164696e672d6e6f742d656e61626c6564000000000000000000000000005f82015250565b5f61242b601383611de4565b9150612436826123f7565b602082019050919050565b5f6020820190508181035f8301526124588161241f565b9050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d7065722d6f726967696e5f8201527f2d65786365656465640000000000000000000000000000000000000000000000602082015250565b5f6124b9602983611de4565b91506124c48261245f565b604082019050919050565b5f6020820190508181035f8301526124e6816124ad565b9050919050565b5f6124f782611ed5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036125295761252861233a565b5b600182019050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d657863656564656400005f82015250565b5f612568601e83611de4565b915061257382612534565b602082019050919050565b5f6020820190508181035f8301526125958161255c565b9050919050565b5f6125a682611ed5565b91506125b183611ed5565b92508282026125bf81611ed5565b915082820484148315176125d6576125d561233a565b5b5092915050565b5f6125e782611ed5565b91506125f283611ed5565b925082820190508082111561260a5761260961233a565b5b92915050565b7f6d61782d77616c6c65742d73697a652d657863656564656400000000000000005f82015250565b5f612644601883611de4565b915061264f82612610565b602082019050919050565b5f6020820190508181035f83015261267181612638565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f819050919050565b5f6126fe6126f96126f4846126d2565b6126db565b611ed5565b9050919050565b61270e816126e4565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61274681611e9a565b82525050565b5f612757838361273d565b60208301905092915050565b5f602082019050919050565b5f61277982612714565b612783818561271e565b935061278e8361272e565b805f5b838110156127be5781516127a5888261274c565b97506127b083612763565b925050600181019050612791565b5085935050505092915050565b5f6040820190506127de5f830185612705565b81810360208301526127f0818461276f565b90509392505050565b5f5ffd5b61280682611e02565b810181811067ffffffffffffffff8211171561282557612824612678565b5b80604052505050565b5f612837611e6a565b905061284382826127fd565b919050565b5f67ffffffffffffffff82111561286257612861612678565b5b602082029050602081019050919050565b5f5ffd5b5f8151905061288581611ede565b92915050565b5f61289d61289884612848565b61282e565b905080838252602082019050602084028301858111156128c0576128bf612873565b5b835b818110156128e957806128d58882612877565b8452602084019350506020810190506128c2565b5050509392505050565b5f82601f830112612907576129066127f9565b5b815161291784826020860161288b565b91505092915050565b5f6020828403121561293557612934611e73565b5b5f82015167ffffffffffffffff81111561295257612951611e77565b5b61295e848285016128f3565b91505092915050565b5f819050919050565b5f61298a61298561298084612967565b6126db565b611ed5565b9050919050565b61299a81612970565b82525050565b5f60a0820190506129b35f830188611f79565b6129c06020830187612991565b81810360408301526129d2818661276f565b90506129e160608301856120e3565b6129ee6080830184611f79565b969550505050505056fea26469706673582212206f6e282d48988be445b75abc40478e0801250b0445aad61690d36b8338a9417164736f6c634300081e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000084595161401484a00000000000000000000000000000096a2efddb955cbca197f5dafcda2b2a22bbe894100000000000000000000000000000000000000000000000000000000000000044f7075730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044f50555300000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): Opus
Arg [1] : symbol (string): OPUS
Arg [2] : maxSupply (uint256): 10000000000000000000000000
Arg [3] : _treasury (address): 0x96A2eFdDb955cBCA197F5DafCda2B2A22BBE8941
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 000000000000000000000000000000000000000000084595161401484a000000
Arg [3] : 00000000000000000000000096a2efddb955cbca197f5dafcda2b2a22bbe8941
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [5] : 4f70757300000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 4f50555300000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
31632:8055:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13093:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15386:190;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32022:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32229:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14195:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32408:72;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16186:249;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14046:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31672:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34216:172;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31990:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32094:58;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34046:162;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31750:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32159:63;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14357:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24815:103;;;:::i;:::-;;33845:193;;;:::i;:::-;;24140:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13303:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34396:165;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;31714:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14680:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14925:142;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33561:276;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25073:220;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13093:91;13138:13;13171:5;13164:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13093:91;:::o;15386:190::-;15459:4;15476:13;15492:12;:10;:12::i;:::-;15476:28;;15515:31;15524:5;15531:7;15540:5;15515:8;:31::i;:::-;15564:4;15557:11;;;15386:190;;;;:::o;32022:29::-;;;;:::o;32229:117::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14195:99::-;14247:7;14274:12;;14267:19;;14195:99;:::o;32408:72::-;;;;;;;;;;;;;;;;;:::o;16186:249::-;16273:4;16290:15;16308:12;:10;:12::i;:::-;16290:30;;16331:37;16347:4;16353:7;16362:5;16331:15;:37::i;:::-;16379:26;16389:4;16395:2;16399:5;16379:9;:26::i;:::-;16423:4;16416:11;;;16186:249;;;;;:::o;14046:84::-;14095:5;14120:2;14113:9;;14046:84;:::o;31672:35::-;;;:::o;34216:172::-;24026:13;:11;:13::i;:::-;34372:8:::1;34337:23;:32;34361:7;34337:32;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;34216:172:::0;;:::o;31990:25::-;;;;:::o;32094:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;34046:162::-;24026:13;:11;:13::i;:::-;34192:8:::1;34162:18;:27;34181:7;34162:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;34046:162:::0;;:::o;31750:23::-;;;;;;;;;;;;;:::o;32159:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;14357:118::-;14422:7;14449:9;:18;14459:7;14449:18;;;;;;;;;;;;;;;;14442:25;;14357:118;;;:::o;24815:103::-;24026:13;:11;:13::i;:::-;24880:30:::1;24907:1;24880:18;:30::i;:::-;24815:103::o:0;33845:193::-;24026:13;:11;:13::i;:::-;33922:1:::1;33908:10;;:15;33900:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;33975:12;33962:10;:25;;;;34015:15;33998:14;:32;;;;33845:193::o:0;24140:87::-;24186:7;24213:6;;;;;;;;;;;24206:13;;24140:87;:::o;13303:95::-;13350:13;13383:7;13376:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13303:95;:::o;34396:165::-;34474:15;34491:18;34534:19;:17;:19::i;:::-;34527:26;;;;34396:165;;:::o;31714:29::-;;;:::o;14680:182::-;14749:4;14766:13;14782:12;:10;:12::i;:::-;14766:28;;14805:27;14815:5;14822:2;14826:5;14805:9;:27::i;:::-;14850:4;14843:11;;;14680:182;;;;:::o;14925:142::-;15005:7;15032:11;:18;15044:5;15032:18;;;;;;;;;;;;;;;:27;15051:7;15032:27;;;;;;;;;;;;;;;;15025:34;;14925:142;;;;:::o;33561:276::-;33654:1;33631:25;;:11;:25;;;33623:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;33721:9;33707:23;;:10;:23;;;:48;;;;33748:7;:5;:7::i;:::-;33734:21;;:10;:21;;;33707:48;33685:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;33818:11;33807:8;;:22;;;;;;;;;;;;;;;;;;33561:276;:::o;25073:220::-;24026:13;:11;:13::i;:::-;25178:1:::1;25158:22;;:8;:22;;::::0;25154:93:::1;;25232:1;25204:31;;;;;;;;;;;:::i;:::-;;;;;;;;25154:93;25257:28;25276:8;25257:18;:28::i;:::-;25073:220:::0;:::o;4412:98::-;4465:7;4492:10;4485:17;;4412:98;:::o;20245:130::-;20330:37;20339:5;20346:7;20355:5;20362:4;20330:8;:37::i;:::-;20245:130;;;:::o;21977:486::-;22077:24;22104:25;22114:5;22121:7;22104:9;:25::i;:::-;22077:52;;22163:17;22144:16;:36;22140:316;;;22220:5;22201:16;:24;22197:132;;;22280:7;22289:16;22307:5;22253:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;22197:132;22372:57;22381:5;22388:7;22416:5;22397:16;:24;22423:5;22372:8;:57::i;:::-;22140:316;22066:397;21977:486;;;:::o;16820:308::-;16920:1;16904:18;;:4;:18;;;16900:88;;16973:1;16946:30;;;;;;;;;;;:::i;:::-;;;;;;;;16900:88;17016:1;17002:16;;:2;:16;;;16998:88;;17071:1;17042:32;;;;;;;;;;;:::i;:::-;;;;;;;;16998:88;17096:24;17104:4;17110:2;17114:5;17096:7;:24::i;:::-;16820:308;;;:::o;24305:166::-;24376:12;:10;:12::i;:::-;24365:23;;:7;:5;:7::i;:::-;:23;;;24361:103;;24439:12;:10;:12::i;:::-;24412:40;;;;;;;;;;;:::i;:::-;;;;;;;;24361:103;24305:166::o;25453:191::-;25527:16;25546:6;;;;;;;;;;;25527:25;;25572:8;25563:6;;:17;;;;;;;;;;;;;;;;;;25627:8;25596:40;;25617:8;25596:40;;;;;;;;;;;;25516:128;25453:191;:::o;34569:1724::-;34648:15;34665:18;34723:1;34705:14;;:19;34701:65;;34749:1;34752;34741:13;;;;;;34701:65;34776:20;34817:14;;34799:15;:32;;;;:::i;:::-;34776:55;;34863:4;34848:12;:19;34844:1054;;;34925:2;34910:12;:17;34906:183;;;34958:4;34948:14;;35014:3;35001:10;:16;;;;:::i;:::-;34988:29;;35045:28;;;34906:183;35146:3;35131:12;:18;35127:183;;;35180:4;35170:14;;35236:3;35223:10;:16;;;;:::i;:::-;35210:29;;35266:28;;;35127:183;35367:3;35352:12;:18;35348:183;;;35401:4;35391:14;;35457:3;35444:10;:16;;;;:::i;:::-;35431:29;;35487:28;;;35348:183;35566:3;35551:12;:18;35547:210;;;35629:4;35619:14;;35685:3;35672:10;:16;;;;:::i;:::-;35659:29;;35713:28;;;35547:210;35783:3;35773:13;;35833:2;35820:10;:15;;;;:::i;:::-;35807:28;;35858;;;34844:1054;35928:9;35914:11;;:23;35910:291;;;35964:3;35954:13;;35910:291;;;36010:9;35996:11;;:23;35992:209;;;36046:3;36036:13;;35992:209;;;36092:9;36078:11;;:23;36074:127;;;36128:3;36118:13;;36074:127;;;36181:1;36171:11;;36074:127;35992:209;35910:291;36224:10;36211:23;;36257:28;34569:1724;;;:::o;21242:443::-;21372:1;21355:19;;:5;:19;;;21351:91;;21427:1;21398:32;;;;;;;;;;;:::i;:::-;;;;;;;;21351:91;21475:1;21456:21;;:7;:21;;;21452:92;;21529:1;21501:31;;;;;;;;;;;:::i;:::-;;;;;;;;21452:92;21584:5;21554:11;:18;21566:5;21554:18;;;;;;;;;;;;;;;:27;21573:7;21554:27;;;;;;;;;;;;;;;:35;;;;21604:9;21600:78;;;21651:7;21635:31;;21644:5;21635:31;;;21660:5;21635:31;;;;;;:::i;:::-;;;;;;;;21600:78;21242:443;;;;:::o;36301:2260::-;36423:15;36440:18;36462:19;:17;:19::i;:::-;36422:59;;;;36494:10;36515:4;36507:12;;:4;:12;;;36494:25;;36534:5;:19;;;;36549:4;36543:10;;:2;:10;;;36534:19;36530:1830;;;36609:1;36596:10;;:14;:40;;;;36614:18;:22;36633:2;36614:22;;;;;;;;;;;;;;;;;;;;;;;;;36596:40;36570:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;36723:1;36712:7;:12;36708:1641;;36749:5;:32;;;;;36759:18;:22;36778:2;36759:22;;;;;;;;;;;;;;;;;;;;;;;;;36758:23;36749:32;36745:1097;;;36853:1;36836:14;;:18;:85;;;;;36918:3;36901:14;;36883:15;:32;;;;:::i;:::-;:38;36836:85;36806:856;;;37128:27;;37010:26;:37;37037:9;37010:37;;;;;;;;;;;;;;;:115;37082:12;37010:115;;;;;;;;;;;;:145;36972:284;;;;;;;;;;;;:::i;:::-;;;;;;;;;37283:26;:37;37310:9;37283:37;;;;;;;;;;;;;;;:51;37321:12;37283:51;;;;;;;;;;;;:53;;;;;;;;;:::i;:::-;;;;;;37470:18;;37403:17;:31;37421:12;37403:31;;;;;;;;;;;;:85;37365:213;;;;;;;;;;;;:::i;:::-;;;;;;;;;37605:17;:31;37623:12;37605:31;;;;;;;;;;;;:33;;;;;;;;;:::i;:::-;;;;;;36806:856;37686:11;37720:5;37709:7;37701:5;:15;;;;:::i;:::-;37700:25;;;;:::i;:::-;37686:39;;37757:3;37748:12;;;;;:::i;:::-;;;37783:39;37797:4;37811;37818:3;37783:13;:39::i;:::-;36783:1059;36745:1097;37867:5;37866:6;:35;;;;;37877:18;:24;37896:4;37877:24;;;;;;;;;;;;;;;;;;;;;;;;;37876:25;37866:35;37862:262;;;37926:11;37960:5;37949:7;37941:5;:15;;;;:::i;:::-;37940:25;;;;:::i;:::-;37926:39;;37997:3;37988:12;;;;;:::i;:::-;;;38023:39;38037:4;38051;38058:3;38023:13;:39::i;:::-;38085:19;:17;:19::i;:::-;37903:221;37862:262;36708:1641;;;38236:5;38235:6;:35;;;;;38246:18;:24;38265:4;38246:24;;;;;;;;;;;;;;;;;;;;;;;;;38245:25;38235:35;38231:103;;;38295:19;:17;:19::i;:::-;38231:103;36708:1641;36530:1830;38394:23;:27;38418:2;38394:27;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;38450:10;38433:13;38443:2;38433:9;:13::i;:::-;38425:5;:21;;;;:::i;:::-;:35;;38394:66;38372:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;38523:30;38537:4;38543:2;38547:5;38523:13;:30::i;:::-;36411:2150;;;36301:2260;;;:::o;17452:1135::-;17558:1;17542:18;;:4;:18;;;17538:552;;17696:5;17680:12;;:21;;;;;;;:::i;:::-;;;;;;;;17538:552;;;17734:19;17756:9;:15;17766:4;17756:15;;;;;;;;;;;;;;;;17734:37;;17804:5;17790:11;:19;17786:117;;;17862:4;17868:11;17881:5;17837:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;17786:117;18058:5;18044:11;:19;18026:9;:15;18036:4;18026:15;;;;;;;;;;;;;;;:37;;;;17719:371;17538:552;18120:1;18106:16;;:2;:16;;;18102:435;;18288:5;18272:12;;:21;;;;;;;;;;;18102:435;;;18505:5;18488:9;:13;18498:2;18488:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;18102:435;18569:2;18554:25;;18563:4;18554:25;;;18573:5;18554:25;;;;;;:::i;:::-;;;;;;;;17452:1135;;;:::o;38569:1115::-;38618:17;38656:14;;38638:15;:32;;;;:::i;:::-;38618:52;;38697:3;38685:9;:15;38681:54;;;38717:7;;;38681:54;38747:20;38770:24;38788:4;38770:9;:24::i;:::-;38747:47;;38827:1;38811:12;:17;38807:56;;38845:7;;;;38807:56;38875:22;38914:1;38900:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38875:41;;38938:5;38927;38933:1;38927:8;;;;;;;;:::i;:::-;;;;;;;:16;;;;;;;;;;;38973:4;38954:5;38960:1;38954:8;;;;;;;;:::i;:::-;;;;;;;:24;;;;;;;;;;;39034:23;31856:42;39060:21;;;39082:7;39091:5;39060:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39098:1;39060:40;;;;;;;;:::i;:::-;;;;;;;;39034:66;;39132:15;39117:12;:30;39113:93;;;39179:15;39164:30;;39113:93;39237:4;39218:5;39224:1;39218:8;;;;;;;;:::i;:::-;;;;;;;:24;;;;;;;;;;;39264:5;39253;39259:1;39253:8;;;;;;;;:::i;:::-;;;;;;;:16;;;;;;;;;;;39282:30;39323:8;;;;;;;;;;;39315:25;;;39282:58;;31856:42;39351:58;;;39424:12;39451:1;39467:5;39487:8;;;;;;;;;;;39510:15;39351:185;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39547:29;39587:8;;;;;;;;;;;39579:25;;;39547:57;;39654:22;39630:21;:46;;;;:::i;:::-;39615:11;;:61;;;;;;;:::i;:::-;;;;;;;;38607:1077;;;;;;38569:1115;:::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:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1242:75::-;1275:6;1308:2;1302:9;1292:19;;1242:75;:::o;1323:117::-;1432:1;1429;1422:12;1446:117;1555:1;1552;1545:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:118::-;3426:24;3444:5;3426:24;:::i;:::-;3421:3;3414:37;3339:118;;:::o;3463:222::-;3556:4;3594:2;3583:9;3579:18;3571:26;;3607:71;3675:1;3664:9;3660:17;3651:6;3607:71;:::i;:::-;3463:222;;;;:::o;3691:329::-;3750:6;3799:2;3787:9;3778:7;3774:23;3770:32;3767:119;;;3805:79;;:::i;:::-;3767:119;3925:1;3950:53;3995:7;3986:6;3975:9;3971:22;3950:53;:::i;:::-;3940:63;;3896:117;3691:329;;;;:::o;4026:619::-;4103:6;4111;4119;4168:2;4156:9;4147:7;4143:23;4139:32;4136:119;;;4174:79;;:::i;:::-;4136:119;4294:1;4319:53;4364:7;4355:6;4344:9;4340:22;4319:53;:::i;:::-;4309:63;;4265:117;4421:2;4447:53;4492:7;4483:6;4472:9;4468:22;4447:53;:::i;:::-;4437:63;;4392:118;4549:2;4575:53;4620:7;4611:6;4600:9;4596:22;4575:53;:::i;:::-;4565:63;;4520:118;4026:619;;;;;:::o;4651:86::-;4686:7;4726:4;4719:5;4715:16;4704:27;;4651:86;;;:::o;4743:112::-;4826:22;4842:5;4826:22;:::i;:::-;4821:3;4814:35;4743:112;;:::o;4861:214::-;4950:4;4988:2;4977:9;4973:18;4965:26;;5001:67;5065:1;5054:9;5050:17;5041:6;5001:67;:::i;:::-;4861:214;;;;:::o;5081:116::-;5151:21;5166:5;5151:21;:::i;:::-;5144:5;5141:32;5131:60;;5187:1;5184;5177:12;5131:60;5081:116;:::o;5203:133::-;5246:5;5284:6;5271:20;5262:29;;5300:30;5324:5;5300:30;:::i;:::-;5203:133;;;;:::o;5342:468::-;5407:6;5415;5464:2;5452:9;5443:7;5439:23;5435:32;5432:119;;;5470:79;;:::i;:::-;5432:119;5590:1;5615:53;5660:7;5651:6;5640:9;5636:22;5615:53;:::i;:::-;5605:63;;5561:117;5717:2;5743:50;5785:7;5776:6;5765:9;5761:22;5743:50;:::i;:::-;5733:60;;5688:115;5342:468;;;;;:::o;5816:329::-;5875:6;5924:2;5912:9;5903:7;5899:23;5895:32;5892:119;;;5930:79;;:::i;:::-;5892:119;6050:1;6075:53;6120:7;6111:6;6100:9;6096:22;6075:53;:::i;:::-;6065:63;;6021:117;5816:329;;;;:::o;6151:118::-;6238:24;6256:5;6238:24;:::i;:::-;6233:3;6226:37;6151:118;;:::o;6275:222::-;6368:4;6406:2;6395:9;6391:18;6383:26;;6419:71;6487:1;6476:9;6472:17;6463:6;6419:71;:::i;:::-;6275:222;;;;:::o;6503:332::-;6624:4;6662:2;6651:9;6647:18;6639:26;;6675:71;6743:1;6732:9;6728:17;6719:6;6675:71;:::i;:::-;6756:72;6824:2;6813:9;6809:18;6800:6;6756:72;:::i;:::-;6503:332;;;;;:::o;6841:474::-;6909:6;6917;6966:2;6954:9;6945:7;6941:23;6937:32;6934:119;;;6972:79;;:::i;:::-;6934:119;7092:1;7117:53;7162:7;7153:6;7142:9;7138:22;7117:53;:::i;:::-;7107:63;;7063:117;7219:2;7245:53;7290:7;7281:6;7270:9;7266:22;7245:53;:::i;:::-;7235:63;;7190:118;6841:474;;;;;:::o;7321:180::-;7369:77;7366:1;7359:88;7466:4;7463:1;7456:15;7490:4;7487:1;7480:15;7507:320;7551:6;7588:1;7582:4;7578:12;7568:22;;7635:1;7629:4;7625:12;7656:18;7646:81;;7712:4;7704:6;7700:17;7690:27;;7646:81;7774:2;7766:6;7763:14;7743:18;7740:38;7737:84;;7793:18;;:::i;:::-;7737:84;7558:269;7507:320;;;:::o;7833:173::-;7973:25;7969:1;7961:6;7957:14;7950:49;7833:173;:::o;8012:366::-;8154:3;8175:67;8239:2;8234:3;8175:67;:::i;:::-;8168:74;;8251:93;8340:3;8251:93;:::i;:::-;8369:2;8364:3;8360:12;8353:19;;8012:366;;;:::o;8384:419::-;8550:4;8588:2;8577:9;8573:18;8565:26;;8637:9;8631:4;8627:20;8623:1;8612:9;8608:17;8601:47;8665:131;8791:4;8665:131;:::i;:::-;8657:139;;8384:419;;;:::o;8809:163::-;8949:15;8945:1;8937:6;8933:14;8926:39;8809:163;:::o;8978:366::-;9120:3;9141:67;9205:2;9200:3;9141:67;:::i;:::-;9134:74;;9217:93;9306:3;9217:93;:::i;:::-;9335:2;9330:3;9326:12;9319:19;;8978:366;;;:::o;9350:419::-;9516:4;9554:2;9543:9;9539:18;9531:26;;9603:9;9597:4;9593:20;9589:1;9578:9;9574:17;9567:47;9631:131;9757:4;9631:131;:::i;:::-;9623:139;;9350:419;;;:::o;9775:163::-;9915:15;9911:1;9903:6;9899:14;9892:39;9775:163;:::o;9944:366::-;10086:3;10107:67;10171:2;10166:3;10107:67;:::i;:::-;10100:74;;10183:93;10272:3;10183:93;:::i;:::-;10301:2;10296:3;10292:12;10285:19;;9944:366;;;:::o;10316:419::-;10482:4;10520:2;10509:9;10505:18;10497:26;;10569:9;10563:4;10559:20;10555:1;10544:9;10540:17;10533:47;10597:131;10723:4;10597:131;:::i;:::-;10589:139;;10316:419;;;:::o;10741:442::-;10890:4;10928:2;10917:9;10913:18;10905:26;;10941:71;11009:1;10998:9;10994:17;10985:6;10941:71;:::i;:::-;11022:72;11090:2;11079:9;11075:18;11066:6;11022:72;:::i;:::-;11104;11172:2;11161:9;11157:18;11148:6;11104:72;:::i;:::-;10741:442;;;;;;:::o;11189:180::-;11237:77;11234:1;11227:88;11334:4;11331:1;11324:15;11358:4;11355:1;11348:15;11375:194;11415:4;11435:20;11453:1;11435:20;:::i;:::-;11430:25;;11469:20;11487:1;11469:20;:::i;:::-;11464:25;;11513:1;11510;11506:9;11498:17;;11537:1;11531:4;11528:11;11525:37;;;11542:18;;:::i;:::-;11525:37;11375:194;;;;:::o;11575:180::-;11623:77;11620:1;11613:88;11720:4;11717:1;11710:15;11744:4;11741:1;11734:15;11761:185;11801:1;11818:20;11836:1;11818:20;:::i;:::-;11813:25;;11852:20;11870:1;11852:20;:::i;:::-;11847:25;;11891:1;11881:35;;11896:18;;:::i;:::-;11881:35;11938:1;11935;11931:9;11926:14;;11761:185;;;;:::o;11952:169::-;12092:21;12088:1;12080:6;12076:14;12069:45;11952:169;:::o;12127:366::-;12269:3;12290:67;12354:2;12349:3;12290:67;:::i;:::-;12283:74;;12366:93;12455:3;12366:93;:::i;:::-;12484:2;12479:3;12475:12;12468:19;;12127:366;;;:::o;12499:419::-;12665:4;12703:2;12692:9;12688:18;12680:26;;12752:9;12746:4;12742:20;12738:1;12727:9;12723:17;12716:47;12780:131;12906:4;12780:131;:::i;:::-;12772:139;;12499:419;;;:::o;12924:228::-;13064:34;13060:1;13052:6;13048:14;13041:58;13133:11;13128:2;13120:6;13116:15;13109:36;12924:228;:::o;13158:366::-;13300:3;13321:67;13385:2;13380:3;13321:67;:::i;:::-;13314:74;;13397:93;13486:3;13397:93;:::i;:::-;13515:2;13510:3;13506:12;13499:19;;13158:366;;;:::o;13530:419::-;13696:4;13734:2;13723:9;13719:18;13711:26;;13783:9;13777:4;13773:20;13769:1;13758:9;13754:17;13747:47;13811:131;13937:4;13811:131;:::i;:::-;13803:139;;13530:419;;;:::o;13955:233::-;13994:3;14017:24;14035:5;14017:24;:::i;:::-;14008:33;;14063:66;14056:5;14053:77;14050:103;;14133:18;;:::i;:::-;14050:103;14180:1;14173:5;14169:13;14162:20;;13955:233;;;:::o;14194:180::-;14334:32;14330:1;14322:6;14318:14;14311:56;14194:180;:::o;14380:366::-;14522:3;14543:67;14607:2;14602:3;14543:67;:::i;:::-;14536:74;;14619:93;14708:3;14619:93;:::i;:::-;14737:2;14732:3;14728:12;14721:19;;14380:366;;;:::o;14752:419::-;14918:4;14956:2;14945:9;14941:18;14933:26;;15005:9;14999:4;14995:20;14991:1;14980:9;14976:17;14969:47;15033:131;15159:4;15033:131;:::i;:::-;15025:139;;14752:419;;;:::o;15177:410::-;15217:7;15240:20;15258:1;15240:20;:::i;:::-;15235:25;;15274:20;15292:1;15274:20;:::i;:::-;15269:25;;15329:1;15326;15322:9;15351:30;15369:11;15351:30;:::i;:::-;15340:41;;15530:1;15521:7;15517:15;15514:1;15511:22;15491:1;15484:9;15464:83;15441:139;;15560:18;;:::i;:::-;15441:139;15225:362;15177:410;;;;:::o;15593:191::-;15633:3;15652:20;15670:1;15652:20;:::i;:::-;15647:25;;15686:20;15704:1;15686:20;:::i;:::-;15681:25;;15729:1;15726;15722:9;15715:16;;15750:3;15747:1;15744:10;15741:36;;;15757:18;;:::i;:::-;15741:36;15593:191;;;;:::o;15790:174::-;15930:26;15926:1;15918:6;15914:14;15907:50;15790:174;:::o;15970:366::-;16112:3;16133:67;16197:2;16192:3;16133:67;:::i;:::-;16126:74;;16209:93;16298:3;16209:93;:::i;:::-;16327:2;16322:3;16318:12;16311:19;;15970:366;;;:::o;16342:419::-;16508:4;16546:2;16535:9;16531:18;16523:26;;16595:9;16589:4;16585:20;16581:1;16570:9;16566:17;16559:47;16623:131;16749:4;16623:131;:::i;:::-;16615:139;;16342:419;;;:::o;16767:180::-;16815:77;16812:1;16805:88;16912:4;16909:1;16902:15;16936:4;16933:1;16926:15;16953:180;17001:77;16998:1;16991:88;17098:4;17095:1;17088:15;17122:4;17119:1;17112:15;17139:103;17202:7;17231:5;17220:16;;17139:103;;;:::o;17248:60::-;17276:3;17297:5;17290:12;;17248:60;;;:::o;17314:194::-;17390:9;17423:79;17441:60;17450:50;17494:5;17450:50;:::i;:::-;17441:60;:::i;:::-;17423:79;:::i;:::-;17410:92;;17314:194;;;:::o;17514:183::-;17627:63;17684:5;17627:63;:::i;:::-;17622:3;17615:76;17514:183;;:::o;17703:114::-;17770:6;17804:5;17798:12;17788:22;;17703:114;;;:::o;17823:184::-;17922:11;17956:6;17951:3;17944:19;17996:4;17991:3;17987:14;17972:29;;17823:184;;;;:::o;18013:132::-;18080:4;18103:3;18095:11;;18133:4;18128:3;18124:14;18116:22;;18013:132;;;:::o;18151:108::-;18228:24;18246:5;18228:24;:::i;:::-;18223:3;18216:37;18151:108;;:::o;18265:179::-;18334:10;18355:46;18397:3;18389:6;18355:46;:::i;:::-;18433:4;18428:3;18424:14;18410:28;;18265:179;;;;:::o;18450:113::-;18520:4;18552;18547:3;18543:14;18535:22;;18450:113;;;:::o;18599:732::-;18718:3;18747:54;18795:5;18747:54;:::i;:::-;18817:86;18896:6;18891:3;18817:86;:::i;:::-;18810:93;;18927:56;18977:5;18927:56;:::i;:::-;19006:7;19037:1;19022:284;19047:6;19044:1;19041:13;19022:284;;;19123:6;19117:13;19150:63;19209:3;19194:13;19150:63;:::i;:::-;19143:70;;19236:60;19289:6;19236:60;:::i;:::-;19226:70;;19082:224;19069:1;19066;19062:9;19057:14;;19022:284;;;19026:14;19322:3;19315:10;;18723:608;;;18599:732;;;;:::o;19337:535::-;19534:4;19572:2;19561:9;19557:18;19549:26;;19585:97;19679:1;19668:9;19664:17;19655:6;19585:97;:::i;:::-;19729:9;19723:4;19719:20;19714:2;19703:9;19699:18;19692:48;19757:108;19860:4;19851:6;19757:108;:::i;:::-;19749:116;;19337:535;;;;;:::o;19878:117::-;19987:1;19984;19977:12;20001:281;20084:27;20106:4;20084:27;:::i;:::-;20076:6;20072:40;20214:6;20202:10;20199:22;20178:18;20166:10;20163:34;20160:62;20157:88;;;20225:18;;:::i;:::-;20157:88;20265:10;20261:2;20254:22;20044:238;20001:281;;:::o;20288:129::-;20322:6;20349:20;;:::i;:::-;20339:30;;20378:33;20406:4;20398:6;20378:33;:::i;:::-;20288:129;;;:::o;20423:311::-;20500:4;20590:18;20582:6;20579:30;20576:56;;;20612:18;;:::i;:::-;20576:56;20662:4;20654:6;20650:17;20642:25;;20722:4;20716;20712:15;20704:23;;20423:311;;;:::o;20740:117::-;20849:1;20846;20839:12;20863:143;20920:5;20951:6;20945:13;20936:22;;20967:33;20994:5;20967:33;:::i;:::-;20863:143;;;;:::o;21029:732::-;21136:5;21161:81;21177:64;21234:6;21177:64;:::i;:::-;21161:81;:::i;:::-;21152:90;;21262:5;21291:6;21284:5;21277:21;21325:4;21318:5;21314:16;21307:23;;21378:4;21370:6;21366:17;21358:6;21354:30;21407:3;21399:6;21396:15;21393:122;;;21426:79;;:::i;:::-;21393:122;21541:6;21524:231;21558:6;21553:3;21550:15;21524:231;;;21633:3;21662:48;21706:3;21694:10;21662:48;:::i;:::-;21657:3;21650:61;21740:4;21735:3;21731:14;21724:21;;21600:155;21584:4;21579:3;21575:14;21568:21;;21524:231;;;21528:21;21142:619;;21029:732;;;;;:::o;21784:385::-;21866:5;21915:3;21908:4;21900:6;21896:17;21892:27;21882:122;;21923:79;;:::i;:::-;21882:122;22033:6;22027:13;22058:105;22159:3;22151:6;22144:4;22136:6;22132:17;22058:105;:::i;:::-;22049:114;;21872:297;21784:385;;;;:::o;22175:554::-;22270:6;22319:2;22307:9;22298:7;22294:23;22290:32;22287:119;;;22325:79;;:::i;:::-;22287:119;22466:1;22455:9;22451:17;22445:24;22496:18;22488:6;22485:30;22482:117;;;22518:79;;:::i;:::-;22482:117;22623:89;22704:7;22695:6;22684:9;22680:22;22623:89;:::i;:::-;22613:99;;22416:306;22175:554;;;;:::o;22735:85::-;22780:7;22809:5;22798:16;;22735:85;;;:::o;22826:158::-;22884:9;22917:61;22935:42;22944:32;22970:5;22944:32;:::i;:::-;22935:42;:::i;:::-;22917:61;:::i;:::-;22904:74;;22826:158;;;:::o;22990:147::-;23085:45;23124:5;23085:45;:::i;:::-;23080:3;23073:58;22990:147;;:::o;23143:831::-;23406:4;23444:3;23433:9;23429:19;23421:27;;23458:71;23526:1;23515:9;23511:17;23502:6;23458:71;:::i;:::-;23539:80;23615:2;23604:9;23600:18;23591:6;23539:80;:::i;:::-;23666:9;23660:4;23656:20;23651:2;23640:9;23636:18;23629:48;23694:108;23797:4;23788:6;23694:108;:::i;:::-;23686:116;;23812:72;23880:2;23869:9;23865:18;23856:6;23812:72;:::i;:::-;23894:73;23962:3;23951:9;23947:19;23938:6;23894:73;:::i;:::-;23143:831;;;;;;;;:::o
Swarm Source
ipfs://6f6e282d48988be445b75abc40478e0801250b0445aad61690d36b8338a94171
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 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.