Overview
POL Balance
0 POL
POL Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Sponsored
Latest 16 from a total of 16 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer From | 44469745 | 466 days ago | IN | 0 POL | 0.0141476 | ||||
Transfer From | 44469667 | 466 days ago | IN | 0 POL | 0.0134517 | ||||
Set Approval For... | 36389426 | 673 days ago | IN | 0 POL | 0.00140013 | ||||
Set Approval For... | 36296696 | 675 days ago | IN | 0 POL | 0.00398228 | ||||
Transfer From | 35154740 | 703 days ago | IN | 0 POL | 0.00494479 | ||||
Transfer From | 35154722 | 703 days ago | IN | 0 POL | 0.00561173 | ||||
Transfer From | 35154706 | 703 days ago | IN | 0 POL | 0.00545967 | ||||
Transfer From | 35154689 | 703 days ago | IN | 0 POL | 0.00568589 | ||||
Transfer From | 35154673 | 703 days ago | IN | 0 POL | 0.00721948 | ||||
Set Approval For... | 35124139 | 704 days ago | IN | 0 POL | 0.00175545 | ||||
Set Approval For... | 35122014 | 704 days ago | IN | 0 POL | 0.01134797 | ||||
Batch Mint | 35041349 | 706 days ago | IN | 0 POL | 0.56289933 | ||||
Batch Mint | 35041241 | 706 days ago | IN | 0 POL | 0.60869458 | ||||
Batch Mint | 35041204 | 706 days ago | IN | 0 POL | 0.52593234 | ||||
Batch Mint | 35040654 | 706 days ago | IN | 0 POL | 0.52508334 | ||||
0x60806040 | 35036987 | 706 days ago | IN | 0 POL | 0.19721038 |
Loading...
Loading
Contract Name:
DarkLegendsDemons
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-11-02 */ // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: invalid token ID"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireMinted(tokenId); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _safeTransfer(from, to, tokenId, data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: DarkLegendsDemons.sol pragma solidity ^0.8.17; contract DarkLegendsDemons is ERC721, ERC721Enumerable, Ownable { using Counters for Counters.Counter; Counters.Counter private _tokenIdCounter; string public uri; uint256 public maxSupply; // 601 constructor(string memory _uri, uint256 _maxSupply) ERC721("DARK LEGENDS DEMONS", "LEGENDS") { uri = _uri; maxSupply = _maxSupply; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { return string(abi.encodePacked(uri, Strings.toString(tokenId), ".json")); } function setNewURI(string memory _uri) external onlyOwner { uri = _uri; } function safeMint(address to) public onlyOwner returns (uint256) { uint256 tokenId = _tokenIdCounter.current(); require(_tokenIdCounter.current() <= maxSupply -1, "Max amount minted"); _tokenIdCounter.increment(); _safeMint(to, tokenId); return tokenId; } function batchMint(address to, uint256 number) external onlyOwner { for(uint256 i=0; i < number; i++) { safeMint(to); } } // The following functions are overrides required by Solidity function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function safeBatchTransferFrom(address _from, address _to, uint256[] memory _tokenIds) external { } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_uri","type":"string"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":"address","name":"to","type":"address"},{"internalType":"uint256","name":"number","type":"uint256"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"safeMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","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":"_uri","type":"string"}],"name":"setNewURI","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162003f4a38038062003f4a8339818101604052810190620000379190620003a6565b6040518060400160405280601381526020017f4441524b204c4547454e44532044454d4f4e53000000000000000000000000008152506040518060400160405280600781526020017f4c4547454e4453000000000000000000000000000000000000000000000000008152508160009081620000b491906200064d565b508060019081620000c691906200064d565b505050620000e9620000dd6200010a60201b60201c565b6200011260201b60201c565b81600c9081620000fa91906200064d565b5080600d81905550505062000734565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200024182620001f6565b810181811067ffffffffffffffff8211171562000263576200026262000207565b5b80604052505050565b600062000278620001d8565b905062000286828262000236565b919050565b600067ffffffffffffffff821115620002a957620002a862000207565b5b620002b482620001f6565b9050602081019050919050565b60005b83811015620002e1578082015181840152602081019050620002c4565b60008484015250505050565b600062000304620002fe846200028b565b6200026c565b905082815260208101848484011115620003235762000322620001f1565b5b62000330848285620002c1565b509392505050565b600082601f83011262000350576200034f620001ec565b5b815162000362848260208601620002ed565b91505092915050565b6000819050919050565b62000380816200036b565b81146200038c57600080fd5b50565b600081519050620003a08162000375565b92915050565b60008060408385031215620003c057620003bf620001e2565b5b600083015167ffffffffffffffff811115620003e157620003e0620001e7565b5b620003ef8582860162000338565b925050602062000402858286016200038f565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200045f57607f821691505b60208210810362000475576200047462000417565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004df7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004a0565b620004eb8683620004a0565b95508019841693508086168417925050509392505050565b6000819050919050565b60006200052e6200052862000522846200036b565b62000503565b6200036b565b9050919050565b6000819050919050565b6200054a836200050d565b62000562620005598262000535565b848454620004ad565b825550505050565b600090565b620005796200056a565b620005868184846200053f565b505050565b5b81811015620005ae57620005a26000826200056f565b6001810190506200058c565b5050565b601f821115620005fd57620005c7816200047b565b620005d28462000490565b81016020851015620005e2578190505b620005fa620005f18562000490565b8301826200058b565b50505b505050565b600082821c905092915050565b6000620006226000198460080262000602565b1980831691505092915050565b60006200063d83836200060f565b9150826002028217905092915050565b62000658826200040c565b67ffffffffffffffff81111562000674576200067362000207565b5b62000680825462000446565b6200068d828285620005b2565b600060209050601f831160018114620006c55760008415620006b0578287015190505b620006bc85826200062f565b8655506200072c565b601f198416620006d5866200047b565b60005b82811015620006ff57848901518255600182019150602085019450602081019050620006d8565b868310156200071f57848901516200071b601f8916826200060f565b8355505b6001600288020188555050505b505050505050565b61380680620007446000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80634f6ccce7116100de578063a22cb46511610097578063d5abeb0111610071578063d5abeb011461045a578063e985e9c514610478578063eac989f8146104a8578063f2fde38b146104c657610173565b8063a22cb465146103f2578063b88d4fde1461040e578063c87b56dd1461042a57610173565b80634f6ccce71461031c5780636352211e1461034c57806370a082311461037c578063715018a6146103ac5780638da5cb5b146103b657806395d89b41146103d457610173565b806318160ddd1161013057806318160ddd1461024a57806323b872dd146102685780632f745c591461028457806340d097c3146102b457806342842e0e146102e457806343508b051461030057610173565b806301ffc9a714610178578063034601ec146101a857806306fdde03146101c4578063081812fc146101e2578063095ea7b3146102125780630e709b1b1461022e575b600080fd5b610192600480360381019061018d919061215c565b6104e2565b60405161019f91906121a4565b60405180910390f35b6101c260048036038101906101bd91906123ac565b6104f4565b005b6101cc6104f9565b6040516101d9919061249a565b60405180910390f35b6101fc60048036038101906101f791906124bc565b61058b565b60405161020991906124f8565b60405180910390f35b61022c60048036038101906102279190612513565b6105d1565b005b61024860048036038101906102439190612608565b6106e8565b005b610252610703565b60405161025f9190612660565b60405180910390f35b610282600480360381019061027d919061267b565b610710565b005b61029e60048036038101906102999190612513565b610770565b6040516102ab9190612660565b60405180910390f35b6102ce60048036038101906102c991906126ce565b610815565b6040516102db9190612660565b60405180910390f35b6102fe60048036038101906102f9919061267b565b6108a4565b005b61031a60048036038101906103159190612513565b6108c4565b005b610336600480360381019061033191906124bc565b6108f9565b6040516103439190612660565b60405180910390f35b610366600480360381019061036191906124bc565b61096a565b60405161037391906124f8565b60405180910390f35b610396600480360381019061039191906126ce565b610a1b565b6040516103a39190612660565b60405180910390f35b6103b4610ad2565b005b6103be610ae6565b6040516103cb91906124f8565b60405180910390f35b6103dc610b10565b6040516103e9919061249a565b60405180910390f35b61040c60048036038101906104079190612727565b610ba2565b005b61042860048036038101906104239190612808565b610bb8565b005b610444600480360381019061043f91906124bc565b610c1a565b604051610451919061249a565b60405180910390f35b610462610c4e565b60405161046f9190612660565b60405180910390f35b610492600480360381019061048d919061288b565b610c54565b60405161049f91906121a4565b60405180910390f35b6104b0610ce8565b6040516104bd919061249a565b60405180910390f35b6104e060048036038101906104db91906126ce565b610d76565b005b60006104ed82610df9565b9050919050565b505050565b606060008054610508906128fa565b80601f0160208091040260200160405190810160405280929190818152602001828054610534906128fa565b80156105815780601f1061055657610100808354040283529160200191610581565b820191906000526020600020905b81548152906001019060200180831161056457829003601f168201915b5050505050905090565b600061059682610e73565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105dc8261096a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361064c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106439061299d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661066b610ebe565b73ffffffffffffffffffffffffffffffffffffffff16148061069a575061069981610694610ebe565b610c54565b5b6106d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d090612a2f565b60405180910390fd5b6106e38383610ec6565b505050565b6106f0610f7f565b80600c90816106ff9190612bfb565b5050565b6000600880549050905090565b61072161071b610ebe565b82610ffd565b610760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075790612d3f565b60405180910390fd5b61076b838383611092565b505050565b600061077b83610a1b565b82106107bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b390612dd1565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600061081f610f7f565b600061082b600b6112f8565b90506001600d5461083c9190612e20565b610846600b6112f8565b1115610887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087e90612ea0565b60405180910390fd5b610891600b611306565b61089b838261131c565b80915050919050565b6108bf83838360405180602001604052806000815250610bb8565b505050565b6108cc610f7f565b60005b818110156108f4576108e083610815565b5080806108ec90612ec0565b9150506108cf565b505050565b6000610903610703565b8210610944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093b90612f7a565b60405180910390fd5b6008828154811061095857610957612f9a565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0990613015565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a82906130a7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ada610f7f565b610ae4600061133a565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610b1f906128fa565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4b906128fa565b8015610b985780601f10610b6d57610100808354040283529160200191610b98565b820191906000526020600020905b815481529060010190602001808311610b7b57829003601f168201915b5050505050905090565b610bb4610bad610ebe565b8383611400565b5050565b610bc9610bc3610ebe565b83610ffd565b610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff90612d3f565b60405180910390fd5b610c148484848461156c565b50505050565b6060600c610c27836115c8565b604051602001610c389291906131d2565b6040516020818303038152906040529050919050565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c8054610cf5906128fa565b80601f0160208091040260200160405190810160405280929190818152602001828054610d21906128fa565b8015610d6e5780601f10610d4357610100808354040283529160200191610d6e565b820191906000526020600020905b815481529060010190602001808311610d5157829003601f168201915b505050505081565b610d7e610f7f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de490613273565b60405180910390fd5b610df68161133a565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e6c5750610e6b82611728565b5b9050919050565b610e7c8161180a565b610ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb290613015565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610f398361096a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b610f87610ebe565b73ffffffffffffffffffffffffffffffffffffffff16610fa5610ae6565b73ffffffffffffffffffffffffffffffffffffffff1614610ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff2906132df565b60405180910390fd5b565b6000806110098361096a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061104b575061104a8185610c54565b5b8061108957508373ffffffffffffffffffffffffffffffffffffffff166110718461058b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166110b28261096a565b73ffffffffffffffffffffffffffffffffffffffff1614611108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ff90613371565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116e90613403565b60405180910390fd5b611182838383611876565b61118d600082610ec6565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111dd9190612e20565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112349190613423565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46112f3838383611886565b505050565b600081600001549050919050565b6001816000016000828254019250508190555050565b61133682826040518060200160405280600081525061188b565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361146e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611465906134a3565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161155f91906121a4565b60405180910390a3505050565b611577848484611092565b611583848484846118e6565b6115c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b990613535565b60405180910390fd5b50505050565b60606000820361160f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611723565b600082905060005b6000821461164157808061162a90612ec0565b915050600a8261163a9190613584565b9150611617565b60008167ffffffffffffffff81111561165d5761165c612233565b5b6040519080825280601f01601f19166020018201604052801561168f5781602001600182028036833780820191505090505b5090505b6000851461171c576001826116a89190612e20565b9150600a856116b791906135b5565b60306116c39190613423565b60f81b8183815181106116d9576116d8612f9a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856117159190613584565b9450611693565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806117f357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611803575061180282611a6d565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b611881838383611ad7565b505050565b505050565b6118958383611be9565b6118a260008484846118e6565b6118e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d890613535565b60405180910390fd5b505050565b60006119078473ffffffffffffffffffffffffffffffffffffffff16611dc2565b15611a60578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611930610ebe565b8786866040518563ffffffff1660e01b8152600401611952949392919061363b565b6020604051808303816000875af192505050801561198e57506040513d601f19601f8201168201806040525081019061198b919061369c565b60015b611a10573d80600081146119be576040519150601f19603f3d011682016040523d82523d6000602084013e6119c3565b606091505b506000815103611a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff90613535565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611a65565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611ae2838383611de5565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b2457611b1f81611dea565b611b63565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611b6257611b618382611e33565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ba557611ba081611fa0565b611be4565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611be357611be28282612071565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4f90613715565b60405180910390fd5b611c618161180a565b15611ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9890613781565b60405180910390fd5b611cad60008383611876565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cfd9190613423565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611dbe60008383611886565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001611e4084610a1b565b611e4a9190612e20565b9050600060076000848152602001908152602001600020549050818114611f2f576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050611fb49190612e20565b9050600060096000848152602001908152602001600020549050600060088381548110611fe457611fe3612f9a565b5b90600052602060002001549050806008838154811061200657612005612f9a565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612055576120546137a1565b5b6001900381819060005260206000200160009055905550505050565b600061207c83610a1b565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61213981612104565b811461214457600080fd5b50565b60008135905061215681612130565b92915050565b600060208284031215612172576121716120fa565b5b600061218084828501612147565b91505092915050565b60008115159050919050565b61219e81612189565b82525050565b60006020820190506121b96000830184612195565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006121ea826121bf565b9050919050565b6121fa816121df565b811461220557600080fd5b50565b600081359050612217816121f1565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61226b82612222565b810181811067ffffffffffffffff8211171561228a57612289612233565b5b80604052505050565b600061229d6120f0565b90506122a98282612262565b919050565b600067ffffffffffffffff8211156122c9576122c8612233565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b6122f2816122df565b81146122fd57600080fd5b50565b60008135905061230f816122e9565b92915050565b6000612328612323846122ae565b612293565b9050808382526020820190506020840283018581111561234b5761234a6122da565b5b835b8181101561237457806123608882612300565b84526020840193505060208101905061234d565b5050509392505050565b600082601f8301126123935761239261221d565b5b81356123a3848260208601612315565b91505092915050565b6000806000606084860312156123c5576123c46120fa565b5b60006123d386828701612208565b93505060206123e486828701612208565b925050604084013567ffffffffffffffff811115612405576124046120ff565b5b6124118682870161237e565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60005b8381101561245557808201518184015260208101905061243a565b60008484015250505050565b600061246c8261241b565b6124768185612426565b9350612486818560208601612437565b61248f81612222565b840191505092915050565b600060208201905081810360008301526124b48184612461565b905092915050565b6000602082840312156124d2576124d16120fa565b5b60006124e084828501612300565b91505092915050565b6124f2816121df565b82525050565b600060208201905061250d60008301846124e9565b92915050565b6000806040838503121561252a576125296120fa565b5b600061253885828601612208565b925050602061254985828601612300565b9150509250929050565b600080fd5b600067ffffffffffffffff82111561257357612572612233565b5b61257c82612222565b9050602081019050919050565b82818337600083830152505050565b60006125ab6125a684612558565b612293565b9050828152602081018484840111156125c7576125c6612553565b5b6125d2848285612589565b509392505050565b600082601f8301126125ef576125ee61221d565b5b81356125ff848260208601612598565b91505092915050565b60006020828403121561261e5761261d6120fa565b5b600082013567ffffffffffffffff81111561263c5761263b6120ff565b5b612648848285016125da565b91505092915050565b61265a816122df565b82525050565b60006020820190506126756000830184612651565b92915050565b600080600060608486031215612694576126936120fa565b5b60006126a286828701612208565b93505060206126b386828701612208565b92505060406126c486828701612300565b9150509250925092565b6000602082840312156126e4576126e36120fa565b5b60006126f284828501612208565b91505092915050565b61270481612189565b811461270f57600080fd5b50565b600081359050612721816126fb565b92915050565b6000806040838503121561273e5761273d6120fa565b5b600061274c85828601612208565b925050602061275d85828601612712565b9150509250929050565b600067ffffffffffffffff82111561278257612781612233565b5b61278b82612222565b9050602081019050919050565b60006127ab6127a684612767565b612293565b9050828152602081018484840111156127c7576127c6612553565b5b6127d2848285612589565b509392505050565b600082601f8301126127ef576127ee61221d565b5b81356127ff848260208601612798565b91505092915050565b60008060008060808587031215612822576128216120fa565b5b600061283087828801612208565b945050602061284187828801612208565b935050604061285287828801612300565b925050606085013567ffffffffffffffff811115612873576128726120ff565b5b61287f878288016127da565b91505092959194509250565b600080604083850312156128a2576128a16120fa565b5b60006128b085828601612208565b92505060206128c185828601612208565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061291257607f821691505b602082108103612925576129246128cb565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612987602183612426565b91506129928261292b565b604082019050919050565b600060208201905081810360008301526129b68161297a565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000612a19603e83612426565b9150612a24826129bd565b604082019050919050565b60006020820190508181036000830152612a4881612a0c565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612ab17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612a74565b612abb8683612a74565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612af8612af3612aee846122df565b612ad3565b6122df565b9050919050565b6000819050919050565b612b1283612add565b612b26612b1e82612aff565b848454612a81565b825550505050565b600090565b612b3b612b2e565b612b46818484612b09565b505050565b5b81811015612b6a57612b5f600082612b33565b600181019050612b4c565b5050565b601f821115612baf57612b8081612a4f565b612b8984612a64565b81016020851015612b98578190505b612bac612ba485612a64565b830182612b4b565b50505b505050565b600082821c905092915050565b6000612bd260001984600802612bb4565b1980831691505092915050565b6000612beb8383612bc1565b9150826002028217905092915050565b612c048261241b565b67ffffffffffffffff811115612c1d57612c1c612233565b5b612c2782546128fa565b612c32828285612b6e565b600060209050601f831160018114612c655760008415612c53578287015190505b612c5d8582612bdf565b865550612cc5565b601f198416612c7386612a4f565b60005b82811015612c9b57848901518255600182019150602085019450602081019050612c76565b86831015612cb85784890151612cb4601f891682612bc1565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000612d29602e83612426565b9150612d3482612ccd565b604082019050919050565b60006020820190508181036000830152612d5881612d1c565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000612dbb602b83612426565b9150612dc682612d5f565b604082019050919050565b60006020820190508181036000830152612dea81612dae565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e2b826122df565b9150612e36836122df565b9250828203905081811115612e4e57612e4d612df1565b5b92915050565b7f4d617820616d6f756e74206d696e746564000000000000000000000000000000600082015250565b6000612e8a601183612426565b9150612e9582612e54565b602082019050919050565b60006020820190508181036000830152612eb981612e7d565b9050919050565b6000612ecb826122df565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612efd57612efc612df1565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000612f64602c83612426565b9150612f6f82612f08565b604082019050919050565b60006020820190508181036000830152612f9381612f57565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000612fff601883612426565b915061300a82612fc9565b602082019050919050565b6000602082019050818103600083015261302e81612ff2565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000613091602983612426565b915061309c82613035565b604082019050919050565b600060208201905081810360008301526130c081613084565b9050919050565b600081905092915050565b600081546130df816128fa565b6130e981866130c7565b9450600182166000811461310457600181146131195761314c565b60ff198316865281151582028601935061314c565b61312285612a4f565b60005b8381101561314457815481890152600182019150602081019050613125565b838801955050505b50505092915050565b60006131608261241b565b61316a81856130c7565b935061317a818560208601612437565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006131bc6005836130c7565b91506131c782613186565b600582019050919050565b60006131de82856130d2565b91506131ea8284613155565b91506131f5826131af565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061325d602683612426565b915061326882613201565b604082019050919050565b6000602082019050818103600083015261328c81613250565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006132c9602083612426565b91506132d482613293565b602082019050919050565b600060208201905081810360008301526132f8816132bc565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061335b602583612426565b9150613366826132ff565b604082019050919050565b6000602082019050818103600083015261338a8161334e565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006133ed602483612426565b91506133f882613391565b604082019050919050565b6000602082019050818103600083015261341c816133e0565b9050919050565b600061342e826122df565b9150613439836122df565b925082820190508082111561345157613450612df1565b5b92915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061348d601983612426565b915061349882613457565b602082019050919050565b600060208201905081810360008301526134bc81613480565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061351f603283612426565b915061352a826134c3565b604082019050919050565b6000602082019050818103600083015261354e81613512565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061358f826122df565b915061359a836122df565b9250826135aa576135a9613555565b5b828204905092915050565b60006135c0826122df565b91506135cb836122df565b9250826135db576135da613555565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b600061360d826135e6565b61361781856135f1565b9350613627818560208601612437565b61363081612222565b840191505092915050565b600060808201905061365060008301876124e9565b61365d60208301866124e9565b61366a6040830185612651565b818103606083015261367c8184613602565b905095945050505050565b60008151905061369681612130565b92915050565b6000602082840312156136b2576136b16120fa565b5b60006136c084828501613687565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006136ff602083612426565b915061370a826136c9565b602082019050919050565b6000602082019050818103600083015261372e816136f2565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061376b601c83612426565b915061377682613735565b602082019050919050565b6000602082019050818103600083015261379a8161375e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220a4f3b2678c96fadd14a812c59ebdc7f65bbe98090011c4610fc6862349f759c164736f6c6343000811003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f62616679626569616b6c6f7a746c3475337470693632337a7064766e326976726c697371323535626b6e36766d3675346b37346a663732763332612e697066732e6e667473746f726167652e6c696e6b2f00000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c80634f6ccce7116100de578063a22cb46511610097578063d5abeb0111610071578063d5abeb011461045a578063e985e9c514610478578063eac989f8146104a8578063f2fde38b146104c657610173565b8063a22cb465146103f2578063b88d4fde1461040e578063c87b56dd1461042a57610173565b80634f6ccce71461031c5780636352211e1461034c57806370a082311461037c578063715018a6146103ac5780638da5cb5b146103b657806395d89b41146103d457610173565b806318160ddd1161013057806318160ddd1461024a57806323b872dd146102685780632f745c591461028457806340d097c3146102b457806342842e0e146102e457806343508b051461030057610173565b806301ffc9a714610178578063034601ec146101a857806306fdde03146101c4578063081812fc146101e2578063095ea7b3146102125780630e709b1b1461022e575b600080fd5b610192600480360381019061018d919061215c565b6104e2565b60405161019f91906121a4565b60405180910390f35b6101c260048036038101906101bd91906123ac565b6104f4565b005b6101cc6104f9565b6040516101d9919061249a565b60405180910390f35b6101fc60048036038101906101f791906124bc565b61058b565b60405161020991906124f8565b60405180910390f35b61022c60048036038101906102279190612513565b6105d1565b005b61024860048036038101906102439190612608565b6106e8565b005b610252610703565b60405161025f9190612660565b60405180910390f35b610282600480360381019061027d919061267b565b610710565b005b61029e60048036038101906102999190612513565b610770565b6040516102ab9190612660565b60405180910390f35b6102ce60048036038101906102c991906126ce565b610815565b6040516102db9190612660565b60405180910390f35b6102fe60048036038101906102f9919061267b565b6108a4565b005b61031a60048036038101906103159190612513565b6108c4565b005b610336600480360381019061033191906124bc565b6108f9565b6040516103439190612660565b60405180910390f35b610366600480360381019061036191906124bc565b61096a565b60405161037391906124f8565b60405180910390f35b610396600480360381019061039191906126ce565b610a1b565b6040516103a39190612660565b60405180910390f35b6103b4610ad2565b005b6103be610ae6565b6040516103cb91906124f8565b60405180910390f35b6103dc610b10565b6040516103e9919061249a565b60405180910390f35b61040c60048036038101906104079190612727565b610ba2565b005b61042860048036038101906104239190612808565b610bb8565b005b610444600480360381019061043f91906124bc565b610c1a565b604051610451919061249a565b60405180910390f35b610462610c4e565b60405161046f9190612660565b60405180910390f35b610492600480360381019061048d919061288b565b610c54565b60405161049f91906121a4565b60405180910390f35b6104b0610ce8565b6040516104bd919061249a565b60405180910390f35b6104e060048036038101906104db91906126ce565b610d76565b005b60006104ed82610df9565b9050919050565b505050565b606060008054610508906128fa565b80601f0160208091040260200160405190810160405280929190818152602001828054610534906128fa565b80156105815780601f1061055657610100808354040283529160200191610581565b820191906000526020600020905b81548152906001019060200180831161056457829003601f168201915b5050505050905090565b600061059682610e73565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105dc8261096a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361064c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106439061299d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661066b610ebe565b73ffffffffffffffffffffffffffffffffffffffff16148061069a575061069981610694610ebe565b610c54565b5b6106d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d090612a2f565b60405180910390fd5b6106e38383610ec6565b505050565b6106f0610f7f565b80600c90816106ff9190612bfb565b5050565b6000600880549050905090565b61072161071b610ebe565b82610ffd565b610760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075790612d3f565b60405180910390fd5b61076b838383611092565b505050565b600061077b83610a1b565b82106107bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b390612dd1565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600061081f610f7f565b600061082b600b6112f8565b90506001600d5461083c9190612e20565b610846600b6112f8565b1115610887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087e90612ea0565b60405180910390fd5b610891600b611306565b61089b838261131c565b80915050919050565b6108bf83838360405180602001604052806000815250610bb8565b505050565b6108cc610f7f565b60005b818110156108f4576108e083610815565b5080806108ec90612ec0565b9150506108cf565b505050565b6000610903610703565b8210610944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093b90612f7a565b60405180910390fd5b6008828154811061095857610957612f9a565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0990613015565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a82906130a7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ada610f7f565b610ae4600061133a565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610b1f906128fa565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4b906128fa565b8015610b985780601f10610b6d57610100808354040283529160200191610b98565b820191906000526020600020905b815481529060010190602001808311610b7b57829003601f168201915b5050505050905090565b610bb4610bad610ebe565b8383611400565b5050565b610bc9610bc3610ebe565b83610ffd565b610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff90612d3f565b60405180910390fd5b610c148484848461156c565b50505050565b6060600c610c27836115c8565b604051602001610c389291906131d2565b6040516020818303038152906040529050919050565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c8054610cf5906128fa565b80601f0160208091040260200160405190810160405280929190818152602001828054610d21906128fa565b8015610d6e5780601f10610d4357610100808354040283529160200191610d6e565b820191906000526020600020905b815481529060010190602001808311610d5157829003601f168201915b505050505081565b610d7e610f7f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de490613273565b60405180910390fd5b610df68161133a565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e6c5750610e6b82611728565b5b9050919050565b610e7c8161180a565b610ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb290613015565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610f398361096a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b610f87610ebe565b73ffffffffffffffffffffffffffffffffffffffff16610fa5610ae6565b73ffffffffffffffffffffffffffffffffffffffff1614610ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff2906132df565b60405180910390fd5b565b6000806110098361096a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061104b575061104a8185610c54565b5b8061108957508373ffffffffffffffffffffffffffffffffffffffff166110718461058b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166110b28261096a565b73ffffffffffffffffffffffffffffffffffffffff1614611108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ff90613371565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116e90613403565b60405180910390fd5b611182838383611876565b61118d600082610ec6565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111dd9190612e20565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112349190613423565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46112f3838383611886565b505050565b600081600001549050919050565b6001816000016000828254019250508190555050565b61133682826040518060200160405280600081525061188b565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361146e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611465906134a3565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161155f91906121a4565b60405180910390a3505050565b611577848484611092565b611583848484846118e6565b6115c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b990613535565b60405180910390fd5b50505050565b60606000820361160f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611723565b600082905060005b6000821461164157808061162a90612ec0565b915050600a8261163a9190613584565b9150611617565b60008167ffffffffffffffff81111561165d5761165c612233565b5b6040519080825280601f01601f19166020018201604052801561168f5781602001600182028036833780820191505090505b5090505b6000851461171c576001826116a89190612e20565b9150600a856116b791906135b5565b60306116c39190613423565b60f81b8183815181106116d9576116d8612f9a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856117159190613584565b9450611693565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806117f357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611803575061180282611a6d565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b611881838383611ad7565b505050565b505050565b6118958383611be9565b6118a260008484846118e6565b6118e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d890613535565b60405180910390fd5b505050565b60006119078473ffffffffffffffffffffffffffffffffffffffff16611dc2565b15611a60578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611930610ebe565b8786866040518563ffffffff1660e01b8152600401611952949392919061363b565b6020604051808303816000875af192505050801561198e57506040513d601f19601f8201168201806040525081019061198b919061369c565b60015b611a10573d80600081146119be576040519150601f19603f3d011682016040523d82523d6000602084013e6119c3565b606091505b506000815103611a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff90613535565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611a65565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611ae2838383611de5565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b2457611b1f81611dea565b611b63565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611b6257611b618382611e33565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ba557611ba081611fa0565b611be4565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611be357611be28282612071565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4f90613715565b60405180910390fd5b611c618161180a565b15611ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9890613781565b60405180910390fd5b611cad60008383611876565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cfd9190613423565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611dbe60008383611886565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001611e4084610a1b565b611e4a9190612e20565b9050600060076000848152602001908152602001600020549050818114611f2f576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050611fb49190612e20565b9050600060096000848152602001908152602001600020549050600060088381548110611fe457611fe3612f9a565b5b90600052602060002001549050806008838154811061200657612005612f9a565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612055576120546137a1565b5b6001900381819060005260206000200160009055905550505050565b600061207c83610a1b565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61213981612104565b811461214457600080fd5b50565b60008135905061215681612130565b92915050565b600060208284031215612172576121716120fa565b5b600061218084828501612147565b91505092915050565b60008115159050919050565b61219e81612189565b82525050565b60006020820190506121b96000830184612195565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006121ea826121bf565b9050919050565b6121fa816121df565b811461220557600080fd5b50565b600081359050612217816121f1565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61226b82612222565b810181811067ffffffffffffffff8211171561228a57612289612233565b5b80604052505050565b600061229d6120f0565b90506122a98282612262565b919050565b600067ffffffffffffffff8211156122c9576122c8612233565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b6122f2816122df565b81146122fd57600080fd5b50565b60008135905061230f816122e9565b92915050565b6000612328612323846122ae565b612293565b9050808382526020820190506020840283018581111561234b5761234a6122da565b5b835b8181101561237457806123608882612300565b84526020840193505060208101905061234d565b5050509392505050565b600082601f8301126123935761239261221d565b5b81356123a3848260208601612315565b91505092915050565b6000806000606084860312156123c5576123c46120fa565b5b60006123d386828701612208565b93505060206123e486828701612208565b925050604084013567ffffffffffffffff811115612405576124046120ff565b5b6124118682870161237e565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60005b8381101561245557808201518184015260208101905061243a565b60008484015250505050565b600061246c8261241b565b6124768185612426565b9350612486818560208601612437565b61248f81612222565b840191505092915050565b600060208201905081810360008301526124b48184612461565b905092915050565b6000602082840312156124d2576124d16120fa565b5b60006124e084828501612300565b91505092915050565b6124f2816121df565b82525050565b600060208201905061250d60008301846124e9565b92915050565b6000806040838503121561252a576125296120fa565b5b600061253885828601612208565b925050602061254985828601612300565b9150509250929050565b600080fd5b600067ffffffffffffffff82111561257357612572612233565b5b61257c82612222565b9050602081019050919050565b82818337600083830152505050565b60006125ab6125a684612558565b612293565b9050828152602081018484840111156125c7576125c6612553565b5b6125d2848285612589565b509392505050565b600082601f8301126125ef576125ee61221d565b5b81356125ff848260208601612598565b91505092915050565b60006020828403121561261e5761261d6120fa565b5b600082013567ffffffffffffffff81111561263c5761263b6120ff565b5b612648848285016125da565b91505092915050565b61265a816122df565b82525050565b60006020820190506126756000830184612651565b92915050565b600080600060608486031215612694576126936120fa565b5b60006126a286828701612208565b93505060206126b386828701612208565b92505060406126c486828701612300565b9150509250925092565b6000602082840312156126e4576126e36120fa565b5b60006126f284828501612208565b91505092915050565b61270481612189565b811461270f57600080fd5b50565b600081359050612721816126fb565b92915050565b6000806040838503121561273e5761273d6120fa565b5b600061274c85828601612208565b925050602061275d85828601612712565b9150509250929050565b600067ffffffffffffffff82111561278257612781612233565b5b61278b82612222565b9050602081019050919050565b60006127ab6127a684612767565b612293565b9050828152602081018484840111156127c7576127c6612553565b5b6127d2848285612589565b509392505050565b600082601f8301126127ef576127ee61221d565b5b81356127ff848260208601612798565b91505092915050565b60008060008060808587031215612822576128216120fa565b5b600061283087828801612208565b945050602061284187828801612208565b935050604061285287828801612300565b925050606085013567ffffffffffffffff811115612873576128726120ff565b5b61287f878288016127da565b91505092959194509250565b600080604083850312156128a2576128a16120fa565b5b60006128b085828601612208565b92505060206128c185828601612208565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061291257607f821691505b602082108103612925576129246128cb565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612987602183612426565b91506129928261292b565b604082019050919050565b600060208201905081810360008301526129b68161297a565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000612a19603e83612426565b9150612a24826129bd565b604082019050919050565b60006020820190508181036000830152612a4881612a0c565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612ab17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612a74565b612abb8683612a74565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612af8612af3612aee846122df565b612ad3565b6122df565b9050919050565b6000819050919050565b612b1283612add565b612b26612b1e82612aff565b848454612a81565b825550505050565b600090565b612b3b612b2e565b612b46818484612b09565b505050565b5b81811015612b6a57612b5f600082612b33565b600181019050612b4c565b5050565b601f821115612baf57612b8081612a4f565b612b8984612a64565b81016020851015612b98578190505b612bac612ba485612a64565b830182612b4b565b50505b505050565b600082821c905092915050565b6000612bd260001984600802612bb4565b1980831691505092915050565b6000612beb8383612bc1565b9150826002028217905092915050565b612c048261241b565b67ffffffffffffffff811115612c1d57612c1c612233565b5b612c2782546128fa565b612c32828285612b6e565b600060209050601f831160018114612c655760008415612c53578287015190505b612c5d8582612bdf565b865550612cc5565b601f198416612c7386612a4f565b60005b82811015612c9b57848901518255600182019150602085019450602081019050612c76565b86831015612cb85784890151612cb4601f891682612bc1565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000612d29602e83612426565b9150612d3482612ccd565b604082019050919050565b60006020820190508181036000830152612d5881612d1c565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000612dbb602b83612426565b9150612dc682612d5f565b604082019050919050565b60006020820190508181036000830152612dea81612dae565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e2b826122df565b9150612e36836122df565b9250828203905081811115612e4e57612e4d612df1565b5b92915050565b7f4d617820616d6f756e74206d696e746564000000000000000000000000000000600082015250565b6000612e8a601183612426565b9150612e9582612e54565b602082019050919050565b60006020820190508181036000830152612eb981612e7d565b9050919050565b6000612ecb826122df565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612efd57612efc612df1565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000612f64602c83612426565b9150612f6f82612f08565b604082019050919050565b60006020820190508181036000830152612f9381612f57565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000612fff601883612426565b915061300a82612fc9565b602082019050919050565b6000602082019050818103600083015261302e81612ff2565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000613091602983612426565b915061309c82613035565b604082019050919050565b600060208201905081810360008301526130c081613084565b9050919050565b600081905092915050565b600081546130df816128fa565b6130e981866130c7565b9450600182166000811461310457600181146131195761314c565b60ff198316865281151582028601935061314c565b61312285612a4f565b60005b8381101561314457815481890152600182019150602081019050613125565b838801955050505b50505092915050565b60006131608261241b565b61316a81856130c7565b935061317a818560208601612437565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006131bc6005836130c7565b91506131c782613186565b600582019050919050565b60006131de82856130d2565b91506131ea8284613155565b91506131f5826131af565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061325d602683612426565b915061326882613201565b604082019050919050565b6000602082019050818103600083015261328c81613250565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006132c9602083612426565b91506132d482613293565b602082019050919050565b600060208201905081810360008301526132f8816132bc565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061335b602583612426565b9150613366826132ff565b604082019050919050565b6000602082019050818103600083015261338a8161334e565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006133ed602483612426565b91506133f882613391565b604082019050919050565b6000602082019050818103600083015261341c816133e0565b9050919050565b600061342e826122df565b9150613439836122df565b925082820190508082111561345157613450612df1565b5b92915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061348d601983612426565b915061349882613457565b602082019050919050565b600060208201905081810360008301526134bc81613480565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061351f603283612426565b915061352a826134c3565b604082019050919050565b6000602082019050818103600083015261354e81613512565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061358f826122df565b915061359a836122df565b9250826135aa576135a9613555565b5b828204905092915050565b60006135c0826122df565b91506135cb836122df565b9250826135db576135da613555565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b600061360d826135e6565b61361781856135f1565b9350613627818560208601612437565b61363081612222565b840191505092915050565b600060808201905061365060008301876124e9565b61365d60208301866124e9565b61366a6040830185612651565b818103606083015261367c8184613602565b905095945050505050565b60008151905061369681612130565b92915050565b6000602082840312156136b2576136b16120fa565b5b60006136c084828501613687565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006136ff602083612426565b915061370a826136c9565b602082019050919050565b6000602082019050818103600083015261372e816136f2565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061376b601c83612426565b915061377682613735565b602082019050919050565b6000602082019050818103600083015261379a8161375e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220a4f3b2678c96fadd14a812c59ebdc7f65bbe98090011c4610fc6862349f759c164736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f62616679626569616b6c6f7a746c3475337470693632337a7064766e326976726c697371323535626b6e36766d3675346b37346a663732763332612e697066732e6e667473746f726167652e6c696e6b2f00000000000000
-----Decoded View---------------
Arg [0] : _uri (string): https://bafybeiakloztl4u3tpi623zpdvn2ivrlisq255bkn6vm6u4k74jf72v32a.ipfs.nftstorage.link/
Arg [1] : _maxSupply (uint256): 601
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000259
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000059
Arg [3] : 68747470733a2f2f62616679626569616b6c6f7a746c3475337470693632337a
Arg [4] : 7064766e326976726c697371323535626b6e36766d3675346b37346a66373276
Arg [5] : 3332612e697066732e6e667473746f726167652e6c696e6b2f00000000000000
Deployed Bytecode Sourcemap
47703:1703:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49232:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49116:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28209:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29722:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29239:417;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48285:87;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42115:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30422:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41783:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48380:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30829:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48693:157;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42305:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27920:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27651:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6738:103;;;:::i;:::-;;6090:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28378:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29965:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31085:323;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48098:179;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47895:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30191:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47871:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6996:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49232:171;49335:4;49359:36;49383:11;49359:23;:36::i;:::-;49352:43;;49232:171;;;:::o;49116:104::-;;;;:::o;28209:100::-;28263:13;28296:5;28289:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28209:100;:::o;29722:171::-;29798:7;29818:23;29833:7;29818:14;:23::i;:::-;29861:15;:24;29877:7;29861:24;;;;;;;;;;;;;;;;;;;;;29854:31;;29722:171;;;:::o;29239:417::-;29320:13;29336:23;29351:7;29336:14;:23::i;:::-;29320:39;;29384:5;29378:11;;:2;:11;;;29370:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29478:5;29462:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29487:37;29504:5;29511:12;:10;:12::i;:::-;29487:16;:37::i;:::-;29462:62;29440:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;29627:21;29636:2;29640:7;29627:8;:21::i;:::-;29309:347;29239:417;;:::o;48285:87::-;5976:13;:11;:13::i;:::-;48360:4:::1;48354:3;:10;;;;;;:::i;:::-;;48285:87:::0;:::o;42115:113::-;42176:7;42203:10;:17;;;;42196:24;;42115:113;:::o;30422:336::-;30617:41;30636:12;:10;:12::i;:::-;30650:7;30617:18;:41::i;:::-;30609:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;30722:28;30732:4;30738:2;30742:7;30722:9;:28::i;:::-;30422:336;;;:::o;41783:256::-;41880:7;41916:23;41933:5;41916:16;:23::i;:::-;41908:5;:31;41900:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;42005:12;:19;42018:5;42005:19;;;;;;;;;;;;;;;:26;42025:5;42005:26;;;;;;;;;;;;41998:33;;41783:256;;;;:::o;48380:305::-;48436:7;5976:13;:11;:13::i;:::-;48456:15:::1;48474:25;:15;:23;:25::i;:::-;48456:43;;48558:1;48547:9;;:12;;;;:::i;:::-;48518:25;:15;:23;:25::i;:::-;:41;;48510:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;48592:27;:15;:25;:27::i;:::-;48630:22;48640:2;48644:7;48630:9;:22::i;:::-;48670:7;48663:14;;;48380:305:::0;;;:::o;30829:185::-;30967:39;30984:4;30990:2;30994:7;30967:39;;;;;;;;;;;;:16;:39::i;:::-;30829:185;;;:::o;48693:157::-;5976:13;:11;:13::i;:::-;48774:9:::1;48770:73;48791:6;48787:1;:10;48770:73;;;48819:12;48828:2;48819:8;:12::i;:::-;;48799:3;;;;;:::i;:::-;;;;48770:73;;;;48693:157:::0;;:::o;42305:233::-;42380:7;42416:30;:28;:30::i;:::-;42408:5;:38;42400:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;42513:10;42524:5;42513:17;;;;;;;;:::i;:::-;;;;;;;;;;42506:24;;42305:233;;;:::o;27920:222::-;27992:7;28012:13;28028:7;:16;28036:7;28028:16;;;;;;;;;;;;;;;;;;;;;28012:32;;28080:1;28063:19;;:5;:19;;;28055:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28129:5;28122:12;;;27920:222;;;:::o;27651:207::-;27723:7;27768:1;27751:19;;:5;:19;;;27743:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27834:9;:16;27844:5;27834:16;;;;;;;;;;;;;;;;27827:23;;27651:207;;;:::o;6738:103::-;5976:13;:11;:13::i;:::-;6803:30:::1;6830:1;6803:18;:30::i;:::-;6738:103::o:0;6090:87::-;6136:7;6163:6;;;;;;;;;;;6156:13;;6090:87;:::o;28378:104::-;28434:13;28467:7;28460:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28378:104;:::o;29965:155::-;30060:52;30079:12;:10;:12::i;:::-;30093:8;30103;30060:18;:52::i;:::-;29965:155;;:::o;31085:323::-;31259:41;31278:12;:10;:12::i;:::-;31292:7;31259:18;:41::i;:::-;31251:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;31362:38;31376:4;31382:2;31386:7;31395:4;31362:13;:38::i;:::-;31085:323;;;;:::o;48098:179::-;48171:13;48228:3;48233:25;48250:7;48233:16;:25::i;:::-;48211:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48197:72;;48098:179;;;:::o;47895:24::-;;;;:::o;30191:164::-;30288:4;30312:18;:25;30331:5;30312:25;;;;;;;;;;;;;;;:35;30338:8;30312:35;;;;;;;;;;;;;;;;;;;;;;;;;30305:42;;30191:164;;;;:::o;47871:17::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6996:201::-;5976:13;:11;:13::i;:::-;7105:1:::1;7085:22;;:8;:22;;::::0;7077:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7161:28;7180:8;7161:18;:28::i;:::-;6996:201:::0;:::o;41475:224::-;41577:4;41616:35;41601:50;;;:11;:50;;;;:90;;;;41655:36;41679:11;41655:23;:36::i;:::-;41601:90;41594:97;;41475:224;;;:::o;37697:135::-;37779:16;37787:7;37779;:16::i;:::-;37771:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;37697:135;:::o;4641:98::-;4694:7;4721:10;4714:17;;4641:98;:::o;36976:174::-;37078:2;37051:15;:24;37067:7;37051:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37134:7;37130:2;37096:46;;37105:23;37120:7;37105:14;:23::i;:::-;37096:46;;;;;;;;;;;;36976:174;;:::o;6255:132::-;6330:12;:10;:12::i;:::-;6319:23;;:7;:5;:7::i;:::-;:23;;;6311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6255:132::o;33209:264::-;33302:4;33319:13;33335:23;33350:7;33335:14;:23::i;:::-;33319:39;;33388:5;33377:16;;:7;:16;;;:52;;;;33397:32;33414:5;33421:7;33397:16;:32::i;:::-;33377:52;:87;;;;33457:7;33433:31;;:20;33445:7;33433:11;:20::i;:::-;:31;;;33377:87;33369:96;;;33209:264;;;;:::o;36232:625::-;36391:4;36364:31;;:23;36379:7;36364:14;:23::i;:::-;:31;;;36356:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36470:1;36456:16;;:2;:16;;;36448:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36526:39;36547:4;36553:2;36557:7;36526:20;:39::i;:::-;36630:29;36647:1;36651:7;36630:8;:29::i;:::-;36691:1;36672:9;:15;36682:4;36672:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36720:1;36703:9;:13;36713:2;36703:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36751:2;36732:7;:16;36740:7;36732:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36790:7;36786:2;36771:27;;36780:4;36771:27;;;;;;;;;;;;36811:38;36831:4;36837:2;36841:7;36811:19;:38::i;:::-;36232:625;;;:::o;872:114::-;937:7;964;:14;;;957:21;;872:114;;;:::o;994:127::-;1101:1;1083:7;:14;;;:19;;;;;;;;;;;994:127;:::o;33815:110::-;33891:26;33901:2;33905:7;33891:26;;;;;;;;;;;;:9;:26::i;:::-;33815:110;;:::o;7357:191::-;7431:16;7450:6;;;;;;;;;;;7431:25;;7476:8;7467:6;;:17;;;;;;;;;;;;;;;;;;7531:8;7500:40;;7521:8;7500:40;;;;;;;;;;;;7420:128;7357:191;:::o;37293:315::-;37448:8;37439:17;;:5;:17;;;37431:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37535:8;37497:18;:25;37516:5;37497:25;;;;;;;;;;;;;;;:35;37523:8;37497:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37581:8;37559:41;;37574:5;37559:41;;;37591:8;37559:41;;;;;;:::i;:::-;;;;;;;;37293:315;;;:::o;32289:313::-;32445:28;32455:4;32461:2;32465:7;32445:9;:28::i;:::-;32492:47;32515:4;32521:2;32525:7;32534:4;32492:22;:47::i;:::-;32484:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;32289:313;;;;:::o;1895:723::-;1951:13;2181:1;2172:5;:10;2168:53;;2199:10;;;;;;;;;;;;;;;;;;;;;2168:53;2231:12;2246:5;2231:20;;2262:14;2287:78;2302:1;2294:4;:9;2287:78;;2320:8;;;;;:::i;:::-;;;;2351:2;2343:10;;;;;:::i;:::-;;;2287:78;;;2375:19;2407:6;2397:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2375:39;;2425:154;2441:1;2432:5;:10;2425:154;;2469:1;2459:11;;;;;:::i;:::-;;;2536:2;2528:5;:10;;;;:::i;:::-;2515:2;:24;;;;:::i;:::-;2502:39;;2485:6;2492;2485:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2565:2;2556:11;;;;;:::i;:::-;;;2425:154;;;2603:6;2589:21;;;;;1895:723;;;;:::o;27282:305::-;27384:4;27436:25;27421:40;;;:11;:40;;;;:105;;;;27493:33;27478:48;;;:11;:48;;;;27421:105;:158;;;;27543:36;27567:11;27543:23;:36::i;:::-;27421:158;27401:178;;27282:305;;;:::o;32915:127::-;32980:4;33032:1;33004:30;;:7;:16;33012:7;33004:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32997:37;;32915:127;;;:::o;48927:181::-;49055:45;49082:4;49088:2;49092:7;49055:26;:45::i;:::-;48927:181;;;:::o;40332:125::-;;;;:::o;34152:319::-;34281:18;34287:2;34291:7;34281:5;:18::i;:::-;34332:53;34363:1;34367:2;34371:7;34380:4;34332:22;:53::i;:::-;34310:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;34152:319;;;:::o;38396:853::-;38550:4;38571:15;:2;:13;;;:15::i;:::-;38567:675;;;38623:2;38607:36;;;38644:12;:10;:12::i;:::-;38658:4;38664:7;38673:4;38607:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38603:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38865:1;38848:6;:13;:18;38844:328;;38891:60;;;;;;;;;;:::i;:::-;;;;;;;;38844:328;39122:6;39116:13;39107:6;39103:2;39099:15;39092:38;38603:584;38739:41;;;38729:51;;;:6;:51;;;;38722:58;;;;;38567:675;39226:4;39219:11;;38396:853;;;;;;;:::o;18944:157::-;19029:4;19068:25;19053:40;;;:11;:40;;;;19046:47;;18944:157;;;:::o;43151:589::-;43295:45;43322:4;43328:2;43332:7;43295:26;:45::i;:::-;43373:1;43357:18;;:4;:18;;;43353:187;;43392:40;43424:7;43392:31;:40::i;:::-;43353:187;;;43462:2;43454:10;;:4;:10;;;43450:90;;43481:47;43514:4;43520:7;43481:32;:47::i;:::-;43450:90;43353:187;43568:1;43554:16;;:2;:16;;;43550:183;;43587:45;43624:7;43587:36;:45::i;:::-;43550:183;;;43660:4;43654:10;;:2;:10;;;43650:83;;43681:40;43709:2;43713:7;43681:27;:40::i;:::-;43650:83;43550:183;43151:589;;;:::o;34807:439::-;34901:1;34887:16;;:2;:16;;;34879:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34960:16;34968:7;34960;:16::i;:::-;34959:17;34951:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35022:45;35051:1;35055:2;35059:7;35022:20;:45::i;:::-;35097:1;35080:9;:13;35090:2;35080:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35128:2;35109:7;:16;35117:7;35109:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35173:7;35169:2;35148:33;;35165:1;35148:33;;;;;;;;;;;;35194:44;35222:1;35226:2;35230:7;35194:19;:44::i;:::-;34807:439;;:::o;8788:326::-;8848:4;9105:1;9083:7;:19;;;:23;9076:30;;8788:326;;;:::o;39821:126::-;;;;:::o;44463:164::-;44567:10;:17;;;;44540:15;:24;44556:7;44540:24;;;;;;;;;;;:44;;;;44595:10;44611:7;44595:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44463:164;:::o;45254:988::-;45520:22;45570:1;45545:22;45562:4;45545:16;:22::i;:::-;:26;;;;:::i;:::-;45520:51;;45582:18;45603:17;:26;45621:7;45603:26;;;;;;;;;;;;45582:47;;45750:14;45736:10;:28;45732:328;;45781:19;45803:12;:18;45816:4;45803:18;;;;;;;;;;;;;;;:34;45822:14;45803:34;;;;;;;;;;;;45781:56;;45887:11;45854:12;:18;45867:4;45854:18;;;;;;;;;;;;;;;:30;45873:10;45854:30;;;;;;;;;;;:44;;;;46004:10;45971:17;:30;45989:11;45971:30;;;;;;;;;;;:43;;;;45766:294;45732:328;46156:17;:26;46174:7;46156:26;;;;;;;;;;;46149:33;;;46200:12;:18;46213:4;46200:18;;;;;;;;;;;;;;;:34;46219:14;46200:34;;;;;;;;;;;46193:41;;;45335:907;;45254:988;;:::o;46537:1079::-;46790:22;46835:1;46815:10;:17;;;;:21;;;;:::i;:::-;46790:46;;46847:18;46868:15;:24;46884:7;46868:24;;;;;;;;;;;;46847:45;;47219:19;47241:10;47252:14;47241:26;;;;;;;;:::i;:::-;;;;;;;;;;47219:48;;47305:11;47280:10;47291;47280:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;47416:10;47385:15;:28;47401:11;47385:28;;;;;;;;;;;:41;;;;47557:15;:24;47573:7;47557:24;;;;;;;;;;;47550:31;;;47592:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;46608:1008;;;46537:1079;:::o;44041:221::-;44126:14;44143:20;44160:2;44143:16;:20::i;:::-;44126:37;;44201:7;44174:12;:16;44187:2;44174:16;;;;;;;;;;;;;;;:24;44191:6;44174:24;;;;;;;;;;;:34;;;;44248:6;44219:17;:26;44237:7;44219:26;;;;;;;;;;;:35;;;;44115:147;44041:221;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:126::-;1555:7;1595:42;1588:5;1584:54;1573:65;;1518:126;;;:::o;1650:96::-;1687:7;1716:24;1734:5;1716:24;:::i;:::-;1705:35;;1650:96;;;:::o;1752:122::-;1825:24;1843:5;1825:24;:::i;:::-;1818:5;1815:35;1805:63;;1864:1;1861;1854:12;1805:63;1752:122;:::o;1880:139::-;1926:5;1964:6;1951:20;1942:29;;1980:33;2007:5;1980:33;:::i;:::-;1880:139;;;;:::o;2025:117::-;2134:1;2131;2124:12;2148:102;2189:6;2240:2;2236:7;2231:2;2224:5;2220:14;2216:28;2206:38;;2148:102;;;:::o;2256:180::-;2304:77;2301:1;2294:88;2401:4;2398:1;2391:15;2425:4;2422:1;2415:15;2442:281;2525:27;2547:4;2525:27;:::i;:::-;2517:6;2513:40;2655:6;2643:10;2640:22;2619:18;2607:10;2604:34;2601:62;2598:88;;;2666:18;;:::i;:::-;2598:88;2706:10;2702:2;2695:22;2485:238;2442:281;;:::o;2729:129::-;2763:6;2790:20;;:::i;:::-;2780:30;;2819:33;2847:4;2839:6;2819:33;:::i;:::-;2729:129;;;:::o;2864:311::-;2941:4;3031:18;3023:6;3020:30;3017:56;;;3053:18;;:::i;:::-;3017:56;3103:4;3095:6;3091:17;3083:25;;3163:4;3157;3153:15;3145:23;;2864:311;;;:::o;3181:117::-;3290:1;3287;3280:12;3304:77;3341:7;3370:5;3359:16;;3304:77;;;:::o;3387:122::-;3460:24;3478:5;3460:24;:::i;:::-;3453:5;3450:35;3440:63;;3499:1;3496;3489:12;3440:63;3387:122;:::o;3515:139::-;3561:5;3599:6;3586:20;3577:29;;3615:33;3642:5;3615:33;:::i;:::-;3515:139;;;;:::o;3677:710::-;3773:5;3798:81;3814:64;3871:6;3814:64;:::i;:::-;3798:81;:::i;:::-;3789:90;;3899:5;3928:6;3921:5;3914:21;3962:4;3955:5;3951:16;3944:23;;4015:4;4007:6;4003:17;3995:6;3991:30;4044:3;4036:6;4033:15;4030:122;;;4063:79;;:::i;:::-;4030:122;4178:6;4161:220;4195:6;4190:3;4187:15;4161:220;;;4270:3;4299:37;4332:3;4320:10;4299:37;:::i;:::-;4294:3;4287:50;4366:4;4361:3;4357:14;4350:21;;4237:144;4221:4;4216:3;4212:14;4205:21;;4161:220;;;4165:21;3779:608;;3677:710;;;;;:::o;4410:370::-;4481:5;4530:3;4523:4;4515:6;4511:17;4507:27;4497:122;;4538:79;;:::i;:::-;4497:122;4655:6;4642:20;4680:94;4770:3;4762:6;4755:4;4747:6;4743:17;4680:94;:::i;:::-;4671:103;;4487:293;4410:370;;;;:::o;4786:829::-;4888:6;4896;4904;4953:2;4941:9;4932:7;4928:23;4924:32;4921:119;;;4959:79;;:::i;:::-;4921:119;5079:1;5104:53;5149:7;5140:6;5129:9;5125:22;5104:53;:::i;:::-;5094:63;;5050:117;5206:2;5232:53;5277:7;5268:6;5257:9;5253:22;5232:53;:::i;:::-;5222:63;;5177:118;5362:2;5351:9;5347:18;5334:32;5393:18;5385:6;5382:30;5379:117;;;5415:79;;:::i;:::-;5379:117;5520:78;5590:7;5581:6;5570:9;5566:22;5520:78;:::i;:::-;5510:88;;5305:303;4786:829;;;;;:::o;5621:99::-;5673:6;5707:5;5701:12;5691:22;;5621:99;;;:::o;5726:169::-;5810:11;5844:6;5839:3;5832:19;5884:4;5879:3;5875:14;5860:29;;5726:169;;;;:::o;5901:246::-;5982:1;5992:113;6006:6;6003:1;6000:13;5992:113;;;6091:1;6086:3;6082:11;6076:18;6072:1;6067:3;6063:11;6056:39;6028:2;6025:1;6021:10;6016:15;;5992:113;;;6139:1;6130:6;6125:3;6121:16;6114:27;5963:184;5901:246;;;:::o;6153:377::-;6241:3;6269:39;6302:5;6269:39;:::i;:::-;6324:71;6388:6;6383:3;6324:71;:::i;:::-;6317:78;;6404:65;6462:6;6457:3;6450:4;6443:5;6439:16;6404:65;:::i;:::-;6494:29;6516:6;6494:29;:::i;:::-;6489:3;6485:39;6478:46;;6245:285;6153:377;;;;:::o;6536:313::-;6649:4;6687:2;6676:9;6672:18;6664:26;;6736:9;6730:4;6726:20;6722:1;6711:9;6707:17;6700:47;6764:78;6837:4;6828:6;6764:78;:::i;:::-;6756:86;;6536:313;;;;:::o;6855:329::-;6914:6;6963:2;6951:9;6942:7;6938:23;6934:32;6931:119;;;6969:79;;:::i;:::-;6931:119;7089:1;7114:53;7159:7;7150:6;7139:9;7135:22;7114:53;:::i;:::-;7104:63;;7060:117;6855:329;;;;:::o;7190:118::-;7277:24;7295:5;7277:24;:::i;:::-;7272:3;7265:37;7190:118;;:::o;7314:222::-;7407:4;7445:2;7434:9;7430:18;7422:26;;7458:71;7526:1;7515:9;7511:17;7502:6;7458:71;:::i;:::-;7314:222;;;;:::o;7542:474::-;7610:6;7618;7667:2;7655:9;7646:7;7642:23;7638:32;7635:119;;;7673:79;;:::i;:::-;7635:119;7793:1;7818:53;7863:7;7854:6;7843:9;7839:22;7818:53;:::i;:::-;7808:63;;7764:117;7920:2;7946:53;7991:7;7982:6;7971:9;7967:22;7946:53;:::i;:::-;7936:63;;7891:118;7542:474;;;;;:::o;8022:117::-;8131:1;8128;8121:12;8145:308;8207:4;8297:18;8289:6;8286:30;8283:56;;;8319:18;;:::i;:::-;8283:56;8357:29;8379:6;8357:29;:::i;:::-;8349:37;;8441:4;8435;8431:15;8423:23;;8145:308;;;:::o;8459:146::-;8556:6;8551:3;8546;8533:30;8597:1;8588:6;8583:3;8579:16;8572:27;8459:146;;;:::o;8611:425::-;8689:5;8714:66;8730:49;8772:6;8730:49;:::i;:::-;8714:66;:::i;:::-;8705:75;;8803:6;8796:5;8789:21;8841:4;8834:5;8830:16;8879:3;8870:6;8865:3;8861:16;8858:25;8855:112;;;8886:79;;:::i;:::-;8855:112;8976:54;9023:6;9018:3;9013;8976:54;:::i;:::-;8695:341;8611:425;;;;;:::o;9056:340::-;9112:5;9161:3;9154:4;9146:6;9142:17;9138:27;9128:122;;9169:79;;:::i;:::-;9128:122;9286:6;9273:20;9311:79;9386:3;9378:6;9371:4;9363:6;9359:17;9311:79;:::i;:::-;9302:88;;9118:278;9056:340;;;;:::o;9402:509::-;9471:6;9520:2;9508:9;9499:7;9495:23;9491:32;9488:119;;;9526:79;;:::i;:::-;9488:119;9674:1;9663:9;9659:17;9646:31;9704:18;9696:6;9693:30;9690:117;;;9726:79;;:::i;:::-;9690:117;9831:63;9886:7;9877:6;9866:9;9862:22;9831:63;:::i;:::-;9821:73;;9617:287;9402:509;;;;:::o;9917:118::-;10004:24;10022:5;10004:24;:::i;:::-;9999:3;9992:37;9917:118;;:::o;10041:222::-;10134:4;10172:2;10161:9;10157:18;10149:26;;10185:71;10253:1;10242:9;10238:17;10229:6;10185:71;:::i;:::-;10041:222;;;;:::o;10269:619::-;10346:6;10354;10362;10411:2;10399:9;10390:7;10386:23;10382:32;10379:119;;;10417:79;;:::i;:::-;10379:119;10537:1;10562:53;10607:7;10598:6;10587:9;10583:22;10562:53;:::i;:::-;10552:63;;10508:117;10664:2;10690:53;10735:7;10726:6;10715:9;10711:22;10690:53;:::i;:::-;10680:63;;10635:118;10792:2;10818:53;10863:7;10854:6;10843:9;10839:22;10818:53;:::i;:::-;10808:63;;10763:118;10269:619;;;;;:::o;10894:329::-;10953:6;11002:2;10990:9;10981:7;10977:23;10973:32;10970:119;;;11008:79;;:::i;:::-;10970:119;11128:1;11153:53;11198:7;11189:6;11178:9;11174:22;11153:53;:::i;:::-;11143:63;;11099:117;10894:329;;;;:::o;11229:116::-;11299:21;11314:5;11299:21;:::i;:::-;11292:5;11289:32;11279:60;;11335:1;11332;11325:12;11279:60;11229:116;:::o;11351:133::-;11394:5;11432:6;11419:20;11410:29;;11448:30;11472:5;11448:30;:::i;:::-;11351:133;;;;:::o;11490:468::-;11555:6;11563;11612:2;11600:9;11591:7;11587:23;11583:32;11580:119;;;11618:79;;:::i;:::-;11580:119;11738:1;11763:53;11808:7;11799:6;11788:9;11784:22;11763:53;:::i;:::-;11753:63;;11709:117;11865:2;11891:50;11933:7;11924:6;11913:9;11909:22;11891:50;:::i;:::-;11881:60;;11836:115;11490:468;;;;;:::o;11964:307::-;12025:4;12115:18;12107:6;12104:30;12101:56;;;12137:18;;:::i;:::-;12101:56;12175:29;12197:6;12175:29;:::i;:::-;12167:37;;12259:4;12253;12249:15;12241:23;;11964:307;;;:::o;12277:423::-;12354:5;12379:65;12395:48;12436:6;12395:48;:::i;:::-;12379:65;:::i;:::-;12370:74;;12467:6;12460:5;12453:21;12505:4;12498:5;12494:16;12543:3;12534:6;12529:3;12525:16;12522:25;12519:112;;;12550:79;;:::i;:::-;12519:112;12640:54;12687:6;12682:3;12677;12640:54;:::i;:::-;12360:340;12277:423;;;;;:::o;12719:338::-;12774:5;12823:3;12816:4;12808:6;12804:17;12800:27;12790:122;;12831:79;;:::i;:::-;12790:122;12948:6;12935:20;12973:78;13047:3;13039:6;13032:4;13024:6;13020:17;12973:78;:::i;:::-;12964:87;;12780:277;12719:338;;;;:::o;13063:943::-;13158:6;13166;13174;13182;13231:3;13219:9;13210:7;13206:23;13202:33;13199:120;;;13238:79;;:::i;:::-;13199:120;13358:1;13383:53;13428:7;13419:6;13408:9;13404:22;13383:53;:::i;:::-;13373:63;;13329:117;13485:2;13511:53;13556:7;13547:6;13536:9;13532:22;13511:53;:::i;:::-;13501:63;;13456:118;13613:2;13639:53;13684:7;13675:6;13664:9;13660:22;13639:53;:::i;:::-;13629:63;;13584:118;13769:2;13758:9;13754:18;13741:32;13800:18;13792:6;13789:30;13786:117;;;13822:79;;:::i;:::-;13786:117;13927:62;13981:7;13972:6;13961:9;13957:22;13927:62;:::i;:::-;13917:72;;13712:287;13063:943;;;;;;;:::o;14012:474::-;14080:6;14088;14137:2;14125:9;14116:7;14112:23;14108:32;14105:119;;;14143:79;;:::i;:::-;14105:119;14263:1;14288:53;14333:7;14324:6;14313:9;14309:22;14288:53;:::i;:::-;14278:63;;14234:117;14390:2;14416:53;14461:7;14452:6;14441:9;14437:22;14416:53;:::i;:::-;14406:63;;14361:118;14012:474;;;;;:::o;14492:180::-;14540:77;14537:1;14530:88;14637:4;14634:1;14627:15;14661:4;14658:1;14651:15;14678:320;14722:6;14759:1;14753:4;14749:12;14739:22;;14806:1;14800:4;14796:12;14827:18;14817:81;;14883:4;14875:6;14871:17;14861:27;;14817:81;14945:2;14937:6;14934:14;14914:18;14911:38;14908:84;;14964:18;;:::i;:::-;14908:84;14729:269;14678:320;;;:::o;15004:220::-;15144:34;15140:1;15132:6;15128:14;15121:58;15213:3;15208:2;15200:6;15196:15;15189:28;15004:220;:::o;15230:366::-;15372:3;15393:67;15457:2;15452:3;15393:67;:::i;:::-;15386:74;;15469:93;15558:3;15469:93;:::i;:::-;15587:2;15582:3;15578:12;15571:19;;15230:366;;;:::o;15602:419::-;15768:4;15806:2;15795:9;15791:18;15783:26;;15855:9;15849:4;15845:20;15841:1;15830:9;15826:17;15819:47;15883:131;16009:4;15883:131;:::i;:::-;15875:139;;15602:419;;;:::o;16027:249::-;16167:34;16163:1;16155:6;16151:14;16144:58;16236:32;16231:2;16223:6;16219:15;16212:57;16027:249;:::o;16282:366::-;16424:3;16445:67;16509:2;16504:3;16445:67;:::i;:::-;16438:74;;16521:93;16610:3;16521:93;:::i;:::-;16639:2;16634:3;16630:12;16623:19;;16282:366;;;:::o;16654:419::-;16820:4;16858:2;16847:9;16843:18;16835:26;;16907:9;16901:4;16897:20;16893:1;16882:9;16878:17;16871:47;16935:131;17061:4;16935:131;:::i;:::-;16927:139;;16654:419;;;:::o;17079:141::-;17128:4;17151:3;17143:11;;17174:3;17171:1;17164:14;17208:4;17205:1;17195:18;17187:26;;17079:141;;;:::o;17226:93::-;17263:6;17310:2;17305;17298:5;17294:14;17290:23;17280:33;;17226:93;;;:::o;17325:107::-;17369:8;17419:5;17413:4;17409:16;17388:37;;17325:107;;;;:::o;17438:393::-;17507:6;17557:1;17545:10;17541:18;17580:97;17610:66;17599:9;17580:97;:::i;:::-;17698:39;17728:8;17717:9;17698:39;:::i;:::-;17686:51;;17770:4;17766:9;17759:5;17755:21;17746:30;;17819:4;17809:8;17805:19;17798:5;17795:30;17785:40;;17514:317;;17438:393;;;;;:::o;17837:60::-;17865:3;17886:5;17879:12;;17837:60;;;:::o;17903:142::-;17953:9;17986:53;18004:34;18013:24;18031:5;18013:24;:::i;:::-;18004:34;:::i;:::-;17986:53;:::i;:::-;17973:66;;17903:142;;;:::o;18051:75::-;18094:3;18115:5;18108:12;;18051:75;;;:::o;18132:269::-;18242:39;18273:7;18242:39;:::i;:::-;18303:91;18352:41;18376:16;18352:41;:::i;:::-;18344:6;18337:4;18331:11;18303:91;:::i;:::-;18297:4;18290:105;18208:193;18132:269;;;:::o;18407:73::-;18452:3;18407:73;:::o;18486:189::-;18563:32;;:::i;:::-;18604:65;18662:6;18654;18648:4;18604:65;:::i;:::-;18539:136;18486:189;;:::o;18681:186::-;18741:120;18758:3;18751:5;18748:14;18741:120;;;18812:39;18849:1;18842:5;18812:39;:::i;:::-;18785:1;18778:5;18774:13;18765:22;;18741:120;;;18681:186;;:::o;18873:543::-;18974:2;18969:3;18966:11;18963:446;;;19008:38;19040:5;19008:38;:::i;:::-;19092:29;19110:10;19092:29;:::i;:::-;19082:8;19078:44;19275:2;19263:10;19260:18;19257:49;;;19296:8;19281:23;;19257:49;19319:80;19375:22;19393:3;19375:22;:::i;:::-;19365:8;19361:37;19348:11;19319:80;:::i;:::-;18978:431;;18963:446;18873:543;;;:::o;19422:117::-;19476:8;19526:5;19520:4;19516:16;19495:37;;19422:117;;;;:::o;19545:169::-;19589:6;19622:51;19670:1;19666:6;19658:5;19655:1;19651:13;19622:51;:::i;:::-;19618:56;19703:4;19697;19693:15;19683:25;;19596:118;19545:169;;;;:::o;19719:295::-;19795:4;19941:29;19966:3;19960:4;19941:29;:::i;:::-;19933:37;;20003:3;20000:1;19996:11;19990:4;19987:21;19979:29;;19719:295;;;;:::o;20019:1395::-;20136:37;20169:3;20136:37;:::i;:::-;20238:18;20230:6;20227:30;20224:56;;;20260:18;;:::i;:::-;20224:56;20304:38;20336:4;20330:11;20304:38;:::i;:::-;20389:67;20449:6;20441;20435:4;20389:67;:::i;:::-;20483:1;20507:4;20494:17;;20539:2;20531:6;20528:14;20556:1;20551:618;;;;21213:1;21230:6;21227:77;;;21279:9;21274:3;21270:19;21264:26;21255:35;;21227:77;21330:67;21390:6;21383:5;21330:67;:::i;:::-;21324:4;21317:81;21186:222;20521:887;;20551:618;20603:4;20599:9;20591:6;20587:22;20637:37;20669:4;20637:37;:::i;:::-;20696:1;20710:208;20724:7;20721:1;20718:14;20710:208;;;20803:9;20798:3;20794:19;20788:26;20780:6;20773:42;20854:1;20846:6;20842:14;20832:24;;20901:2;20890:9;20886:18;20873:31;;20747:4;20744:1;20740:12;20735:17;;20710:208;;;20946:6;20937:7;20934:19;20931:179;;;21004:9;20999:3;20995:19;20989:26;21047:48;21089:4;21081:6;21077:17;21066:9;21047:48;:::i;:::-;21039:6;21032:64;20954:156;20931:179;21156:1;21152;21144:6;21140:14;21136:22;21130:4;21123:36;20558:611;;;20521:887;;20111:1303;;;20019:1395;;:::o;21420:233::-;21560:34;21556:1;21548:6;21544:14;21537:58;21629:16;21624:2;21616:6;21612:15;21605:41;21420:233;:::o;21659:366::-;21801:3;21822:67;21886:2;21881:3;21822:67;:::i;:::-;21815:74;;21898:93;21987:3;21898:93;:::i;:::-;22016:2;22011:3;22007:12;22000:19;;21659:366;;;:::o;22031:419::-;22197:4;22235:2;22224:9;22220:18;22212:26;;22284:9;22278:4;22274:20;22270:1;22259:9;22255:17;22248:47;22312:131;22438:4;22312:131;:::i;:::-;22304:139;;22031:419;;;:::o;22456:230::-;22596:34;22592:1;22584:6;22580:14;22573:58;22665:13;22660:2;22652:6;22648:15;22641:38;22456:230;:::o;22692:366::-;22834:3;22855:67;22919:2;22914:3;22855:67;:::i;:::-;22848:74;;22931:93;23020:3;22931:93;:::i;:::-;23049:2;23044:3;23040:12;23033:19;;22692:366;;;:::o;23064:419::-;23230:4;23268:2;23257:9;23253:18;23245:26;;23317:9;23311:4;23307:20;23303:1;23292:9;23288:17;23281:47;23345:131;23471:4;23345:131;:::i;:::-;23337:139;;23064:419;;;:::o;23489:180::-;23537:77;23534:1;23527:88;23634:4;23631:1;23624:15;23658:4;23655:1;23648:15;23675:194;23715:4;23735:20;23753:1;23735:20;:::i;:::-;23730:25;;23769:20;23787:1;23769:20;:::i;:::-;23764:25;;23813:1;23810;23806:9;23798:17;;23837:1;23831:4;23828:11;23825:37;;;23842:18;;:::i;:::-;23825:37;23675:194;;;;:::o;23875:167::-;24015:19;24011:1;24003:6;23999:14;23992:43;23875:167;:::o;24048:366::-;24190:3;24211:67;24275:2;24270:3;24211:67;:::i;:::-;24204:74;;24287:93;24376:3;24287:93;:::i;:::-;24405:2;24400:3;24396:12;24389:19;;24048:366;;;:::o;24420:419::-;24586:4;24624:2;24613:9;24609:18;24601:26;;24673:9;24667:4;24663:20;24659:1;24648:9;24644:17;24637:47;24701:131;24827:4;24701:131;:::i;:::-;24693:139;;24420:419;;;:::o;24845:233::-;24884:3;24907:24;24925:5;24907:24;:::i;:::-;24898:33;;24953:66;24946:5;24943:77;24940:103;;25023:18;;:::i;:::-;24940:103;25070:1;25063:5;25059:13;25052:20;;24845:233;;;:::o;25084:231::-;25224:34;25220:1;25212:6;25208:14;25201:58;25293:14;25288:2;25280:6;25276:15;25269:39;25084:231;:::o;25321:366::-;25463:3;25484:67;25548:2;25543:3;25484:67;:::i;:::-;25477:74;;25560:93;25649:3;25560:93;:::i;:::-;25678:2;25673:3;25669:12;25662:19;;25321:366;;;:::o;25693:419::-;25859:4;25897:2;25886:9;25882:18;25874:26;;25946:9;25940:4;25936:20;25932:1;25921:9;25917:17;25910:47;25974:131;26100:4;25974:131;:::i;:::-;25966:139;;25693:419;;;:::o;26118:180::-;26166:77;26163:1;26156:88;26263:4;26260:1;26253:15;26287:4;26284:1;26277:15;26304:174;26444:26;26440:1;26432:6;26428:14;26421:50;26304:174;:::o;26484:366::-;26626:3;26647:67;26711:2;26706:3;26647:67;:::i;:::-;26640:74;;26723:93;26812:3;26723:93;:::i;:::-;26841:2;26836:3;26832:12;26825:19;;26484:366;;;:::o;26856:419::-;27022:4;27060:2;27049:9;27045:18;27037:26;;27109:9;27103:4;27099:20;27095:1;27084:9;27080:17;27073:47;27137:131;27263:4;27137:131;:::i;:::-;27129:139;;26856:419;;;:::o;27281:228::-;27421:34;27417:1;27409:6;27405:14;27398:58;27490:11;27485:2;27477:6;27473:15;27466:36;27281:228;:::o;27515:366::-;27657:3;27678:67;27742:2;27737:3;27678:67;:::i;:::-;27671:74;;27754:93;27843:3;27754:93;:::i;:::-;27872:2;27867:3;27863:12;27856:19;;27515:366;;;:::o;27887:419::-;28053:4;28091:2;28080:9;28076:18;28068:26;;28140:9;28134:4;28130:20;28126:1;28115:9;28111:17;28104:47;28168:131;28294:4;28168:131;:::i;:::-;28160:139;;27887:419;;;:::o;28312:148::-;28414:11;28451:3;28436:18;;28312:148;;;;:::o;28490:874::-;28593:3;28630:5;28624:12;28659:36;28685:9;28659:36;:::i;:::-;28711:89;28793:6;28788:3;28711:89;:::i;:::-;28704:96;;28831:1;28820:9;28816:17;28847:1;28842:166;;;;29022:1;29017:341;;;;28809:549;;28842:166;28926:4;28922:9;28911;28907:25;28902:3;28895:38;28988:6;28981:14;28974:22;28966:6;28962:35;28957:3;28953:45;28946:52;;28842:166;;29017:341;29084:38;29116:5;29084:38;:::i;:::-;29144:1;29158:154;29172:6;29169:1;29166:13;29158:154;;;29246:7;29240:14;29236:1;29231:3;29227:11;29220:35;29296:1;29287:7;29283:15;29272:26;;29194:4;29191:1;29187:12;29182:17;;29158:154;;;29341:6;29336:3;29332:16;29325:23;;29024:334;;28809:549;;28597:767;;28490:874;;;;:::o;29370:390::-;29476:3;29504:39;29537:5;29504:39;:::i;:::-;29559:89;29641:6;29636:3;29559:89;:::i;:::-;29552:96;;29657:65;29715:6;29710:3;29703:4;29696:5;29692:16;29657:65;:::i;:::-;29747:6;29742:3;29738:16;29731:23;;29480:280;29370:390;;;;:::o;29766:155::-;29906:7;29902:1;29894:6;29890:14;29883:31;29766:155;:::o;29927:400::-;30087:3;30108:84;30190:1;30185:3;30108:84;:::i;:::-;30101:91;;30201:93;30290:3;30201:93;:::i;:::-;30319:1;30314:3;30310:11;30303:18;;29927:400;;;:::o;30333:695::-;30611:3;30633:92;30721:3;30712:6;30633:92;:::i;:::-;30626:99;;30742:95;30833:3;30824:6;30742:95;:::i;:::-;30735:102;;30854:148;30998:3;30854:148;:::i;:::-;30847:155;;31019:3;31012:10;;30333:695;;;;;:::o;31034:225::-;31174:34;31170:1;31162:6;31158:14;31151:58;31243:8;31238:2;31230:6;31226:15;31219:33;31034:225;:::o;31265:366::-;31407:3;31428:67;31492:2;31487:3;31428:67;:::i;:::-;31421:74;;31504:93;31593:3;31504:93;:::i;:::-;31622:2;31617:3;31613:12;31606:19;;31265:366;;;:::o;31637:419::-;31803:4;31841:2;31830:9;31826:18;31818:26;;31890:9;31884:4;31880:20;31876:1;31865:9;31861:17;31854:47;31918:131;32044:4;31918:131;:::i;:::-;31910:139;;31637:419;;;:::o;32062:182::-;32202:34;32198:1;32190:6;32186:14;32179:58;32062:182;:::o;32250:366::-;32392:3;32413:67;32477:2;32472:3;32413:67;:::i;:::-;32406:74;;32489:93;32578:3;32489:93;:::i;:::-;32607:2;32602:3;32598:12;32591:19;;32250:366;;;:::o;32622:419::-;32788:4;32826:2;32815:9;32811:18;32803:26;;32875:9;32869:4;32865:20;32861:1;32850:9;32846:17;32839:47;32903:131;33029:4;32903:131;:::i;:::-;32895:139;;32622:419;;;:::o;33047:224::-;33187:34;33183:1;33175:6;33171:14;33164:58;33256:7;33251:2;33243:6;33239:15;33232:32;33047:224;:::o;33277:366::-;33419:3;33440:67;33504:2;33499:3;33440:67;:::i;:::-;33433:74;;33516:93;33605:3;33516:93;:::i;:::-;33634:2;33629:3;33625:12;33618:19;;33277:366;;;:::o;33649:419::-;33815:4;33853:2;33842:9;33838:18;33830:26;;33902:9;33896:4;33892:20;33888:1;33877:9;33873:17;33866:47;33930:131;34056:4;33930:131;:::i;:::-;33922:139;;33649:419;;;:::o;34074:223::-;34214:34;34210:1;34202:6;34198:14;34191:58;34283:6;34278:2;34270:6;34266:15;34259:31;34074:223;:::o;34303:366::-;34445:3;34466:67;34530:2;34525:3;34466:67;:::i;:::-;34459:74;;34542:93;34631:3;34542:93;:::i;:::-;34660:2;34655:3;34651:12;34644:19;;34303:366;;;:::o;34675:419::-;34841:4;34879:2;34868:9;34864:18;34856:26;;34928:9;34922:4;34918:20;34914:1;34903:9;34899:17;34892:47;34956:131;35082:4;34956:131;:::i;:::-;34948:139;;34675:419;;;:::o;35100:191::-;35140:3;35159:20;35177:1;35159:20;:::i;:::-;35154:25;;35193:20;35211:1;35193:20;:::i;:::-;35188:25;;35236:1;35233;35229:9;35222:16;;35257:3;35254:1;35251:10;35248:36;;;35264:18;;:::i;:::-;35248:36;35100:191;;;;:::o;35297:175::-;35437:27;35433:1;35425:6;35421:14;35414:51;35297:175;:::o;35478:366::-;35620:3;35641:67;35705:2;35700:3;35641:67;:::i;:::-;35634:74;;35717:93;35806:3;35717:93;:::i;:::-;35835:2;35830:3;35826:12;35819:19;;35478:366;;;:::o;35850:419::-;36016:4;36054:2;36043:9;36039:18;36031:26;;36103:9;36097:4;36093:20;36089:1;36078:9;36074:17;36067:47;36131:131;36257:4;36131:131;:::i;:::-;36123:139;;35850:419;;;:::o;36275:237::-;36415:34;36411:1;36403:6;36399:14;36392:58;36484:20;36479:2;36471:6;36467:15;36460:45;36275:237;:::o;36518:366::-;36660:3;36681:67;36745:2;36740:3;36681:67;:::i;:::-;36674:74;;36757:93;36846:3;36757:93;:::i;:::-;36875:2;36870:3;36866:12;36859:19;;36518:366;;;:::o;36890:419::-;37056:4;37094:2;37083:9;37079:18;37071:26;;37143:9;37137:4;37133:20;37129:1;37118:9;37114:17;37107:47;37171:131;37297:4;37171:131;:::i;:::-;37163:139;;36890:419;;;:::o;37315:180::-;37363:77;37360:1;37353:88;37460:4;37457:1;37450:15;37484:4;37481:1;37474:15;37501:185;37541:1;37558:20;37576:1;37558:20;:::i;:::-;37553:25;;37592:20;37610:1;37592:20;:::i;:::-;37587:25;;37631:1;37621:35;;37636:18;;:::i;:::-;37621:35;37678:1;37675;37671:9;37666:14;;37501:185;;;;:::o;37692:176::-;37724:1;37741:20;37759:1;37741:20;:::i;:::-;37736:25;;37775:20;37793:1;37775:20;:::i;:::-;37770:25;;37814:1;37804:35;;37819:18;;:::i;:::-;37804:35;37860:1;37857;37853:9;37848:14;;37692:176;;;;:::o;37874:98::-;37925:6;37959:5;37953:12;37943:22;;37874:98;;;:::o;37978:168::-;38061:11;38095:6;38090:3;38083:19;38135:4;38130:3;38126:14;38111:29;;37978:168;;;;:::o;38152:373::-;38238:3;38266:38;38298:5;38266:38;:::i;:::-;38320:70;38383:6;38378:3;38320:70;:::i;:::-;38313:77;;38399:65;38457:6;38452:3;38445:4;38438:5;38434:16;38399:65;:::i;:::-;38489:29;38511:6;38489:29;:::i;:::-;38484:3;38480:39;38473:46;;38242:283;38152:373;;;;:::o;38531:640::-;38726:4;38764:3;38753:9;38749:19;38741:27;;38778:71;38846:1;38835:9;38831:17;38822:6;38778:71;:::i;:::-;38859:72;38927:2;38916:9;38912:18;38903:6;38859:72;:::i;:::-;38941;39009:2;38998:9;38994:18;38985:6;38941:72;:::i;:::-;39060:9;39054:4;39050:20;39045:2;39034:9;39030:18;39023:48;39088:76;39159:4;39150:6;39088:76;:::i;:::-;39080:84;;38531:640;;;;;;;:::o;39177:141::-;39233:5;39264:6;39258:13;39249:22;;39280:32;39306:5;39280:32;:::i;:::-;39177:141;;;;:::o;39324:349::-;39393:6;39442:2;39430:9;39421:7;39417:23;39413:32;39410:119;;;39448:79;;:::i;:::-;39410:119;39568:1;39593:63;39648:7;39639:6;39628:9;39624:22;39593:63;:::i;:::-;39583:73;;39539:127;39324:349;;;;:::o;39679:182::-;39819:34;39815:1;39807:6;39803:14;39796:58;39679:182;:::o;39867:366::-;40009:3;40030:67;40094:2;40089:3;40030:67;:::i;:::-;40023:74;;40106:93;40195:3;40106:93;:::i;:::-;40224:2;40219:3;40215:12;40208:19;;39867:366;;;:::o;40239:419::-;40405:4;40443:2;40432:9;40428:18;40420:26;;40492:9;40486:4;40482:20;40478:1;40467:9;40463:17;40456:47;40520:131;40646:4;40520:131;:::i;:::-;40512:139;;40239:419;;;:::o;40664:178::-;40804:30;40800:1;40792:6;40788:14;40781:54;40664:178;:::o;40848:366::-;40990:3;41011:67;41075:2;41070:3;41011:67;:::i;:::-;41004:74;;41087:93;41176:3;41087:93;:::i;:::-;41205:2;41200:3;41196:12;41189:19;;40848:366;;;:::o;41220:419::-;41386:4;41424:2;41413:9;41409:18;41401:26;;41473:9;41467:4;41463:20;41459:1;41448:9;41444:17;41437:47;41501:131;41627:4;41501:131;:::i;:::-;41493:139;;41220:419;;;:::o;41645:180::-;41693:77;41690:1;41683:88;41790:4;41787:1;41780:15;41814:4;41811:1;41804:15
Swarm Source
ipfs://a4f3b2678c96fadd14a812c59ebdc7f65bbe98090011c4610fc6862349f759c1
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.