Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 16 from a total of 16 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Flip Revealed | 16198273 | 1180 days ago | IN | 0 ETH | 0.00052972 | ||||
| Set Base Token U... | 16198271 | 1180 days ago | IN | 0 ETH | 0.00165709 | ||||
| Set Approval For... | 15879963 | 1224 days ago | IN | 0 ETH | 0.00061495 | ||||
| Mint | 15879781 | 1224 days ago | IN | 0 ETH | 0.00115987 | ||||
| Mint | 15879777 | 1224 days ago | IN | 0 ETH | 0.00152535 | ||||
| Set Placeholder ... | 15879664 | 1224 days ago | IN | 0 ETH | 0.00110506 | ||||
| Mint | 15879641 | 1224 days ago | IN | 0 ETH | 0.00411174 | ||||
| Mint | 15879634 | 1224 days ago | IN | 0 ETH | 0.00427336 | ||||
| Mint | 15879627 | 1224 days ago | IN | 0 ETH | 0.00146207 | ||||
| Mint | 15879605 | 1224 days ago | IN | 0 ETH | 0.00476381 | ||||
| Mint | 15879592 | 1224 days ago | IN | 0 ETH | 0.00430299 | ||||
| Mint | 15879574 | 1224 days ago | IN | 0 ETH | 0.00413321 | ||||
| Mint | 15879574 | 1224 days ago | IN | 0 ETH | 0.00164149 | ||||
| Toggle Mint | 15879549 | 1224 days ago | IN | 0 ETH | 0.00049994 | ||||
| Toggle Mint | 15879520 | 1224 days ago | IN | 0 ETH | 0.0002782 | ||||
| Toggle Mint | 15879273 | 1224 days ago | IN | 0 ETH | 0.00057667 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Noidz
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-10-13
*/
// File: @openzeppelin/contracts/security/ReentrancyGuard.sol
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
// File: @openzeppelin/contracts/utils/Strings.sol
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
uint8 private constant _ADDRESS_LENGTH = 20;
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
/**
* @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
*/
function toHexString(address addr) internal pure returns (string memory) {
return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
}
}
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin/contracts/token/ERC721/ERC721.sol
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension, but not including the Enumerable extension, which is available separately as
* {ERC721Enumerable}.
*/
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to owner address
mapping(uint256 => address) private _owners;
// Mapping owner address to token count
mapping(address => uint256) private _balances;
// Mapping from token ID to approved address
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
/**
* @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: address zero is not a valid owner");
return _balances[owner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
require(owner != address(0), "ERC721: invalid token ID");
return owner;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
_requireMinted(tokenId);
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overridden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not token owner nor approved for all"
);
_approve(to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view virtual override returns (address) {
_requireMinted(tokenId);
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
_setApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
//solhint-disable-next-line max-line-length
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory data
) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
_safeTransfer(from, to, tokenId, data);
}
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* `data` is additional data, it has no specified format and it is sent in call to `to`.
*
* This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
* implement alternative mechanisms to perform token transfer, such as signature-based.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeTransfer(
address from,
address to,
uint256 tokenId,
bytes memory data
) internal virtual {
_transfer(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer");
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
* and stop existing when they are burned (`_burn`).
*/
function _exists(uint256 tokenId) internal view virtual returns (bool) {
return _owners[tokenId] != address(0);
}
/**
* @dev Returns whether `spender` is allowed to manage `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
address owner = ERC721.ownerOf(tokenId);
return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
}
/**
* @dev Safely mints `tokenId` and transfers it to `to`.
*
* Requirements:
*
* - `tokenId` must not exist.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeMint(address to, uint256 tokenId) internal virtual {
_safeMint(to, tokenId, "");
}
/**
* @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
* forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
*/
function _safeMint(
address to,
uint256 tokenId,
bytes memory data
) internal virtual {
_mint(to, tokenId);
require(
_checkOnERC721Received(address(0), to, tokenId, data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Mints `tokenId` and transfers it to `to`.
*
* WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
*
* Requirements:
*
* - `tokenId` must not exist.
* - `to` cannot be the zero address.
*
* Emits a {Transfer} event.
*/
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
_afterTokenTransfer(address(0), to, tokenId);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId);
// Clear approvals
_approve(address(0), tokenId);
_balances[owner] -= 1;
delete _owners[tokenId];
emit Transfer(owner, address(0), tokenId);
_afterTokenTransfer(owner, address(0), tokenId);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
* As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(
address from,
address to,
uint256 tokenId
) internal virtual {
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId);
// Clear approvals from the previous owner
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
_afterTokenTransfer(from, to, tokenId);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits an {Approval} event.
*/
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
/**
* @dev Approve `operator` to operate on all of `owner` tokens
*
* Emits an {ApprovalForAll} event.
*/
function _setApprovalForAll(
address owner,
address operator,
bool approved
) internal virtual {
require(owner != operator, "ERC721: approve to caller");
_operatorApprovals[owner][operator] = approved;
emit ApprovalForAll(owner, operator, approved);
}
/**
* @dev Reverts if the `tokenId` has not been minted yet.
*/
function _requireMinted(uint256 tokenId) internal view virtual {
require(_exists(tokenId), "ERC721: invalid token ID");
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory data
) private returns (bool) {
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {
return retval == IERC721Receiver.onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721: transfer to non ERC721Receiver implementer");
} else {
/// @solidity memory-safe-assembly
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: contracts/Noidz.sol
//SPDX-License-Identifier: MIT
// ....................................................................................................
// ....................................................................................................
// ....................................................................................................
// ....................................................................................................
// ....................................................................................................
// ....................................................................................................
// ............................................................ ...................................
// ............... ........................................... ..................................
// .............. ............. ........................ .................................
// ............. ............. .. ................. ...............................
// ............. ............. .............. ..............................
// ............ ......... ... .............................
// ............ ... ............................
// ............ ............................
// ............ ...........................
// ............ ...........................
// ............ ............................
// ............ ............................
// .............. ............................
// ............... ...........................
// ............... .........................
// .............. .........................
// .............. ........................
// .............. .......................
// .............. ANEKDAMIAN .......................
// .............. .......................
// .............. ......................
// ............... ...................
// .............. .....................
// ............ .....................
// ............... . ...................
// ................ .........................
// .............. .. ...........................
// ...................... ............................
// ......................... ..............................
// ............................ .................................
// ................................ .....................................
// ..................................... ..........................................
// ....................................................................................................
// ....................................................................................................
// ..................................................................................... ....... ......
// .............................................................................. ....... .............
// ....................................................................................................
// ....................................................................................................
// ....................................................................................................
// .................................................................................. .................
// ....................................................................................................
// ....................................................................................................
pragma solidity ^0.8.0;
interface IADTrainerContract {
function balanceOf(address addr) external view returns (uint);
}
contract Noidz is ERC721, Ownable, ReentrancyGuard {
address public ADTrainerAddr;
string internal PROVENANCE_HASH;
string internal _baseTokenURI;
uint256 public constant MAX_RESERVED = 100;
uint256 public CURR_MAX_SUPPLY = 55;
uint256 public constant TOTAL_MAX_SUPPLY = 5555;
uint256 public constant MINT_PRICE = 0 ether;
bool public revealed;
bool public mintActive;
string public placeholderURI;
uint256 public totalSupply;
uint256 public reserved;
uint256 public maxPerTx = 10;
constructor(address _ADTrainerAddr)ERC721("ADNoidz", "NOIDZ"){
ADTrainerAddr = _ADTrainerAddr;
}
/**
* @notice Returns whether or not an address holds a AD Trainer
* @param account Address to return the holder status of
*/
function isADTrainer(address account) public view returns (bool) {
return IADTrainerContract(ADTrainerAddr).balanceOf(account) > 0;
}
/**
* @notice Modifier that requires the sender to be a Trainer
*/
modifier onlyTrainers(){ require(isADTrainer(_msgSender()), "Must be an AD Trainer to mint.");_;}
/**
* @notice Override ERC721 _baseURI function to use base URI pattern
*/
function _baseURI() internal view virtual override returns (string memory) {
return _baseTokenURI;
}
/**
* @notice Return token metadata
* @param tokenId to return metadata for
* @return token URI for the specified token
*/
function tokenURI(uint256 tokenId)
public
view
virtual
override
returns (string memory)
{
require(_exists(tokenId), "Token does not exist.");
return revealed ? ERC721.tokenURI(tokenId) : placeholderURI;
}
/**
* @notice Provenance hash is used as proof that token metadata has not been modified
*/
function provenanceHash() public view returns (string memory) {
require(
bytes(PROVENANCE_HASH).length != 0,
"Provenance hash is not set"
);
return PROVENANCE_HASH;
}
/**
* @notice Set provenance hash
* @dev Can only be set once
* @param _provenanceHash metadata proof string
*/
function setProvenanceHash(string memory _provenanceHash) public onlyOwner {
PROVENANCE_HASH = _provenanceHash;
}
/**
* @notice Set address of AD Trainer
* @param _ADTrainerAddr address of AD Trainer
*/
function setADTrainerAddr(address _ADTrainerAddr) public onlyOwner {
ADTrainerAddr = _ADTrainerAddr;
}
/**
* @notice Flip token metadata to revealed
* @dev Can only be revealed after token offset has been set
*/
function flipRevealed() public onlyOwner {
revealed = !revealed;
}
/**
* @notice Toggle mintActive bool
* @dev affects mint function
*/
function toggleMint() public onlyOwner {
mintActive = !mintActive;
}
/**
* @notice Reserves to various addresses
* @param amount of tokens to be reserved
* @param to address to receive reserved tokens
*/
function reserve(uint256 amount, address to) public onlyOwner {
require(
reserved + amount <= MAX_RESERVED,
"Exceeds maximum number of reserved tokens"
);
require(totalSupply + amount <= CURR_MAX_SUPPLY, "Insufficient supply");
for (uint256 i = 0; i < amount; i++) {
_safeMint(to, totalSupply);
totalSupply += 1;
}
reserved += amount;
}
/**
* @notice Set base token URI
* @param URI base metadata URI to be prepended to token ID
*/
function setBaseTokenURI(string memory URI) public onlyOwner {
_baseTokenURI = URI;
}
/**
* @notice Set placeholder token URI
* @param URI placeholder metadata returned before reveal
*/
function setPlaceholderURI(string memory URI) public onlyOwner {
placeholderURI = URI;
}
/**
* @notice Set max mints per address
* @param amount of mints a single tx is valid for
*/
function setmaxPerTx(uint256 amount) public onlyOwner {
maxPerTx = amount;
}
/**
* @notice Mint a token
* @param amount to mint
*/
function mint(uint256 amount) public payable nonReentrant onlyTrainers {
require(totalSupply + amount <= CURR_MAX_SUPPLY, "Insufficient supply");
require(mintActive, "Minting is not active");
require(msg.value == MINT_PRICE * amount, "Invalid Ether amount sent");
require(
amount <= maxPerTx,
"Can not mint more than the allowed max per transaction."
);
for (uint256 i = 0; i < amount; i++) {
_safeMint(_msgSender(), totalSupply);
totalSupply += 1;
}
}
/**
* @notice Increase the current supply. Can not increase over TOTAL_MAX_SUPPLY.
* @param increment by this amount
*/
function increaseCurrSupply(uint256 increment) public {
require(
CURR_MAX_SUPPLY + increment <= TOTAL_MAX_SUPPLY,
"Can not increase supply over total max supply."
);
CURR_MAX_SUPPLY += increment;
}
/**
* @notice Withdraw all ETH transferred to the contract
*/
function withdraw() external onlyOwner {
Address.sendValue(payable(_msgSender()), address(this).balance);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_ADTrainerAddr","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"ADTrainerAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CURR_MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_RESERVED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"increment","type":"uint256"}],"name":"increaseCurrSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isADTrainer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"placeholderURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"provenanceHash","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ADTrainerAddr","type":"address"}],"name":"setADTrainerAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setPlaceholderURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_provenanceHash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setmaxPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040526037600b55600a6010553480156200001b57600080fd5b5060405162004431380380620044318339818101604052810190620000419190620002e6565b6040518060400160405280600781526020017f41444e6f69647a000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4e4f49445a0000000000000000000000000000000000000000000000000000008152508160009080519060200190620000c59291906200021f565b508060019080519060200190620000de9291906200021f565b50505062000101620000f56200015160201b60201c565b6200015960201b60201c565b600160078190555080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620003d0565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200022d906200034c565b90600052602060002090601f0160209004810192826200025157600085556200029d565b82601f106200026c57805160ff19168380011785556200029d565b828001600101855582156200029d579182015b828111156200029c5782518255916020019190600101906200027f565b5b509050620002ac9190620002b0565b5090565b5b80821115620002cb576000816000905550600101620002b1565b5090565b600081519050620002e081620003b6565b92915050565b600060208284031215620002ff57620002fe620003b1565b5b60006200030f84828501620002cf565b91505092915050565b600062000325826200032c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200036557607f821691505b602082108114156200037c576200037b62000382565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b620003c18162000318565b8114620003cd57600080fd5b50565b61405180620003e06000396000f3fe60806040526004361061023b5760003560e01c80636ba90c6e1161012e578063b88d4fde116100ab578063e0483ecd1161006f578063e0483ecd14610804578063e985e9c514610841578063f2fde38b1461087e578063f968adbe146108a7578063fe60d12c146108d25761023b565b8063b88d4fde14610731578063c002d23d1461075a578063c6ab67a314610785578063c87b56dd146107b0578063d3dd5fe0146107ed5761023b565b8063805dcae5116100f2578063805dcae51461066d5780638da5cb5b1461069657806395d89b41146106c1578063a0712d68146106ec578063a22cb465146107085761023b565b80636ba90c6e1461059a57806370a08231146105c5578063715018a6146106025780637313cba91461061957806378b7c4a2146106445761023b565b806330176e13116101bc57806342842e0e1161018057806342842e0e146104b357806351830227146104dc5780636352211e1461050757806365b1de20146105445780636aa834141461056f5761023b565b806330176e131461040a5780633574a2dd14610433578063397dbb691461045c5780633b2c3fb6146104855780633ccfd60b1461049c5761023b565b8063095ea7b311610203578063095ea7b314610339578063109695231461036257806318160ddd1461038b57806323b872dd146103b657806325fd90f3146103df5761023b565b806301ffc9a71461024057806303339bcb1461027d57806306fdde03146102a6578063081812fc146102d15780630921acdb1461030e575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190612bb3565b6108fd565b60405161027491906131ee565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f9190612cb0565b6109df565b005b3480156102b257600080fd5b506102bb610aec565b6040516102c89190613209565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f39190612c56565b610b7e565b6040516103059190613187565b60405180910390f35b34801561031a57600080fd5b50610323610bc4565b6040516103309190613187565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b9190612b73565b610bea565b005b34801561036e57600080fd5b5061038960048036038101906103849190612c0d565b610d02565b005b34801561039757600080fd5b506103a0610d24565b6040516103ad919061354b565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d89190612a5d565b610d2a565b005b3480156103eb57600080fd5b506103f4610d8a565b60405161040191906131ee565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c9190612c0d565b610d9d565b005b34801561043f57600080fd5b5061045a60048036038101906104559190612c0d565b610dbf565b005b34801561046857600080fd5b50610483600480360381019061047e9190612c56565b610de1565b005b34801561049157600080fd5b5061049a610e4f565b005b3480156104a857600080fd5b506104b1610e83565b005b3480156104bf57600080fd5b506104da60048036038101906104d59190612a5d565b610e9e565b005b3480156104e857600080fd5b506104f1610ebe565b6040516104fe91906131ee565b60405180910390f35b34801561051357600080fd5b5061052e60048036038101906105299190612c56565b610ed1565b60405161053b9190613187565b60405180910390f35b34801561055057600080fd5b50610559610f83565b604051610566919061354b565b60405180910390f35b34801561057b57600080fd5b50610584610f89565b604051610591919061354b565b60405180910390f35b3480156105a657600080fd5b506105af610f8f565b6040516105bc919061354b565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e791906129f0565b610f94565b6040516105f9919061354b565b60405180910390f35b34801561060e57600080fd5b5061061761104c565b005b34801561062557600080fd5b5061062e611060565b60405161063b9190613209565b60405180910390f35b34801561065057600080fd5b5061066b600480360381019061066691906129f0565b6110ee565b005b34801561067957600080fd5b50610694600480360381019061068f9190612c56565b61113a565b005b3480156106a257600080fd5b506106ab61114c565b6040516106b89190613187565b60405180910390f35b3480156106cd57600080fd5b506106d6611176565b6040516106e39190613209565b60405180910390f35b61070660048036038101906107019190612c56565b611208565b005b34801561071457600080fd5b5061072f600480360381019061072a9190612b33565b611430565b005b34801561073d57600080fd5b5061075860048036038101906107539190612ab0565b611446565b005b34801561076657600080fd5b5061076f6114a8565b60405161077c919061354b565b60405180910390f35b34801561079157600080fd5b5061079a6114ad565b6040516107a79190613209565b60405180910390f35b3480156107bc57600080fd5b506107d760048036038101906107d29190612c56565b611591565b6040516107e49190613209565b60405180910390f35b3480156107f957600080fd5b50610802611690565b005b34801561081057600080fd5b5061082b600480360381019061082691906129f0565b6116c4565b60405161083891906131ee565b60405180910390f35b34801561084d57600080fd5b5061086860048036038101906108639190612a1d565b61177a565b60405161087591906131ee565b60405180910390f35b34801561088a57600080fd5b506108a560048036038101906108a091906129f0565b61180e565b005b3480156108b357600080fd5b506108bc611892565b6040516108c9919061354b565b60405180910390f35b3480156108de57600080fd5b506108e7611898565b6040516108f4919061354b565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109d857506109d78261189e565b5b9050919050565b6109e7611908565b606482600f546109f7919061363b565b1115610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f9061334b565b60405180910390fd5b600b5482600e54610a49919061363b565b1115610a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a81906133eb565b60405180910390fd5b60005b82811015610ace57610aa182600e54611986565b6001600e6000828254610ab4919061363b565b925050819055508080610ac690613869565b915050610a8d565b5081600f6000828254610ae1919061363b565b925050819055505050565b606060008054610afb90613806565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2790613806565b8015610b745780601f10610b4957610100808354040283529160200191610b74565b820191906000526020600020905b815481529060010190602001808311610b5757829003601f168201915b5050505050905090565b6000610b89826119a4565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610bf582610ed1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5d9061348b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c856119ef565b73ffffffffffffffffffffffffffffffffffffffff161480610cb45750610cb381610cae6119ef565b61177a565b5b610cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cea9061338b565b60405180910390fd5b610cfd83836119f7565b505050565b610d0a611908565b8060099080519060200190610d209291906127ef565b5050565b600e5481565b610d3b610d356119ef565b82611ab0565b610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d71906134eb565b60405180910390fd5b610d85838383611b45565b505050565b600c60019054906101000a900460ff1681565b610da5611908565b80600a9080519060200190610dbb9291906127ef565b5050565b610dc7611908565b80600d9080519060200190610ddd9291906127ef565b5050565b6115b381600b54610df2919061363b565b1115610e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2a906134ab565b60405180910390fd5b80600b6000828254610e45919061363b565b9250508190555050565b610e57611908565b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b610e8b611908565b610e9c610e966119ef565b47611dac565b565b610eb983838360405180602001604052806000815250611446565b505050565b600c60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f719061344b565b60405180910390fd5b80915050919050565b6115b381565b600b5481565b606481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffc9061336b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611054611908565b61105e6000611ea0565b565b600d805461106d90613806565b80601f016020809104026020016040519081016040528092919081815260200182805461109990613806565b80156110e65780601f106110bb576101008083540402835291602001916110e6565b820191906000526020600020905b8154815290600101906020018083116110c957829003601f168201915b505050505081565b6110f6611908565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611142611908565b8060108190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461118590613806565b80601f01602080910402602001604051908101604052809291908181526020018280546111b190613806565b80156111fe5780601f106111d3576101008083540402835291602001916111fe565b820191906000526020600020905b8154815290600101906020018083116111e157829003601f168201915b5050505050905090565b6002600754141561124e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112459061350b565b60405180910390fd5b60026007819055506112666112616119ef565b6116c4565b6112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c9061346b565b60405180910390fd5b600b5481600e546112b6919061363b565b11156112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee906133eb565b60405180910390fd5b600c60019054906101000a900460ff16611346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133d9061342b565b60405180910390fd5b80600061135391906136c2565b3414611394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138b906132ab565b60405180910390fd5b6010548111156113d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d0906134cb565b60405180910390fd5b60005b81811015611424576113f76113ef6119ef565b600e54611986565b6001600e600082825461140a919061363b565b92505081905550808061141c90613869565b9150506113dc565b50600160078190555050565b61144261143b6119ef565b8383611f66565b5050565b6114576114516119ef565b83611ab0565b611496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148d906134eb565b60405180910390fd5b6114a2848484846120d3565b50505050565b600081565b60606000600980546114be90613806565b90501415611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f89061352b565b60405180910390fd5b6009805461150e90613806565b80601f016020809104026020016040519081016040528092919081815260200182805461153a90613806565b80156115875780601f1061155c57610100808354040283529160200191611587565b820191906000526020600020905b81548152906001019060200180831161156a57829003601f168201915b5050505050905090565b606061159c8261212f565b6115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d2906133cb565b60405180910390fd5b600c60009054906101000a900460ff1661167f57600d80546115fc90613806565b80601f016020809104026020016040519081016040528092919081815260200182805461162890613806565b80156116755780601f1061164a57610100808354040283529160200191611675565b820191906000526020600020905b81548152906001019060200180831161165857829003601f168201915b5050505050611689565b6116888261219b565b5b9050919050565b611698611908565b600c60019054906101000a900460ff1615600c60016101000a81548160ff021916908315150217905550565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016117229190613187565b60206040518083038186803b15801561173a57600080fd5b505afa15801561174e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117729190612c83565b119050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611816611908565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187d9061324b565b60405180910390fd5b61188f81611ea0565b50565b60105481565b600f5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6119106119ef565b73ffffffffffffffffffffffffffffffffffffffff1661192e61114c565b73ffffffffffffffffffffffffffffffffffffffff1614611984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197b9061340b565b60405180910390fd5b565b6119a0828260405180602001604052806000815250612203565b5050565b6119ad8161212f565b6119ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e39061344b565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a6a83610ed1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611abc83610ed1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611afe5750611afd818561177a565b5b80611b3c57508373ffffffffffffffffffffffffffffffffffffffff16611b2484610b7e565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b6582610ed1565b73ffffffffffffffffffffffffffffffffffffffff1614611bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb29061326b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c22906132cb565b60405180910390fd5b611c3683838361225e565b611c416000826119f7565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c91919061371c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ce8919061363b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611da7838383612263565b505050565b80471015611def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de69061332b565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611e1590613172565b60006040518083038185875af1925050503d8060008114611e52576040519150601f19603f3d011682016040523d82523d6000602084013e611e57565b606091505b5050905080611e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e929061330b565b60405180910390fd5b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcc906132eb565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120c691906131ee565b60405180910390a3505050565b6120de848484611b45565b6120ea84848484612268565b612129576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121209061322b565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60606121a6826119a4565b60006121b06123ff565b905060008151116121d057604051806020016040528060008152506121fb565b806121da84612491565b6040516020016121eb92919061314e565b6040516020818303038152906040525b915050919050565b61220d83836125f2565b61221a6000848484612268565b612259576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122509061322b565b60405180910390fd5b505050565b505050565b505050565b60006122898473ffffffffffffffffffffffffffffffffffffffff166127cc565b156123f2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122b26119ef565b8786866040518563ffffffff1660e01b81526004016122d494939291906131a2565b602060405180830381600087803b1580156122ee57600080fd5b505af192505050801561231f57506040513d601f19601f8201168201806040525081019061231c9190612be0565b60015b6123a2573d806000811461234f576040519150601f19603f3d011682016040523d82523d6000602084013e612354565b606091505b5060008151141561239a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123919061322b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506123f7565b600190505b949350505050565b6060600a805461240e90613806565b80601f016020809104026020016040519081016040528092919081815260200182805461243a90613806565b80156124875780601f1061245c57610100808354040283529160200191612487565b820191906000526020600020905b81548152906001019060200180831161246a57829003601f168201915b5050505050905090565b606060008214156124d9576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125ed565b600082905060005b6000821461250b5780806124f490613869565b915050600a826125049190613691565b91506124e1565b60008167ffffffffffffffff8111156125275761252661399f565b5b6040519080825280601f01601f1916602001820160405280156125595781602001600182028036833780820191505090505b5090505b600085146125e657600182612572919061371c565b9150600a8561258191906138b2565b603061258d919061363b565b60f81b8183815181106125a3576125a2613970565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125df9190613691565b945061255d565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612662576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612659906133ab565b60405180910390fd5b61266b8161212f565b156126ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a29061328b565b60405180910390fd5b6126b76000838361225e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612707919061363b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127c860008383612263565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546127fb90613806565b90600052602060002090601f01602090048101928261281d5760008555612864565b82601f1061283657805160ff1916838001178555612864565b82800160010185558215612864579182015b82811115612863578251825591602001919060010190612848565b5b5090506128719190612875565b5090565b5b8082111561288e576000816000905550600101612876565b5090565b60006128a56128a08461358b565b613566565b9050828152602081018484840111156128c1576128c06139d3565b5b6128cc8482856137c4565b509392505050565b60006128e76128e2846135bc565b613566565b905082815260208101848484011115612903576129026139d3565b5b61290e8482856137c4565b509392505050565b60008135905061292581613fbf565b92915050565b60008135905061293a81613fd6565b92915050565b60008135905061294f81613fed565b92915050565b60008151905061296481613fed565b92915050565b600082601f83011261297f5761297e6139ce565b5b813561298f848260208601612892565b91505092915050565b600082601f8301126129ad576129ac6139ce565b5b81356129bd8482602086016128d4565b91505092915050565b6000813590506129d581614004565b92915050565b6000815190506129ea81614004565b92915050565b600060208284031215612a0657612a056139dd565b5b6000612a1484828501612916565b91505092915050565b60008060408385031215612a3457612a336139dd565b5b6000612a4285828601612916565b9250506020612a5385828601612916565b9150509250929050565b600080600060608486031215612a7657612a756139dd565b5b6000612a8486828701612916565b9350506020612a9586828701612916565b9250506040612aa6868287016129c6565b9150509250925092565b60008060008060808587031215612aca57612ac96139dd565b5b6000612ad887828801612916565b9450506020612ae987828801612916565b9350506040612afa878288016129c6565b925050606085013567ffffffffffffffff811115612b1b57612b1a6139d8565b5b612b278782880161296a565b91505092959194509250565b60008060408385031215612b4a57612b496139dd565b5b6000612b5885828601612916565b9250506020612b698582860161292b565b9150509250929050565b60008060408385031215612b8a57612b896139dd565b5b6000612b9885828601612916565b9250506020612ba9858286016129c6565b9150509250929050565b600060208284031215612bc957612bc86139dd565b5b6000612bd784828501612940565b91505092915050565b600060208284031215612bf657612bf56139dd565b5b6000612c0484828501612955565b91505092915050565b600060208284031215612c2357612c226139dd565b5b600082013567ffffffffffffffff811115612c4157612c406139d8565b5b612c4d84828501612998565b91505092915050565b600060208284031215612c6c57612c6b6139dd565b5b6000612c7a848285016129c6565b91505092915050565b600060208284031215612c9957612c986139dd565b5b6000612ca7848285016129db565b91505092915050565b60008060408385031215612cc757612cc66139dd565b5b6000612cd5858286016129c6565b9250506020612ce685828601612916565b9150509250929050565b612cf981613750565b82525050565b612d0881613762565b82525050565b6000612d19826135ed565b612d238185613603565b9350612d338185602086016137d3565b612d3c816139e2565b840191505092915050565b6000612d52826135f8565b612d5c818561361f565b9350612d6c8185602086016137d3565b612d75816139e2565b840191505092915050565b6000612d8b826135f8565b612d958185613630565b9350612da58185602086016137d3565b80840191505092915050565b6000612dbe60328361361f565b9150612dc9826139f3565b604082019050919050565b6000612de160268361361f565b9150612dec82613a42565b604082019050919050565b6000612e0460258361361f565b9150612e0f82613a91565b604082019050919050565b6000612e27601c8361361f565b9150612e3282613ae0565b602082019050919050565b6000612e4a60198361361f565b9150612e5582613b09565b602082019050919050565b6000612e6d60248361361f565b9150612e7882613b32565b604082019050919050565b6000612e9060198361361f565b9150612e9b82613b81565b602082019050919050565b6000612eb3603a8361361f565b9150612ebe82613baa565b604082019050919050565b6000612ed6601d8361361f565b9150612ee182613bf9565b602082019050919050565b6000612ef960298361361f565b9150612f0482613c22565b604082019050919050565b6000612f1c60298361361f565b9150612f2782613c71565b604082019050919050565b6000612f3f603e8361361f565b9150612f4a82613cc0565b604082019050919050565b6000612f6260208361361f565b9150612f6d82613d0f565b602082019050919050565b6000612f8560158361361f565b9150612f9082613d38565b602082019050919050565b6000612fa860138361361f565b9150612fb382613d61565b602082019050919050565b6000612fcb60208361361f565b9150612fd682613d8a565b602082019050919050565b6000612fee60158361361f565b9150612ff982613db3565b602082019050919050565b600061301160188361361f565b915061301c82613ddc565b602082019050919050565b6000613034601e8361361f565b915061303f82613e05565b602082019050919050565b600061305760218361361f565b915061306282613e2e565b604082019050919050565b600061307a600083613614565b915061308582613e7d565b600082019050919050565b600061309d602e8361361f565b91506130a882613e80565b604082019050919050565b60006130c060378361361f565b91506130cb82613ecf565b604082019050919050565b60006130e3602e8361361f565b91506130ee82613f1e565b604082019050919050565b6000613106601f8361361f565b915061311182613f6d565b602082019050919050565b6000613129601a8361361f565b915061313482613f96565b602082019050919050565b613148816137ba565b82525050565b600061315a8285612d80565b91506131668284612d80565b91508190509392505050565b600061317d8261306d565b9150819050919050565b600060208201905061319c6000830184612cf0565b92915050565b60006080820190506131b76000830187612cf0565b6131c46020830186612cf0565b6131d1604083018561313f565b81810360608301526131e38184612d0e565b905095945050505050565b60006020820190506132036000830184612cff565b92915050565b600060208201905081810360008301526132238184612d47565b905092915050565b6000602082019050818103600083015261324481612db1565b9050919050565b6000602082019050818103600083015261326481612dd4565b9050919050565b6000602082019050818103600083015261328481612df7565b9050919050565b600060208201905081810360008301526132a481612e1a565b9050919050565b600060208201905081810360008301526132c481612e3d565b9050919050565b600060208201905081810360008301526132e481612e60565b9050919050565b6000602082019050818103600083015261330481612e83565b9050919050565b6000602082019050818103600083015261332481612ea6565b9050919050565b6000602082019050818103600083015261334481612ec9565b9050919050565b6000602082019050818103600083015261336481612eec565b9050919050565b6000602082019050818103600083015261338481612f0f565b9050919050565b600060208201905081810360008301526133a481612f32565b9050919050565b600060208201905081810360008301526133c481612f55565b9050919050565b600060208201905081810360008301526133e481612f78565b9050919050565b6000602082019050818103600083015261340481612f9b565b9050919050565b6000602082019050818103600083015261342481612fbe565b9050919050565b6000602082019050818103600083015261344481612fe1565b9050919050565b6000602082019050818103600083015261346481613004565b9050919050565b6000602082019050818103600083015261348481613027565b9050919050565b600060208201905081810360008301526134a48161304a565b9050919050565b600060208201905081810360008301526134c481613090565b9050919050565b600060208201905081810360008301526134e4816130b3565b9050919050565b60006020820190508181036000830152613504816130d6565b9050919050565b60006020820190508181036000830152613524816130f9565b9050919050565b600060208201905081810360008301526135448161311c565b9050919050565b6000602082019050613560600083018461313f565b92915050565b6000613570613581565b905061357c8282613838565b919050565b6000604051905090565b600067ffffffffffffffff8211156135a6576135a561399f565b5b6135af826139e2565b9050602081019050919050565b600067ffffffffffffffff8211156135d7576135d661399f565b5b6135e0826139e2565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613646826137ba565b9150613651836137ba565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613686576136856138e3565b5b828201905092915050565b600061369c826137ba565b91506136a7836137ba565b9250826136b7576136b6613912565b5b828204905092915050565b60006136cd826137ba565b91506136d8836137ba565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613711576137106138e3565b5b828202905092915050565b6000613727826137ba565b9150613732836137ba565b925082821015613745576137446138e3565b5b828203905092915050565b600061375b8261379a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156137f15780820151818401526020810190506137d6565b83811115613800576000848401525b50505050565b6000600282049050600182168061381e57607f821691505b6020821081141561383257613831613941565b5b50919050565b613841826139e2565b810181811067ffffffffffffffff821117156138605761385f61399f565b5b80604052505050565b6000613874826137ba565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138a7576138a66138e3565b5b600182019050919050565b60006138bd826137ba565b91506138c8836137ba565b9250826138d8576138d7613912565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c696420457468657220616d6f756e742073656e7400000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f45786365656473206d6178696d756d206e756d626572206f662072657365727660008201527f656420746f6b656e730000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b7f496e73756666696369656e7420737570706c7900000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e74696e67206973206e6f74206163746976650000000000000000000000600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4d75737420626520616e20414420547261696e657220746f206d696e742e0000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f43616e206e6f7420696e63726561736520737570706c79206f76657220746f7460008201527f616c206d617820737570706c792e000000000000000000000000000000000000602082015250565b7f43616e206e6f74206d696e74206d6f7265207468616e2074686520616c6c6f7760008201527f6564206d617820706572207472616e73616374696f6e2e000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f50726f76656e616e63652068617368206973206e6f7420736574000000000000600082015250565b613fc881613750565b8114613fd357600080fd5b50565b613fdf81613762565b8114613fea57600080fd5b50565b613ff68161376e565b811461400157600080fd5b50565b61400d816137ba565b811461401857600080fd5b5056fea2646970667358221220e6ed7b32a234367992c48a6d9abb30cf0992f6d700cb048fc65945ad5a2d2e0e64736f6c63430008070033000000000000000000000000eb18ae97e6f7c460e84707da0b08327e13a558ef
Deployed Bytecode
0x60806040526004361061023b5760003560e01c80636ba90c6e1161012e578063b88d4fde116100ab578063e0483ecd1161006f578063e0483ecd14610804578063e985e9c514610841578063f2fde38b1461087e578063f968adbe146108a7578063fe60d12c146108d25761023b565b8063b88d4fde14610731578063c002d23d1461075a578063c6ab67a314610785578063c87b56dd146107b0578063d3dd5fe0146107ed5761023b565b8063805dcae5116100f2578063805dcae51461066d5780638da5cb5b1461069657806395d89b41146106c1578063a0712d68146106ec578063a22cb465146107085761023b565b80636ba90c6e1461059a57806370a08231146105c5578063715018a6146106025780637313cba91461061957806378b7c4a2146106445761023b565b806330176e13116101bc57806342842e0e1161018057806342842e0e146104b357806351830227146104dc5780636352211e1461050757806365b1de20146105445780636aa834141461056f5761023b565b806330176e131461040a5780633574a2dd14610433578063397dbb691461045c5780633b2c3fb6146104855780633ccfd60b1461049c5761023b565b8063095ea7b311610203578063095ea7b314610339578063109695231461036257806318160ddd1461038b57806323b872dd146103b657806325fd90f3146103df5761023b565b806301ffc9a71461024057806303339bcb1461027d57806306fdde03146102a6578063081812fc146102d15780630921acdb1461030e575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190612bb3565b6108fd565b60405161027491906131ee565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f9190612cb0565b6109df565b005b3480156102b257600080fd5b506102bb610aec565b6040516102c89190613209565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f39190612c56565b610b7e565b6040516103059190613187565b60405180910390f35b34801561031a57600080fd5b50610323610bc4565b6040516103309190613187565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b9190612b73565b610bea565b005b34801561036e57600080fd5b5061038960048036038101906103849190612c0d565b610d02565b005b34801561039757600080fd5b506103a0610d24565b6040516103ad919061354b565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d89190612a5d565b610d2a565b005b3480156103eb57600080fd5b506103f4610d8a565b60405161040191906131ee565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c9190612c0d565b610d9d565b005b34801561043f57600080fd5b5061045a60048036038101906104559190612c0d565b610dbf565b005b34801561046857600080fd5b50610483600480360381019061047e9190612c56565b610de1565b005b34801561049157600080fd5b5061049a610e4f565b005b3480156104a857600080fd5b506104b1610e83565b005b3480156104bf57600080fd5b506104da60048036038101906104d59190612a5d565b610e9e565b005b3480156104e857600080fd5b506104f1610ebe565b6040516104fe91906131ee565b60405180910390f35b34801561051357600080fd5b5061052e60048036038101906105299190612c56565b610ed1565b60405161053b9190613187565b60405180910390f35b34801561055057600080fd5b50610559610f83565b604051610566919061354b565b60405180910390f35b34801561057b57600080fd5b50610584610f89565b604051610591919061354b565b60405180910390f35b3480156105a657600080fd5b506105af610f8f565b6040516105bc919061354b565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e791906129f0565b610f94565b6040516105f9919061354b565b60405180910390f35b34801561060e57600080fd5b5061061761104c565b005b34801561062557600080fd5b5061062e611060565b60405161063b9190613209565b60405180910390f35b34801561065057600080fd5b5061066b600480360381019061066691906129f0565b6110ee565b005b34801561067957600080fd5b50610694600480360381019061068f9190612c56565b61113a565b005b3480156106a257600080fd5b506106ab61114c565b6040516106b89190613187565b60405180910390f35b3480156106cd57600080fd5b506106d6611176565b6040516106e39190613209565b60405180910390f35b61070660048036038101906107019190612c56565b611208565b005b34801561071457600080fd5b5061072f600480360381019061072a9190612b33565b611430565b005b34801561073d57600080fd5b5061075860048036038101906107539190612ab0565b611446565b005b34801561076657600080fd5b5061076f6114a8565b60405161077c919061354b565b60405180910390f35b34801561079157600080fd5b5061079a6114ad565b6040516107a79190613209565b60405180910390f35b3480156107bc57600080fd5b506107d760048036038101906107d29190612c56565b611591565b6040516107e49190613209565b60405180910390f35b3480156107f957600080fd5b50610802611690565b005b34801561081057600080fd5b5061082b600480360381019061082691906129f0565b6116c4565b60405161083891906131ee565b60405180910390f35b34801561084d57600080fd5b5061086860048036038101906108639190612a1d565b61177a565b60405161087591906131ee565b60405180910390f35b34801561088a57600080fd5b506108a560048036038101906108a091906129f0565b61180e565b005b3480156108b357600080fd5b506108bc611892565b6040516108c9919061354b565b60405180910390f35b3480156108de57600080fd5b506108e7611898565b6040516108f4919061354b565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109d857506109d78261189e565b5b9050919050565b6109e7611908565b606482600f546109f7919061363b565b1115610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f9061334b565b60405180910390fd5b600b5482600e54610a49919061363b565b1115610a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a81906133eb565b60405180910390fd5b60005b82811015610ace57610aa182600e54611986565b6001600e6000828254610ab4919061363b565b925050819055508080610ac690613869565b915050610a8d565b5081600f6000828254610ae1919061363b565b925050819055505050565b606060008054610afb90613806565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2790613806565b8015610b745780601f10610b4957610100808354040283529160200191610b74565b820191906000526020600020905b815481529060010190602001808311610b5757829003601f168201915b5050505050905090565b6000610b89826119a4565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610bf582610ed1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5d9061348b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c856119ef565b73ffffffffffffffffffffffffffffffffffffffff161480610cb45750610cb381610cae6119ef565b61177a565b5b610cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cea9061338b565b60405180910390fd5b610cfd83836119f7565b505050565b610d0a611908565b8060099080519060200190610d209291906127ef565b5050565b600e5481565b610d3b610d356119ef565b82611ab0565b610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d71906134eb565b60405180910390fd5b610d85838383611b45565b505050565b600c60019054906101000a900460ff1681565b610da5611908565b80600a9080519060200190610dbb9291906127ef565b5050565b610dc7611908565b80600d9080519060200190610ddd9291906127ef565b5050565b6115b381600b54610df2919061363b565b1115610e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2a906134ab565b60405180910390fd5b80600b6000828254610e45919061363b565b9250508190555050565b610e57611908565b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b610e8b611908565b610e9c610e966119ef565b47611dac565b565b610eb983838360405180602001604052806000815250611446565b505050565b600c60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f719061344b565b60405180910390fd5b80915050919050565b6115b381565b600b5481565b606481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffc9061336b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611054611908565b61105e6000611ea0565b565b600d805461106d90613806565b80601f016020809104026020016040519081016040528092919081815260200182805461109990613806565b80156110e65780601f106110bb576101008083540402835291602001916110e6565b820191906000526020600020905b8154815290600101906020018083116110c957829003601f168201915b505050505081565b6110f6611908565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611142611908565b8060108190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461118590613806565b80601f01602080910402602001604051908101604052809291908181526020018280546111b190613806565b80156111fe5780601f106111d3576101008083540402835291602001916111fe565b820191906000526020600020905b8154815290600101906020018083116111e157829003601f168201915b5050505050905090565b6002600754141561124e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112459061350b565b60405180910390fd5b60026007819055506112666112616119ef565b6116c4565b6112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c9061346b565b60405180910390fd5b600b5481600e546112b6919061363b565b11156112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee906133eb565b60405180910390fd5b600c60019054906101000a900460ff16611346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133d9061342b565b60405180910390fd5b80600061135391906136c2565b3414611394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138b906132ab565b60405180910390fd5b6010548111156113d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d0906134cb565b60405180910390fd5b60005b81811015611424576113f76113ef6119ef565b600e54611986565b6001600e600082825461140a919061363b565b92505081905550808061141c90613869565b9150506113dc565b50600160078190555050565b61144261143b6119ef565b8383611f66565b5050565b6114576114516119ef565b83611ab0565b611496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148d906134eb565b60405180910390fd5b6114a2848484846120d3565b50505050565b600081565b60606000600980546114be90613806565b90501415611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f89061352b565b60405180910390fd5b6009805461150e90613806565b80601f016020809104026020016040519081016040528092919081815260200182805461153a90613806565b80156115875780601f1061155c57610100808354040283529160200191611587565b820191906000526020600020905b81548152906001019060200180831161156a57829003601f168201915b5050505050905090565b606061159c8261212f565b6115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d2906133cb565b60405180910390fd5b600c60009054906101000a900460ff1661167f57600d80546115fc90613806565b80601f016020809104026020016040519081016040528092919081815260200182805461162890613806565b80156116755780601f1061164a57610100808354040283529160200191611675565b820191906000526020600020905b81548152906001019060200180831161165857829003601f168201915b5050505050611689565b6116888261219b565b5b9050919050565b611698611908565b600c60019054906101000a900460ff1615600c60016101000a81548160ff021916908315150217905550565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016117229190613187565b60206040518083038186803b15801561173a57600080fd5b505afa15801561174e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117729190612c83565b119050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611816611908565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187d9061324b565b60405180910390fd5b61188f81611ea0565b50565b60105481565b600f5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6119106119ef565b73ffffffffffffffffffffffffffffffffffffffff1661192e61114c565b73ffffffffffffffffffffffffffffffffffffffff1614611984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197b9061340b565b60405180910390fd5b565b6119a0828260405180602001604052806000815250612203565b5050565b6119ad8161212f565b6119ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e39061344b565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a6a83610ed1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611abc83610ed1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611afe5750611afd818561177a565b5b80611b3c57508373ffffffffffffffffffffffffffffffffffffffff16611b2484610b7e565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b6582610ed1565b73ffffffffffffffffffffffffffffffffffffffff1614611bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb29061326b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c22906132cb565b60405180910390fd5b611c3683838361225e565b611c416000826119f7565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c91919061371c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ce8919061363b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611da7838383612263565b505050565b80471015611def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de69061332b565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611e1590613172565b60006040518083038185875af1925050503d8060008114611e52576040519150601f19603f3d011682016040523d82523d6000602084013e611e57565b606091505b5050905080611e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e929061330b565b60405180910390fd5b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcc906132eb565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120c691906131ee565b60405180910390a3505050565b6120de848484611b45565b6120ea84848484612268565b612129576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121209061322b565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60606121a6826119a4565b60006121b06123ff565b905060008151116121d057604051806020016040528060008152506121fb565b806121da84612491565b6040516020016121eb92919061314e565b6040516020818303038152906040525b915050919050565b61220d83836125f2565b61221a6000848484612268565b612259576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122509061322b565b60405180910390fd5b505050565b505050565b505050565b60006122898473ffffffffffffffffffffffffffffffffffffffff166127cc565b156123f2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122b26119ef565b8786866040518563ffffffff1660e01b81526004016122d494939291906131a2565b602060405180830381600087803b1580156122ee57600080fd5b505af192505050801561231f57506040513d601f19601f8201168201806040525081019061231c9190612be0565b60015b6123a2573d806000811461234f576040519150601f19603f3d011682016040523d82523d6000602084013e612354565b606091505b5060008151141561239a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123919061322b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506123f7565b600190505b949350505050565b6060600a805461240e90613806565b80601f016020809104026020016040519081016040528092919081815260200182805461243a90613806565b80156124875780601f1061245c57610100808354040283529160200191612487565b820191906000526020600020905b81548152906001019060200180831161246a57829003601f168201915b5050505050905090565b606060008214156124d9576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125ed565b600082905060005b6000821461250b5780806124f490613869565b915050600a826125049190613691565b91506124e1565b60008167ffffffffffffffff8111156125275761252661399f565b5b6040519080825280601f01601f1916602001820160405280156125595781602001600182028036833780820191505090505b5090505b600085146125e657600182612572919061371c565b9150600a8561258191906138b2565b603061258d919061363b565b60f81b8183815181106125a3576125a2613970565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125df9190613691565b945061255d565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612662576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612659906133ab565b60405180910390fd5b61266b8161212f565b156126ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a29061328b565b60405180910390fd5b6126b76000838361225e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612707919061363b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127c860008383612263565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546127fb90613806565b90600052602060002090601f01602090048101928261281d5760008555612864565b82601f1061283657805160ff1916838001178555612864565b82800160010185558215612864579182015b82811115612863578251825591602001919060010190612848565b5b5090506128719190612875565b5090565b5b8082111561288e576000816000905550600101612876565b5090565b60006128a56128a08461358b565b613566565b9050828152602081018484840111156128c1576128c06139d3565b5b6128cc8482856137c4565b509392505050565b60006128e76128e2846135bc565b613566565b905082815260208101848484011115612903576129026139d3565b5b61290e8482856137c4565b509392505050565b60008135905061292581613fbf565b92915050565b60008135905061293a81613fd6565b92915050565b60008135905061294f81613fed565b92915050565b60008151905061296481613fed565b92915050565b600082601f83011261297f5761297e6139ce565b5b813561298f848260208601612892565b91505092915050565b600082601f8301126129ad576129ac6139ce565b5b81356129bd8482602086016128d4565b91505092915050565b6000813590506129d581614004565b92915050565b6000815190506129ea81614004565b92915050565b600060208284031215612a0657612a056139dd565b5b6000612a1484828501612916565b91505092915050565b60008060408385031215612a3457612a336139dd565b5b6000612a4285828601612916565b9250506020612a5385828601612916565b9150509250929050565b600080600060608486031215612a7657612a756139dd565b5b6000612a8486828701612916565b9350506020612a9586828701612916565b9250506040612aa6868287016129c6565b9150509250925092565b60008060008060808587031215612aca57612ac96139dd565b5b6000612ad887828801612916565b9450506020612ae987828801612916565b9350506040612afa878288016129c6565b925050606085013567ffffffffffffffff811115612b1b57612b1a6139d8565b5b612b278782880161296a565b91505092959194509250565b60008060408385031215612b4a57612b496139dd565b5b6000612b5885828601612916565b9250506020612b698582860161292b565b9150509250929050565b60008060408385031215612b8a57612b896139dd565b5b6000612b9885828601612916565b9250506020612ba9858286016129c6565b9150509250929050565b600060208284031215612bc957612bc86139dd565b5b6000612bd784828501612940565b91505092915050565b600060208284031215612bf657612bf56139dd565b5b6000612c0484828501612955565b91505092915050565b600060208284031215612c2357612c226139dd565b5b600082013567ffffffffffffffff811115612c4157612c406139d8565b5b612c4d84828501612998565b91505092915050565b600060208284031215612c6c57612c6b6139dd565b5b6000612c7a848285016129c6565b91505092915050565b600060208284031215612c9957612c986139dd565b5b6000612ca7848285016129db565b91505092915050565b60008060408385031215612cc757612cc66139dd565b5b6000612cd5858286016129c6565b9250506020612ce685828601612916565b9150509250929050565b612cf981613750565b82525050565b612d0881613762565b82525050565b6000612d19826135ed565b612d238185613603565b9350612d338185602086016137d3565b612d3c816139e2565b840191505092915050565b6000612d52826135f8565b612d5c818561361f565b9350612d6c8185602086016137d3565b612d75816139e2565b840191505092915050565b6000612d8b826135f8565b612d958185613630565b9350612da58185602086016137d3565b80840191505092915050565b6000612dbe60328361361f565b9150612dc9826139f3565b604082019050919050565b6000612de160268361361f565b9150612dec82613a42565b604082019050919050565b6000612e0460258361361f565b9150612e0f82613a91565b604082019050919050565b6000612e27601c8361361f565b9150612e3282613ae0565b602082019050919050565b6000612e4a60198361361f565b9150612e5582613b09565b602082019050919050565b6000612e6d60248361361f565b9150612e7882613b32565b604082019050919050565b6000612e9060198361361f565b9150612e9b82613b81565b602082019050919050565b6000612eb3603a8361361f565b9150612ebe82613baa565b604082019050919050565b6000612ed6601d8361361f565b9150612ee182613bf9565b602082019050919050565b6000612ef960298361361f565b9150612f0482613c22565b604082019050919050565b6000612f1c60298361361f565b9150612f2782613c71565b604082019050919050565b6000612f3f603e8361361f565b9150612f4a82613cc0565b604082019050919050565b6000612f6260208361361f565b9150612f6d82613d0f565b602082019050919050565b6000612f8560158361361f565b9150612f9082613d38565b602082019050919050565b6000612fa860138361361f565b9150612fb382613d61565b602082019050919050565b6000612fcb60208361361f565b9150612fd682613d8a565b602082019050919050565b6000612fee60158361361f565b9150612ff982613db3565b602082019050919050565b600061301160188361361f565b915061301c82613ddc565b602082019050919050565b6000613034601e8361361f565b915061303f82613e05565b602082019050919050565b600061305760218361361f565b915061306282613e2e565b604082019050919050565b600061307a600083613614565b915061308582613e7d565b600082019050919050565b600061309d602e8361361f565b91506130a882613e80565b604082019050919050565b60006130c060378361361f565b91506130cb82613ecf565b604082019050919050565b60006130e3602e8361361f565b91506130ee82613f1e565b604082019050919050565b6000613106601f8361361f565b915061311182613f6d565b602082019050919050565b6000613129601a8361361f565b915061313482613f96565b602082019050919050565b613148816137ba565b82525050565b600061315a8285612d80565b91506131668284612d80565b91508190509392505050565b600061317d8261306d565b9150819050919050565b600060208201905061319c6000830184612cf0565b92915050565b60006080820190506131b76000830187612cf0565b6131c46020830186612cf0565b6131d1604083018561313f565b81810360608301526131e38184612d0e565b905095945050505050565b60006020820190506132036000830184612cff565b92915050565b600060208201905081810360008301526132238184612d47565b905092915050565b6000602082019050818103600083015261324481612db1565b9050919050565b6000602082019050818103600083015261326481612dd4565b9050919050565b6000602082019050818103600083015261328481612df7565b9050919050565b600060208201905081810360008301526132a481612e1a565b9050919050565b600060208201905081810360008301526132c481612e3d565b9050919050565b600060208201905081810360008301526132e481612e60565b9050919050565b6000602082019050818103600083015261330481612e83565b9050919050565b6000602082019050818103600083015261332481612ea6565b9050919050565b6000602082019050818103600083015261334481612ec9565b9050919050565b6000602082019050818103600083015261336481612eec565b9050919050565b6000602082019050818103600083015261338481612f0f565b9050919050565b600060208201905081810360008301526133a481612f32565b9050919050565b600060208201905081810360008301526133c481612f55565b9050919050565b600060208201905081810360008301526133e481612f78565b9050919050565b6000602082019050818103600083015261340481612f9b565b9050919050565b6000602082019050818103600083015261342481612fbe565b9050919050565b6000602082019050818103600083015261344481612fe1565b9050919050565b6000602082019050818103600083015261346481613004565b9050919050565b6000602082019050818103600083015261348481613027565b9050919050565b600060208201905081810360008301526134a48161304a565b9050919050565b600060208201905081810360008301526134c481613090565b9050919050565b600060208201905081810360008301526134e4816130b3565b9050919050565b60006020820190508181036000830152613504816130d6565b9050919050565b60006020820190508181036000830152613524816130f9565b9050919050565b600060208201905081810360008301526135448161311c565b9050919050565b6000602082019050613560600083018461313f565b92915050565b6000613570613581565b905061357c8282613838565b919050565b6000604051905090565b600067ffffffffffffffff8211156135a6576135a561399f565b5b6135af826139e2565b9050602081019050919050565b600067ffffffffffffffff8211156135d7576135d661399f565b5b6135e0826139e2565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613646826137ba565b9150613651836137ba565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613686576136856138e3565b5b828201905092915050565b600061369c826137ba565b91506136a7836137ba565b9250826136b7576136b6613912565b5b828204905092915050565b60006136cd826137ba565b91506136d8836137ba565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613711576137106138e3565b5b828202905092915050565b6000613727826137ba565b9150613732836137ba565b925082821015613745576137446138e3565b5b828203905092915050565b600061375b8261379a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156137f15780820151818401526020810190506137d6565b83811115613800576000848401525b50505050565b6000600282049050600182168061381e57607f821691505b6020821081141561383257613831613941565b5b50919050565b613841826139e2565b810181811067ffffffffffffffff821117156138605761385f61399f565b5b80604052505050565b6000613874826137ba565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138a7576138a66138e3565b5b600182019050919050565b60006138bd826137ba565b91506138c8836137ba565b9250826138d8576138d7613912565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c696420457468657220616d6f756e742073656e7400000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f45786365656473206d6178696d756d206e756d626572206f662072657365727660008201527f656420746f6b656e730000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b7f496e73756666696369656e7420737570706c7900000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e74696e67206973206e6f74206163746976650000000000000000000000600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4d75737420626520616e20414420547261696e657220746f206d696e742e0000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f43616e206e6f7420696e63726561736520737570706c79206f76657220746f7460008201527f616c206d617820737570706c792e000000000000000000000000000000000000602082015250565b7f43616e206e6f74206d696e74206d6f7265207468616e2074686520616c6c6f7760008201527f6564206d617820706572207472616e73616374696f6e2e000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f50726f76656e616e63652068617368206973206e6f7420736574000000000000600082015250565b613fc881613750565b8114613fd357600080fd5b50565b613fdf81613762565b8114613fea57600080fd5b50565b613ff68161376e565b811461400157600080fd5b50565b61400d816137ba565b811461401857600080fd5b5056fea2646970667358221220e6ed7b32a234367992c48a6d9abb30cf0992f6d700cb048fc65945ad5a2d2e0e64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000eb18ae97e6f7c460e84707da0b08327e13a558ef
-----Decoded View---------------
Arg [0] : _ADTrainerAddr (address): 0xeb18AE97E6f7c460E84707da0B08327e13A558ef
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000eb18ae97e6f7c460e84707da0b08327e13a558ef
Deployed Bytecode Sourcemap
45926:5658:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24796:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49178:451;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25723:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27236:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45984:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26753:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48238:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46386:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27936:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46322:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49755:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49987:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51116:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48744:80;;;;;;;;;;;;;:::i;:::-;;51458:121;;;;;;;;;;;;;:::i;:::-;;28343:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46295:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25434:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46188:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46146:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46097:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25165:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39861:103;;;;;;;;;;;;;:::i;:::-;;46351:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48488:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50213:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39213:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25892:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50388:576;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27479:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28599:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46242:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47863:226;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47467:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48924:82;;;;;;;;;;;;;:::i;:::-;;46757:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27705:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40119:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46449:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46419:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24796:305;24898:4;24950:25;24935:40;;;:11;:40;;;;:105;;;;25007:33;24992:48;;;:11;:48;;;;24935:105;:158;;;;25057:36;25081:11;25057:23;:36::i;:::-;24935:158;24915:178;;24796:305;;;:::o;49178:451::-;39099:13;:11;:13::i;:::-;46136:3:::1;49284:6;49273:8;;:17;;;;:::i;:::-;:33;;49251:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;49418:15;;49408:6;49394:11;;:20;;;;:::i;:::-;:39;;49386:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;49475:9;49470:121;49494:6;49490:1;:10;49470:121;;;49522:26;49532:2;49536:11;;49522:9;:26::i;:::-;49578:1;49563:11;;:16;;;;;;;:::i;:::-;;;;;;;;49502:3;;;;;:::i;:::-;;;;49470:121;;;;49615:6;49603:8;;:18;;;;;;;:::i;:::-;;;;;;;;49178:451:::0;;:::o;25723:100::-;25777:13;25810:5;25803:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25723:100;:::o;27236:171::-;27312:7;27332:23;27347:7;27332:14;:23::i;:::-;27375:15;:24;27391:7;27375:24;;;;;;;;;;;;;;;;;;;;;27368:31;;27236:171;;;:::o;45984:28::-;;;;;;;;;;;;;:::o;26753:417::-;26834:13;26850:23;26865:7;26850:14;:23::i;:::-;26834:39;;26898:5;26892:11;;:2;:11;;;;26884:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26992:5;26976:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27001:37;27018:5;27025:12;:10;:12::i;:::-;27001:16;:37::i;:::-;26976:62;26954:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;27141:21;27150:2;27154:7;27141:8;:21::i;:::-;26823:347;26753:417;;:::o;48238:127::-;39099:13;:11;:13::i;:::-;48342:15:::1;48324;:33;;;;;;;;;;;;:::i;:::-;;48238:127:::0;:::o;46386:26::-;;;;:::o;27936:336::-;28131:41;28150:12;:10;:12::i;:::-;28164:7;28131:18;:41::i;:::-;28123:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;28236:28;28246:4;28252:2;28256:7;28236:9;:28::i;:::-;27936:336;;;:::o;46322:22::-;;;;;;;;;;;;;:::o;49755:99::-;39099:13;:11;:13::i;:::-;49843:3:::1;49827:13;:19;;;;;;;;;;;;:::i;:::-;;49755:99:::0;:::o;49987:102::-;39099:13;:11;:13::i;:::-;50078:3:::1;50061:14;:20;;;;;;;;;;;;:::i;:::-;;49987:102:::0;:::o;51116:255::-;46231:4;51221:9;51203:15;;:27;;;;:::i;:::-;:47;;51181:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;51354:9;51335:15;;:28;;;;;;;:::i;:::-;;;;;;;;51116:255;:::o;48744:80::-;39099:13;:11;:13::i;:::-;48808:8:::1;;;;;;;;;;;48807:9;48796:8;;:20;;;;;;;;;;;;;;;;;;48744:80::o:0;51458:121::-;39099:13;:11;:13::i;:::-;51508:63:::1;51534:12;:10;:12::i;:::-;51549:21;51508:17;:63::i;:::-;51458:121::o:0;28343:185::-;28481:39;28498:4;28504:2;28508:7;28481:39;;;;;;;;;;;;:16;:39::i;:::-;28343:185;;;:::o;46295:20::-;;;;;;;;;;;;;:::o;25434:222::-;25506:7;25526:13;25542:7;:16;25550:7;25542:16;;;;;;;;;;;;;;;;;;;;;25526:32;;25594:1;25577:19;;:5;:19;;;;25569:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;25643:5;25636:12;;;25434:222;;;:::o;46188:47::-;46231:4;46188:47;:::o;46146:35::-;;;;:::o;46097:42::-;46136:3;46097:42;:::o;25165:207::-;25237:7;25282:1;25265:19;;:5;:19;;;;25257:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25348:9;:16;25358:5;25348:16;;;;;;;;;;;;;;;;25341:23;;25165:207;;;:::o;39861:103::-;39099:13;:11;:13::i;:::-;39926:30:::1;39953:1;39926:18;:30::i;:::-;39861:103::o:0;46351:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48488:116::-;39099:13;:11;:13::i;:::-;48582:14:::1;48566:13;;:30;;;;;;;;;;;;;;;;;;48488:116:::0;:::o;50213:90::-;39099:13;:11;:13::i;:::-;50289:6:::1;50278:8;:17;;;;50213:90:::0;:::o;39213:87::-;39259:7;39286:6;;;;;;;;;;;39279:13;;39213:87;:::o;25892:104::-;25948:13;25981:7;25974:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25892:104;:::o;50388:576::-;1812:1;2410:7;;:19;;2402:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1;2543:7;:18;;;;47029:25:::1;47041:12;:10;:12::i;:::-;47029:11;:25::i;:::-;47021:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50502:15:::2;;50492:6;50478:11;;:20;;;;:::i;:::-;:39;;50470:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;50560:10;;;;;;;;;;;50552:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;50641:6;46279:7;50628:19;;;;:::i;:::-;50615:9;:32;50607:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;50720:8;;50710:6;:18;;50688:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;50829:9;50824:131;50848:6;50844:1;:10;50824:131;;;50876:36;50886:12;:10;:12::i;:::-;50900:11;;50876:9;:36::i;:::-;50942:1;50927:11;;:16;;;;;;;:::i;:::-;;;;;;;;50856:3;;;;;:::i;:::-;;;;50824:131;;;;1768:1:::0;2722:7;:22;;;;50388:576;:::o;27479:155::-;27574:52;27593:12;:10;:12::i;:::-;27607:8;27617;27574:18;:52::i;:::-;27479:155;;:::o;28599:323::-;28773:41;28792:12;:10;:12::i;:::-;28806:7;28773:18;:41::i;:::-;28765:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;28876:38;28890:4;28896:2;28900:7;28909:4;28876:13;:38::i;:::-;28599:323;;;;:::o;46242:44::-;46279:7;46242:44;:::o;47863:226::-;47910:13;47991:1;47964:15;47958:29;;;;;:::i;:::-;;;:34;;47936:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;48066:15;48059:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47863:226;:::o;47467:279::-;47585:13;47624:16;47632:7;47624;:16::i;:::-;47616:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;47686:8;;;;;;;;;;;:52;;47724:14;47686:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47697:24;47713:7;47697:15;:24::i;:::-;47686:52;47679:59;;47467:279;;;:::o;48924:82::-;39099:13;:11;:13::i;:::-;48988:10:::1;;;;;;;;;;;48987:11;48974:10;;:24;;;;;;;;;;;;;;;;;;48924:82::o:0;46757:147::-;46816:4;46895:1;46859:13;;;;;;;;;;;46840:43;;;46884:7;46840:52;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;46833:63;;46757:147;;;:::o;27705:164::-;27802:4;27826:18;:25;27845:5;27826:25;;;;;;;;;;;;;;;:35;27852:8;27826:35;;;;;;;;;;;;;;;;;;;;;;;;;27819:42;;27705:164;;;;:::o;40119:201::-;39099:13;:11;:13::i;:::-;40228:1:::1;40208:22;;:8;:22;;;;40200:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;40284:28;40303:8;40284:18;:28::i;:::-;40119:201:::0;:::o;46449:28::-;;;;:::o;46419:23::-;;;;:::o;16645:157::-;16730:4;16769:25;16754:40;;;:11;:40;;;;16747:47;;16645:157;;;:::o;39378:132::-;39453:12;:10;:12::i;:::-;39442:23;;:7;:5;:7::i;:::-;:23;;;39434:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39378:132::o;31329:110::-;31405:26;31415:2;31419:7;31405:26;;;;;;;;;;;;:9;:26::i;:::-;31329:110;;:::o;35211:135::-;35293:16;35301:7;35293;:16::i;:::-;35285:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;35211:135;:::o;23175:98::-;23228:7;23255:10;23248:17;;23175:98;:::o;34490:174::-;34592:2;34565:15;:24;34581:7;34565:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34648:7;34644:2;34610:46;;34619:23;34634:7;34619:14;:23::i;:::-;34610:46;;;;;;;;;;;;34490:174;;:::o;30723:264::-;30816:4;30833:13;30849:23;30864:7;30849:14;:23::i;:::-;30833:39;;30902:5;30891:16;;:7;:16;;;:52;;;;30911:32;30928:5;30935:7;30911:16;:32::i;:::-;30891:52;:87;;;;30971:7;30947:31;;:20;30959:7;30947:11;:20::i;:::-;:31;;;30891:87;30883:96;;;30723:264;;;;:::o;33746:625::-;33905:4;33878:31;;:23;33893:7;33878:14;:23::i;:::-;:31;;;33870:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;33984:1;33970:16;;:2;:16;;;;33962:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34040:39;34061:4;34067:2;34071:7;34040:20;:39::i;:::-;34144:29;34161:1;34165:7;34144:8;:29::i;:::-;34205:1;34186:9;:15;34196:4;34186:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34234:1;34217:9;:13;34227:2;34217:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34265:2;34246:7;:16;34254:7;34246:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34304:7;34300:2;34285:27;;34294:4;34285:27;;;;;;;;;;;;34325:38;34345:4;34351:2;34355:7;34325:19;:38::i;:::-;33746:625;;;:::o;7750:317::-;7865:6;7840:21;:31;;7832:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7919:12;7937:9;:14;;7959:6;7937:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7918:52;;;7989:7;7981:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;7821:246;7750:317;;:::o;40480:191::-;40554:16;40573:6;;;;;;;;;;;40554:25;;40599:8;40590:6;;:17;;;;;;;;;;;;;;;;;;40654:8;40623:40;;40644:8;40623:40;;;;;;;;;;;;40543:128;40480:191;:::o;34807:315::-;34962:8;34953:17;;:5;:17;;;;34945:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35049:8;35011:18;:25;35030:5;35011:25;;;;;;;;;;;;;;;:35;35037:8;35011:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35095:8;35073:41;;35088:5;35073:41;;;35105:8;35073:41;;;;;;:::i;:::-;;;;;;;;34807:315;;;:::o;29803:313::-;29959:28;29969:4;29975:2;29979:7;29959:9;:28::i;:::-;30006:47;30029:4;30035:2;30039:7;30048:4;30006:22;:47::i;:::-;29998:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;29803:313;;;;:::o;30429:127::-;30494:4;30546:1;30518:30;;:7;:16;30526:7;30518:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30511:37;;30429:127;;;:::o;26067:281::-;26140:13;26166:23;26181:7;26166:14;:23::i;:::-;26202:21;26226:10;:8;:10::i;:::-;26202:34;;26278:1;26260:7;26254:21;:25;:86;;;;;;;;;;;;;;;;;26306:7;26315:18;:7;:16;:18::i;:::-;26289:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26254:86;26247:93;;;26067:281;;;:::o;31666:319::-;31795:18;31801:2;31805:7;31795:5;:18::i;:::-;31846:53;31877:1;31881:2;31885:7;31894:4;31846:22;:53::i;:::-;31824:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;31666:319;;;:::o;37335:126::-;;;;:::o;37846:125::-;;;;:::o;35910:853::-;36064:4;36085:15;:2;:13;;;:15::i;:::-;36081:675;;;36137:2;36121:36;;;36158:12;:10;:12::i;:::-;36172:4;36178:7;36187:4;36121:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36117:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36379:1;36362:6;:13;:18;36358:328;;;36405:60;;;;;;;;;;:::i;:::-;;;;;;;;36358:328;36636:6;36630:13;36621:6;36617:2;36613:15;36606:38;36117:584;36253:41;;;36243:51;;;:6;:51;;;;36236:58;;;;;36081:675;36740:4;36733:11;;35910:853;;;;;;;:::o;47193:114::-;47253:13;47286;47279:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47193:114;:::o;3189:723::-;3245:13;3475:1;3466:5;:10;3462:53;;;3493:10;;;;;;;;;;;;;;;;;;;;;3462:53;3525:12;3540:5;3525:20;;3556:14;3581:78;3596:1;3588:4;:9;3581:78;;3614:8;;;;;:::i;:::-;;;;3645:2;3637:10;;;;;:::i;:::-;;;3581:78;;;3669:19;3701:6;3691:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3669:39;;3719:154;3735:1;3726:5;:10;3719:154;;3763:1;3753:11;;;;;:::i;:::-;;;3830:2;3822:5;:10;;;;:::i;:::-;3809:2;:24;;;;:::i;:::-;3796:39;;3779:6;3786;3779:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3859:2;3850:11;;;;;:::i;:::-;;;3719:154;;;3897:6;3883:21;;;;;3189:723;;;;:::o;32321:439::-;32415:1;32401:16;;:2;:16;;;;32393:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32474:16;32482:7;32474;:16::i;:::-;32473:17;32465:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32536:45;32565:1;32569:2;32573:7;32536:20;:45::i;:::-;32611:1;32594:9;:13;32604:2;32594:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32642:2;32623:7;:16;32631:7;32623:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32687:7;32683:2;32662:33;;32679:1;32662:33;;;;;;;;;;;;32708:44;32736:1;32740:2;32744:7;32708:19;:44::i;:::-;32321:439;;:::o;6489:326::-;6549:4;6806:1;6784:7;:19;;;:23;6777:30;;6489:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:143::-;2334:5;2365:6;2359:13;2350:22;;2381:33;2408:5;2381:33;:::i;:::-;2277:143;;;;:::o;2426:329::-;2485:6;2534:2;2522:9;2513:7;2509:23;2505:32;2502:119;;;2540:79;;:::i;:::-;2502:119;2660:1;2685:53;2730:7;2721:6;2710:9;2706:22;2685:53;:::i;:::-;2675:63;;2631:117;2426:329;;;;:::o;2761:474::-;2829:6;2837;2886:2;2874:9;2865:7;2861:23;2857:32;2854:119;;;2892:79;;:::i;:::-;2854:119;3012:1;3037:53;3082:7;3073:6;3062:9;3058:22;3037:53;:::i;:::-;3027:63;;2983:117;3139:2;3165:53;3210:7;3201:6;3190:9;3186:22;3165:53;:::i;:::-;3155:63;;3110:118;2761:474;;;;;:::o;3241:619::-;3318:6;3326;3334;3383:2;3371:9;3362:7;3358:23;3354:32;3351:119;;;3389:79;;:::i;:::-;3351:119;3509:1;3534:53;3579:7;3570:6;3559:9;3555:22;3534:53;:::i;:::-;3524:63;;3480:117;3636:2;3662:53;3707:7;3698:6;3687:9;3683:22;3662:53;:::i;:::-;3652:63;;3607:118;3764:2;3790:53;3835:7;3826:6;3815:9;3811:22;3790:53;:::i;:::-;3780:63;;3735:118;3241:619;;;;;:::o;3866:943::-;3961:6;3969;3977;3985;4034:3;4022:9;4013:7;4009:23;4005:33;4002:120;;;4041:79;;:::i;:::-;4002:120;4161:1;4186:53;4231:7;4222:6;4211:9;4207:22;4186:53;:::i;:::-;4176:63;;4132:117;4288:2;4314:53;4359:7;4350:6;4339:9;4335:22;4314:53;:::i;:::-;4304:63;;4259:118;4416:2;4442:53;4487:7;4478:6;4467:9;4463:22;4442:53;:::i;:::-;4432:63;;4387:118;4572:2;4561:9;4557:18;4544:32;4603:18;4595:6;4592:30;4589:117;;;4625:79;;:::i;:::-;4589:117;4730:62;4784:7;4775:6;4764:9;4760:22;4730:62;:::i;:::-;4720:72;;4515:287;3866:943;;;;;;;:::o;4815:468::-;4880:6;4888;4937:2;4925:9;4916:7;4912:23;4908:32;4905:119;;;4943:79;;:::i;:::-;4905:119;5063:1;5088:53;5133:7;5124:6;5113:9;5109:22;5088:53;:::i;:::-;5078:63;;5034:117;5190:2;5216:50;5258:7;5249:6;5238:9;5234:22;5216:50;:::i;:::-;5206:60;;5161:115;4815:468;;;;;:::o;5289:474::-;5357:6;5365;5414:2;5402:9;5393:7;5389:23;5385:32;5382:119;;;5420:79;;:::i;:::-;5382:119;5540:1;5565:53;5610:7;5601:6;5590:9;5586:22;5565:53;:::i;:::-;5555:63;;5511:117;5667:2;5693:53;5738:7;5729:6;5718:9;5714:22;5693:53;:::i;:::-;5683:63;;5638:118;5289:474;;;;;:::o;5769:327::-;5827:6;5876:2;5864:9;5855:7;5851:23;5847:32;5844:119;;;5882:79;;:::i;:::-;5844:119;6002:1;6027:52;6071:7;6062:6;6051:9;6047:22;6027:52;:::i;:::-;6017:62;;5973:116;5769:327;;;;:::o;6102:349::-;6171:6;6220:2;6208:9;6199:7;6195:23;6191:32;6188:119;;;6226:79;;:::i;:::-;6188:119;6346:1;6371:63;6426:7;6417:6;6406:9;6402:22;6371:63;:::i;:::-;6361:73;;6317:127;6102:349;;;;:::o;6457:509::-;6526:6;6575:2;6563:9;6554:7;6550:23;6546:32;6543:119;;;6581:79;;:::i;:::-;6543:119;6729:1;6718:9;6714:17;6701:31;6759:18;6751:6;6748:30;6745:117;;;6781:79;;:::i;:::-;6745:117;6886:63;6941:7;6932:6;6921:9;6917:22;6886:63;:::i;:::-;6876:73;;6672:287;6457:509;;;;:::o;6972:329::-;7031:6;7080:2;7068:9;7059:7;7055:23;7051:32;7048:119;;;7086:79;;:::i;:::-;7048:119;7206:1;7231:53;7276:7;7267:6;7256:9;7252:22;7231:53;:::i;:::-;7221:63;;7177:117;6972:329;;;;:::o;7307:351::-;7377:6;7426:2;7414:9;7405:7;7401:23;7397:32;7394:119;;;7432:79;;:::i;:::-;7394:119;7552:1;7577:64;7633:7;7624:6;7613:9;7609:22;7577:64;:::i;:::-;7567:74;;7523:128;7307:351;;;;:::o;7664:474::-;7732:6;7740;7789:2;7777:9;7768:7;7764:23;7760:32;7757:119;;;7795:79;;:::i;:::-;7757:119;7915:1;7940:53;7985:7;7976:6;7965:9;7961:22;7940:53;:::i;:::-;7930:63;;7886:117;8042:2;8068:53;8113:7;8104:6;8093:9;8089:22;8068:53;:::i;:::-;8058:63;;8013:118;7664:474;;;;;:::o;8144:118::-;8231:24;8249:5;8231:24;:::i;:::-;8226:3;8219:37;8144:118;;:::o;8268:109::-;8349:21;8364:5;8349:21;:::i;:::-;8344:3;8337:34;8268:109;;:::o;8383:360::-;8469:3;8497:38;8529:5;8497:38;:::i;:::-;8551:70;8614:6;8609:3;8551:70;:::i;:::-;8544:77;;8630:52;8675:6;8670:3;8663:4;8656:5;8652:16;8630:52;:::i;:::-;8707:29;8729:6;8707:29;:::i;:::-;8702:3;8698:39;8691:46;;8473:270;8383:360;;;;:::o;8749:364::-;8837:3;8865:39;8898:5;8865:39;:::i;:::-;8920:71;8984:6;8979:3;8920:71;:::i;:::-;8913:78;;9000:52;9045:6;9040:3;9033:4;9026:5;9022:16;9000:52;:::i;:::-;9077:29;9099:6;9077:29;:::i;:::-;9072:3;9068:39;9061:46;;8841:272;8749:364;;;;:::o;9119:377::-;9225:3;9253:39;9286:5;9253:39;:::i;:::-;9308:89;9390:6;9385:3;9308:89;:::i;:::-;9301:96;;9406:52;9451:6;9446:3;9439:4;9432:5;9428:16;9406:52;:::i;:::-;9483:6;9478:3;9474:16;9467:23;;9229:267;9119:377;;;;:::o;9502:366::-;9644:3;9665:67;9729:2;9724:3;9665:67;:::i;:::-;9658:74;;9741:93;9830:3;9741:93;:::i;:::-;9859:2;9854:3;9850:12;9843:19;;9502:366;;;:::o;9874:::-;10016:3;10037:67;10101:2;10096:3;10037:67;:::i;:::-;10030:74;;10113:93;10202:3;10113:93;:::i;:::-;10231:2;10226:3;10222:12;10215:19;;9874:366;;;:::o;10246:::-;10388:3;10409:67;10473:2;10468:3;10409:67;:::i;:::-;10402:74;;10485:93;10574:3;10485:93;:::i;:::-;10603:2;10598:3;10594:12;10587:19;;10246:366;;;:::o;10618:::-;10760:3;10781:67;10845:2;10840:3;10781:67;:::i;:::-;10774:74;;10857:93;10946:3;10857:93;:::i;:::-;10975:2;10970:3;10966:12;10959:19;;10618:366;;;:::o;10990:::-;11132:3;11153:67;11217:2;11212:3;11153:67;:::i;:::-;11146:74;;11229:93;11318:3;11229:93;:::i;:::-;11347:2;11342:3;11338:12;11331:19;;10990:366;;;:::o;11362:::-;11504:3;11525:67;11589:2;11584:3;11525:67;:::i;:::-;11518:74;;11601:93;11690:3;11601:93;:::i;:::-;11719:2;11714:3;11710:12;11703:19;;11362:366;;;:::o;11734:::-;11876:3;11897:67;11961:2;11956:3;11897:67;:::i;:::-;11890:74;;11973:93;12062:3;11973:93;:::i;:::-;12091:2;12086:3;12082:12;12075:19;;11734:366;;;:::o;12106:::-;12248:3;12269:67;12333:2;12328:3;12269:67;:::i;:::-;12262:74;;12345:93;12434:3;12345:93;:::i;:::-;12463:2;12458:3;12454:12;12447:19;;12106:366;;;:::o;12478:::-;12620:3;12641:67;12705:2;12700:3;12641:67;:::i;:::-;12634:74;;12717:93;12806:3;12717:93;:::i;:::-;12835:2;12830:3;12826:12;12819:19;;12478:366;;;:::o;12850:::-;12992:3;13013:67;13077:2;13072:3;13013:67;:::i;:::-;13006:74;;13089:93;13178:3;13089:93;:::i;:::-;13207:2;13202:3;13198:12;13191:19;;12850:366;;;:::o;13222:::-;13364:3;13385:67;13449:2;13444:3;13385:67;:::i;:::-;13378:74;;13461:93;13550:3;13461:93;:::i;:::-;13579:2;13574:3;13570:12;13563:19;;13222:366;;;:::o;13594:::-;13736:3;13757:67;13821:2;13816:3;13757:67;:::i;:::-;13750:74;;13833:93;13922:3;13833:93;:::i;:::-;13951:2;13946:3;13942:12;13935:19;;13594:366;;;:::o;13966:::-;14108:3;14129:67;14193:2;14188:3;14129:67;:::i;:::-;14122:74;;14205:93;14294:3;14205:93;:::i;:::-;14323:2;14318:3;14314:12;14307:19;;13966:366;;;:::o;14338:::-;14480:3;14501:67;14565:2;14560:3;14501:67;:::i;:::-;14494:74;;14577:93;14666:3;14577:93;:::i;:::-;14695:2;14690:3;14686:12;14679:19;;14338:366;;;:::o;14710:::-;14852:3;14873:67;14937:2;14932:3;14873:67;:::i;:::-;14866:74;;14949:93;15038:3;14949:93;:::i;:::-;15067:2;15062:3;15058:12;15051:19;;14710:366;;;:::o;15082:::-;15224:3;15245:67;15309:2;15304:3;15245:67;:::i;:::-;15238:74;;15321:93;15410:3;15321:93;:::i;:::-;15439:2;15434:3;15430:12;15423:19;;15082:366;;;:::o;15454:::-;15596:3;15617:67;15681:2;15676:3;15617:67;:::i;:::-;15610:74;;15693:93;15782:3;15693:93;:::i;:::-;15811:2;15806:3;15802:12;15795:19;;15454:366;;;:::o;15826:::-;15968:3;15989:67;16053:2;16048:3;15989:67;:::i;:::-;15982:74;;16065:93;16154:3;16065:93;:::i;:::-;16183:2;16178:3;16174:12;16167:19;;15826:366;;;:::o;16198:::-;16340:3;16361:67;16425:2;16420:3;16361:67;:::i;:::-;16354:74;;16437:93;16526:3;16437:93;:::i;:::-;16555:2;16550:3;16546:12;16539:19;;16198:366;;;:::o;16570:::-;16712:3;16733:67;16797:2;16792:3;16733:67;:::i;:::-;16726:74;;16809:93;16898:3;16809:93;:::i;:::-;16927:2;16922:3;16918:12;16911:19;;16570:366;;;:::o;16942:398::-;17101:3;17122:83;17203:1;17198:3;17122:83;:::i;:::-;17115:90;;17214:93;17303:3;17214:93;:::i;:::-;17332:1;17327:3;17323:11;17316:18;;16942:398;;;:::o;17346:366::-;17488:3;17509:67;17573:2;17568:3;17509:67;:::i;:::-;17502:74;;17585:93;17674:3;17585:93;:::i;:::-;17703:2;17698:3;17694:12;17687:19;;17346:366;;;:::o;17718:::-;17860:3;17881:67;17945:2;17940:3;17881:67;:::i;:::-;17874:74;;17957:93;18046:3;17957:93;:::i;:::-;18075:2;18070:3;18066:12;18059:19;;17718:366;;;:::o;18090:::-;18232:3;18253:67;18317:2;18312:3;18253:67;:::i;:::-;18246:74;;18329:93;18418:3;18329:93;:::i;:::-;18447:2;18442:3;18438:12;18431:19;;18090:366;;;:::o;18462:::-;18604:3;18625:67;18689:2;18684:3;18625:67;:::i;:::-;18618:74;;18701:93;18790:3;18701:93;:::i;:::-;18819:2;18814:3;18810:12;18803:19;;18462:366;;;:::o;18834:::-;18976:3;18997:67;19061:2;19056:3;18997:67;:::i;:::-;18990:74;;19073:93;19162:3;19073:93;:::i;:::-;19191:2;19186:3;19182:12;19175:19;;18834:366;;;:::o;19206:118::-;19293:24;19311:5;19293:24;:::i;:::-;19288:3;19281:37;19206:118;;:::o;19330:435::-;19510:3;19532:95;19623:3;19614:6;19532:95;:::i;:::-;19525:102;;19644:95;19735:3;19726:6;19644:95;:::i;:::-;19637:102;;19756:3;19749:10;;19330:435;;;;;:::o;19771:379::-;19955:3;19977:147;20120:3;19977:147;:::i;:::-;19970:154;;20141:3;20134:10;;19771:379;;;:::o;20156:222::-;20249:4;20287:2;20276:9;20272:18;20264:26;;20300:71;20368:1;20357:9;20353:17;20344:6;20300:71;:::i;:::-;20156:222;;;;:::o;20384:640::-;20579:4;20617:3;20606:9;20602:19;20594:27;;20631:71;20699:1;20688:9;20684:17;20675:6;20631:71;:::i;:::-;20712:72;20780:2;20769:9;20765:18;20756:6;20712:72;:::i;:::-;20794;20862:2;20851:9;20847:18;20838:6;20794:72;:::i;:::-;20913:9;20907:4;20903:20;20898:2;20887:9;20883:18;20876:48;20941:76;21012:4;21003:6;20941:76;:::i;:::-;20933:84;;20384:640;;;;;;;:::o;21030:210::-;21117:4;21155:2;21144:9;21140:18;21132:26;;21168:65;21230:1;21219:9;21215:17;21206:6;21168:65;:::i;:::-;21030:210;;;;:::o;21246:313::-;21359:4;21397:2;21386:9;21382:18;21374:26;;21446:9;21440:4;21436:20;21432:1;21421:9;21417:17;21410:47;21474:78;21547:4;21538:6;21474:78;:::i;:::-;21466:86;;21246:313;;;;:::o;21565:419::-;21731:4;21769:2;21758:9;21754:18;21746:26;;21818:9;21812:4;21808:20;21804:1;21793:9;21789:17;21782:47;21846:131;21972:4;21846:131;:::i;:::-;21838:139;;21565:419;;;:::o;21990:::-;22156:4;22194:2;22183:9;22179:18;22171:26;;22243:9;22237:4;22233:20;22229:1;22218:9;22214:17;22207:47;22271:131;22397:4;22271:131;:::i;:::-;22263:139;;21990:419;;;:::o;22415:::-;22581:4;22619:2;22608:9;22604:18;22596:26;;22668:9;22662:4;22658:20;22654:1;22643:9;22639:17;22632:47;22696:131;22822:4;22696:131;:::i;:::-;22688:139;;22415:419;;;:::o;22840:::-;23006:4;23044:2;23033:9;23029:18;23021:26;;23093:9;23087:4;23083:20;23079:1;23068:9;23064:17;23057:47;23121:131;23247:4;23121:131;:::i;:::-;23113:139;;22840:419;;;:::o;23265:::-;23431:4;23469:2;23458:9;23454:18;23446:26;;23518:9;23512:4;23508:20;23504:1;23493:9;23489:17;23482:47;23546:131;23672:4;23546:131;:::i;:::-;23538:139;;23265:419;;;:::o;23690:::-;23856:4;23894:2;23883:9;23879:18;23871:26;;23943:9;23937:4;23933:20;23929:1;23918:9;23914:17;23907:47;23971:131;24097:4;23971:131;:::i;:::-;23963:139;;23690:419;;;:::o;24115:::-;24281:4;24319:2;24308:9;24304:18;24296:26;;24368:9;24362:4;24358:20;24354:1;24343:9;24339:17;24332:47;24396:131;24522:4;24396:131;:::i;:::-;24388:139;;24115:419;;;:::o;24540:::-;24706:4;24744:2;24733:9;24729:18;24721:26;;24793:9;24787:4;24783:20;24779:1;24768:9;24764:17;24757:47;24821:131;24947:4;24821:131;:::i;:::-;24813:139;;24540:419;;;:::o;24965:::-;25131:4;25169:2;25158:9;25154:18;25146:26;;25218:9;25212:4;25208:20;25204:1;25193:9;25189:17;25182:47;25246:131;25372:4;25246:131;:::i;:::-;25238:139;;24965:419;;;:::o;25390:::-;25556:4;25594:2;25583:9;25579:18;25571:26;;25643:9;25637:4;25633:20;25629:1;25618:9;25614:17;25607:47;25671:131;25797:4;25671:131;:::i;:::-;25663:139;;25390:419;;;:::o;25815:::-;25981:4;26019:2;26008:9;26004:18;25996:26;;26068:9;26062:4;26058:20;26054:1;26043:9;26039:17;26032:47;26096:131;26222:4;26096:131;:::i;:::-;26088:139;;25815:419;;;:::o;26240:::-;26406:4;26444:2;26433:9;26429:18;26421:26;;26493:9;26487:4;26483:20;26479:1;26468:9;26464:17;26457:47;26521:131;26647:4;26521:131;:::i;:::-;26513:139;;26240:419;;;:::o;26665:::-;26831:4;26869:2;26858:9;26854:18;26846:26;;26918:9;26912:4;26908:20;26904:1;26893:9;26889:17;26882:47;26946:131;27072:4;26946:131;:::i;:::-;26938:139;;26665:419;;;:::o;27090:::-;27256:4;27294:2;27283:9;27279:18;27271:26;;27343:9;27337:4;27333:20;27329:1;27318:9;27314:17;27307:47;27371:131;27497:4;27371:131;:::i;:::-;27363:139;;27090:419;;;:::o;27515:::-;27681:4;27719:2;27708:9;27704:18;27696:26;;27768:9;27762:4;27758:20;27754:1;27743:9;27739:17;27732:47;27796:131;27922:4;27796:131;:::i;:::-;27788:139;;27515:419;;;:::o;27940:::-;28106:4;28144:2;28133:9;28129:18;28121:26;;28193:9;28187:4;28183:20;28179:1;28168:9;28164:17;28157:47;28221:131;28347:4;28221:131;:::i;:::-;28213:139;;27940:419;;;:::o;28365:::-;28531:4;28569:2;28558:9;28554:18;28546:26;;28618:9;28612:4;28608:20;28604:1;28593:9;28589:17;28582:47;28646:131;28772:4;28646:131;:::i;:::-;28638:139;;28365:419;;;:::o;28790:::-;28956:4;28994:2;28983:9;28979:18;28971:26;;29043:9;29037:4;29033:20;29029:1;29018:9;29014:17;29007:47;29071:131;29197:4;29071:131;:::i;:::-;29063:139;;28790:419;;;:::o;29215:::-;29381:4;29419:2;29408:9;29404:18;29396:26;;29468:9;29462:4;29458:20;29454:1;29443:9;29439:17;29432:47;29496:131;29622:4;29496:131;:::i;:::-;29488:139;;29215:419;;;:::o;29640:::-;29806:4;29844:2;29833:9;29829:18;29821:26;;29893:9;29887:4;29883:20;29879:1;29868:9;29864:17;29857:47;29921:131;30047:4;29921:131;:::i;:::-;29913:139;;29640:419;;;:::o;30065:::-;30231:4;30269:2;30258:9;30254:18;30246:26;;30318:9;30312:4;30308:20;30304:1;30293:9;30289:17;30282:47;30346:131;30472:4;30346:131;:::i;:::-;30338:139;;30065:419;;;:::o;30490:::-;30656:4;30694:2;30683:9;30679:18;30671:26;;30743:9;30737:4;30733:20;30729:1;30718:9;30714:17;30707:47;30771:131;30897:4;30771:131;:::i;:::-;30763:139;;30490:419;;;:::o;30915:::-;31081:4;31119:2;31108:9;31104:18;31096:26;;31168:9;31162:4;31158:20;31154:1;31143:9;31139:17;31132:47;31196:131;31322:4;31196:131;:::i;:::-;31188:139;;30915:419;;;:::o;31340:::-;31506:4;31544:2;31533:9;31529:18;31521:26;;31593:9;31587:4;31583:20;31579:1;31568:9;31564:17;31557:47;31621:131;31747:4;31621:131;:::i;:::-;31613:139;;31340:419;;;:::o;31765:::-;31931:4;31969:2;31958:9;31954:18;31946:26;;32018:9;32012:4;32008:20;32004:1;31993:9;31989:17;31982:47;32046:131;32172:4;32046:131;:::i;:::-;32038:139;;31765:419;;;:::o;32190:222::-;32283:4;32321:2;32310:9;32306:18;32298:26;;32334:71;32402:1;32391:9;32387:17;32378:6;32334:71;:::i;:::-;32190:222;;;;:::o;32418:129::-;32452:6;32479:20;;:::i;:::-;32469:30;;32508:33;32536:4;32528:6;32508:33;:::i;:::-;32418:129;;;:::o;32553:75::-;32586:6;32619:2;32613:9;32603:19;;32553:75;:::o;32634:307::-;32695:4;32785:18;32777:6;32774:30;32771:56;;;32807:18;;:::i;:::-;32771:56;32845:29;32867:6;32845:29;:::i;:::-;32837:37;;32929:4;32923;32919:15;32911:23;;32634:307;;;:::o;32947:308::-;33009:4;33099:18;33091:6;33088:30;33085:56;;;33121:18;;:::i;:::-;33085:56;33159:29;33181:6;33159:29;:::i;:::-;33151:37;;33243:4;33237;33233:15;33225:23;;32947:308;;;:::o;33261:98::-;33312:6;33346:5;33340:12;33330:22;;33261:98;;;:::o;33365:99::-;33417:6;33451:5;33445:12;33435:22;;33365:99;;;:::o;33470:168::-;33553:11;33587:6;33582:3;33575:19;33627:4;33622:3;33618:14;33603:29;;33470:168;;;;:::o;33644:147::-;33745:11;33782:3;33767:18;;33644:147;;;;:::o;33797:169::-;33881:11;33915:6;33910:3;33903:19;33955:4;33950:3;33946:14;33931:29;;33797:169;;;;:::o;33972:148::-;34074:11;34111:3;34096:18;;33972:148;;;;:::o;34126:305::-;34166:3;34185:20;34203:1;34185:20;:::i;:::-;34180:25;;34219:20;34237:1;34219:20;:::i;:::-;34214:25;;34373:1;34305:66;34301:74;34298:1;34295:81;34292:107;;;34379:18;;:::i;:::-;34292:107;34423:1;34420;34416:9;34409:16;;34126:305;;;;:::o;34437:185::-;34477:1;34494:20;34512:1;34494:20;:::i;:::-;34489:25;;34528:20;34546:1;34528:20;:::i;:::-;34523:25;;34567:1;34557:35;;34572:18;;:::i;:::-;34557:35;34614:1;34611;34607:9;34602:14;;34437:185;;;;:::o;34628:348::-;34668:7;34691:20;34709:1;34691:20;:::i;:::-;34686:25;;34725:20;34743:1;34725:20;:::i;:::-;34720:25;;34913:1;34845:66;34841:74;34838:1;34835:81;34830:1;34823:9;34816:17;34812:105;34809:131;;;34920:18;;:::i;:::-;34809:131;34968:1;34965;34961:9;34950:20;;34628:348;;;;:::o;34982:191::-;35022:4;35042:20;35060:1;35042:20;:::i;:::-;35037:25;;35076:20;35094:1;35076:20;:::i;:::-;35071:25;;35115:1;35112;35109:8;35106:34;;;35120:18;;:::i;:::-;35106:34;35165:1;35162;35158:9;35150:17;;34982:191;;;;:::o;35179:96::-;35216:7;35245:24;35263:5;35245:24;:::i;:::-;35234:35;;35179:96;;;:::o;35281:90::-;35315:7;35358:5;35351:13;35344:21;35333:32;;35281:90;;;:::o;35377:149::-;35413:7;35453:66;35446:5;35442:78;35431:89;;35377:149;;;:::o;35532:126::-;35569:7;35609:42;35602:5;35598:54;35587:65;;35532:126;;;:::o;35664:77::-;35701:7;35730:5;35719:16;;35664:77;;;:::o;35747:154::-;35831:6;35826:3;35821;35808:30;35893:1;35884:6;35879:3;35875:16;35868:27;35747:154;;;:::o;35907:307::-;35975:1;35985:113;35999:6;35996:1;35993:13;35985:113;;;36084:1;36079:3;36075:11;36069:18;36065:1;36060:3;36056:11;36049:39;36021:2;36018:1;36014:10;36009:15;;35985:113;;;36116:6;36113:1;36110:13;36107:101;;;36196:1;36187:6;36182:3;36178:16;36171:27;36107:101;35956:258;35907:307;;;:::o;36220:320::-;36264:6;36301:1;36295:4;36291:12;36281:22;;36348:1;36342:4;36338:12;36369:18;36359:81;;36425:4;36417:6;36413:17;36403:27;;36359:81;36487:2;36479:6;36476:14;36456:18;36453:38;36450:84;;;36506:18;;:::i;:::-;36450:84;36271:269;36220:320;;;:::o;36546:281::-;36629:27;36651:4;36629:27;:::i;:::-;36621:6;36617:40;36759:6;36747:10;36744:22;36723:18;36711:10;36708:34;36705:62;36702:88;;;36770:18;;:::i;:::-;36702:88;36810:10;36806:2;36799:22;36589:238;36546:281;;:::o;36833:233::-;36872:3;36895:24;36913:5;36895:24;:::i;:::-;36886:33;;36941:66;36934:5;36931:77;36928:103;;;37011:18;;:::i;:::-;36928:103;37058:1;37051:5;37047:13;37040:20;;36833:233;;;:::o;37072:176::-;37104:1;37121:20;37139:1;37121:20;:::i;:::-;37116:25;;37155:20;37173:1;37155:20;:::i;:::-;37150:25;;37194:1;37184:35;;37199:18;;:::i;:::-;37184:35;37240:1;37237;37233:9;37228:14;;37072:176;;;;:::o;37254:180::-;37302:77;37299:1;37292:88;37399:4;37396:1;37389:15;37423:4;37420:1;37413:15;37440:180;37488:77;37485:1;37478:88;37585:4;37582:1;37575:15;37609:4;37606:1;37599:15;37626:180;37674:77;37671:1;37664:88;37771:4;37768:1;37761:15;37795:4;37792:1;37785:15;37812:180;37860:77;37857:1;37850:88;37957:4;37954:1;37947:15;37981:4;37978:1;37971:15;37998:180;38046:77;38043:1;38036:88;38143:4;38140:1;38133:15;38167:4;38164:1;38157:15;38184:117;38293:1;38290;38283:12;38307:117;38416:1;38413;38406:12;38430:117;38539:1;38536;38529:12;38553:117;38662:1;38659;38652:12;38676:102;38717:6;38768:2;38764:7;38759:2;38752:5;38748:14;38744:28;38734:38;;38676:102;;;:::o;38784:237::-;38924:34;38920:1;38912:6;38908:14;38901:58;38993:20;38988:2;38980:6;38976:15;38969:45;38784:237;:::o;39027:225::-;39167:34;39163:1;39155:6;39151:14;39144:58;39236:8;39231:2;39223:6;39219:15;39212:33;39027:225;:::o;39258:224::-;39398:34;39394:1;39386:6;39382:14;39375:58;39467:7;39462:2;39454:6;39450:15;39443:32;39258:224;:::o;39488:178::-;39628:30;39624:1;39616:6;39612:14;39605:54;39488:178;:::o;39672:175::-;39812:27;39808:1;39800:6;39796:14;39789:51;39672:175;:::o;39853:223::-;39993:34;39989:1;39981:6;39977:14;39970:58;40062:6;40057:2;40049:6;40045:15;40038:31;39853:223;:::o;40082:175::-;40222:27;40218:1;40210:6;40206:14;40199:51;40082:175;:::o;40263:245::-;40403:34;40399:1;40391:6;40387:14;40380:58;40472:28;40467:2;40459:6;40455:15;40448:53;40263:245;:::o;40514:179::-;40654:31;40650:1;40642:6;40638:14;40631:55;40514:179;:::o;40699:228::-;40839:34;40835:1;40827:6;40823:14;40816:58;40908:11;40903:2;40895:6;40891:15;40884:36;40699:228;:::o;40933:::-;41073:34;41069:1;41061:6;41057:14;41050:58;41142:11;41137:2;41129:6;41125:15;41118:36;40933:228;:::o;41167:249::-;41307:34;41303:1;41295:6;41291:14;41284:58;41376:32;41371:2;41363:6;41359:15;41352:57;41167:249;:::o;41422:182::-;41562:34;41558:1;41550:6;41546:14;41539:58;41422:182;:::o;41610:171::-;41750:23;41746:1;41738:6;41734:14;41727:47;41610:171;:::o;41787:169::-;41927:21;41923:1;41915:6;41911:14;41904:45;41787:169;:::o;41962:182::-;42102:34;42098:1;42090:6;42086:14;42079:58;41962:182;:::o;42150:171::-;42290:23;42286:1;42278:6;42274:14;42267:47;42150:171;:::o;42327:174::-;42467:26;42463:1;42455:6;42451:14;42444:50;42327:174;:::o;42507:180::-;42647:32;42643:1;42635:6;42631:14;42624:56;42507:180;:::o;42693:220::-;42833:34;42829:1;42821:6;42817:14;42810:58;42902:3;42897:2;42889:6;42885:15;42878:28;42693:220;:::o;42919:114::-;;:::o;43039:233::-;43179:34;43175:1;43167:6;43163:14;43156:58;43248:16;43243:2;43235:6;43231:15;43224:41;43039:233;:::o;43278:242::-;43418:34;43414:1;43406:6;43402:14;43395:58;43487:25;43482:2;43474:6;43470:15;43463:50;43278:242;:::o;43526:233::-;43666:34;43662:1;43654:6;43650:14;43643:58;43735:16;43730:2;43722:6;43718:15;43711:41;43526:233;:::o;43765:181::-;43905:33;43901:1;43893:6;43889:14;43882:57;43765:181;:::o;43952:176::-;44092:28;44088:1;44080:6;44076:14;44069:52;43952:176;:::o;44134:122::-;44207:24;44225:5;44207:24;:::i;:::-;44200:5;44197:35;44187:63;;44246:1;44243;44236:12;44187:63;44134:122;:::o;44262:116::-;44332:21;44347:5;44332:21;:::i;:::-;44325:5;44322:32;44312:60;;44368:1;44365;44358:12;44312:60;44262:116;:::o;44384:120::-;44456:23;44473:5;44456:23;:::i;:::-;44449:5;44446:34;44436:62;;44494:1;44491;44484:12;44436:62;44384:120;:::o;44510:122::-;44583:24;44601:5;44583:24;:::i;:::-;44576:5;44573:35;44563:63;;44622:1;44619;44612:12;44563:63;44510:122;:::o
Swarm Source
ipfs://e6ed7b32a234367992c48a6d9abb30cf0992f6d700cb048fc65945ad5a2d2e0e
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.