Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 13 from a total of 13 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Airdrop | 15328940 | 1308 days ago | IN | 0 ETH | 0.00181287 | ||||
| Airdrop | 15328919 | 1308 days ago | IN | 0 ETH | 0.00173813 | ||||
| Airdrop | 15322978 | 1309 days ago | IN | 0 ETH | 0.00151096 | ||||
| Airdrop | 15316437 | 1310 days ago | IN | 0 ETH | 0.0024196 | ||||
| Burn | 15316378 | 1310 days ago | IN | 0 ETH | 0.00202376 | ||||
| Airdrop | 15316351 | 1310 days ago | IN | 0 ETH | 0.00278251 | ||||
| Airdrop | 15316324 | 1310 days ago | IN | 0 ETH | 0.00241634 | ||||
| Airdrop | 14894787 | 1379 days ago | IN | 0 ETH | 0.00597264 | ||||
| Airdrop | 14886756 | 1380 days ago | IN | 0 ETH | 0.00823816 | ||||
| Burn | 14886626 | 1380 days ago | IN | 0 ETH | 0.00561331 | ||||
| Airdrop | 14886617 | 1380 days ago | IN | 0 ETH | 0.00576856 | ||||
| Airdrop | 14886490 | 1380 days ago | IN | 0 ETH | 0.00935244 | ||||
| Set Base URI | 14876554 | 1382 days ago | IN | 0 ETH | 0.00489891 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
AddledCroc
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-05-29
*/
// SPDX-License-Identifier: MIT
/*Developer Info:
Written by Meraj Bugti Blockchain Developer @ www.themetaconcepts.com
Email: iintadeveloper@gmail.com */
// File: @openzeppelin/contracts/utils/Strings.sol
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
/**
* @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);
}
}
// 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/utils/Address.sol
// OpenZeppelin Contracts (last updated v4.5.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
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
// OpenZeppelin Contracts v4.4.1 (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 `IERC721.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 v4.4.1 (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`, 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 be 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 Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @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 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);
/**
* @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;
}
// 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: contracts/new.sol
pragma solidity ^0.8.4;
error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerQueryForNonexistentToken();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension. Built to optimize for lower gas during batch mints.
*
* Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).
*
* Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
*
* Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).
*/
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
// Compiler will pack this into a single 256bit word.
struct TokenOwnership {
// The address of the owner.
address addr;
// Keeps track of the start time of ownership with minimal overhead for tokenomics.
uint64 startTimestamp;
// Whether the token has been burned.
bool burned;
}
// Compiler will pack this into a single 256bit word.
struct AddressData {
// Realistically, 2**64-1 is more than enough.
uint64 balance;
// Keeps track of mint count with minimal overhead for tokenomics.
uint64 numberMinted;
// Keeps track of burn count with minimal overhead for tokenomics.
uint64 numberBurned;
// For miscellaneous variable(s) pertaining to the address
// (e.g. number of whitelist mint slots used).
// If there are multiple variables, please pack them into a uint64.
uint64 aux;
}
// The tokenId of the next token to be minted.
uint256 internal _currentIndex;
// The number of tokens burned.
uint256 internal _burnCounter;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to ownership details
// An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details.
mapping(uint256 => TokenOwnership) internal _ownerships;
// Mapping owner address to address data
mapping(address => AddressData) private _addressData;
// 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;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
_currentIndex = _startTokenId();
}
/**
* To change the starting tokenId, please override this function.
*/
function _startTokenId() internal view virtual returns (uint256) {
return 0;
}
/**
* @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
*/
function totalSupply() public view returns (uint256) {
// Counter underflow is impossible as _burnCounter cannot be incremented
// more than _currentIndex - _startTokenId() times
unchecked {
return _currentIndex - _burnCounter - _startTokenId();
}
}
/**
* Returns the total amount of tokens minted in the contract.
*/
function _totalMinted() internal view returns (uint256) {
// Counter underflow is impossible as _currentIndex does not decrement,
// and it is initialized to _startTokenId()
unchecked {
return _currentIndex - _startTokenId();
}
}
/**
* @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 override returns (uint256) {
if (owner == address(0)) revert BalanceQueryForZeroAddress();
return uint256(_addressData[owner].balance);
}
/**
* Returns the number of tokens minted by `owner`.
*/
function _numberMinted(address owner) internal view returns (uint256) {
return uint256(_addressData[owner].numberMinted);
}
/**
* Returns the number of tokens burned by or on behalf of `owner`.
*/
function _numberBurned(address owner) internal view returns (uint256) {
return uint256(_addressData[owner].numberBurned);
}
/**
* Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
*/
function _getAux(address owner) internal view returns (uint64) {
return _addressData[owner].aux;
}
/**
* Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
* If there are multiple variables, please pack them into a uint64.
*/
function _setAux(address owner, uint64 aux) internal {
_addressData[owner].aux = aux;
}
/**
* Gas spent here starts off proportional to the maximum mint batch size.
* It gradually moves to O(1) as tokens get transferred around in the collection over time.
*/
function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
uint256 curr = tokenId;
unchecked {
if (_startTokenId() <= curr && curr < _currentIndex) {
TokenOwnership memory ownership = _ownerships[curr];
if (!ownership.burned) {
if (ownership.addr != address(0)) {
return ownership;
}
// Invariant:
// There will always be an ownership that has an address and is not burned
// before an ownership that does not have an address and is not burned.
// Hence, curr will not underflow.
while (true) {
curr--;
ownership = _ownerships[curr];
if (ownership.addr != address(0)) {
return ownership;
}
}
}
}
}
revert OwnerQueryForNonexistentToken();
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view override returns (address) {
return _ownershipOf(tokenId).addr;
}
/**
* @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) {
if (!_exists(tokenId)) revert URIQueryForNonexistentToken();
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 overriden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return '';
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public override {
address owner = ERC721A.ownerOf(tokenId);
if (to == owner) revert ApprovalToCurrentOwner();
if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) {
revert ApprovalCallerNotOwnerNorApproved();
}
_approve(to, tokenId, owner);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view override returns (address) {
if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
if (operator == _msgSender()) revert ApproveToCaller();
_operatorApprovals[_msgSender()][operator] = approved;
emit ApprovalForAll(_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 {
_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 {
_transfer(from, to, tokenId);
if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) {
revert TransferToNonERC721ReceiverImplementer();
}
}
/**
* @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`),
*/
function _exists(uint256 tokenId) internal view returns (bool) {
return _startTokenId() <= tokenId && tokenId < _currentIndex &&
!_ownerships[tokenId].burned;
}
function _safeMint(address to, uint256 quantity) internal {
_safeMint(to, quantity, '');
}
/**
* @dev Safely mints `quantity` tokens and transfers them to `to`.
*
* Requirements:
*
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
* - `quantity` must be greater than 0.
*
* Emits a {Transfer} event.
*/
function _safeMint(
address to,
uint256 quantity,
bytes memory _data
) internal {
_mint(to, quantity, _data, true);
}
/**
* @dev Mints `quantity` tokens and transfers them to `to`.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `quantity` must be greater than 0.
*
* Emits a {Transfer} event.
*/
function _mint(
address to,
uint256 quantity,
bytes memory _data,
bool safe
) internal {
uint256 startTokenId = _currentIndex;
if (to == address(0)) revert MintToZeroAddress();
if (quantity == 0) revert MintZeroQuantity();
_beforeTokenTransfers(address(0), to, startTokenId, quantity);
// Overflows are incredibly unrealistic.
// balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
// updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
unchecked {
_addressData[to].balance += uint64(quantity);
_addressData[to].numberMinted += uint64(quantity);
_ownerships[startTokenId].addr = to;
_ownerships[startTokenId].startTimestamp = uint64(block.timestamp);
uint256 updatedIndex = startTokenId;
uint256 end = updatedIndex + quantity;
if (safe && to.isContract()) {
do {
emit Transfer(address(0), to, updatedIndex);
if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
revert TransferToNonERC721ReceiverImplementer();
}
} while (updatedIndex != end);
// Reentrancy protection
if (_currentIndex != startTokenId) revert();
} else {
do {
emit Transfer(address(0), to, updatedIndex++);
} while (updatedIndex != end);
}
_currentIndex = updatedIndex;
}
_afterTokenTransfers(address(0), to, startTokenId, quantity);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
*
* 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
) private {
TokenOwnership memory prevOwnership = _ownershipOf(tokenId);
if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();
bool isApprovedOrOwner = (_msgSender() == from ||
isApprovedForAll(from, _msgSender()) ||
getApproved(tokenId) == _msgSender());
if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
if (to == address(0)) revert TransferToZeroAddress();
_beforeTokenTransfers(from, to, tokenId, 1);
// Clear approvals from the previous owner
_approve(address(0), tokenId, from);
// Underflow of the sender's balance is impossible because we check for
// ownership above and the recipient's balance can't realistically overflow.
// Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
unchecked {
_addressData[from].balance -= 1;
_addressData[to].balance += 1;
TokenOwnership storage currSlot = _ownerships[tokenId];
currSlot.addr = to;
currSlot.startTimestamp = uint64(block.timestamp);
// If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
// Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
uint256 nextTokenId = tokenId + 1;
TokenOwnership storage nextSlot = _ownerships[nextTokenId];
if (nextSlot.addr == address(0)) {
// This will suffice for checking _exists(nextTokenId),
// as a burned slot cannot contain the zero address.
if (nextTokenId != _currentIndex) {
nextSlot.addr = from;
nextSlot.startTimestamp = prevOwnership.startTimestamp;
}
}
}
emit Transfer(from, to, tokenId);
_afterTokenTransfers(from, to, tokenId, 1);
}
/**
* @dev This is equivalent to _burn(tokenId, false)
*/
function _burn(uint256 tokenId) internal virtual {
_burn(tokenId, false);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
TokenOwnership memory prevOwnership = _ownershipOf(tokenId);
address from = prevOwnership.addr;
if (approvalCheck) {
bool isApprovedOrOwner = (_msgSender() == from ||
isApprovedForAll(from, _msgSender()) ||
getApproved(tokenId) == _msgSender());
if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
}
_beforeTokenTransfers(from, address(0), tokenId, 1);
// Clear approvals from the previous owner
_approve(address(0), tokenId, from);
// Underflow of the sender's balance is impossible because we check for
// ownership above and the recipient's balance can't realistically overflow.
// Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
unchecked {
AddressData storage addressData = _addressData[from];
addressData.balance -= 1;
addressData.numberBurned += 1;
// Keep track of who burned the token, and the timestamp of burning.
TokenOwnership storage currSlot = _ownerships[tokenId];
currSlot.addr = from;
currSlot.startTimestamp = uint64(block.timestamp);
currSlot.burned = true;
// If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
// Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
uint256 nextTokenId = tokenId + 1;
TokenOwnership storage nextSlot = _ownerships[nextTokenId];
if (nextSlot.addr == address(0)) {
// This will suffice for checking _exists(nextTokenId),
// as a burned slot cannot contain the zero address.
if (nextTokenId != _currentIndex) {
nextSlot.addr = from;
nextSlot.startTimestamp = prevOwnership.startTimestamp;
}
}
}
emit Transfer(from, address(0), tokenId);
_afterTokenTransfers(from, address(0), tokenId, 1);
// Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
unchecked {
_burnCounter++;
}
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits a {Approval} event.
*/
function _approve(
address to,
uint256 tokenId,
address owner
) private {
_tokenApprovals[tokenId] = to;
emit Approval(owner, to, tokenId);
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private returns (bool) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
return retval == IERC721Receiver(to).onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert TransferToNonERC721ReceiverImplementer();
} else {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
}
/**
* @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
* And also called before burning one token.
*
* startTokenId - the first token id to be transferred
* quantity - the amount to be transferred
*
* 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, `tokenId` will be burned by `from`.
* - `from` and `to` are never both zero.
*/
function _beforeTokenTransfers(
address from,
address to,
uint256 startTokenId,
uint256 quantity
) internal virtual {}
/**
* @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
* minting.
* And also called after one token has been burned.
*
* startTokenId - the first token id to be transferred
* quantity - the amount to be transferred
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
* transferred to `to`.
* - When `from` is zero, `tokenId` has been minted for `to`.
* - When `to` is zero, `tokenId` has been burned by `from`.
* - `from` and `to` are never both zero.
*/
function _afterTokenTransfers(
address from,
address to,
uint256 startTokenId,
uint256 quantity
) internal virtual {}
}
pragma solidity ^0.8.0;
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 Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
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);
}
}
// *******************************************//
// Addled NFT Contract is ERC-721A Contract
/*Developer Info:
Written by Meraj Bugti Blockchain Developer @ www.themetaconcepts.com
Email: iintadeveloper@gmail.com */
pragma solidity ^0.8.7;
contract AddledCroc is ERC721A, Ownable {
using Strings for uint256;
//max supply is set to 10000
uint16 public constant maxSupply = 10000;
// uriPrefix is the BaseUri
string private uriPrefix ;
string private uriSuffix = ".json";
string public hiddenURL ;
//cost for Pulic Mint and Presale Mint
uint256 public publicSaleCost = 0.08 ether;
uint256 public preSaleCost = 0.05 ether;
// Max MintAmount per Tx for Public sale
uint8 public maxMintAmountPerTxInPublicSale = 10;
// Max MintAmount Per tx for Pre-sale
uint8 public maxMintAmountPerTxPresale = 3;
// Pre-sale is active and Public sale is Paused
bool public publicSalePaused = true;
bool public preSalePaused = false;
//Collection is set revlead
bool public reveal =true;
uint16 counter;
// Name & Symbol of Project in Constructor
constructor() ERC721A("Addled Crocodiles", "AddledCroc") {}
// Function Pre-sale mint, Presale Limit is 4000
//Contract will pause once 4000 tokens are minted
function presaleMint(uint16 _mintAmount) external payable {
uint16 totalSupply = uint16(totalSupply());
require(totalSupply + _mintAmount <= maxSupply, "Excedes maximum mint Allowed Per tx supply.");
require(_mintAmount <= maxMintAmountPerTxPresale, "Exceeds max Allowed per transaction.");
require(!preSalePaused, "The contract is paused!");
require(msg.value == preSaleCost * _mintAmount, "Insufficient funds!");
_safeMint(msg.sender , _mintAmount);
counter = counter + _mintAmount ;
// preSale will be automatically paused after 4000 NFTs are minted in this phase
if ( counter >= 4000)
{
preSalePaused = true;
counter = 0;
}
delete totalSupply;
delete _mintAmount;
}
// Function for Public Mint
function publicMint(uint16 _mintAmount) external payable {
uint16 totalSupply = uint16(totalSupply());
require(totalSupply + _mintAmount <= maxSupply, "Excedes max supply.");
require(_mintAmount <= maxMintAmountPerTxInPublicSale, "Exceeds Allowed mint Amount per transaction.");
require(!publicSalePaused, "The contract is paused!");
require(msg.value == publicSaleCost * _mintAmount, "Insufficient funds!");
_safeMint(msg.sender , _mintAmount);
delete totalSupply;
delete _mintAmount;
}
// Function can be used to reserve Tokens
function Reserve(uint16 _mintAmount, address _receiver) external onlyOwner {
uint16 totalSupply = uint16(totalSupply());
require(totalSupply + _mintAmount <= maxSupply, "Excedes max supply.");
_safeMint(_receiver , _mintAmount);
delete _mintAmount;
delete _receiver;
delete totalSupply;
}
// Function Airdrop
function Airdrop(uint16 _mintAmount, address _receiver) external onlyOwner {
uint16 totalSupply = uint16(totalSupply());
require(totalSupply + _mintAmount <= maxSupply, "Excedes max supply.");
_safeMint(_receiver , _mintAmount);
delete _mintAmount;
delete _receiver;
delete totalSupply;
}
// Function Burn Tokens
function burn(uint _tokenID) external onlyOwner {
_burn(_tokenID);
}
function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) {
require(_exists(_tokenId),"ERC721Metadata: URI query for nonexistent token");
if ( reveal == false){
return hiddenURL;
}
string memory currentBaseURI = _baseURI();
return bytes(currentBaseURI).length > 0
? string(abi.encodePacked(currentBaseURI, _tokenId.toString() ,uriSuffix))
: "";
}
function setPreSalePaused() external onlyOwner {
preSalePaused = !preSalePaused;
counter = 0;
}
function setPublicSalePaused() external onlyOwner {
publicSalePaused= !publicSalePaused;
preSalePaused = true;
counter = 0;
}
function setPresaleCost(uint256 _cost) external onlyOwner {
preSaleCost = _cost;
delete _cost;
}
function setPublicSaleCost(uint256 _cost) external onlyOwner {
publicSaleCost = _cost;
delete _cost;
}
function setMaxMintPerTxPresale(uint8 _limit) external onlyOwner{
maxMintAmountPerTxPresale = _limit;
delete _limit;
}
function setMaxMintPerTxInPublicSale(uint8 _limit) external onlyOwner{
maxMintAmountPerTxInPublicSale = _limit;
delete _limit;
}
function setBaseURI(string memory _uriPrefix) external onlyOwner {
uriPrefix = _uriPrefix;
}
function setHiddenUri(string memory _uriPrefix) external onlyOwner {
hiddenURL = _uriPrefix;
}
function _baseURI() internal view override returns (string memory) {
return uriPrefix;
}
function setRevealed() external onlyOwner{
reveal = !reveal;
}
function withdraw() external onlyOwner {
uint _balance = address(this).balance;
payable(msg.sender).transfer(_balance );
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"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":[{"internalType":"uint16","name":"_mintAmount","type":"uint16"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"Airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_mintAmount","type":"uint16"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"Reserve","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"_tokenID","type":"uint256"}],"name":"burn","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":[],"name":"hiddenURL","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"maxMintAmountPerTxInPublicSale","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTxPresale","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"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":"preSaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSalePaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_mintAmount","type":"uint16"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_mintAmount","type":"uint16"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicSaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSalePaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","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":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setHiddenUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_limit","type":"uint8"}],"name":"setMaxMintPerTxInPublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_limit","type":"uint8"}],"name":"setMaxMintPerTxPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPreSalePaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setPresaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setPublicSaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPublicSalePaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setRevealed","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":[{"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
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600a908051906020019062000051929190620002af565b5067011c37937e080000600c5566b1a2bc2ec50000600d55600a600e60006101000a81548160ff021916908360ff1602179055506003600e60016101000a81548160ff021916908360ff1602179055506001600e60026101000a81548160ff0219169083151502179055506000600e60036101000a81548160ff0219169083151502179055506001600e60046101000a81548160ff021916908315150217905550348015620000ff57600080fd5b506040518060400160405280601181526020017f4164646c65642043726f636f64696c65730000000000000000000000000000008152506040518060400160405280600a81526020017f4164646c656443726f6300000000000000000000000000000000000000000000815250816002908051906020019062000184929190620002af565b5080600390805190602001906200019d929190620002af565b50620001ae620001dc60201b60201c565b6000819055505050620001d6620001ca620001e160201b60201c565b620001e960201b60201c565b620003c4565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002bd906200035f565b90600052602060002090601f016020900481019282620002e157600085556200032d565b82601f10620002fc57805160ff19168380011785556200032d565b828001600101855582156200032d579182015b828111156200032c5782518255916020019190600101906200030f565b5b5090506200033c919062000340565b5090565b5b808211156200035b57600081600090555060010162000341565b5090565b600060028204905060018216806200037857607f821691505b602082108114156200038f576200038e62000395565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61482a80620003d46000396000f3fe6080604052600436106102465760003560e01c8063715018a611610139578063b09c9734116100b6578063d5abeb011161007a578063d5abeb01146107f7578063e985e9c514610822578063eef440af1461085f578063f2fde38b1461088a578063f607cc4c146108b3578063fc525650146108cf57610246565b8063b09c97341461071f578063b88d4fde1461073b578063c34b289d14610764578063c87b56dd1461078f578063cc9ff9c6146107cc57610246565b8063900eb6d7116100fd578063900eb6d71461064e57806395d89b411461067757806399f517c2146106a2578063a22cb465146106cb578063a475b5dd146106f457610246565b8063715018a6146105a3578063886a12c7146105ba5780638da5cb5b146105d15780638dbb7c06146105fc5780638fdcf9421461062557610246565b80633ccfd60b116101c7578063453afb0f1161018b578063453afb0f146104aa5780634b9e539c146104d557806355f804b3146105005780636352211e1461052957806370a082311461056657610246565b80633ccfd60b146104015780633dd07f6b146104185780633fab89e41461042f57806342842e0e1461045857806342966c681461048157610246565b80631067fcc71161020e5780631067fcc71461034457806318160ddd1461036d57806323b872dd146103985780632f6f98e1146103c15780633bd64968146103ea57610246565b806301ffc9a71461024b578063069cd5731461028857806306fdde03146102b3578063081812fc146102de578063095ea7b31461031b575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906139f9565b6108fa565b60405161027f9190613ea3565b60405180910390f35b34801561029457600080fd5b5061029d6109dc565b6040516102aa9190613ea3565b60405180910390f35b3480156102bf57600080fd5b506102c86109ef565b6040516102d59190613ebe565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190613b09565b610a81565b6040516103129190613e3c565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d91906139b9565b610afd565b005b34801561035057600080fd5b5061036b60048036038101906103669190613a53565b610c08565b005b34801561037957600080fd5b50610382610c9e565b60405161038f919061401b565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba91906138a3565b610cb5565b005b3480156103cd57600080fd5b506103e860048036038101906103e39190613ac9565b610cc5565b005b3480156103f657600080fd5b506103ff610dc4565b005b34801561040d57600080fd5b50610416610e6c565b005b34801561042457600080fd5b5061042d610f37565b005b34801561043b57600080fd5b5061045660048036038101906104519190613b36565b611018565b005b34801561046457600080fd5b5061047f600480360381019061047a91906138a3565b6110b6565b005b34801561048d57600080fd5b506104a860048036038101906104a39190613b09565b6110d6565b005b3480156104b657600080fd5b506104bf61115e565b6040516104cc919061401b565b60405180910390f35b3480156104e157600080fd5b506104ea611164565b6040516104f79190614036565b60405180910390f35b34801561050c57600080fd5b5061052760048036038101906105229190613a53565b611177565b005b34801561053557600080fd5b50610550600480360381019061054b9190613b09565b61120d565b60405161055d9190613e3c565b60405180910390f35b34801561057257600080fd5b5061058d60048036038101906105889190613836565b611223565b60405161059a919061401b565b60405180910390f35b3480156105af57600080fd5b506105b86112f3565b005b3480156105c657600080fd5b506105cf61137b565b005b3480156105dd57600080fd5b506105e6611441565b6040516105f39190613e3c565b60405180910390f35b34801561060857600080fd5b50610623600480360381019061061e9190613b09565b61146b565b005b34801561063157600080fd5b5061064c60048036038101906106479190613b09565b6114f5565b005b34801561065a57600080fd5b5061067560048036038101906106709190613b36565b61157f565b005b34801561068357600080fd5b5061068c61161d565b6040516106999190613ebe565b60405180910390f35b3480156106ae57600080fd5b506106c960048036038101906106c49190613ac9565b6116af565b005b3480156106d757600080fd5b506106f260048036038101906106ed9190613979565b6117ae565b005b34801561070057600080fd5b50610709611926565b6040516107169190613ea3565b60405180910390f35b61073960048036038101906107349190613a9c565b611939565b005b34801561074757600080fd5b50610762600480360381019061075d91906138f6565b611b42565b005b34801561077057600080fd5b50610779611bbe565b6040516107869190613ea3565b60405180910390f35b34801561079b57600080fd5b506107b660048036038101906107b19190613b09565b611bd1565b6040516107c39190613ebe565b60405180910390f35b3480156107d857600080fd5b506107e1611d2a565b6040516107ee919061401b565b60405180910390f35b34801561080357600080fd5b5061080c611d30565b6040516108199190614000565b60405180910390f35b34801561082e57600080fd5b5061084960048036038101906108449190613863565b611d36565b6040516108569190613ea3565b60405180910390f35b34801561086b57600080fd5b50610874611dca565b6040516108819190613ebe565b60405180910390f35b34801561089657600080fd5b506108b160048036038101906108ac9190613836565b611e58565b005b6108cd60048036038101906108c89190613a9c565b611f50565b005b3480156108db57600080fd5b506108e46120ca565b6040516108f19190614036565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109d557506109d4826120dd565b5b9050919050565b600e60029054906101000a900460ff1681565b6060600280546109fe9061434e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2a9061434e565b8015610a775780601f10610a4c57610100808354040283529160200191610a77565b820191906000526020600020905b815481529060010190602001808311610a5a57829003601f168201915b5050505050905090565b6000610a8c82612147565b610ac2576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b088261120d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b70576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b8f612195565b73ffffffffffffffffffffffffffffffffffffffff1614158015610bc15750610bbf81610bba612195565b611d36565b155b15610bf8576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c0383838361219d565b505050565b610c10612195565b73ffffffffffffffffffffffffffffffffffffffff16610c2e611441565b73ffffffffffffffffffffffffffffffffffffffff1614610c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7b90613f40565b60405180910390fd5b80600b9080519060200190610c9a9291906135dd565b5050565b6000610ca861224f565b6001546000540303905090565b610cc0838383612254565b505050565b610ccd612195565b73ffffffffffffffffffffffffffffffffffffffff16610ceb611441565b73ffffffffffffffffffffffffffffffffffffffff1614610d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3890613f40565b60405180910390fd5b6000610d4b610c9e565b905061271061ffff168382610d609190614130565b61ffff161115610da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9c90613ee0565b60405180910390fd5b610db3828461ffff1661270a565b600092506000915060009050505050565b610dcc612195565b73ffffffffffffffffffffffffffffffffffffffff16610dea611441565b73ffffffffffffffffffffffffffffffffffffffff1614610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3790613f40565b60405180910390fd5b600e60049054906101000a900460ff1615600e60046101000a81548160ff021916908315150217905550565b610e74612195565b73ffffffffffffffffffffffffffffffffffffffff16610e92611441565b73ffffffffffffffffffffffffffffffffffffffff1614610ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edf90613f40565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f33573d6000803e3d6000fd5b5050565b610f3f612195565b73ffffffffffffffffffffffffffffffffffffffff16610f5d611441565b73ffffffffffffffffffffffffffffffffffffffff1614610fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faa90613f40565b60405180910390fd5b600e60029054906101000a900460ff1615600e60026101000a81548160ff0219169083151502179055506001600e60036101000a81548160ff0219169083151502179055506000600e60056101000a81548161ffff021916908361ffff160217905550565b611020612195565b73ffffffffffffffffffffffffffffffffffffffff1661103e611441565b73ffffffffffffffffffffffffffffffffffffffff1614611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108b90613f40565b60405180910390fd5b80600e60016101000a81548160ff021916908360ff1602179055506000905050565b6110d183838360405180602001604052806000815250611b42565b505050565b6110de612195565b73ffffffffffffffffffffffffffffffffffffffff166110fc611441565b73ffffffffffffffffffffffffffffffffffffffff1614611152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114990613f40565b60405180910390fd5b61115b81612728565b50565b600c5481565b600e60019054906101000a900460ff1681565b61117f612195565b73ffffffffffffffffffffffffffffffffffffffff1661119d611441565b73ffffffffffffffffffffffffffffffffffffffff16146111f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ea90613f40565b60405180910390fd5b80600990805190602001906112099291906135dd565b5050565b600061121882612736565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561128b576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6112fb612195565b73ffffffffffffffffffffffffffffffffffffffff16611319611441565b73ffffffffffffffffffffffffffffffffffffffff161461136f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136690613f40565b60405180910390fd5b61137960006129c5565b565b611383612195565b73ffffffffffffffffffffffffffffffffffffffff166113a1611441565b73ffffffffffffffffffffffffffffffffffffffff16146113f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ee90613f40565b60405180910390fd5b600e60039054906101000a900460ff1615600e60036101000a81548160ff0219169083151502179055506000600e60056101000a81548161ffff021916908361ffff160217905550565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611473612195565b73ffffffffffffffffffffffffffffffffffffffff16611491611441565b73ffffffffffffffffffffffffffffffffffffffff16146114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de90613f40565b60405180910390fd5b80600c819055506000905050565b6114fd612195565b73ffffffffffffffffffffffffffffffffffffffff1661151b611441565b73ffffffffffffffffffffffffffffffffffffffff1614611571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156890613f40565b60405180910390fd5b80600d819055506000905050565b611587612195565b73ffffffffffffffffffffffffffffffffffffffff166115a5611441565b73ffffffffffffffffffffffffffffffffffffffff16146115fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f290613f40565b60405180910390fd5b80600e60006101000a81548160ff021916908360ff1602179055506000905050565b60606003805461162c9061434e565b80601f01602080910402602001604051908101604052809291908181526020018280546116589061434e565b80156116a55780601f1061167a576101008083540402835291602001916116a5565b820191906000526020600020905b81548152906001019060200180831161168857829003601f168201915b5050505050905090565b6116b7612195565b73ffffffffffffffffffffffffffffffffffffffff166116d5611441565b73ffffffffffffffffffffffffffffffffffffffff161461172b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172290613f40565b60405180910390fd5b6000611735610c9e565b905061271061ffff16838261174a9190614130565b61ffff16111561178f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178690613ee0565b60405180910390fd5b61179d828461ffff1661270a565b600092506000915060009050505050565b6117b6612195565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561181b576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611828612195565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118d5612195565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161191a9190613ea3565b60405180910390a35050565b600e60049054906101000a900460ff1681565b6000611943610c9e565b905061271061ffff1682826119589190614130565b61ffff16111561199d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199490613fa0565b60405180910390fd5b600e60019054906101000a900460ff1660ff168261ffff1611156119f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ed90613fc0565b60405180910390fd5b600e60039054906101000a900460ff1615611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3d90613f60565b60405180910390fd5b8161ffff16600d54611a5891906141ef565b3414611a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9090613fe0565b60405180910390fd5b611aa7338361ffff1661270a565b81600e60059054906101000a900461ffff16611ac39190614130565b600e60056101000a81548161ffff021916908361ffff160217905550610fa0600e60059054906101000a900461ffff1661ffff1610611b36576001600e60036101000a81548160ff0219169083151502179055506000600e60056101000a81548161ffff021916908361ffff1602179055505b60009050600091505050565b611b4d848484612254565b611b6c8373ffffffffffffffffffffffffffffffffffffffff16612a8b565b8015611b815750611b7f84848484612aae565b155b15611bb8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600e60039054906101000a900460ff1681565b6060611bdc82612147565b611c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1290613f80565b60405180910390fd5b60001515600e60049054906101000a900460ff1615151415611cc957600b8054611c449061434e565b80601f0160208091040260200160405190810160405280929190818152602001828054611c709061434e565b8015611cbd5780601f10611c9257610100808354040283529160200191611cbd565b820191906000526020600020905b815481529060010190602001808311611ca057829003601f168201915b50505050509050611d25565b6000611cd3612c0e565b90506000815111611cf35760405180602001604052806000815250611d21565b80611cfd84612ca0565b600a604051602001611d1193929190613e0b565b6040516020818303038152906040525b9150505b919050565b600d5481565b61271081565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600b8054611dd79061434e565b80601f0160208091040260200160405190810160405280929190818152602001828054611e039061434e565b8015611e505780601f10611e2557610100808354040283529160200191611e50565b820191906000526020600020905b815481529060010190602001808311611e3357829003601f168201915b505050505081565b611e60612195565b73ffffffffffffffffffffffffffffffffffffffff16611e7e611441565b73ffffffffffffffffffffffffffffffffffffffff1614611ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecb90613f40565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b90613f20565b60405180910390fd5b611f4d816129c5565b50565b6000611f5a610c9e565b905061271061ffff168282611f6f9190614130565b61ffff161115611fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fab90613ee0565b60405180910390fd5b600e60009054906101000a900460ff1660ff168261ffff16111561200d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200490613f00565b60405180910390fd5b600e60029054906101000a900460ff161561205d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205490613f60565b60405180910390fd5b8161ffff16600c5461206f91906141ef565b34146120b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a790613fe0565b60405180910390fd5b6120be338361ffff1661270a565b60009050600091505050565b600e60009054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161215261224f565b11158015612161575060005482105b801561218e575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b600061225f82612736565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146122ca576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166122eb612195565b73ffffffffffffffffffffffffffffffffffffffff16148061231a575061231985612314612195565b611d36565b5b8061235f5750612328612195565b73ffffffffffffffffffffffffffffffffffffffff1661234784610a81565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612398576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156123ff576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61240c8585856001612e01565b6124186000848761219d565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561269857600054821461269757878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127038585856001612e07565b5050505050565b612724828260405180602001604052806000815250612e0d565b5050565b612733816000612e1f565b50565b61273e613663565b60008290508061274c61224f565b1115801561275b575060005481105b1561298e576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161298c57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146128705780925050506129c0565b5b60011561298b57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146129865780925050506129c0565b612871565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ad4612195565b8786866040518563ffffffff1660e01b8152600401612af69493929190613e57565b602060405180830381600087803b158015612b1057600080fd5b505af1925050508015612b4157506040513d601f19601f82011682018060405250810190612b3e9190613a26565b60015b612bbb573d8060008114612b71576040519150601f19603f3d011682016040523d82523d6000602084013e612b76565b606091505b50600081511415612bb3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060098054612c1d9061434e565b80601f0160208091040260200160405190810160405280929190818152602001828054612c499061434e565b8015612c965780601f10612c6b57610100808354040283529160200191612c96565b820191906000526020600020905b815481529060010190602001808311612c7957829003601f168201915b5050505050905090565b60606000821415612ce8576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612dfc565b600082905060005b60008214612d1a578080612d03906143b1565b915050600a82612d1391906141be565b9150612cf0565b60008167ffffffffffffffff811115612d3657612d356144e7565b5b6040519080825280601f01601f191660200182016040528015612d685781602001600182028036833780820191505090505b5090505b60008514612df557600182612d819190614249565b9150600a85612d9091906143fa565b6030612d9c9190614168565b60f81b818381518110612db257612db16144b8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612dee91906141be565b9450612d6c565b8093505050505b919050565b50505050565b50505050565b612e1a838383600161320f565b505050565b6000612e2a83612736565b90506000816000015190508215612f0b5760008173ffffffffffffffffffffffffffffffffffffffff16612e5c612195565b73ffffffffffffffffffffffffffffffffffffffff161480612e8b5750612e8a82612e85612195565b611d36565b5b80612ed05750612e99612195565b73ffffffffffffffffffffffffffffffffffffffff16612eb886610a81565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612f09576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b612f19816000866001612e01565b612f256000858361219d565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018160000160108282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008781526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600181600001601c6101000a81548160ff02191690831515021790555060006001870190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561318957600054821461318857848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b5050505083600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46131f7816000866001612e07565b60016000815480929190600101919050555050505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561327c576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008414156132b7576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132c46000868387612e01565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561348e575061348d8773ffffffffffffffffffffffffffffffffffffffff16612a8b565b5b15613554575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135036000888480600101955088612aae565b613539576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082141561349457826000541461354f57600080fd5b6135c0565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613555575b8160008190555050506135d66000868387612e07565b5050505050565b8280546135e99061434e565b90600052602060002090601f01602090048101928261360b5760008555613652565b82601f1061362457805160ff1916838001178555613652565b82800160010185558215613652579182015b82811115613651578251825591602001919060010190613636565b5b50905061365f91906136a6565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156136bf5760008160009055506001016136a7565b5090565b60006136d66136d184614076565b614051565b9050828152602081018484840111156136f2576136f161451b565b5b6136fd84828561430c565b509392505050565b6000613718613713846140a7565b614051565b9050828152602081018484840111156137345761373361451b565b5b61373f84828561430c565b509392505050565b6000813590506137568161476a565b92915050565b60008135905061376b81614781565b92915050565b60008135905061378081614798565b92915050565b60008151905061379581614798565b92915050565b600082601f8301126137b0576137af614516565b5b81356137c08482602086016136c3565b91505092915050565b600082601f8301126137de576137dd614516565b5b81356137ee848260208601613705565b91505092915050565b600081359050613806816147af565b92915050565b60008135905061381b816147c6565b92915050565b600081359050613830816147dd565b92915050565b60006020828403121561384c5761384b614525565b5b600061385a84828501613747565b91505092915050565b6000806040838503121561387a57613879614525565b5b600061388885828601613747565b925050602061389985828601613747565b9150509250929050565b6000806000606084860312156138bc576138bb614525565b5b60006138ca86828701613747565b93505060206138db86828701613747565b92505060406138ec8682870161380c565b9150509250925092565b600080600080608085870312156139105761390f614525565b5b600061391e87828801613747565b945050602061392f87828801613747565b93505060406139408782880161380c565b925050606085013567ffffffffffffffff81111561396157613960614520565b5b61396d8782880161379b565b91505092959194509250565b600080604083850312156139905761398f614525565b5b600061399e85828601613747565b92505060206139af8582860161375c565b9150509250929050565b600080604083850312156139d0576139cf614525565b5b60006139de85828601613747565b92505060206139ef8582860161380c565b9150509250929050565b600060208284031215613a0f57613a0e614525565b5b6000613a1d84828501613771565b91505092915050565b600060208284031215613a3c57613a3b614525565b5b6000613a4a84828501613786565b91505092915050565b600060208284031215613a6957613a68614525565b5b600082013567ffffffffffffffff811115613a8757613a86614520565b5b613a93848285016137c9565b91505092915050565b600060208284031215613ab257613ab1614525565b5b6000613ac0848285016137f7565b91505092915050565b60008060408385031215613ae057613adf614525565b5b6000613aee858286016137f7565b9250506020613aff85828601613747565b9150509250929050565b600060208284031215613b1f57613b1e614525565b5b6000613b2d8482850161380c565b91505092915050565b600060208284031215613b4c57613b4b614525565b5b6000613b5a84828501613821565b91505092915050565b613b6c8161427d565b82525050565b613b7b8161428f565b82525050565b6000613b8c826140ed565b613b968185614103565b9350613ba681856020860161431b565b613baf8161452a565b840191505092915050565b6000613bc5826140f8565b613bcf8185614114565b9350613bdf81856020860161431b565b613be88161452a565b840191505092915050565b6000613bfe826140f8565b613c088185614125565b9350613c1881856020860161431b565b80840191505092915050565b60008154613c318161434e565b613c3b8186614125565b94506001821660008114613c565760018114613c6757613c9a565b60ff19831686528186019350613c9a565b613c70856140d8565b60005b83811015613c9257815481890152600182019150602081019050613c73565b838801955050505b50505092915050565b6000613cb0601383614114565b9150613cbb8261453b565b602082019050919050565b6000613cd3602c83614114565b9150613cde82614564565b604082019050919050565b6000613cf6602683614114565b9150613d01826145b3565b604082019050919050565b6000613d19602083614114565b9150613d2482614602565b602082019050919050565b6000613d3c601783614114565b9150613d478261462b565b602082019050919050565b6000613d5f602f83614114565b9150613d6a82614654565b604082019050919050565b6000613d82602b83614114565b9150613d8d826146a3565b604082019050919050565b6000613da5602483614114565b9150613db0826146f2565b604082019050919050565b6000613dc8601383614114565b9150613dd382614741565b602082019050919050565b613de7816142c7565b82525050565b613df6816142f5565b82525050565b613e05816142ff565b82525050565b6000613e178286613bf3565b9150613e238285613bf3565b9150613e2f8284613c24565b9150819050949350505050565b6000602082019050613e516000830184613b63565b92915050565b6000608082019050613e6c6000830187613b63565b613e796020830186613b63565b613e866040830185613ded565b8181036060830152613e988184613b81565b905095945050505050565b6000602082019050613eb86000830184613b72565b92915050565b60006020820190508181036000830152613ed88184613bba565b905092915050565b60006020820190508181036000830152613ef981613ca3565b9050919050565b60006020820190508181036000830152613f1981613cc6565b9050919050565b60006020820190508181036000830152613f3981613ce9565b9050919050565b60006020820190508181036000830152613f5981613d0c565b9050919050565b60006020820190508181036000830152613f7981613d2f565b9050919050565b60006020820190508181036000830152613f9981613d52565b9050919050565b60006020820190508181036000830152613fb981613d75565b9050919050565b60006020820190508181036000830152613fd981613d98565b9050919050565b60006020820190508181036000830152613ff981613dbb565b9050919050565b60006020820190506140156000830184613dde565b92915050565b60006020820190506140306000830184613ded565b92915050565b600060208201905061404b6000830184613dfc565b92915050565b600061405b61406c565b90506140678282614380565b919050565b6000604051905090565b600067ffffffffffffffff821115614091576140906144e7565b5b61409a8261452a565b9050602081019050919050565b600067ffffffffffffffff8211156140c2576140c16144e7565b5b6140cb8261452a565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061413b826142c7565b9150614146836142c7565b92508261ffff0382111561415d5761415c61442b565b5b828201905092915050565b6000614173826142f5565b915061417e836142f5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141b3576141b261442b565b5b828201905092915050565b60006141c9826142f5565b91506141d4836142f5565b9250826141e4576141e361445a565b5b828204905092915050565b60006141fa826142f5565b9150614205836142f5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561423e5761423d61442b565b5b828202905092915050565b6000614254826142f5565b915061425f836142f5565b9250828210156142725761427161442b565b5b828203905092915050565b6000614288826142d5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561433957808201518184015260208101905061431e565b83811115614348576000848401525b50505050565b6000600282049050600182168061436657607f821691505b6020821081141561437a57614379614489565b5b50919050565b6143898261452a565b810181811067ffffffffffffffff821117156143a8576143a76144e7565b5b80604052505050565b60006143bc826142f5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143ef576143ee61442b565b5b600182019050919050565b6000614405826142f5565b9150614410836142f5565b9250826144205761441f61445a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45786365646573206d617820737570706c792e00000000000000000000000000600082015250565b7f4578636565647320416c6c6f776564206d696e7420416d6f756e74207065722060008201527f7472616e73616374696f6e2e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f45786365646573206d6178696d756d206d696e7420416c6c6f7765642050657260008201527f20747820737570706c792e000000000000000000000000000000000000000000602082015250565b7f45786365656473206d617820416c6c6f77656420706572207472616e7361637460008201527f696f6e2e00000000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b6147738161427d565b811461477e57600080fd5b50565b61478a8161428f565b811461479557600080fd5b50565b6147a18161429b565b81146147ac57600080fd5b50565b6147b8816142c7565b81146147c357600080fd5b50565b6147cf816142f5565b81146147da57600080fd5b50565b6147e6816142ff565b81146147f157600080fd5b5056fea264697066735822122018367513ed18151724bd3b58b1c3f2d593224c4b540a9d008f454fb21f343d0064736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102465760003560e01c8063715018a611610139578063b09c9734116100b6578063d5abeb011161007a578063d5abeb01146107f7578063e985e9c514610822578063eef440af1461085f578063f2fde38b1461088a578063f607cc4c146108b3578063fc525650146108cf57610246565b8063b09c97341461071f578063b88d4fde1461073b578063c34b289d14610764578063c87b56dd1461078f578063cc9ff9c6146107cc57610246565b8063900eb6d7116100fd578063900eb6d71461064e57806395d89b411461067757806399f517c2146106a2578063a22cb465146106cb578063a475b5dd146106f457610246565b8063715018a6146105a3578063886a12c7146105ba5780638da5cb5b146105d15780638dbb7c06146105fc5780638fdcf9421461062557610246565b80633ccfd60b116101c7578063453afb0f1161018b578063453afb0f146104aa5780634b9e539c146104d557806355f804b3146105005780636352211e1461052957806370a082311461056657610246565b80633ccfd60b146104015780633dd07f6b146104185780633fab89e41461042f57806342842e0e1461045857806342966c681461048157610246565b80631067fcc71161020e5780631067fcc71461034457806318160ddd1461036d57806323b872dd146103985780632f6f98e1146103c15780633bd64968146103ea57610246565b806301ffc9a71461024b578063069cd5731461028857806306fdde03146102b3578063081812fc146102de578063095ea7b31461031b575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906139f9565b6108fa565b60405161027f9190613ea3565b60405180910390f35b34801561029457600080fd5b5061029d6109dc565b6040516102aa9190613ea3565b60405180910390f35b3480156102bf57600080fd5b506102c86109ef565b6040516102d59190613ebe565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190613b09565b610a81565b6040516103129190613e3c565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d91906139b9565b610afd565b005b34801561035057600080fd5b5061036b60048036038101906103669190613a53565b610c08565b005b34801561037957600080fd5b50610382610c9e565b60405161038f919061401b565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba91906138a3565b610cb5565b005b3480156103cd57600080fd5b506103e860048036038101906103e39190613ac9565b610cc5565b005b3480156103f657600080fd5b506103ff610dc4565b005b34801561040d57600080fd5b50610416610e6c565b005b34801561042457600080fd5b5061042d610f37565b005b34801561043b57600080fd5b5061045660048036038101906104519190613b36565b611018565b005b34801561046457600080fd5b5061047f600480360381019061047a91906138a3565b6110b6565b005b34801561048d57600080fd5b506104a860048036038101906104a39190613b09565b6110d6565b005b3480156104b657600080fd5b506104bf61115e565b6040516104cc919061401b565b60405180910390f35b3480156104e157600080fd5b506104ea611164565b6040516104f79190614036565b60405180910390f35b34801561050c57600080fd5b5061052760048036038101906105229190613a53565b611177565b005b34801561053557600080fd5b50610550600480360381019061054b9190613b09565b61120d565b60405161055d9190613e3c565b60405180910390f35b34801561057257600080fd5b5061058d60048036038101906105889190613836565b611223565b60405161059a919061401b565b60405180910390f35b3480156105af57600080fd5b506105b86112f3565b005b3480156105c657600080fd5b506105cf61137b565b005b3480156105dd57600080fd5b506105e6611441565b6040516105f39190613e3c565b60405180910390f35b34801561060857600080fd5b50610623600480360381019061061e9190613b09565b61146b565b005b34801561063157600080fd5b5061064c60048036038101906106479190613b09565b6114f5565b005b34801561065a57600080fd5b5061067560048036038101906106709190613b36565b61157f565b005b34801561068357600080fd5b5061068c61161d565b6040516106999190613ebe565b60405180910390f35b3480156106ae57600080fd5b506106c960048036038101906106c49190613ac9565b6116af565b005b3480156106d757600080fd5b506106f260048036038101906106ed9190613979565b6117ae565b005b34801561070057600080fd5b50610709611926565b6040516107169190613ea3565b60405180910390f35b61073960048036038101906107349190613a9c565b611939565b005b34801561074757600080fd5b50610762600480360381019061075d91906138f6565b611b42565b005b34801561077057600080fd5b50610779611bbe565b6040516107869190613ea3565b60405180910390f35b34801561079b57600080fd5b506107b660048036038101906107b19190613b09565b611bd1565b6040516107c39190613ebe565b60405180910390f35b3480156107d857600080fd5b506107e1611d2a565b6040516107ee919061401b565b60405180910390f35b34801561080357600080fd5b5061080c611d30565b6040516108199190614000565b60405180910390f35b34801561082e57600080fd5b5061084960048036038101906108449190613863565b611d36565b6040516108569190613ea3565b60405180910390f35b34801561086b57600080fd5b50610874611dca565b6040516108819190613ebe565b60405180910390f35b34801561089657600080fd5b506108b160048036038101906108ac9190613836565b611e58565b005b6108cd60048036038101906108c89190613a9c565b611f50565b005b3480156108db57600080fd5b506108e46120ca565b6040516108f19190614036565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109d557506109d4826120dd565b5b9050919050565b600e60029054906101000a900460ff1681565b6060600280546109fe9061434e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2a9061434e565b8015610a775780601f10610a4c57610100808354040283529160200191610a77565b820191906000526020600020905b815481529060010190602001808311610a5a57829003601f168201915b5050505050905090565b6000610a8c82612147565b610ac2576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b088261120d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b70576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b8f612195565b73ffffffffffffffffffffffffffffffffffffffff1614158015610bc15750610bbf81610bba612195565b611d36565b155b15610bf8576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c0383838361219d565b505050565b610c10612195565b73ffffffffffffffffffffffffffffffffffffffff16610c2e611441565b73ffffffffffffffffffffffffffffffffffffffff1614610c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7b90613f40565b60405180910390fd5b80600b9080519060200190610c9a9291906135dd565b5050565b6000610ca861224f565b6001546000540303905090565b610cc0838383612254565b505050565b610ccd612195565b73ffffffffffffffffffffffffffffffffffffffff16610ceb611441565b73ffffffffffffffffffffffffffffffffffffffff1614610d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3890613f40565b60405180910390fd5b6000610d4b610c9e565b905061271061ffff168382610d609190614130565b61ffff161115610da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9c90613ee0565b60405180910390fd5b610db3828461ffff1661270a565b600092506000915060009050505050565b610dcc612195565b73ffffffffffffffffffffffffffffffffffffffff16610dea611441565b73ffffffffffffffffffffffffffffffffffffffff1614610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3790613f40565b60405180910390fd5b600e60049054906101000a900460ff1615600e60046101000a81548160ff021916908315150217905550565b610e74612195565b73ffffffffffffffffffffffffffffffffffffffff16610e92611441565b73ffffffffffffffffffffffffffffffffffffffff1614610ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edf90613f40565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f33573d6000803e3d6000fd5b5050565b610f3f612195565b73ffffffffffffffffffffffffffffffffffffffff16610f5d611441565b73ffffffffffffffffffffffffffffffffffffffff1614610fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faa90613f40565b60405180910390fd5b600e60029054906101000a900460ff1615600e60026101000a81548160ff0219169083151502179055506001600e60036101000a81548160ff0219169083151502179055506000600e60056101000a81548161ffff021916908361ffff160217905550565b611020612195565b73ffffffffffffffffffffffffffffffffffffffff1661103e611441565b73ffffffffffffffffffffffffffffffffffffffff1614611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108b90613f40565b60405180910390fd5b80600e60016101000a81548160ff021916908360ff1602179055506000905050565b6110d183838360405180602001604052806000815250611b42565b505050565b6110de612195565b73ffffffffffffffffffffffffffffffffffffffff166110fc611441565b73ffffffffffffffffffffffffffffffffffffffff1614611152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114990613f40565b60405180910390fd5b61115b81612728565b50565b600c5481565b600e60019054906101000a900460ff1681565b61117f612195565b73ffffffffffffffffffffffffffffffffffffffff1661119d611441565b73ffffffffffffffffffffffffffffffffffffffff16146111f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ea90613f40565b60405180910390fd5b80600990805190602001906112099291906135dd565b5050565b600061121882612736565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561128b576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6112fb612195565b73ffffffffffffffffffffffffffffffffffffffff16611319611441565b73ffffffffffffffffffffffffffffffffffffffff161461136f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136690613f40565b60405180910390fd5b61137960006129c5565b565b611383612195565b73ffffffffffffffffffffffffffffffffffffffff166113a1611441565b73ffffffffffffffffffffffffffffffffffffffff16146113f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ee90613f40565b60405180910390fd5b600e60039054906101000a900460ff1615600e60036101000a81548160ff0219169083151502179055506000600e60056101000a81548161ffff021916908361ffff160217905550565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611473612195565b73ffffffffffffffffffffffffffffffffffffffff16611491611441565b73ffffffffffffffffffffffffffffffffffffffff16146114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de90613f40565b60405180910390fd5b80600c819055506000905050565b6114fd612195565b73ffffffffffffffffffffffffffffffffffffffff1661151b611441565b73ffffffffffffffffffffffffffffffffffffffff1614611571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156890613f40565b60405180910390fd5b80600d819055506000905050565b611587612195565b73ffffffffffffffffffffffffffffffffffffffff166115a5611441565b73ffffffffffffffffffffffffffffffffffffffff16146115fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f290613f40565b60405180910390fd5b80600e60006101000a81548160ff021916908360ff1602179055506000905050565b60606003805461162c9061434e565b80601f01602080910402602001604051908101604052809291908181526020018280546116589061434e565b80156116a55780601f1061167a576101008083540402835291602001916116a5565b820191906000526020600020905b81548152906001019060200180831161168857829003601f168201915b5050505050905090565b6116b7612195565b73ffffffffffffffffffffffffffffffffffffffff166116d5611441565b73ffffffffffffffffffffffffffffffffffffffff161461172b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172290613f40565b60405180910390fd5b6000611735610c9e565b905061271061ffff16838261174a9190614130565b61ffff16111561178f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178690613ee0565b60405180910390fd5b61179d828461ffff1661270a565b600092506000915060009050505050565b6117b6612195565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561181b576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611828612195565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118d5612195565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161191a9190613ea3565b60405180910390a35050565b600e60049054906101000a900460ff1681565b6000611943610c9e565b905061271061ffff1682826119589190614130565b61ffff16111561199d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199490613fa0565b60405180910390fd5b600e60019054906101000a900460ff1660ff168261ffff1611156119f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ed90613fc0565b60405180910390fd5b600e60039054906101000a900460ff1615611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3d90613f60565b60405180910390fd5b8161ffff16600d54611a5891906141ef565b3414611a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9090613fe0565b60405180910390fd5b611aa7338361ffff1661270a565b81600e60059054906101000a900461ffff16611ac39190614130565b600e60056101000a81548161ffff021916908361ffff160217905550610fa0600e60059054906101000a900461ffff1661ffff1610611b36576001600e60036101000a81548160ff0219169083151502179055506000600e60056101000a81548161ffff021916908361ffff1602179055505b60009050600091505050565b611b4d848484612254565b611b6c8373ffffffffffffffffffffffffffffffffffffffff16612a8b565b8015611b815750611b7f84848484612aae565b155b15611bb8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600e60039054906101000a900460ff1681565b6060611bdc82612147565b611c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1290613f80565b60405180910390fd5b60001515600e60049054906101000a900460ff1615151415611cc957600b8054611c449061434e565b80601f0160208091040260200160405190810160405280929190818152602001828054611c709061434e565b8015611cbd5780601f10611c9257610100808354040283529160200191611cbd565b820191906000526020600020905b815481529060010190602001808311611ca057829003601f168201915b50505050509050611d25565b6000611cd3612c0e565b90506000815111611cf35760405180602001604052806000815250611d21565b80611cfd84612ca0565b600a604051602001611d1193929190613e0b565b6040516020818303038152906040525b9150505b919050565b600d5481565b61271081565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600b8054611dd79061434e565b80601f0160208091040260200160405190810160405280929190818152602001828054611e039061434e565b8015611e505780601f10611e2557610100808354040283529160200191611e50565b820191906000526020600020905b815481529060010190602001808311611e3357829003601f168201915b505050505081565b611e60612195565b73ffffffffffffffffffffffffffffffffffffffff16611e7e611441565b73ffffffffffffffffffffffffffffffffffffffff1614611ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecb90613f40565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b90613f20565b60405180910390fd5b611f4d816129c5565b50565b6000611f5a610c9e565b905061271061ffff168282611f6f9190614130565b61ffff161115611fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fab90613ee0565b60405180910390fd5b600e60009054906101000a900460ff1660ff168261ffff16111561200d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200490613f00565b60405180910390fd5b600e60029054906101000a900460ff161561205d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205490613f60565b60405180910390fd5b8161ffff16600c5461206f91906141ef565b34146120b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a790613fe0565b60405180910390fd5b6120be338361ffff1661270a565b60009050600091505050565b600e60009054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161215261224f565b11158015612161575060005482105b801561218e575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b600061225f82612736565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146122ca576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166122eb612195565b73ffffffffffffffffffffffffffffffffffffffff16148061231a575061231985612314612195565b611d36565b5b8061235f5750612328612195565b73ffffffffffffffffffffffffffffffffffffffff1661234784610a81565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612398576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156123ff576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61240c8585856001612e01565b6124186000848761219d565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561269857600054821461269757878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127038585856001612e07565b5050505050565b612724828260405180602001604052806000815250612e0d565b5050565b612733816000612e1f565b50565b61273e613663565b60008290508061274c61224f565b1115801561275b575060005481105b1561298e576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161298c57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146128705780925050506129c0565b5b60011561298b57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146129865780925050506129c0565b612871565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ad4612195565b8786866040518563ffffffff1660e01b8152600401612af69493929190613e57565b602060405180830381600087803b158015612b1057600080fd5b505af1925050508015612b4157506040513d601f19601f82011682018060405250810190612b3e9190613a26565b60015b612bbb573d8060008114612b71576040519150601f19603f3d011682016040523d82523d6000602084013e612b76565b606091505b50600081511415612bb3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060098054612c1d9061434e565b80601f0160208091040260200160405190810160405280929190818152602001828054612c499061434e565b8015612c965780601f10612c6b57610100808354040283529160200191612c96565b820191906000526020600020905b815481529060010190602001808311612c7957829003601f168201915b5050505050905090565b60606000821415612ce8576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612dfc565b600082905060005b60008214612d1a578080612d03906143b1565b915050600a82612d1391906141be565b9150612cf0565b60008167ffffffffffffffff811115612d3657612d356144e7565b5b6040519080825280601f01601f191660200182016040528015612d685781602001600182028036833780820191505090505b5090505b60008514612df557600182612d819190614249565b9150600a85612d9091906143fa565b6030612d9c9190614168565b60f81b818381518110612db257612db16144b8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612dee91906141be565b9450612d6c565b8093505050505b919050565b50505050565b50505050565b612e1a838383600161320f565b505050565b6000612e2a83612736565b90506000816000015190508215612f0b5760008173ffffffffffffffffffffffffffffffffffffffff16612e5c612195565b73ffffffffffffffffffffffffffffffffffffffff161480612e8b5750612e8a82612e85612195565b611d36565b5b80612ed05750612e99612195565b73ffffffffffffffffffffffffffffffffffffffff16612eb886610a81565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612f09576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b612f19816000866001612e01565b612f256000858361219d565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018160000160108282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008781526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600181600001601c6101000a81548160ff02191690831515021790555060006001870190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561318957600054821461318857848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b5050505083600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46131f7816000866001612e07565b60016000815480929190600101919050555050505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561327c576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008414156132b7576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132c46000868387612e01565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561348e575061348d8773ffffffffffffffffffffffffffffffffffffffff16612a8b565b5b15613554575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135036000888480600101955088612aae565b613539576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082141561349457826000541461354f57600080fd5b6135c0565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613555575b8160008190555050506135d66000868387612e07565b5050505050565b8280546135e99061434e565b90600052602060002090601f01602090048101928261360b5760008555613652565b82601f1061362457805160ff1916838001178555613652565b82800160010185558215613652579182015b82811115613651578251825591602001919060010190613636565b5b50905061365f91906136a6565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156136bf5760008160009055506001016136a7565b5090565b60006136d66136d184614076565b614051565b9050828152602081018484840111156136f2576136f161451b565b5b6136fd84828561430c565b509392505050565b6000613718613713846140a7565b614051565b9050828152602081018484840111156137345761373361451b565b5b61373f84828561430c565b509392505050565b6000813590506137568161476a565b92915050565b60008135905061376b81614781565b92915050565b60008135905061378081614798565b92915050565b60008151905061379581614798565b92915050565b600082601f8301126137b0576137af614516565b5b81356137c08482602086016136c3565b91505092915050565b600082601f8301126137de576137dd614516565b5b81356137ee848260208601613705565b91505092915050565b600081359050613806816147af565b92915050565b60008135905061381b816147c6565b92915050565b600081359050613830816147dd565b92915050565b60006020828403121561384c5761384b614525565b5b600061385a84828501613747565b91505092915050565b6000806040838503121561387a57613879614525565b5b600061388885828601613747565b925050602061389985828601613747565b9150509250929050565b6000806000606084860312156138bc576138bb614525565b5b60006138ca86828701613747565b93505060206138db86828701613747565b92505060406138ec8682870161380c565b9150509250925092565b600080600080608085870312156139105761390f614525565b5b600061391e87828801613747565b945050602061392f87828801613747565b93505060406139408782880161380c565b925050606085013567ffffffffffffffff81111561396157613960614520565b5b61396d8782880161379b565b91505092959194509250565b600080604083850312156139905761398f614525565b5b600061399e85828601613747565b92505060206139af8582860161375c565b9150509250929050565b600080604083850312156139d0576139cf614525565b5b60006139de85828601613747565b92505060206139ef8582860161380c565b9150509250929050565b600060208284031215613a0f57613a0e614525565b5b6000613a1d84828501613771565b91505092915050565b600060208284031215613a3c57613a3b614525565b5b6000613a4a84828501613786565b91505092915050565b600060208284031215613a6957613a68614525565b5b600082013567ffffffffffffffff811115613a8757613a86614520565b5b613a93848285016137c9565b91505092915050565b600060208284031215613ab257613ab1614525565b5b6000613ac0848285016137f7565b91505092915050565b60008060408385031215613ae057613adf614525565b5b6000613aee858286016137f7565b9250506020613aff85828601613747565b9150509250929050565b600060208284031215613b1f57613b1e614525565b5b6000613b2d8482850161380c565b91505092915050565b600060208284031215613b4c57613b4b614525565b5b6000613b5a84828501613821565b91505092915050565b613b6c8161427d565b82525050565b613b7b8161428f565b82525050565b6000613b8c826140ed565b613b968185614103565b9350613ba681856020860161431b565b613baf8161452a565b840191505092915050565b6000613bc5826140f8565b613bcf8185614114565b9350613bdf81856020860161431b565b613be88161452a565b840191505092915050565b6000613bfe826140f8565b613c088185614125565b9350613c1881856020860161431b565b80840191505092915050565b60008154613c318161434e565b613c3b8186614125565b94506001821660008114613c565760018114613c6757613c9a565b60ff19831686528186019350613c9a565b613c70856140d8565b60005b83811015613c9257815481890152600182019150602081019050613c73565b838801955050505b50505092915050565b6000613cb0601383614114565b9150613cbb8261453b565b602082019050919050565b6000613cd3602c83614114565b9150613cde82614564565b604082019050919050565b6000613cf6602683614114565b9150613d01826145b3565b604082019050919050565b6000613d19602083614114565b9150613d2482614602565b602082019050919050565b6000613d3c601783614114565b9150613d478261462b565b602082019050919050565b6000613d5f602f83614114565b9150613d6a82614654565b604082019050919050565b6000613d82602b83614114565b9150613d8d826146a3565b604082019050919050565b6000613da5602483614114565b9150613db0826146f2565b604082019050919050565b6000613dc8601383614114565b9150613dd382614741565b602082019050919050565b613de7816142c7565b82525050565b613df6816142f5565b82525050565b613e05816142ff565b82525050565b6000613e178286613bf3565b9150613e238285613bf3565b9150613e2f8284613c24565b9150819050949350505050565b6000602082019050613e516000830184613b63565b92915050565b6000608082019050613e6c6000830187613b63565b613e796020830186613b63565b613e866040830185613ded565b8181036060830152613e988184613b81565b905095945050505050565b6000602082019050613eb86000830184613b72565b92915050565b60006020820190508181036000830152613ed88184613bba565b905092915050565b60006020820190508181036000830152613ef981613ca3565b9050919050565b60006020820190508181036000830152613f1981613cc6565b9050919050565b60006020820190508181036000830152613f3981613ce9565b9050919050565b60006020820190508181036000830152613f5981613d0c565b9050919050565b60006020820190508181036000830152613f7981613d2f565b9050919050565b60006020820190508181036000830152613f9981613d52565b9050919050565b60006020820190508181036000830152613fb981613d75565b9050919050565b60006020820190508181036000830152613fd981613d98565b9050919050565b60006020820190508181036000830152613ff981613dbb565b9050919050565b60006020820190506140156000830184613dde565b92915050565b60006020820190506140306000830184613ded565b92915050565b600060208201905061404b6000830184613dfc565b92915050565b600061405b61406c565b90506140678282614380565b919050565b6000604051905090565b600067ffffffffffffffff821115614091576140906144e7565b5b61409a8261452a565b9050602081019050919050565b600067ffffffffffffffff8211156140c2576140c16144e7565b5b6140cb8261452a565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061413b826142c7565b9150614146836142c7565b92508261ffff0382111561415d5761415c61442b565b5b828201905092915050565b6000614173826142f5565b915061417e836142f5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141b3576141b261442b565b5b828201905092915050565b60006141c9826142f5565b91506141d4836142f5565b9250826141e4576141e361445a565b5b828204905092915050565b60006141fa826142f5565b9150614205836142f5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561423e5761423d61442b565b5b828202905092915050565b6000614254826142f5565b915061425f836142f5565b9250828210156142725761427161442b565b5b828203905092915050565b6000614288826142d5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561433957808201518184015260208101905061431e565b83811115614348576000848401525b50505050565b6000600282049050600182168061436657607f821691505b6020821081141561437a57614379614489565b5b50919050565b6143898261452a565b810181811067ffffffffffffffff821117156143a8576143a76144e7565b5b80604052505050565b60006143bc826142f5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143ef576143ee61442b565b5b600182019050919050565b6000614405826142f5565b9150614410836142f5565b9250826144205761441f61445a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45786365646573206d617820737570706c792e00000000000000000000000000600082015250565b7f4578636565647320416c6c6f776564206d696e7420416d6f756e74207065722060008201527f7472616e73616374696f6e2e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f45786365646573206d6178696d756d206d696e7420416c6c6f7765642050657260008201527f20747820737570706c792e000000000000000000000000000000000000000000602082015250565b7f45786365656473206d617820416c6c6f77656420706572207472616e7361637460008201527f696f6e2e00000000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b6147738161427d565b811461477e57600080fd5b50565b61478a8161428f565b811461479557600080fd5b50565b6147a18161429b565b81146147ac57600080fd5b50565b6147b8816142c7565b81146147c357600080fd5b50565b6147cf816142f5565b81146147da57600080fd5b50565b6147e6816142ff565b81146147f157600080fd5b5056fea264697066735822122018367513ed18151724bd3b58b1c3f2d593224c4b540a9d008f454fb21f343d0064736f6c63430008070033
Deployed Bytecode Sourcemap
48520:6486:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26715:325;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49386:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30114:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31761:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31282:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54444:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25888:327;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32704:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51624:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54719:92;;;;;;;;;;;;;:::i;:::-;;54827:166;;;;;;;;;;;;;:::i;:::-;;53395:189;;;;;;;;;;;;;:::i;:::-;;53936:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32983:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52546:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48931:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49210;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54308:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29900:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27118:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47303:111;;;;;;;;;;;;;:::i;:::-;;53237:142;;;;;;;;;;;;;:::i;:::-;;46592:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53771:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53612:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54113:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30305:112;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52086:407;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32063:303;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49528:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49859:948;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33277:409;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49436:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52672:537;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48988:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48655:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32451:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48840:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47586:213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50879:661;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49096:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26715:325;26817:4;26877:25;26862:40;;;:11;:40;;;;:109;;;;26938:33;26923:48;;;:11;:48;;;;26862:109;:166;;;;26992:36;27016:11;26992:23;:36::i;:::-;26862:166;26838:190;;26715:325;;;:::o;49386:35::-;;;;;;;;;;;;;:::o;30114:108::-;30168:13;30205:5;30198:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30114:108;:::o;31761:216::-;31829:7;31858:16;31866:7;31858;:16::i;:::-;31853:64;;31883:34;;;;;;;;;;;;;;31853:64;31941:15;:24;31957:7;31941:24;;;;;;;;;;;;;;;;;;;;;31934:31;;31761:216;;;:::o;31282:399::-;31359:13;31375:24;31391:7;31375:15;:24::i;:::-;31359:40;;31424:5;31418:11;;:2;:11;;;31414:48;;;31438:24;;;;;;;;;;;;;;31414:48;31499:5;31483:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;31509:37;31526:5;31533:12;:10;:12::i;:::-;31509:16;:37::i;:::-;31508:38;31483:63;31479:146;;;31574:35;;;;;;;;;;;;;;31479:146;31641:28;31650:2;31654:7;31663:5;31641:8;:28::i;:::-;31344:337;31282:399;;:::o;54444:124::-;46849:12;:10;:12::i;:::-;46838:23;;:7;:5;:7::i;:::-;:23;;;46830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54542:10:::1;54530:9;:22;;;;;;;;;;;;:::i;:::-;;54444:124:::0;:::o;25888:327::-;25932:7;26173:15;:13;:15::i;:::-;26158:12;;26142:13;;:28;:46;26135:53;;25888:327;:::o;32704:194::-;32858:28;32868:4;32874:2;32878:7;32858:9;:28::i;:::-;32704:194;;;:::o;51624:403::-;46849:12;:10;:12::i;:::-;46838:23;;:7;:5;:7::i;:::-;:23;;;46830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51718:18:::1;51746:13;:11;:13::i;:::-;51718:42;;48690:5;51787:38;;51801:11;51787;:25;;;;:::i;:::-;:38;;;;51779:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;51868:34;51878:9;51890:11;51868:34;;:9;:34::i;:::-;51921:18;;;51958:16;;;51993:18;;;51699:328;51624:403:::0;;:::o;54719:92::-;46849:12;:10;:12::i;:::-;46838:23;;:7;:5;:7::i;:::-;:23;;;46830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54789:6:::1;;;;;;;;;;;54788:7;54779:6;;:16;;;;;;;;;;;;;;;;;;54719:92::o:0;54827:166::-;46849:12;:10;:12::i;:::-;46838:23;;:7;:5;:7::i;:::-;:23;;;46830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54881:13:::1;54897:21;54881:37;;54945:10;54937:28;;:39;54966:8;54937:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;54866:127;54827:166::o:0;53395:189::-;46849:12;:10;:12::i;:::-;46838:23;;:7;:5;:7::i;:::-;:23;;;46830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53483:16:::1;;;;;;;;;;;53482:17;53464:16;;:35;;;;;;;;;;;;;;;;;;53534:4;53518:13;;:20;;;;;;;;;;;;;;;;;;53567:1;53557:7;;:11;;;;;;;;;;;;;;;;;;53395:189::o:0;53936:161::-;46849:12;:10;:12::i;:::-;46838:23;;:7;:5;:7::i;:::-;:23;;;46830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54047:6:::1;54019:25;;:34;;;;;;;;;;;;;;;;;;54068:13;;;53936:161:::0;:::o;32983:209::-;33141:39;33158:4;33164:2;33168:7;33141:39;;;;;;;;;;;;:16;:39::i;:::-;32983:209;;;:::o;52546:98::-;46849:12;:10;:12::i;:::-;46838:23;;:7;:5;:7::i;:::-;:23;;;46830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52613:15:::1;52619:8;52613:5;:15::i;:::-;52546:98:::0;:::o;48931:42::-;;;;:::o;49210:::-;;;;;;;;;;;;;:::o;54308:122::-;46849:12;:10;:12::i;:::-;46838:23;;:7;:5;:7::i;:::-;:23;;;46830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54404:10:::1;54392:9;:22;;;;;;;;;;;;:::i;:::-;;54308:122:::0;:::o;29900:133::-;29964:7;29995:21;30008:7;29995:12;:21::i;:::-;:26;;;29988:33;;29900:133;;;:::o;27118:218::-;27182:7;27227:1;27210:19;;:5;:19;;;27206:60;;;27238:28;;;;;;;;;;;;;;27206:60;27296:12;:19;27309:5;27296:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;27288:36;;27281:43;;27118:218;;;:::o;47303:111::-;46849:12;:10;:12::i;:::-;46838:23;;:7;:5;:7::i;:::-;:23;;;46830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47372:30:::1;47399:1;47372:18;:30::i;:::-;47303:111::o:0;53237:142::-;46849:12;:10;:12::i;:::-;46838:23;;:7;:5;:7::i;:::-;:23;;;46830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53320:13:::1;;;;;;;;;;;53319:14;53303:13;;:30;;;;;;;;;;;;;;;;;;53362:1;53352:7;;:11;;;;;;;;;;;;;;;;;;53237:142::o:0;46592:95::-;46638:7;46669:6;;;;;;;;;;;46662:13;;46592:95;:::o;53771:149::-;46849:12;:10;:12::i;:::-;46838:23;;:7;:5;:7::i;:::-;:23;;;46830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53868:5:::1;53851:14;:22;;;;53892:12;;;53771:149:::0;:::o;53612:143::-;46849:12;:10;:12::i;:::-;46838:23;;:7;:5;:7::i;:::-;:23;;;46830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53703:5:::1;53689:11;:19;;;;53727:12;;;53612:143:::0;:::o;54113:171::-;46849:12;:10;:12::i;:::-;46838:23;;:7;:5;:7::i;:::-;:23;;;46830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54234:6:::1;54201:30;;:39;;;;;;;;;;;;;;;;;;54255:13;;;54113:171:::0;:::o;30305:112::-;30361:13;30398:7;30391:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30305:112;:::o;52086:407::-;46849:12;:10;:12::i;:::-;46838:23;;:7;:5;:7::i;:::-;:23;;;46830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52180:18:::1;52208:13;:11;:13::i;:::-;52180:42;;48690:5;52249:38;;52263:11;52249;:25;;;;:::i;:::-;:38;;;;52241:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;52330:34;52340:9;52352:11;52330:34;;:9;:34::i;:::-;52383:18;;;52420:16;;;52455:18;;;52161:332;52086:407:::0;;:::o;32063:303::-;32178:12;:10;:12::i;:::-;32166:24;;:8;:24;;;32162:54;;;32199:17;;;;;;;;;;;;;;32162:54;32278:8;32233:18;:32;32252:12;:10;:12::i;:::-;32233:32;;;;;;;;;;;;;;;:42;32266:8;32233:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;32335:8;32306:48;;32321:12;:10;:12::i;:::-;32306:48;;;32345:8;32306:48;;;;;;:::i;:::-;;;;;;;;32063:303;;:::o;49528:24::-;;;;;;;;;;;;;:::o;49859:948::-;49938:18;49966:13;:11;:13::i;:::-;49938:42;;48690:5;50007:38;;50021:11;50007;:25;;;;:::i;:::-;:38;;;;49999:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;50135:25;;;;;;;;;;;50120:40;;:11;:40;;;;50112:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;50231:13;;;;;;;;;;;50230:14;50222:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;50326:11;50312:25;;:11;;:25;;;;:::i;:::-;50299:9;:38;50291:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;50382:35;50392:10;50405:11;50382:35;;:9;:35::i;:::-;50456:11;50446:7;;;;;;;;;;;:21;;;;:::i;:::-;50436:7;;:31;;;;;;;;;;;;;;;;;;50602:4;50591:7;;;;;;;;;;;:15;;;50586:128;;50660:4;50644:13;;:20;;;;;;;;;;;;;;;;;;50693:1;50683:7;;:11;;;;;;;;;;;;;;;;;;50586:128;50732:18;;;50769;;;49918:889;49859:948;:::o;33277:409::-;33468:28;33478:4;33484:2;33488:7;33468:9;:28::i;:::-;33515:15;:2;:13;;;:15::i;:::-;:76;;;;;33535:56;33566:4;33572:2;33576:7;33585:5;33535:30;:56::i;:::-;33534:57;33515:76;33511:164;;;33619:40;;;;;;;;;;;;;;33511:164;33277:409;;;;:::o;49436:33::-;;;;;;;;;;;;;:::o;52672:537::-;52746:13;52785:17;52793:8;52785:7;:17::i;:::-;52777:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;52883:5;52873:15;;:6;;;;;;;;;;;:15;;;52868:72;;;52915:9;52908:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52868:72;52972:28;53003:10;:8;:10::i;:::-;52972:41;;53070:1;53045:14;53039:28;:32;:154;;;;;;;;;;;;;;;;;53119:14;53135:19;:8;:17;:19::i;:::-;53156:9;53102:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53039:154;53032:161;;;52672:537;;;;:::o;48988:39::-;;;;:::o;48655:40::-;48690:5;48655:40;:::o;32451:172::-;32548:4;32576:18;:25;32595:5;32576:25;;;;;;;;;;;;;;;:35;32602:8;32576:35;;;;;;;;;;;;;;;;;;;;;;;;;32569:42;;32451:172;;;;:::o;48840:23::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47586:213::-;46849:12;:10;:12::i;:::-;46838:23;;:7;:5;:7::i;:::-;:23;;;46830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47699:1:::1;47679:22;;:8;:22;;;;47671:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;47759:28;47778:8;47759:18;:28::i;:::-;47586:213:::0;:::o;50879:661::-;50956:18;50984:13;:11;:13::i;:::-;50956:42;;48690:5;51025:38;;51039:11;51025;:25;;;;:::i;:::-;:38;;;;51017:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;51129:30;;;;;;;;;;;51114:45;;:11;:45;;;;51106:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;51236:16;;;;;;;;;;;51235:17;51227:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;51337:11;51320:28;;:14;;:28;;;;:::i;:::-;51307:9;:41;51299:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;51393:35;51403:10;51416:11;51393:35;;:9;:35::i;:::-;51465:18;;;51502;;;50937:603;50879:661;:::o;49096:48::-;;;;;;;;;;;;;:::o;15749:165::-;15834:4;15877:25;15862:40;;;:11;:40;;;;15855:47;;15749:165;;;:::o;33967:199::-;34024:4;34071:7;34052:15;:13;:15::i;:::-;:26;;:53;;;;;34092:13;;34082:7;:23;34052:53;:102;;;;;34127:11;:20;34139:7;34127:20;;;;;;;;;;;:27;;;;;;;;;;;;34126:28;34052:102;34045:109;;33967:199;;;:::o;3245:106::-;3298:7;3329:10;3322:17;;3245:106;:::o;42843:224::-;43005:2;42978:15;:24;42994:7;42978:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;43047:7;43043:2;43027:28;;43036:5;43027:28;;;;;;;;;;;;42843:224;;;:::o;25640:100::-;25696:7;25640:100;:::o;37381:2286::-;37516:35;37554:21;37567:7;37554:12;:21::i;:::-;37516:59;;37618:4;37596:26;;:13;:18;;;:26;;;37592:67;;37631:28;;;;;;;;;;;;;;37592:67;37676:22;37718:4;37702:20;;:12;:10;:12::i;:::-;:20;;;:77;;;;37743:36;37760:4;37766:12;:10;:12::i;:::-;37743:16;:36::i;:::-;37702:77;:134;;;;37824:12;:10;:12::i;:::-;37800:36;;:20;37812:7;37800:11;:20::i;:::-;:36;;;37702:134;37676:161;;37859:17;37854:66;;37885:35;;;;;;;;;;;;;;37854:66;37953:1;37939:16;;:2;:16;;;37935:52;;;37964:23;;;;;;;;;;;;;;37935:52;38004:43;38026:4;38032:2;38036:7;38045:1;38004:21;:43::i;:::-;38120:35;38137:1;38141:7;38150:4;38120:8;:35::i;:::-;38501:1;38471:12;:18;38484:4;38471:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38549:1;38521:12;:16;38534:2;38521:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38571:31;38605:11;:20;38617:7;38605:20;;;;;;;;;;;38571:54;;38660:2;38644:8;:13;;;:18;;;;;;;;;;;;;;;;;;38714:15;38681:8;:23;;;:49;;;;;;;;;;;;;;;;;;38994:19;39026:1;39016:7;:11;38994:33;;39046:31;39080:11;:24;39092:11;39080:24;;;;;;;;;;;39046:58;;39152:1;39127:27;;:8;:13;;;;;;;;;;;;:27;;;39123:412;;;39349:13;;39334:11;:28;39330:186;;39407:4;39391:8;:13;;;:20;;;;;;;;;;;;;;;;;;39464:13;:28;;;39438:8;:23;;;:54;;;;;;;;;;;;;;;;;;39330:186;39123:412;38442:1108;;;39590:7;39586:2;39571:27;;39580:4;39571:27;;;;;;;;;;;;39613:42;39634:4;39640:2;39644:7;39653:1;39613:20;:42::i;:::-;37501:2166;;37381:2286;;;:::o;34178:112::-;34251:27;34261:2;34265:8;34251:27;;;;;;;;;;;;:9;:27::i;:::-;34178:112;;:::o;39764:97::-;39828:21;39834:7;39843:5;39828;:21::i;:::-;39764:97;:::o;28619:1205::-;28681:21;;:::i;:::-;28719:12;28734:7;28719:22;;28810:4;28791:15;:13;:15::i;:::-;:23;;:47;;;;;28825:13;;28818:4;:20;28791:47;28787:958;;;28863:31;28897:11;:17;28909:4;28897:17;;;;;;;;;;;28863:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28942:9;:16;;;28937:789;;29017:1;28991:28;;:9;:14;;;:28;;;28987:109;;29059:9;29052:16;;;;;;28987:109;29418:285;29425:4;29418:285;;;29462:6;;;;;;;;29511:11;:17;29523:4;29511:17;;;;;;;;;;;29499:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29589:1;29563:28;;:9;:14;;;:28;;;29559:117;;29635:9;29628:16;;;;;;29559:117;29418:285;;;28937:789;28840:905;28787:958;29781:31;;;;;;;;;;;;;;28619:1205;;;;:::o;47976:207::-;48054:16;48073:6;;;;;;;;;;;48054:25;;48103:8;48094:6;;:17;;;;;;;;;;;;;;;;;;48162:8;48131:40;;48152:8;48131:40;;;;;;;;;;;;48039:144;47976:207;:::o;4825:346::-;4885:4;5158:1;5136:7;:19;;;:23;5129:30;;4825:346;;;:::o;43591:735::-;43774:4;43815:2;43799:36;;;43836:12;:10;:12::i;:::-;43850:4;43856:7;43865:5;43799:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;43795:520;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44062:1;44045:6;:13;:18;44041:259;;;44095:40;;;;;;;;;;;;;;44041:259;44250:6;44244:13;44235:6;44231:2;44227:15;44220:38;43795:520;43932:45;;;43922:55;;;:6;:55;;;;43915:62;;;43591:735;;;;;;:::o;54584:119::-;54637:13;54678:9;54671:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54584:119;:::o;564:799::-;620:13;862:1;853:5;:10;849:61;;;884:10;;;;;;;;;;;;;;;;;;;;;849:61;924:12;939:5;924:20;;959:14;988:90;1003:1;995:4;:9;988:90;;1025:8;;;;;:::i;:::-;;;;1060:2;1052:10;;;;;:::i;:::-;;;988:90;;;1092:19;1124:6;1114:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1092:39;;1146:170;1162:1;1153:5;:10;1146:170;;1194:1;1184:11;;;;;:::i;:::-;;;1265:2;1257:5;:10;;;;:::i;:::-;1244:2;:24;;;;:::i;:::-;1231:39;;1214:6;1221;1214:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1298:2;1289:11;;;;;:::i;:::-;;;1146:170;;;1344:6;1330:21;;;;;564:799;;;;:::o;45024:179::-;;;;;:::o;45915:178::-;;;;;:::o;34688:187::-;34831:32;34837:2;34841:8;34851:5;34858:4;34831:5;:32::i;:::-;34688:187;;;:::o;40125:2580::-;40209:35;40247:21;40260:7;40247:12;:21::i;:::-;40209:59;;40285:12;40300:13;:18;;;40285:33;;40339:13;40335:310;;;40373:22;40415:4;40399:20;;:12;:10;:12::i;:::-;:20;;;:81;;;;40444:36;40461:4;40467:12;:10;:12::i;:::-;40444:16;:36::i;:::-;40399:81;:142;;;;40529:12;:10;:12::i;:::-;40505:36;;:20;40517:7;40505:11;:20::i;:::-;:36;;;40399:142;40373:169;;40568:17;40563:66;;40594:35;;;;;;;;;;;;;;40563:66;40354:291;40335:310;40661:51;40683:4;40697:1;40701:7;40710:1;40661:21;:51::i;:::-;40785:35;40802:1;40806:7;40815:4;40785:8;:35::i;:::-;41136:31;41170:12;:18;41183:4;41170:18;;;;;;;;;;;;;;;41136:52;;41230:1;41207:11;:19;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41278:1;41250:11;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41386:31;41420:11;:20;41432:7;41420:20;;;;;;;;;;;41386:54;;41475:4;41459:8;:13;;;:20;;;;;;;;;;;;;;;;;;41531:15;41498:8;:23;;;:49;;;;;;;;;;;;;;;;;;41584:4;41566:8;:15;;;:22;;;;;;;;;;;;;;;;;;41848:19;41880:1;41870:7;:11;41848:33;;41900:31;41934:11;:24;41946:11;41934:24;;;;;;;;;;;41900:58;;42006:1;41981:27;;:8;:13;;;;;;;;;;;;:27;;;41977:412;;;42203:13;;42188:11;:28;42184:186;;42261:4;42245:8;:13;;;:20;;;;;;;;;;;;;;;;;;42318:13;:28;;;42292:8;:23;;;:54;;;;;;;;;;;;;;;;;;42184:186;41977:412;41107:1297;;;;42452:7;42448:1;42425:35;;42434:4;42425:35;;;;;;;;;;;;42475:50;42496:4;42510:1;42514:7;42523:1;42475:20;:50::i;:::-;42664:12;;:14;;;;;;;;;;;;;40194:2511;;40125:2580;;:::o;35169:1923::-;35332:20;35355:13;;35332:36;;35401:1;35387:16;;:2;:16;;;35383:48;;;35412:19;;;;;;;;;;;;;;35383:48;35462:1;35450:8;:13;35446:44;;;35472:18;;;;;;;;;;;;;;35446:44;35507:61;35537:1;35541:2;35545:12;35559:8;35507:21;:61::i;:::-;35900:8;35865:12;:16;35878:2;35865:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35968:8;35928:12;:16;35941:2;35928:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36031:2;35998:11;:25;36010:12;35998:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;36102:15;36052:11;:25;36064:12;36052:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;36139:20;36162:12;36139:35;;36193:11;36222:8;36207:12;:23;36193:37;;36255:4;:23;;;;;36263:15;:2;:13;;;:15::i;:::-;36255:23;36251:693;;;36303:334;36363:12;36359:2;36338:38;;36355:1;36338:38;;;;;;;;;;;;36408:69;36447:1;36451:2;36455:14;;;;;;36471:5;36408:30;:69::i;:::-;36403:182;;36517:40;;;;;;;;;;;;;;36403:182;36632:3;36616:12;:19;;36303:334;;36726:12;36709:13;;:29;36705:43;;36740:8;;;36705:43;36251:693;;;36797:128;36857:14;;;;;;36853:2;36832:40;;36849:1;36832:40;;;;;;;;;;;;36920:3;36904:12;:19;;36797:128;;36251:693;36978:12;36962:13;:28;;;;35836:1170;;37020:60;37049:1;37053:2;37057:12;37071:8;37020:20;:60::i;:::-;35317:1775;35169:1923;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::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:137::-;2177:5;2215:6;2202:20;2193:29;;2231:32;2257:5;2231:32;:::i;:::-;2132:137;;;;:::o;2275:139::-;2321:5;2359:6;2346:20;2337:29;;2375:33;2402:5;2375:33;:::i;:::-;2275:139;;;;:::o;2420:135::-;2464:5;2502:6;2489:20;2480:29;;2518:31;2543:5;2518:31;:::i;:::-;2420:135;;;;:::o;2561:329::-;2620:6;2669:2;2657:9;2648:7;2644:23;2640:32;2637:119;;;2675:79;;:::i;:::-;2637:119;2795:1;2820:53;2865:7;2856:6;2845:9;2841:22;2820:53;:::i;:::-;2810:63;;2766:117;2561:329;;;;:::o;2896:474::-;2964:6;2972;3021:2;3009:9;3000:7;2996:23;2992:32;2989:119;;;3027:79;;:::i;:::-;2989:119;3147:1;3172:53;3217:7;3208:6;3197:9;3193:22;3172:53;:::i;:::-;3162:63;;3118:117;3274:2;3300:53;3345:7;3336:6;3325:9;3321:22;3300:53;:::i;:::-;3290:63;;3245:118;2896:474;;;;;:::o;3376:619::-;3453:6;3461;3469;3518:2;3506:9;3497:7;3493:23;3489:32;3486:119;;;3524:79;;:::i;:::-;3486:119;3644:1;3669:53;3714:7;3705:6;3694:9;3690:22;3669:53;:::i;:::-;3659:63;;3615:117;3771:2;3797:53;3842:7;3833:6;3822:9;3818:22;3797:53;:::i;:::-;3787:63;;3742:118;3899:2;3925:53;3970:7;3961:6;3950:9;3946:22;3925:53;:::i;:::-;3915:63;;3870:118;3376:619;;;;;:::o;4001:943::-;4096:6;4104;4112;4120;4169:3;4157:9;4148:7;4144:23;4140:33;4137:120;;;4176:79;;:::i;:::-;4137:120;4296:1;4321:53;4366:7;4357:6;4346:9;4342:22;4321:53;:::i;:::-;4311:63;;4267:117;4423:2;4449:53;4494:7;4485:6;4474:9;4470:22;4449:53;:::i;:::-;4439:63;;4394:118;4551:2;4577:53;4622:7;4613:6;4602:9;4598:22;4577:53;:::i;:::-;4567:63;;4522:118;4707:2;4696:9;4692:18;4679:32;4738:18;4730:6;4727:30;4724:117;;;4760:79;;:::i;:::-;4724:117;4865:62;4919:7;4910:6;4899:9;4895:22;4865:62;:::i;:::-;4855:72;;4650:287;4001:943;;;;;;;:::o;4950:468::-;5015:6;5023;5072:2;5060:9;5051:7;5047:23;5043:32;5040:119;;;5078:79;;:::i;:::-;5040:119;5198:1;5223:53;5268:7;5259:6;5248:9;5244:22;5223:53;:::i;:::-;5213:63;;5169:117;5325:2;5351:50;5393:7;5384:6;5373:9;5369:22;5351:50;:::i;:::-;5341:60;;5296:115;4950:468;;;;;:::o;5424:474::-;5492:6;5500;5549:2;5537:9;5528:7;5524:23;5520:32;5517:119;;;5555:79;;:::i;:::-;5517:119;5675:1;5700:53;5745:7;5736:6;5725:9;5721:22;5700:53;:::i;:::-;5690:63;;5646:117;5802:2;5828:53;5873:7;5864:6;5853:9;5849:22;5828:53;:::i;:::-;5818:63;;5773:118;5424:474;;;;;:::o;5904:327::-;5962:6;6011:2;5999:9;5990:7;5986:23;5982:32;5979:119;;;6017:79;;:::i;:::-;5979:119;6137:1;6162:52;6206:7;6197:6;6186:9;6182:22;6162:52;:::i;:::-;6152:62;;6108:116;5904:327;;;;:::o;6237:349::-;6306:6;6355:2;6343:9;6334:7;6330:23;6326:32;6323:119;;;6361:79;;:::i;:::-;6323:119;6481:1;6506:63;6561:7;6552:6;6541:9;6537:22;6506:63;:::i;:::-;6496:73;;6452:127;6237:349;;;;:::o;6592:509::-;6661:6;6710:2;6698:9;6689:7;6685:23;6681:32;6678:119;;;6716:79;;:::i;:::-;6678:119;6864:1;6853:9;6849:17;6836:31;6894:18;6886:6;6883:30;6880:117;;;6916:79;;:::i;:::-;6880:117;7021:63;7076:7;7067:6;7056:9;7052:22;7021:63;:::i;:::-;7011:73;;6807:287;6592:509;;;;:::o;7107:327::-;7165:6;7214:2;7202:9;7193:7;7189:23;7185:32;7182:119;;;7220:79;;:::i;:::-;7182:119;7340:1;7365:52;7409:7;7400:6;7389:9;7385:22;7365:52;:::i;:::-;7355:62;;7311:116;7107:327;;;;:::o;7440:472::-;7507:6;7515;7564:2;7552:9;7543:7;7539:23;7535:32;7532:119;;;7570:79;;:::i;:::-;7532:119;7690:1;7715:52;7759:7;7750:6;7739:9;7735:22;7715:52;:::i;:::-;7705:62;;7661:116;7816:2;7842:53;7887:7;7878:6;7867:9;7863:22;7842:53;:::i;:::-;7832:63;;7787:118;7440:472;;;;;:::o;7918:329::-;7977:6;8026:2;8014:9;8005:7;8001:23;7997:32;7994:119;;;8032:79;;:::i;:::-;7994:119;8152:1;8177:53;8222:7;8213:6;8202:9;8198:22;8177:53;:::i;:::-;8167:63;;8123:117;7918:329;;;;:::o;8253:325::-;8310:6;8359:2;8347:9;8338:7;8334:23;8330:32;8327:119;;;8365:79;;:::i;:::-;8327:119;8485:1;8510:51;8553:7;8544:6;8533:9;8529:22;8510:51;:::i;:::-;8500:61;;8456:115;8253:325;;;;:::o;8584:118::-;8671:24;8689:5;8671:24;:::i;:::-;8666:3;8659:37;8584:118;;:::o;8708:109::-;8789:21;8804:5;8789:21;:::i;:::-;8784:3;8777:34;8708:109;;:::o;8823:360::-;8909:3;8937:38;8969:5;8937:38;:::i;:::-;8991:70;9054:6;9049:3;8991:70;:::i;:::-;8984:77;;9070:52;9115:6;9110:3;9103:4;9096:5;9092:16;9070:52;:::i;:::-;9147:29;9169:6;9147:29;:::i;:::-;9142:3;9138:39;9131:46;;8913:270;8823:360;;;;:::o;9189:364::-;9277:3;9305:39;9338:5;9305:39;:::i;:::-;9360:71;9424:6;9419:3;9360:71;:::i;:::-;9353:78;;9440:52;9485:6;9480:3;9473:4;9466:5;9462:16;9440:52;:::i;:::-;9517:29;9539:6;9517:29;:::i;:::-;9512:3;9508:39;9501:46;;9281:272;9189:364;;;;:::o;9559:377::-;9665:3;9693:39;9726:5;9693:39;:::i;:::-;9748:89;9830:6;9825:3;9748:89;:::i;:::-;9741:96;;9846:52;9891:6;9886:3;9879:4;9872:5;9868:16;9846:52;:::i;:::-;9923:6;9918:3;9914:16;9907:23;;9669:267;9559:377;;;;:::o;9966:845::-;10069:3;10106:5;10100:12;10135:36;10161:9;10135:36;:::i;:::-;10187:89;10269:6;10264:3;10187:89;:::i;:::-;10180:96;;10307:1;10296:9;10292:17;10323:1;10318:137;;;;10469:1;10464:341;;;;10285:520;;10318:137;10402:4;10398:9;10387;10383:25;10378:3;10371:38;10438:6;10433:3;10429:16;10422:23;;10318:137;;10464:341;10531:38;10563:5;10531:38;:::i;:::-;10591:1;10605:154;10619:6;10616:1;10613:13;10605:154;;;10693:7;10687:14;10683:1;10678:3;10674:11;10667:35;10743:1;10734:7;10730:15;10719:26;;10641:4;10638:1;10634:12;10629:17;;10605:154;;;10788:6;10783:3;10779:16;10772:23;;10471:334;;10285:520;;10073:738;;9966:845;;;;:::o;10817:366::-;10959:3;10980:67;11044:2;11039:3;10980:67;:::i;:::-;10973:74;;11056:93;11145:3;11056:93;:::i;:::-;11174:2;11169:3;11165:12;11158:19;;10817:366;;;:::o;11189:::-;11331:3;11352:67;11416:2;11411:3;11352:67;:::i;:::-;11345:74;;11428:93;11517:3;11428:93;:::i;:::-;11546:2;11541:3;11537:12;11530:19;;11189:366;;;:::o;11561:::-;11703:3;11724:67;11788:2;11783:3;11724:67;:::i;:::-;11717:74;;11800:93;11889:3;11800:93;:::i;:::-;11918:2;11913:3;11909:12;11902:19;;11561:366;;;:::o;11933:::-;12075:3;12096:67;12160:2;12155:3;12096:67;:::i;:::-;12089:74;;12172:93;12261:3;12172:93;:::i;:::-;12290:2;12285:3;12281:12;12274:19;;11933:366;;;:::o;12305:::-;12447:3;12468:67;12532:2;12527:3;12468:67;:::i;:::-;12461:74;;12544:93;12633:3;12544:93;:::i;:::-;12662:2;12657:3;12653:12;12646:19;;12305:366;;;:::o;12677:::-;12819:3;12840:67;12904:2;12899:3;12840:67;:::i;:::-;12833:74;;12916:93;13005:3;12916:93;:::i;:::-;13034:2;13029:3;13025:12;13018:19;;12677:366;;;:::o;13049:::-;13191:3;13212:67;13276:2;13271:3;13212:67;:::i;:::-;13205:74;;13288:93;13377:3;13288:93;:::i;:::-;13406:2;13401:3;13397:12;13390:19;;13049:366;;;:::o;13421:::-;13563:3;13584:67;13648:2;13643:3;13584:67;:::i;:::-;13577:74;;13660:93;13749:3;13660:93;:::i;:::-;13778:2;13773:3;13769:12;13762:19;;13421:366;;;:::o;13793:::-;13935:3;13956:67;14020:2;14015:3;13956:67;:::i;:::-;13949:74;;14032:93;14121:3;14032:93;:::i;:::-;14150:2;14145:3;14141:12;14134:19;;13793:366;;;:::o;14165:115::-;14250:23;14267:5;14250:23;:::i;:::-;14245:3;14238:36;14165:115;;:::o;14286:118::-;14373:24;14391:5;14373:24;:::i;:::-;14368:3;14361:37;14286:118;;:::o;14410:112::-;14493:22;14509:5;14493:22;:::i;:::-;14488:3;14481:35;14410:112;;:::o;14528:589::-;14753:3;14775:95;14866:3;14857:6;14775:95;:::i;:::-;14768:102;;14887:95;14978:3;14969:6;14887:95;:::i;:::-;14880:102;;14999:92;15087:3;15078:6;14999:92;:::i;:::-;14992:99;;15108:3;15101:10;;14528:589;;;;;;:::o;15123:222::-;15216:4;15254:2;15243:9;15239:18;15231:26;;15267:71;15335:1;15324:9;15320:17;15311:6;15267:71;:::i;:::-;15123:222;;;;:::o;15351:640::-;15546:4;15584:3;15573:9;15569:19;15561:27;;15598:71;15666:1;15655:9;15651:17;15642:6;15598:71;:::i;:::-;15679:72;15747:2;15736:9;15732:18;15723:6;15679:72;:::i;:::-;15761;15829:2;15818:9;15814:18;15805:6;15761:72;:::i;:::-;15880:9;15874:4;15870:20;15865:2;15854:9;15850:18;15843:48;15908:76;15979:4;15970:6;15908:76;:::i;:::-;15900:84;;15351:640;;;;;;;:::o;15997:210::-;16084:4;16122:2;16111:9;16107:18;16099:26;;16135:65;16197:1;16186:9;16182:17;16173:6;16135:65;:::i;:::-;15997:210;;;;:::o;16213:313::-;16326:4;16364:2;16353:9;16349:18;16341:26;;16413:9;16407:4;16403:20;16399:1;16388:9;16384:17;16377:47;16441:78;16514:4;16505:6;16441:78;:::i;:::-;16433:86;;16213:313;;;;:::o;16532:419::-;16698:4;16736:2;16725:9;16721:18;16713:26;;16785:9;16779:4;16775:20;16771:1;16760:9;16756:17;16749:47;16813:131;16939:4;16813:131;:::i;:::-;16805:139;;16532:419;;;:::o;16957:::-;17123:4;17161:2;17150:9;17146:18;17138:26;;17210:9;17204:4;17200:20;17196:1;17185:9;17181:17;17174:47;17238:131;17364:4;17238:131;:::i;:::-;17230:139;;16957:419;;;:::o;17382:::-;17548:4;17586:2;17575:9;17571:18;17563:26;;17635:9;17629:4;17625:20;17621:1;17610:9;17606:17;17599:47;17663:131;17789:4;17663:131;:::i;:::-;17655:139;;17382:419;;;:::o;17807:::-;17973:4;18011:2;18000:9;17996:18;17988:26;;18060:9;18054:4;18050:20;18046:1;18035:9;18031:17;18024:47;18088:131;18214:4;18088:131;:::i;:::-;18080:139;;17807:419;;;:::o;18232:::-;18398:4;18436:2;18425:9;18421:18;18413:26;;18485:9;18479:4;18475:20;18471:1;18460:9;18456:17;18449:47;18513:131;18639:4;18513:131;:::i;:::-;18505:139;;18232:419;;;:::o;18657:::-;18823:4;18861:2;18850:9;18846:18;18838:26;;18910:9;18904:4;18900:20;18896:1;18885:9;18881:17;18874:47;18938:131;19064:4;18938:131;:::i;:::-;18930:139;;18657:419;;;:::o;19082:::-;19248:4;19286:2;19275:9;19271:18;19263:26;;19335:9;19329:4;19325:20;19321:1;19310:9;19306:17;19299:47;19363:131;19489:4;19363:131;:::i;:::-;19355:139;;19082:419;;;:::o;19507:::-;19673:4;19711:2;19700:9;19696:18;19688:26;;19760:9;19754:4;19750:20;19746:1;19735:9;19731:17;19724:47;19788:131;19914:4;19788:131;:::i;:::-;19780:139;;19507:419;;;:::o;19932:::-;20098:4;20136:2;20125:9;20121:18;20113:26;;20185:9;20179:4;20175:20;20171:1;20160:9;20156:17;20149:47;20213:131;20339:4;20213:131;:::i;:::-;20205:139;;19932:419;;;:::o;20357:218::-;20448:4;20486:2;20475:9;20471:18;20463:26;;20499:69;20565:1;20554:9;20550:17;20541:6;20499:69;:::i;:::-;20357:218;;;;:::o;20581:222::-;20674:4;20712:2;20701:9;20697:18;20689:26;;20725:71;20793:1;20782:9;20778:17;20769:6;20725:71;:::i;:::-;20581:222;;;;:::o;20809:214::-;20898:4;20936:2;20925:9;20921:18;20913:26;;20949:67;21013:1;21002:9;20998:17;20989:6;20949:67;:::i;:::-;20809:214;;;;:::o;21029:129::-;21063:6;21090:20;;:::i;:::-;21080:30;;21119:33;21147:4;21139:6;21119:33;:::i;:::-;21029:129;;;:::o;21164:75::-;21197:6;21230:2;21224:9;21214:19;;21164:75;:::o;21245:307::-;21306:4;21396:18;21388:6;21385:30;21382:56;;;21418:18;;:::i;:::-;21382:56;21456:29;21478:6;21456:29;:::i;:::-;21448:37;;21540:4;21534;21530:15;21522:23;;21245:307;;;:::o;21558:308::-;21620:4;21710:18;21702:6;21699:30;21696:56;;;21732:18;;:::i;:::-;21696:56;21770:29;21792:6;21770:29;:::i;:::-;21762:37;;21854:4;21848;21844:15;21836:23;;21558:308;;;:::o;21872:141::-;21921:4;21944:3;21936:11;;21967:3;21964:1;21957:14;22001:4;21998:1;21988:18;21980:26;;21872:141;;;:::o;22019:98::-;22070:6;22104:5;22098:12;22088:22;;22019:98;;;:::o;22123:99::-;22175:6;22209:5;22203:12;22193:22;;22123:99;;;:::o;22228:168::-;22311:11;22345:6;22340:3;22333:19;22385:4;22380:3;22376:14;22361:29;;22228:168;;;;:::o;22402:169::-;22486:11;22520:6;22515:3;22508:19;22560:4;22555:3;22551:14;22536:29;;22402:169;;;;:::o;22577:148::-;22679:11;22716:3;22701:18;;22577:148;;;;:::o;22731:242::-;22770:3;22789:19;22806:1;22789:19;:::i;:::-;22784:24;;22822:19;22839:1;22822:19;:::i;:::-;22817:24;;22915:1;22907:6;22903:14;22900:1;22897:21;22894:47;;;22921:18;;:::i;:::-;22894:47;22965:1;22962;22958:9;22951:16;;22731:242;;;;:::o;22979:305::-;23019:3;23038:20;23056:1;23038:20;:::i;:::-;23033:25;;23072:20;23090:1;23072:20;:::i;:::-;23067:25;;23226:1;23158:66;23154:74;23151:1;23148:81;23145:107;;;23232:18;;:::i;:::-;23145:107;23276:1;23273;23269:9;23262:16;;22979:305;;;;:::o;23290:185::-;23330:1;23347:20;23365:1;23347:20;:::i;:::-;23342:25;;23381:20;23399:1;23381:20;:::i;:::-;23376:25;;23420:1;23410:35;;23425:18;;:::i;:::-;23410:35;23467:1;23464;23460:9;23455:14;;23290:185;;;;:::o;23481:348::-;23521:7;23544:20;23562:1;23544:20;:::i;:::-;23539:25;;23578:20;23596:1;23578:20;:::i;:::-;23573:25;;23766:1;23698:66;23694:74;23691:1;23688:81;23683:1;23676:9;23669:17;23665:105;23662:131;;;23773:18;;:::i;:::-;23662:131;23821:1;23818;23814:9;23803:20;;23481:348;;;;:::o;23835:191::-;23875:4;23895:20;23913:1;23895:20;:::i;:::-;23890:25;;23929:20;23947:1;23929:20;:::i;:::-;23924:25;;23968:1;23965;23962:8;23959:34;;;23973:18;;:::i;:::-;23959:34;24018:1;24015;24011:9;24003:17;;23835:191;;;;:::o;24032:96::-;24069:7;24098:24;24116:5;24098:24;:::i;:::-;24087:35;;24032:96;;;:::o;24134:90::-;24168:7;24211:5;24204:13;24197:21;24186:32;;24134:90;;;:::o;24230:149::-;24266:7;24306:66;24299:5;24295:78;24284:89;;24230:149;;;:::o;24385:89::-;24421:7;24461:6;24454:5;24450:18;24439:29;;24385:89;;;:::o;24480:126::-;24517:7;24557:42;24550:5;24546:54;24535:65;;24480:126;;;:::o;24612:77::-;24649:7;24678:5;24667:16;;24612:77;;;:::o;24695:86::-;24730:7;24770:4;24763:5;24759:16;24748:27;;24695:86;;;:::o;24787:154::-;24871:6;24866:3;24861;24848:30;24933:1;24924:6;24919:3;24915:16;24908:27;24787:154;;;:::o;24947:307::-;25015:1;25025:113;25039:6;25036:1;25033:13;25025:113;;;25124:1;25119:3;25115:11;25109:18;25105:1;25100:3;25096:11;25089:39;25061:2;25058:1;25054:10;25049:15;;25025:113;;;25156:6;25153:1;25150:13;25147:101;;;25236:1;25227:6;25222:3;25218:16;25211:27;25147:101;24996:258;24947:307;;;:::o;25260:320::-;25304:6;25341:1;25335:4;25331:12;25321:22;;25388:1;25382:4;25378:12;25409:18;25399:81;;25465:4;25457:6;25453:17;25443:27;;25399:81;25527:2;25519:6;25516:14;25496:18;25493:38;25490:84;;;25546:18;;:::i;:::-;25490:84;25311:269;25260:320;;;:::o;25586:281::-;25669:27;25691:4;25669:27;:::i;:::-;25661:6;25657:40;25799:6;25787:10;25784:22;25763:18;25751:10;25748:34;25745:62;25742:88;;;25810:18;;:::i;:::-;25742:88;25850:10;25846:2;25839:22;25629:238;25586:281;;:::o;25873:233::-;25912:3;25935:24;25953:5;25935:24;:::i;:::-;25926:33;;25981:66;25974:5;25971:77;25968:103;;;26051:18;;:::i;:::-;25968:103;26098:1;26091:5;26087:13;26080:20;;25873:233;;;:::o;26112:176::-;26144:1;26161:20;26179:1;26161:20;:::i;:::-;26156:25;;26195:20;26213:1;26195:20;:::i;:::-;26190:25;;26234:1;26224:35;;26239:18;;:::i;:::-;26224:35;26280:1;26277;26273:9;26268:14;;26112:176;;;;:::o;26294:180::-;26342:77;26339:1;26332:88;26439:4;26436:1;26429:15;26463:4;26460:1;26453:15;26480:180;26528:77;26525:1;26518:88;26625:4;26622:1;26615:15;26649:4;26646:1;26639:15;26666:180;26714:77;26711:1;26704:88;26811:4;26808:1;26801:15;26835:4;26832:1;26825:15;26852:180;26900:77;26897:1;26890:88;26997:4;26994:1;26987:15;27021:4;27018:1;27011:15;27038:180;27086:77;27083:1;27076:88;27183:4;27180:1;27173:15;27207:4;27204:1;27197:15;27224:117;27333:1;27330;27323:12;27347:117;27456:1;27453;27446:12;27470:117;27579:1;27576;27569:12;27593:117;27702:1;27699;27692:12;27716:102;27757:6;27808:2;27804:7;27799:2;27792:5;27788:14;27784:28;27774:38;;27716:102;;;:::o;27824:169::-;27964:21;27960:1;27952:6;27948:14;27941:45;27824:169;:::o;27999:231::-;28139:34;28135:1;28127:6;28123:14;28116:58;28208:14;28203:2;28195:6;28191:15;28184:39;27999:231;:::o;28236:225::-;28376:34;28372:1;28364:6;28360:14;28353:58;28445:8;28440:2;28432:6;28428:15;28421:33;28236:225;:::o;28467:182::-;28607:34;28603:1;28595:6;28591:14;28584:58;28467:182;:::o;28655:173::-;28795:25;28791:1;28783:6;28779:14;28772:49;28655:173;:::o;28834:234::-;28974:34;28970:1;28962:6;28958:14;28951:58;29043:17;29038:2;29030:6;29026:15;29019:42;28834:234;:::o;29074:230::-;29214:34;29210:1;29202:6;29198:14;29191:58;29283:13;29278:2;29270:6;29266:15;29259:38;29074:230;:::o;29310:223::-;29450:34;29446:1;29438:6;29434:14;29427:58;29519:6;29514:2;29506:6;29502:15;29495:31;29310:223;:::o;29539:169::-;29679:21;29675:1;29667:6;29663:14;29656:45;29539:169;:::o;29714:122::-;29787:24;29805:5;29787:24;:::i;:::-;29780:5;29777:35;29767:63;;29826:1;29823;29816:12;29767:63;29714:122;:::o;29842:116::-;29912:21;29927:5;29912:21;:::i;:::-;29905:5;29902:32;29892:60;;29948:1;29945;29938:12;29892:60;29842:116;:::o;29964:120::-;30036:23;30053:5;30036:23;:::i;:::-;30029:5;30026:34;30016:62;;30074:1;30071;30064:12;30016:62;29964:120;:::o;30090:::-;30162:23;30179:5;30162:23;:::i;:::-;30155:5;30152:34;30142:62;;30200:1;30197;30190:12;30142:62;30090:120;:::o;30216:122::-;30289:24;30307:5;30289:24;:::i;:::-;30282:5;30279:35;30269:63;;30328:1;30325;30318:12;30269:63;30216:122;:::o;30344:118::-;30415:22;30431:5;30415:22;:::i;:::-;30408:5;30405:33;30395:61;;30452:1;30449;30442:12;30395:61;30344:118;:::o
Swarm Source
ipfs://18367513ed18151724bd3b58b1c3f2d593224c4b540a9d008f454fb21f343d00
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.