Overview
CRO Balance
CRO Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 2,091 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Safe Transfer Fr... | 18169211 | 39 days ago | IN | 0 CRO | 0.49053175 | ||||
Set Approval For... | 17954218 | 53 days ago | IN | 0 CRO | 0.18714668 | ||||
Set Approval For... | 17954216 | 53 days ago | IN | 0 CRO | 0.18714668 | ||||
Set Approval For... | 17473950 | 85 days ago | IN | 0 CRO | 0.23606281 | ||||
Set Approval For... | 17343103 | 93 days ago | IN | 0 CRO | 0.14971735 | ||||
Set Approval For... | 16669179 | 138 days ago | IN | 0 CRO | 0.23613295 | ||||
Set Approval For... | 16454208 | 152 days ago | IN | 0 CRO | 0.14967287 | ||||
Safe Transfer Fr... | 16084367 | 176 days ago | IN | 0 CRO | 0.49045889 | ||||
Set Approval For... | 15606326 | 207 days ago | IN | 0 CRO | 0.23613295 | ||||
Set Approval For... | 14377365 | 288 days ago | IN | 0 CRO | 0.23613295 | ||||
Set Approval For... | 14238943 | 297 days ago | IN | 0 CRO | 0.23613295 | ||||
Set Approval For... | 13973974 | 314 days ago | IN | 0 CRO | 0.23613295 | ||||
Set Approval For... | 13966236 | 315 days ago | IN | 0 CRO | 0.24090236 | ||||
Set Approval For... | 13957340 | 316 days ago | IN | 0 CRO | 0.23613295 | ||||
Set Approval For... | 13901429 | 319 days ago | IN | 0 CRO | 0.14971735 | ||||
Set Approval For... | 13901425 | 319 days ago | IN | 0 CRO | 0.14971735 | ||||
Set Approval For... | 13605591 | 339 days ago | IN | 0 CRO | 0.14971735 | ||||
Set Approval For... | 13605591 | 339 days ago | IN | 0 CRO | 0.14971735 | ||||
Set Approval For... | 13605590 | 339 days ago | IN | 0 CRO | 0.14971735 | ||||
Set Approval For... | 13605589 | 339 days ago | IN | 0 CRO | 0.14971735 | ||||
Set Approval For... | 13605589 | 339 days ago | IN | 0 CRO | 0.14971735 | ||||
Set Approval For... | 13500663 | 346 days ago | IN | 0 CRO | 0.23613295 | ||||
Set Approval For... | 13392857 | 353 days ago | IN | 0 CRO | 0.23613295 | ||||
Set Approval For... | 13280348 | 360 days ago | IN | 0 CRO | 0.23599477 | ||||
Set Approval For... | 13253502 | 362 days ago | IN | 0 CRO | 0.18714668 |
Loading...
Loading
Contract Name:
DegenPlanets
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-10-27 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.17; 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); } 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); } 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); } 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); } 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); } } } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } 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); } } abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } 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 {} } 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); } 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(); } } 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); } } interface IERC20 { function totalSupply() external view returns (uint); function balanceOf(address account) external view returns (uint); function transfer(address recipient, uint amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint amount) external returns (bool); function transferFrom( address sender, address recipient, uint amount ) external returns (bool); } contract DegenPlanets is ERC721Enumerable, Ownable { uint256 public paused = 1; uint256 public cost = 325; uint256 public maxSupply = 2500; uint256 public supplyLeft = 2500; uint256 public revealed = 1; uint256 public finishTime = 0; uint256 public reservedSupply = 0; uint256 public nftPerAddressLimit = 50; string public baseURI; string public baseExtension = ".json"; string public notRevealedUri = ""; string public _name = "DegenPlanets"; string public _symbol = "DGNP"; address public token = 0xA2ae6273Dd65F9fA76C3d383eDe9c1261e025DAC; address public teamAddress = 0x6Bd7D7D302357217b52B629ce54d854cD288532A; mapping(uint => uint) public tokensMinted; mapping(address => uint256) public freeMints; mapping(address => uint256) public addressMintedBalance; mapping(uint256 => string) private _tokenURIs; constructor(string memory _initBaseURI) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); } function setMaxPerAddress(uint256 _max) public onlyOwner { nftPerAddressLimit = _max; } function getSecondsLeft() public view returns(uint256){ uint256 secs = 0; if (block.timestamp < finishTime) { secs = finishTime - block.timestamp; } return secs; } function setFreeMints(address[] calldata _users, uint256[] calldata _amounts) public onlyOwner { uint256 total = 0; for (uint256 i; i < _users.length; i++) { freeMints[_users[i]] = _amounts[i]; total += _amounts[i]; } reservedSupply = total; } function claim() public { uint256 supply = totalSupply(); uint256 toMint = freeMints[msg.sender]; require(toMint > 0, "You do not have any free mints"); require(supplyLeft >= toMint, "Max NFT limit exceeded"); for (uint256 i = 1; i <= toMint; i++) { _safeMint(msg.sender, supply + i); tokensMinted[supply + i] = 1; addressMintedBalance[msg.sender]++; freeMints[msg.sender]--; supplyLeft--; reservedSupply--; } if(supplyLeft == 0){ paused = 1; } } function mint(uint256 _mintAmount) public { uint256 supply = totalSupply(); require(paused == 0, "Mint is paused"); require(_mintAmount > 0, "Need to mint at least 1 NFT"); uint256 ownerMintedCount = addressMintedBalance[msg.sender]; require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "Max NFT per address exceeded"); require((supplyLeft - reservedSupply) >= _mintAmount, "Max NFT limit exceeded"); require(block.timestamp <= finishTime, "Public mint has finished!"); uint256 toPay = (_mintAmount * cost) * (10**18); require(IERC20(token).allowance(msg.sender, address(this)) >= toPay, "Token transfer not approved"); require(IERC20(token).balanceOf(msg.sender) >= toPay, "You dont have this much DBF"); IERC20(token).transferFrom(msg.sender, teamAddress, toPay); for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); tokensMinted[supply + i] = 1; addressMintedBalance[msg.sender]++; supplyLeft--; } if(supplyLeft == 0){ paused = 1; } } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function reveal() public onlyOwner { revealed = 1; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function startMint() public onlyOwner { paused = 0; finishTime = block.timestamp + (86400 * 2); } function setCost(uint256 _newcost) public onlyOwner { cost = _newcost; } function setTeamAddress(address _newAdi) public onlyOwner { teamAddress = _newAdi; } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); if(revealed == 0) return notRevealedUri; if (bytes(base).length == 0) { return _tokenURI; } if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI, baseExtension)); } return string(abi.encodePacked(base, Strings.toString(tokenId), baseExtension)); } function teamMint(uint256 _mintAmount) public onlyOwner { uint256 supply = totalSupply(); require(_mintAmount > 0, "Need to mint at least 1 NFT"); require(supplyLeft >= _mintAmount, "Max NFT limit exceeded"); for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(teamAddress, supply + i); tokensMinted[supply + i] = 1; addressMintedBalance[teamAddress]++; supplyLeft--; } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function rescueTokens(address _adr, uint256 amount) public onlyOwner { IERC20(_adr).transfer(msg.sender,amount); } function rescueNft(uint _id,address recipient, address NFT) public onlyOwner { ERC721(NFT).transferFrom(address(this),recipient, _id); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finishTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"freeMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSecondsLeft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","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":"paused","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"address","name":"NFT","type":"address"}],"name":"rescueNft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_adr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","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":"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":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newcost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"setFreeMints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setMaxPerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAdi","type":"address"}],"name":"setTeamAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supplyLeft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"teamMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526001600b55610145600c556109c4600d556109c4600e556001600f556000601055600060115560326012556040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060149081620000759190620007ae565b506040518060200160405280600081525060159081620000969190620007ae565b506040518060400160405280600c81526020017f446567656e506c616e657473000000000000000000000000000000000000000081525060169081620000dd9190620007ae565b506040518060400160405280600481526020017f44474e500000000000000000000000000000000000000000000000000000000081525060179081620001249190620007ae565b5073a2ae6273dd65f9fa76c3d383ede9c1261e025dac601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736bd7d7d302357217b52b629ce54d854cd288532a601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620001dc57600080fd5b5060405162005ec338038062005ec38339818101604052810190620002029190620009f9565b6016805462000211906200059d565b80601f01602080910402602001604051908101604052809291908181526020018280546200023f906200059d565b8015620002905780601f10620002645761010080835404028352916020019162000290565b820191906000526020600020905b8154815290600101906020018083116200027257829003601f168201915b505050505060178054620002a4906200059d565b80601f0160208091040260200160405190810160405280929190818152602001828054620002d2906200059d565b8015620003235780601f10620002f75761010080835404028352916020019162000323565b820191906000526020600020905b8154815290600101906020018083116200030557829003601f168201915b50505050508160009081620003399190620007ae565b5080600190816200034b9190620007ae565b5050506200036e620003626200038660201b60201c565b6200038e60201b60201c565b6200037f816200045460201b60201c565b5062000acd565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620004646200047960201b60201c565b8060139081620004759190620007ae565b5050565b620004896200038660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004af6200050a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000508576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004ff9062000aab565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620005b657607f821691505b602082108103620005cc57620005cb6200056e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006367fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005f7565b620006428683620005f7565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200068f6200068962000683846200065a565b62000664565b6200065a565b9050919050565b6000819050919050565b620006ab836200066e565b620006c3620006ba8262000696565b84845462000604565b825550505050565b600090565b620006da620006cb565b620006e7818484620006a0565b505050565b5b818110156200070f5762000703600082620006d0565b600181019050620006ed565b5050565b601f8211156200075e576200072881620005d2565b6200073384620005e7565b8101602085101562000743578190505b6200075b6200075285620005e7565b830182620006ec565b50505b505050565b600082821c905092915050565b6000620007836000198460080262000763565b1980831691505092915050565b60006200079e838362000770565b9150826002028217905092915050565b620007b98262000534565b67ffffffffffffffff811115620007d557620007d46200053f565b5b620007e182546200059d565b620007ee82828562000713565b600060209050601f83116001811462000826576000841562000811578287015190505b6200081d858262000790565b8655506200088d565b601f1984166200083686620005d2565b60005b82811015620008605784890151825560018201915060208501945060208101905062000839565b868310156200088057848901516200087c601f89168262000770565b8355505b6001600288020188555050505b505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620008cf82620008b3565b810181811067ffffffffffffffff82111715620008f157620008f06200053f565b5b80604052505050565b60006200090662000895565b9050620009148282620008c4565b919050565b600067ffffffffffffffff8211156200093757620009366200053f565b5b6200094282620008b3565b9050602081019050919050565b60005b838110156200096f57808201518184015260208101905062000952565b60008484015250505050565b6000620009926200098c8462000919565b620008fa565b905082815260208101848484011115620009b157620009b0620008ae565b5b620009be8482856200094f565b509392505050565b600082601f830112620009de57620009dd620008a9565b5b8151620009f08482602086016200097b565b91505092915050565b60006020828403121562000a125762000a116200089f565b5b600082015167ffffffffffffffff81111562000a335762000a32620008a4565b5b62000a4184828501620009c6565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000a9360208362000a4a565b915062000aa08262000a5b565b602082019050919050565b6000602082019050818103600083015262000ac68162000a84565b9050919050565b6153e68062000add6000396000f3fe608060405234801561001057600080fd5b50600436106103265760003560e01c80636690864e116101b8578063a475b5dd11610104578063d5abeb01116100a2578063f2c4ce1e1161007c578063f2c4ce1e14610953578063f2fde38b1461096f578063fc0c546a1461098b578063fdcf9d07146109a957610326565b8063d5abeb01146108e9578063da3ef23f14610907578063e985e9c51461092357610326565b8063ba7d2c76116100de578063ba7d2c761461085f578063c66828621461087d578063c87b56dd1461089b578063d28d8852146108cb57610326565b8063a475b5dd1461081b578063b09f126614610825578063b88d4fde1461084357610326565b80637bddd65b116101715780638da5cb5b1161014b5780638da5cb5b146107a757806395d89b41146107c5578063a0712d68146107e3578063a22cb465146107ff57610326565b80637bddd65b1461073f5780637f74cde21461075b578063855841591461078b57610326565b80636690864e1461067f5780636c0360eb1461069b5780636d41d4fb146106b957806370a08231146106e957806370e0dd3214610719578063715018a61461073557610326565b80632fbba115116102775780634f6ccce711610230578063573761981161020a57806357376198146105f75780635958611e146106135780635c975abb146106315780636352211e1461064f57610326565b80634f6ccce71461058d57806351830227146105bd57806355f804b3146105db57610326565b80632fbba115146104e157806342842e0e146104fd578063438b63001461051957806344a0d68a1461054957806344d19d2b146105655780634e71d92d1461058357610326565b806313faede6116102e45780631c75f085116102be5780631c75f0851461046d57806323b872dd1461048b5780632be09561146104a75780632f745c59146104b157610326565b806313faede61461040157806318160ddd1461041f57806318cae2691461043d57610326565b806206503a1461032b57806301ffc9a71461034957806306fdde0314610379578063081812fc14610397578063081c8c44146103c7578063095ea7b3146103e5575b600080fd5b6103336109c7565b6040516103409190613702565b60405180910390f35b610363600480360381019061035e9190613789565b6109f0565b60405161037091906137d1565b60405180910390f35b610381610a6a565b60405161038e919061387c565b60405180910390f35b6103b160048036038101906103ac91906138ca565b610afc565b6040516103be9190613938565b60405180910390f35b6103cf610b42565b6040516103dc919061387c565b60405180910390f35b6103ff60048036038101906103fa919061397f565b610bd0565b005b610409610ce7565b6040516104169190613702565b60405180910390f35b610427610ced565b6040516104349190613702565b60405180910390f35b610457600480360381019061045291906139bf565b610cfa565b6040516104649190613702565b60405180910390f35b610475610d12565b6040516104829190613938565b60405180910390f35b6104a560048036038101906104a091906139ec565b610d38565b005b6104af610d98565b005b6104cb60048036038101906104c6919061397f565b610dbf565b6040516104d89190613702565b60405180910390f35b6104fb60048036038101906104f691906138ca565b610e64565b005b610517600480360381019061051291906139ec565b611010565b005b610533600480360381019061052e91906139bf565b611030565b6040516105409190613afd565b60405180910390f35b610563600480360381019061055e91906138ca565b6110de565b005b61056d6110f0565b60405161057a9190613702565b60405180910390f35b61058b6110f6565b005b6105a760048036038101906105a291906138ca565b61131a565b6040516105b49190613702565b60405180910390f35b6105c561138b565b6040516105d29190613702565b60405180910390f35b6105f560048036038101906105f09190613c54565b611391565b005b610611600480360381019061060c919061397f565b6113ac565b005b61061b611437565b6040516106289190613702565b60405180910390f35b61063961143d565b6040516106469190613702565b60405180910390f35b610669600480360381019061066491906138ca565b611443565b6040516106769190613938565b60405180910390f35b610699600480360381019061069491906139bf565b6114f4565b005b6106a3611540565b6040516106b0919061387c565b60405180910390f35b6106d360048036038101906106ce91906139bf565b6115ce565b6040516106e09190613702565b60405180910390f35b61070360048036038101906106fe91906139bf565b6115e6565b6040516107109190613702565b60405180910390f35b610733600480360381019061072e9190613c9d565b61169d565b005b61073d611719565b005b610759600480360381019061075491906138ca565b61172d565b005b610775600480360381019061077091906138ca565b61173f565b6040516107829190613702565b60405180910390f35b6107a560048036038101906107a09190613da6565b611757565b005b6107af61183b565b6040516107bc9190613938565b60405180910390f35b6107cd611865565b6040516107da919061387c565b60405180910390f35b6107fd60048036038101906107f891906138ca565b6118f7565b005b61081960048036038101906108149190613e53565b611e3f565b005b610823611e55565b005b61082d611e67565b60405161083a919061387c565b60405180910390f35b61085d60048036038101906108589190613f34565b611ef5565b005b610867611f57565b6040516108749190613702565b60405180910390f35b610885611f5d565b604051610892919061387c565b60405180910390f35b6108b560048036038101906108b091906138ca565b611feb565b6040516108c2919061387c565b60405180910390f35b6108d3612201565b6040516108e0919061387c565b60405180910390f35b6108f161228f565b6040516108fe9190613702565b60405180910390f35b610921600480360381019061091c9190613c54565b612295565b005b61093d60048036038101906109389190613fb7565b6122b0565b60405161094a91906137d1565b60405180910390f35b61096d60048036038101906109689190613c54565b612344565b005b610989600480360381019061098491906139bf565b61235f565b005b6109936123e2565b6040516109a09190613938565b60405180910390f35b6109b1612408565b6040516109be9190613702565b60405180910390f35b600080600090506010544210156109e957426010546109e69190614026565b90505b8091505090565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a635750610a628261240e565b5b9050919050565b606060008054610a7990614089565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa590614089565b8015610af25780601f10610ac757610100808354040283529160200191610af2565b820191906000526020600020905b815481529060010190602001808311610ad557829003601f168201915b5050505050905090565b6000610b07826124f0565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60158054610b4f90614089565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7b90614089565b8015610bc85780601f10610b9d57610100808354040283529160200191610bc8565b820191906000526020600020905b815481529060010190602001808311610bab57829003601f168201915b505050505081565b6000610bdb82611443565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c429061412c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c6a61253b565b73ffffffffffffffffffffffffffffffffffffffff161480610c995750610c9881610c9361253b565b6122b0565b5b610cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccf906141be565b60405180910390fd5b610ce28383612543565b505050565b600c5481565b6000600880549050905090565b601c6020528060005260406000206000915090505481565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d49610d4361253b565b826125fc565b610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f90614250565b60405180910390fd5b610d93838383612691565b505050565b610da06128f7565b6000600b819055506202a30042610db79190614270565b601081905550565b6000610dca836115e6565b8210610e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0290614316565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e6c6128f7565b6000610e76610ced565b905060008211610ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb290614382565b60405180910390fd5b81600e541015610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef7906143ee565b60405180910390fd5b6000600190505b82811161100b57610f45601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168284610f409190614270565b612975565b6001601a60008385610f579190614270565b815260200190815260200160002081905550601c6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610fdb9061440e565b9190505550600e6000815480929190610ff390614456565b919050555080806110039061440e565b915050610f07565b505050565b61102b83838360405180602001604052806000815250611ef5565b505050565b6060600061103d836115e6565b905060008167ffffffffffffffff81111561105b5761105a613b29565b5b6040519080825280602002602001820160405280156110895781602001602082028036833780820191505090505b50905060005b828110156110d3576110a18582610dbf565b8282815181106110b4576110b361447f565b5b60200260200101818152505080806110cb9061440e565b91505061108f565b508092505050919050565b6110e66128f7565b80600c8190555050565b60115481565b6000611100610ced565b90506000601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111611189576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611180906144fa565b60405180910390fd5b80600e5410156111ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c5906143ee565b60405180910390fd5b6000600190505b818111611302576111f13382856111ec9190614270565b612975565b6001601a600083866112039190614270565b815260200190815260200160002081905550601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906112659061440e565b9190505550601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906112ba90614456565b9190505550600e60008154809291906112d290614456565b9190505550601160008154809291906112ea90614456565b919050555080806112fa9061440e565b9150506111d5565b506000600e5403611316576001600b819055505b5050565b6000611324610ced565b8210611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c9061458c565b60405180910390fd5b600882815481106113795761137861447f565b5b90600052602060002001549050919050565b600f5481565b6113996128f7565b80601390816113a89190614758565b5050565b6113b46128f7565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016113ef92919061482a565b6020604051808303816000875af115801561140e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114329190614868565b505050565b60105481565b600b5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e2906148e1565b60405180910390fd5b80915050919050565b6114fc6128f7565b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6013805461154d90614089565b80601f016020809104026020016040519081016040528092919081815260200182805461157990614089565b80156115c65780601f1061159b576101008083540402835291602001916115c6565b820191906000526020600020905b8154815290600101906020018083116115a957829003601f168201915b505050505081565b601b6020528060005260406000206000915090505481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d90614973565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116a56128f7565b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd3084866040518463ffffffff1660e01b81526004016116e293929190614993565b600060405180830381600087803b1580156116fc57600080fd5b505af1158015611710573d6000803e3d6000fd5b50505050505050565b6117216128f7565b61172b6000612993565b565b6117356128f7565b8060128190555050565b601a6020528060005260406000206000915090505481565b61175f6128f7565b6000805b8585905081101561182c578383828181106117815761178061447f565b5b90506020020135601b600088888581811061179f5761179e61447f565b5b90506020020160208101906117b491906139bf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508383828181106118055761180461447f565b5b90506020020135826118179190614270565b915080806118249061440e565b915050611763565b50806011819055505050505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461187490614089565b80601f01602080910402602001604051908101604052809291908181526020018280546118a090614089565b80156118ed5780601f106118c2576101008083540402835291602001916118ed565b820191906000526020600020905b8154815290600101906020018083116118d057829003601f168201915b5050505050905090565b6000611901610ced565b90506000600b5414611948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193f90614a16565b60405180910390fd5b6000821161198b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198290614382565b60405180910390fd5b6000601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060125483826119de9190614270565b1115611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1690614a82565b60405180910390fd5b82601154600e54611a309190614026565b1015611a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a68906143ee565b60405180910390fd5b601054421115611ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aad90614aee565b60405180910390fd5b6000670de0b6b3a7640000600c5485611acf9190614b0e565b611ad99190614b0e565b905080601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401611b39929190614b50565b602060405180830381865afa158015611b56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7a9190614b8e565b1015611bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb290614c07565b60405180910390fd5b80601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611c179190613938565b602060405180830381865afa158015611c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c589190614b8e565b1015611c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9090614c73565b60405180910390fd5b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401611d1a93929190614993565b6020604051808303816000875af1158015611d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5d9190614868565b506000600190505b848111611e2557611d81338286611d7c9190614270565b612975565b6001601a60008387611d939190614270565b815260200190815260200160002081905550601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611df59061440e565b9190505550600e6000815480929190611e0d90614456565b91905055508080611e1d9061440e565b915050611d65565b506000600e5403611e39576001600b819055505b50505050565b611e51611e4a61253b565b8383612a59565b5050565b611e5d6128f7565b6001600f81905550565b60178054611e7490614089565b80601f0160208091040260200160405190810160405280929190818152602001828054611ea090614089565b8015611eed5780601f10611ec257610100808354040283529160200191611eed565b820191906000526020600020905b815481529060010190602001808311611ed057829003601f168201915b505050505081565b611f06611f0061253b565b836125fc565b611f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3c90614250565b60405180910390fd5b611f5184848484612bc5565b50505050565b60125481565b60148054611f6a90614089565b80601f0160208091040260200160405190810160405280929190818152602001828054611f9690614089565b8015611fe35780601f10611fb857610100808354040283529160200191611fe3565b820191906000526020600020905b815481529060010190602001808311611fc657829003601f168201915b505050505081565b6060611ff682612c21565b612035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202c90614d05565b60405180910390fd5b6000601d6000848152602001908152602001600020805461205590614089565b80601f016020809104026020016040519081016040528092919081815260200182805461208190614089565b80156120ce5780601f106120a3576101008083540402835291602001916120ce565b820191906000526020600020905b8154815290600101906020018083116120b157829003601f168201915b5050505050905060006120df612c8d565b90506000600f540361217f57601580546120f890614089565b80601f016020809104026020016040519081016040528092919081815260200182805461212490614089565b80156121715780601f1061214657610100808354040283529160200191612171565b820191906000526020600020905b81548152906001019060200180831161215457829003601f168201915b5050505050925050506121fc565b60008151036121925781925050506121fc565b6000825111156121ca57808260146040516020016121b293929190614de4565b604051602081830303815290604052925050506121fc565b806121d485612d1f565b60146040516020016121e893929190614de4565b604051602081830303815290604052925050505b919050565b6016805461220e90614089565b80601f016020809104026020016040519081016040528092919081815260200182805461223a90614089565b80156122875780601f1061225c57610100808354040283529160200191612287565b820191906000526020600020905b81548152906001019060200180831161226a57829003601f168201915b505050505081565b600d5481565b61229d6128f7565b80601490816122ac9190614758565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61234c6128f7565b806015908161235b9190614758565b5050565b6123676128f7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90614e87565b60405180910390fd5b6123df81612993565b50565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806124d957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806124e957506124e882612e7f565b5b9050919050565b6124f981612c21565b612538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252f906148e1565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166125b683611443565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061260883611443565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061264a575061264981856122b0565b5b8061268857508373ffffffffffffffffffffffffffffffffffffffff1661267084610afc565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166126b182611443565b73ffffffffffffffffffffffffffffffffffffffff1614612707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fe90614f19565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276d90614fab565b60405180910390fd5b612781838383612ee9565b61278c600082612543565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127dc9190614026565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128339190614270565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128f2838383612ffb565b505050565b6128ff61253b565b73ffffffffffffffffffffffffffffffffffffffff1661291d61183b565b73ffffffffffffffffffffffffffffffffffffffff1614612973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296a90615017565b60405180910390fd5b565b61298f828260405180602001604052806000815250613000565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abe90615083565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612bb891906137d1565b60405180910390a3505050565b612bd0848484612691565b612bdc8484848461305b565b612c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1290615115565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060138054612c9c90614089565b80601f0160208091040260200160405190810160405280929190818152602001828054612cc890614089565b8015612d155780601f10612cea57610100808354040283529160200191612d15565b820191906000526020600020905b815481529060010190602001808311612cf857829003601f168201915b5050505050905090565b606060008203612d66576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e7a565b600082905060005b60008214612d98578080612d819061440e565b915050600a82612d919190615164565b9150612d6e565b60008167ffffffffffffffff811115612db457612db3613b29565b5b6040519080825280601f01601f191660200182016040528015612de65781602001600182028036833780820191505090505b5090505b60008514612e7357600182612dff9190614026565b9150600a85612e0e9190615195565b6030612e1a9190614270565b60f81b818381518110612e3057612e2f61447f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e6c9190615164565b9450612dea565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612ef48383836131e2565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f3657612f31816131e7565b612f75565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612f7457612f738382613230565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fb757612fb28161339d565b612ff6565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612ff557612ff4828261346e565b5b5b505050565b505050565b61300a83836134ed565b613017600084848461305b565b613056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304d90615115565b60405180910390fd5b505050565b600061307c8473ffffffffffffffffffffffffffffffffffffffff166136c6565b156131d5578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130a561253b565b8786866040518563ffffffff1660e01b81526004016130c7949392919061521b565b6020604051808303816000875af192505050801561310357506040513d601f19601f82011682018060405250810190613100919061527c565b60015b613185573d8060008114613133576040519150601f19603f3d011682016040523d82523d6000602084013e613138565b606091505b50600081510361317d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317490615115565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506131da565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161323d846115e6565b6132479190614026565b905060006007600084815260200190815260200160002054905081811461332c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506133b19190614026565b90506000600960008481526020019081526020016000205490506000600883815481106133e1576133e061447f565b5b9060005260206000200154905080600883815481106134035761340261447f565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613452576134516152a9565b5b6001900381819060005260206000200160009055905550505050565b6000613479836115e6565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361355c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355390615324565b60405180910390fd5b61356581612c21565b156135a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359c90615390565b60405180910390fd5b6135b160008383612ee9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136019190614270565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136c260008383612ffb565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b6136fc816136e9565b82525050565b600060208201905061371760008301846136f3565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61376681613731565b811461377157600080fd5b50565b6000813590506137838161375d565b92915050565b60006020828403121561379f5761379e613727565b5b60006137ad84828501613774565b91505092915050565b60008115159050919050565b6137cb816137b6565b82525050565b60006020820190506137e660008301846137c2565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561382657808201518184015260208101905061380b565b60008484015250505050565b6000601f19601f8301169050919050565b600061384e826137ec565b61385881856137f7565b9350613868818560208601613808565b61387181613832565b840191505092915050565b600060208201905081810360008301526138968184613843565b905092915050565b6138a7816136e9565b81146138b257600080fd5b50565b6000813590506138c48161389e565b92915050565b6000602082840312156138e0576138df613727565b5b60006138ee848285016138b5565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613922826138f7565b9050919050565b61393281613917565b82525050565b600060208201905061394d6000830184613929565b92915050565b61395c81613917565b811461396757600080fd5b50565b60008135905061397981613953565b92915050565b6000806040838503121561399657613995613727565b5b60006139a48582860161396a565b92505060206139b5858286016138b5565b9150509250929050565b6000602082840312156139d5576139d4613727565b5b60006139e38482850161396a565b91505092915050565b600080600060608486031215613a0557613a04613727565b5b6000613a138682870161396a565b9350506020613a248682870161396a565b9250506040613a35868287016138b5565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a74816136e9565b82525050565b6000613a868383613a6b565b60208301905092915050565b6000602082019050919050565b6000613aaa82613a3f565b613ab48185613a4a565b9350613abf83613a5b565b8060005b83811015613af0578151613ad78882613a7a565b9750613ae283613a92565b925050600181019050613ac3565b5085935050505092915050565b60006020820190508181036000830152613b178184613a9f565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613b6182613832565b810181811067ffffffffffffffff82111715613b8057613b7f613b29565b5b80604052505050565b6000613b9361371d565b9050613b9f8282613b58565b919050565b600067ffffffffffffffff821115613bbf57613bbe613b29565b5b613bc882613832565b9050602081019050919050565b82818337600083830152505050565b6000613bf7613bf284613ba4565b613b89565b905082815260208101848484011115613c1357613c12613b24565b5b613c1e848285613bd5565b509392505050565b600082601f830112613c3b57613c3a613b1f565b5b8135613c4b848260208601613be4565b91505092915050565b600060208284031215613c6a57613c69613727565b5b600082013567ffffffffffffffff811115613c8857613c8761372c565b5b613c9484828501613c26565b91505092915050565b600080600060608486031215613cb657613cb5613727565b5b6000613cc4868287016138b5565b9350506020613cd58682870161396a565b9250506040613ce68682870161396a565b9150509250925092565b600080fd5b600080fd5b60008083601f840112613d1057613d0f613b1f565b5b8235905067ffffffffffffffff811115613d2d57613d2c613cf0565b5b602083019150836020820283011115613d4957613d48613cf5565b5b9250929050565b60008083601f840112613d6657613d65613b1f565b5b8235905067ffffffffffffffff811115613d8357613d82613cf0565b5b602083019150836020820283011115613d9f57613d9e613cf5565b5b9250929050565b60008060008060408587031215613dc057613dbf613727565b5b600085013567ffffffffffffffff811115613dde57613ddd61372c565b5b613dea87828801613cfa565b9450945050602085013567ffffffffffffffff811115613e0d57613e0c61372c565b5b613e1987828801613d50565b925092505092959194509250565b613e30816137b6565b8114613e3b57600080fd5b50565b600081359050613e4d81613e27565b92915050565b60008060408385031215613e6a57613e69613727565b5b6000613e788582860161396a565b9250506020613e8985828601613e3e565b9150509250929050565b600067ffffffffffffffff821115613eae57613ead613b29565b5b613eb782613832565b9050602081019050919050565b6000613ed7613ed284613e93565b613b89565b905082815260208101848484011115613ef357613ef2613b24565b5b613efe848285613bd5565b509392505050565b600082601f830112613f1b57613f1a613b1f565b5b8135613f2b848260208601613ec4565b91505092915050565b60008060008060808587031215613f4e57613f4d613727565b5b6000613f5c8782880161396a565b9450506020613f6d8782880161396a565b9350506040613f7e878288016138b5565b925050606085013567ffffffffffffffff811115613f9f57613f9e61372c565b5b613fab87828801613f06565b91505092959194509250565b60008060408385031215613fce57613fcd613727565b5b6000613fdc8582860161396a565b9250506020613fed8582860161396a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614031826136e9565b915061403c836136e9565b925082820390508181111561405457614053613ff7565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140a157607f821691505b6020821081036140b4576140b361405a565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006141166021836137f7565b9150614121826140ba565b604082019050919050565b6000602082019050818103600083015261414581614109565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b60006141a8603e836137f7565b91506141b38261414c565b604082019050919050565b600060208201905081810360008301526141d78161419b565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b600061423a602e836137f7565b9150614245826141de565b604082019050919050565b600060208201905081810360008301526142698161422d565b9050919050565b600061427b826136e9565b9150614286836136e9565b925082820190508082111561429e5761429d613ff7565b5b92915050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614300602b836137f7565b915061430b826142a4565b604082019050919050565b6000602082019050818103600083015261432f816142f3565b9050919050565b7f4e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b600061436c601b836137f7565b915061437782614336565b602082019050919050565b6000602082019050818103600083015261439b8161435f565b9050919050565b7f4d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b60006143d86016836137f7565b91506143e3826143a2565b602082019050919050565b60006020820190508181036000830152614407816143cb565b9050919050565b6000614419826136e9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361444b5761444a613ff7565b5b600182019050919050565b6000614461826136e9565b91506000820361447457614473613ff7565b5b600182039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f596f7520646f206e6f74206861766520616e792066726565206d696e74730000600082015250565b60006144e4601e836137f7565b91506144ef826144ae565b602082019050919050565b60006020820190508181036000830152614513816144d7565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614576602c836137f7565b91506145818261451a565b604082019050919050565b600060208201905081810360008301526145a581614569565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261460e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826145d1565b61461886836145d1565b95508019841693508086168417925050509392505050565b6000819050919050565b600061465561465061464b846136e9565b614630565b6136e9565b9050919050565b6000819050919050565b61466f8361463a565b61468361467b8261465c565b8484546145de565b825550505050565b600090565b61469861468b565b6146a3818484614666565b505050565b5b818110156146c7576146bc600082614690565b6001810190506146a9565b5050565b601f82111561470c576146dd816145ac565b6146e6846145c1565b810160208510156146f5578190505b614709614701856145c1565b8301826146a8565b50505b505050565b600082821c905092915050565b600061472f60001984600802614711565b1980831691505092915050565b6000614748838361471e565b9150826002028217905092915050565b614761826137ec565b67ffffffffffffffff81111561477a57614779613b29565b5b6147848254614089565b61478f8282856146cb565b600060209050601f8311600181146147c257600084156147b0578287015190505b6147ba858261473c565b865550614822565b601f1984166147d0866145ac565b60005b828110156147f8578489015182556001820191506020850194506020810190506147d3565b868310156148155784890151614811601f89168261471e565b8355505b6001600288020188555050505b505050505050565b600060408201905061483f6000830185613929565b61484c60208301846136f3565b9392505050565b60008151905061486281613e27565b92915050565b60006020828403121561487e5761487d613727565b5b600061488c84828501614853565b91505092915050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006148cb6018836137f7565b91506148d682614895565b602082019050919050565b600060208201905081810360008301526148fa816148be565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b600061495d6029836137f7565b915061496882614901565b604082019050919050565b6000602082019050818103600083015261498c81614950565b9050919050565b60006060820190506149a86000830186613929565b6149b56020830185613929565b6149c260408301846136f3565b949350505050565b7f4d696e7420697320706175736564000000000000000000000000000000000000600082015250565b6000614a00600e836137f7565b9150614a0b826149ca565b602082019050919050565b60006020820190508181036000830152614a2f816149f3565b9050919050565b7f4d6178204e465420706572206164647265737320657863656564656400000000600082015250565b6000614a6c601c836137f7565b9150614a7782614a36565b602082019050919050565b60006020820190508181036000830152614a9b81614a5f565b9050919050565b7f5075626c6963206d696e74206861732066696e69736865642100000000000000600082015250565b6000614ad86019836137f7565b9150614ae382614aa2565b602082019050919050565b60006020820190508181036000830152614b0781614acb565b9050919050565b6000614b19826136e9565b9150614b24836136e9565b9250828202614b32816136e9565b91508282048414831517614b4957614b48613ff7565b5b5092915050565b6000604082019050614b656000830185613929565b614b726020830184613929565b9392505050565b600081519050614b888161389e565b92915050565b600060208284031215614ba457614ba3613727565b5b6000614bb284828501614b79565b91505092915050565b7f546f6b656e207472616e73666572206e6f7420617070726f7665640000000000600082015250565b6000614bf1601b836137f7565b9150614bfc82614bbb565b602082019050919050565b60006020820190508181036000830152614c2081614be4565b9050919050565b7f596f7520646f6e7420686176652074686973206d756368204442460000000000600082015250565b6000614c5d601b836137f7565b9150614c6882614c27565b602082019050919050565b60006020820190508181036000830152614c8c81614c50565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614cef602f836137f7565b9150614cfa82614c93565b604082019050919050565b60006020820190508181036000830152614d1e81614ce2565b9050919050565b600081905092915050565b6000614d3b826137ec565b614d458185614d25565b9350614d55818560208601613808565b80840191505092915050565b60008154614d6e81614089565b614d788186614d25565b94506001821660008114614d935760018114614da857614ddb565b60ff1983168652811515820286019350614ddb565b614db1856145ac565b60005b83811015614dd357815481890152600182019150602081019050614db4565b838801955050505b50505092915050565b6000614df08286614d30565b9150614dfc8285614d30565b9150614e088284614d61565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e716026836137f7565b9150614e7c82614e15565b604082019050919050565b60006020820190508181036000830152614ea081614e64565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614f036025836137f7565b9150614f0e82614ea7565b604082019050919050565b60006020820190508181036000830152614f3281614ef6565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f956024836137f7565b9150614fa082614f39565b604082019050919050565b60006020820190508181036000830152614fc481614f88565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006150016020836137f7565b915061500c82614fcb565b602082019050919050565b6000602082019050818103600083015261503081614ff4565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061506d6019836137f7565b915061507882615037565b602082019050919050565b6000602082019050818103600083015261509c81615060565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006150ff6032836137f7565b915061510a826150a3565b604082019050919050565b6000602082019050818103600083015261512e816150f2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061516f826136e9565b915061517a836136e9565b92508261518a57615189615135565b5b828204905092915050565b60006151a0826136e9565b91506151ab836136e9565b9250826151bb576151ba615135565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006151ed826151c6565b6151f781856151d1565b9350615207818560208601613808565b61521081613832565b840191505092915050565b60006080820190506152306000830187613929565b61523d6020830186613929565b61524a60408301856136f3565b818103606083015261525c81846151e2565b905095945050505050565b6000815190506152768161375d565b92915050565b60006020828403121561529257615291613727565b5b60006152a084828501615267565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061530e6020836137f7565b9150615319826152d8565b602082019050919050565b6000602082019050818103600083015261533d81615301565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061537a601c836137f7565b915061538582615344565b602082019050919050565b600060208201905081810360008301526153a98161536d565b905091905056fea264697066735822122049e23e42dbe0be07c32e073b838746418817a41ab3ee94bacf8d799aae7be8fc64736f6c6343000811003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d535963344b44345438437945554665554a7261474d6f504646333970733555534444784156453556635973722f00000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106103265760003560e01c80636690864e116101b8578063a475b5dd11610104578063d5abeb01116100a2578063f2c4ce1e1161007c578063f2c4ce1e14610953578063f2fde38b1461096f578063fc0c546a1461098b578063fdcf9d07146109a957610326565b8063d5abeb01146108e9578063da3ef23f14610907578063e985e9c51461092357610326565b8063ba7d2c76116100de578063ba7d2c761461085f578063c66828621461087d578063c87b56dd1461089b578063d28d8852146108cb57610326565b8063a475b5dd1461081b578063b09f126614610825578063b88d4fde1461084357610326565b80637bddd65b116101715780638da5cb5b1161014b5780638da5cb5b146107a757806395d89b41146107c5578063a0712d68146107e3578063a22cb465146107ff57610326565b80637bddd65b1461073f5780637f74cde21461075b578063855841591461078b57610326565b80636690864e1461067f5780636c0360eb1461069b5780636d41d4fb146106b957806370a08231146106e957806370e0dd3214610719578063715018a61461073557610326565b80632fbba115116102775780634f6ccce711610230578063573761981161020a57806357376198146105f75780635958611e146106135780635c975abb146106315780636352211e1461064f57610326565b80634f6ccce71461058d57806351830227146105bd57806355f804b3146105db57610326565b80632fbba115146104e157806342842e0e146104fd578063438b63001461051957806344a0d68a1461054957806344d19d2b146105655780634e71d92d1461058357610326565b806313faede6116102e45780631c75f085116102be5780631c75f0851461046d57806323b872dd1461048b5780632be09561146104a75780632f745c59146104b157610326565b806313faede61461040157806318160ddd1461041f57806318cae2691461043d57610326565b806206503a1461032b57806301ffc9a71461034957806306fdde0314610379578063081812fc14610397578063081c8c44146103c7578063095ea7b3146103e5575b600080fd5b6103336109c7565b6040516103409190613702565b60405180910390f35b610363600480360381019061035e9190613789565b6109f0565b60405161037091906137d1565b60405180910390f35b610381610a6a565b60405161038e919061387c565b60405180910390f35b6103b160048036038101906103ac91906138ca565b610afc565b6040516103be9190613938565b60405180910390f35b6103cf610b42565b6040516103dc919061387c565b60405180910390f35b6103ff60048036038101906103fa919061397f565b610bd0565b005b610409610ce7565b6040516104169190613702565b60405180910390f35b610427610ced565b6040516104349190613702565b60405180910390f35b610457600480360381019061045291906139bf565b610cfa565b6040516104649190613702565b60405180910390f35b610475610d12565b6040516104829190613938565b60405180910390f35b6104a560048036038101906104a091906139ec565b610d38565b005b6104af610d98565b005b6104cb60048036038101906104c6919061397f565b610dbf565b6040516104d89190613702565b60405180910390f35b6104fb60048036038101906104f691906138ca565b610e64565b005b610517600480360381019061051291906139ec565b611010565b005b610533600480360381019061052e91906139bf565b611030565b6040516105409190613afd565b60405180910390f35b610563600480360381019061055e91906138ca565b6110de565b005b61056d6110f0565b60405161057a9190613702565b60405180910390f35b61058b6110f6565b005b6105a760048036038101906105a291906138ca565b61131a565b6040516105b49190613702565b60405180910390f35b6105c561138b565b6040516105d29190613702565b60405180910390f35b6105f560048036038101906105f09190613c54565b611391565b005b610611600480360381019061060c919061397f565b6113ac565b005b61061b611437565b6040516106289190613702565b60405180910390f35b61063961143d565b6040516106469190613702565b60405180910390f35b610669600480360381019061066491906138ca565b611443565b6040516106769190613938565b60405180910390f35b610699600480360381019061069491906139bf565b6114f4565b005b6106a3611540565b6040516106b0919061387c565b60405180910390f35b6106d360048036038101906106ce91906139bf565b6115ce565b6040516106e09190613702565b60405180910390f35b61070360048036038101906106fe91906139bf565b6115e6565b6040516107109190613702565b60405180910390f35b610733600480360381019061072e9190613c9d565b61169d565b005b61073d611719565b005b610759600480360381019061075491906138ca565b61172d565b005b610775600480360381019061077091906138ca565b61173f565b6040516107829190613702565b60405180910390f35b6107a560048036038101906107a09190613da6565b611757565b005b6107af61183b565b6040516107bc9190613938565b60405180910390f35b6107cd611865565b6040516107da919061387c565b60405180910390f35b6107fd60048036038101906107f891906138ca565b6118f7565b005b61081960048036038101906108149190613e53565b611e3f565b005b610823611e55565b005b61082d611e67565b60405161083a919061387c565b60405180910390f35b61085d60048036038101906108589190613f34565b611ef5565b005b610867611f57565b6040516108749190613702565b60405180910390f35b610885611f5d565b604051610892919061387c565b60405180910390f35b6108b560048036038101906108b091906138ca565b611feb565b6040516108c2919061387c565b60405180910390f35b6108d3612201565b6040516108e0919061387c565b60405180910390f35b6108f161228f565b6040516108fe9190613702565b60405180910390f35b610921600480360381019061091c9190613c54565b612295565b005b61093d60048036038101906109389190613fb7565b6122b0565b60405161094a91906137d1565b60405180910390f35b61096d60048036038101906109689190613c54565b612344565b005b610989600480360381019061098491906139bf565b61235f565b005b6109936123e2565b6040516109a09190613938565b60405180910390f35b6109b1612408565b6040516109be9190613702565b60405180910390f35b600080600090506010544210156109e957426010546109e69190614026565b90505b8091505090565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a635750610a628261240e565b5b9050919050565b606060008054610a7990614089565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa590614089565b8015610af25780601f10610ac757610100808354040283529160200191610af2565b820191906000526020600020905b815481529060010190602001808311610ad557829003601f168201915b5050505050905090565b6000610b07826124f0565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60158054610b4f90614089565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7b90614089565b8015610bc85780601f10610b9d57610100808354040283529160200191610bc8565b820191906000526020600020905b815481529060010190602001808311610bab57829003601f168201915b505050505081565b6000610bdb82611443565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c429061412c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c6a61253b565b73ffffffffffffffffffffffffffffffffffffffff161480610c995750610c9881610c9361253b565b6122b0565b5b610cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccf906141be565b60405180910390fd5b610ce28383612543565b505050565b600c5481565b6000600880549050905090565b601c6020528060005260406000206000915090505481565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d49610d4361253b565b826125fc565b610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f90614250565b60405180910390fd5b610d93838383612691565b505050565b610da06128f7565b6000600b819055506202a30042610db79190614270565b601081905550565b6000610dca836115e6565b8210610e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0290614316565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e6c6128f7565b6000610e76610ced565b905060008211610ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb290614382565b60405180910390fd5b81600e541015610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef7906143ee565b60405180910390fd5b6000600190505b82811161100b57610f45601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168284610f409190614270565b612975565b6001601a60008385610f579190614270565b815260200190815260200160002081905550601c6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610fdb9061440e565b9190505550600e6000815480929190610ff390614456565b919050555080806110039061440e565b915050610f07565b505050565b61102b83838360405180602001604052806000815250611ef5565b505050565b6060600061103d836115e6565b905060008167ffffffffffffffff81111561105b5761105a613b29565b5b6040519080825280602002602001820160405280156110895781602001602082028036833780820191505090505b50905060005b828110156110d3576110a18582610dbf565b8282815181106110b4576110b361447f565b5b60200260200101818152505080806110cb9061440e565b91505061108f565b508092505050919050565b6110e66128f7565b80600c8190555050565b60115481565b6000611100610ced565b90506000601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111611189576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611180906144fa565b60405180910390fd5b80600e5410156111ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c5906143ee565b60405180910390fd5b6000600190505b818111611302576111f13382856111ec9190614270565b612975565b6001601a600083866112039190614270565b815260200190815260200160002081905550601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906112659061440e565b9190505550601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906112ba90614456565b9190505550600e60008154809291906112d290614456565b9190505550601160008154809291906112ea90614456565b919050555080806112fa9061440e565b9150506111d5565b506000600e5403611316576001600b819055505b5050565b6000611324610ced565b8210611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c9061458c565b60405180910390fd5b600882815481106113795761137861447f565b5b90600052602060002001549050919050565b600f5481565b6113996128f7565b80601390816113a89190614758565b5050565b6113b46128f7565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016113ef92919061482a565b6020604051808303816000875af115801561140e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114329190614868565b505050565b60105481565b600b5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e2906148e1565b60405180910390fd5b80915050919050565b6114fc6128f7565b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6013805461154d90614089565b80601f016020809104026020016040519081016040528092919081815260200182805461157990614089565b80156115c65780601f1061159b576101008083540402835291602001916115c6565b820191906000526020600020905b8154815290600101906020018083116115a957829003601f168201915b505050505081565b601b6020528060005260406000206000915090505481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d90614973565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116a56128f7565b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd3084866040518463ffffffff1660e01b81526004016116e293929190614993565b600060405180830381600087803b1580156116fc57600080fd5b505af1158015611710573d6000803e3d6000fd5b50505050505050565b6117216128f7565b61172b6000612993565b565b6117356128f7565b8060128190555050565b601a6020528060005260406000206000915090505481565b61175f6128f7565b6000805b8585905081101561182c578383828181106117815761178061447f565b5b90506020020135601b600088888581811061179f5761179e61447f565b5b90506020020160208101906117b491906139bf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508383828181106118055761180461447f565b5b90506020020135826118179190614270565b915080806118249061440e565b915050611763565b50806011819055505050505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461187490614089565b80601f01602080910402602001604051908101604052809291908181526020018280546118a090614089565b80156118ed5780601f106118c2576101008083540402835291602001916118ed565b820191906000526020600020905b8154815290600101906020018083116118d057829003601f168201915b5050505050905090565b6000611901610ced565b90506000600b5414611948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193f90614a16565b60405180910390fd5b6000821161198b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198290614382565b60405180910390fd5b6000601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060125483826119de9190614270565b1115611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1690614a82565b60405180910390fd5b82601154600e54611a309190614026565b1015611a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a68906143ee565b60405180910390fd5b601054421115611ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aad90614aee565b60405180910390fd5b6000670de0b6b3a7640000600c5485611acf9190614b0e565b611ad99190614b0e565b905080601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401611b39929190614b50565b602060405180830381865afa158015611b56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7a9190614b8e565b1015611bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb290614c07565b60405180910390fd5b80601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611c179190613938565b602060405180830381865afa158015611c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c589190614b8e565b1015611c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9090614c73565b60405180910390fd5b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401611d1a93929190614993565b6020604051808303816000875af1158015611d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5d9190614868565b506000600190505b848111611e2557611d81338286611d7c9190614270565b612975565b6001601a60008387611d939190614270565b815260200190815260200160002081905550601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611df59061440e565b9190505550600e6000815480929190611e0d90614456565b91905055508080611e1d9061440e565b915050611d65565b506000600e5403611e39576001600b819055505b50505050565b611e51611e4a61253b565b8383612a59565b5050565b611e5d6128f7565b6001600f81905550565b60178054611e7490614089565b80601f0160208091040260200160405190810160405280929190818152602001828054611ea090614089565b8015611eed5780601f10611ec257610100808354040283529160200191611eed565b820191906000526020600020905b815481529060010190602001808311611ed057829003601f168201915b505050505081565b611f06611f0061253b565b836125fc565b611f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3c90614250565b60405180910390fd5b611f5184848484612bc5565b50505050565b60125481565b60148054611f6a90614089565b80601f0160208091040260200160405190810160405280929190818152602001828054611f9690614089565b8015611fe35780601f10611fb857610100808354040283529160200191611fe3565b820191906000526020600020905b815481529060010190602001808311611fc657829003601f168201915b505050505081565b6060611ff682612c21565b612035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202c90614d05565b60405180910390fd5b6000601d6000848152602001908152602001600020805461205590614089565b80601f016020809104026020016040519081016040528092919081815260200182805461208190614089565b80156120ce5780601f106120a3576101008083540402835291602001916120ce565b820191906000526020600020905b8154815290600101906020018083116120b157829003601f168201915b5050505050905060006120df612c8d565b90506000600f540361217f57601580546120f890614089565b80601f016020809104026020016040519081016040528092919081815260200182805461212490614089565b80156121715780601f1061214657610100808354040283529160200191612171565b820191906000526020600020905b81548152906001019060200180831161215457829003601f168201915b5050505050925050506121fc565b60008151036121925781925050506121fc565b6000825111156121ca57808260146040516020016121b293929190614de4565b604051602081830303815290604052925050506121fc565b806121d485612d1f565b60146040516020016121e893929190614de4565b604051602081830303815290604052925050505b919050565b6016805461220e90614089565b80601f016020809104026020016040519081016040528092919081815260200182805461223a90614089565b80156122875780601f1061225c57610100808354040283529160200191612287565b820191906000526020600020905b81548152906001019060200180831161226a57829003601f168201915b505050505081565b600d5481565b61229d6128f7565b80601490816122ac9190614758565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61234c6128f7565b806015908161235b9190614758565b5050565b6123676128f7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90614e87565b60405180910390fd5b6123df81612993565b50565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806124d957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806124e957506124e882612e7f565b5b9050919050565b6124f981612c21565b612538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252f906148e1565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166125b683611443565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061260883611443565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061264a575061264981856122b0565b5b8061268857508373ffffffffffffffffffffffffffffffffffffffff1661267084610afc565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166126b182611443565b73ffffffffffffffffffffffffffffffffffffffff1614612707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fe90614f19565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276d90614fab565b60405180910390fd5b612781838383612ee9565b61278c600082612543565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127dc9190614026565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128339190614270565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128f2838383612ffb565b505050565b6128ff61253b565b73ffffffffffffffffffffffffffffffffffffffff1661291d61183b565b73ffffffffffffffffffffffffffffffffffffffff1614612973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296a90615017565b60405180910390fd5b565b61298f828260405180602001604052806000815250613000565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abe90615083565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612bb891906137d1565b60405180910390a3505050565b612bd0848484612691565b612bdc8484848461305b565b612c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1290615115565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060138054612c9c90614089565b80601f0160208091040260200160405190810160405280929190818152602001828054612cc890614089565b8015612d155780601f10612cea57610100808354040283529160200191612d15565b820191906000526020600020905b815481529060010190602001808311612cf857829003601f168201915b5050505050905090565b606060008203612d66576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e7a565b600082905060005b60008214612d98578080612d819061440e565b915050600a82612d919190615164565b9150612d6e565b60008167ffffffffffffffff811115612db457612db3613b29565b5b6040519080825280601f01601f191660200182016040528015612de65781602001600182028036833780820191505090505b5090505b60008514612e7357600182612dff9190614026565b9150600a85612e0e9190615195565b6030612e1a9190614270565b60f81b818381518110612e3057612e2f61447f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e6c9190615164565b9450612dea565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612ef48383836131e2565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f3657612f31816131e7565b612f75565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612f7457612f738382613230565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fb757612fb28161339d565b612ff6565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612ff557612ff4828261346e565b5b5b505050565b505050565b61300a83836134ed565b613017600084848461305b565b613056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304d90615115565b60405180910390fd5b505050565b600061307c8473ffffffffffffffffffffffffffffffffffffffff166136c6565b156131d5578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130a561253b565b8786866040518563ffffffff1660e01b81526004016130c7949392919061521b565b6020604051808303816000875af192505050801561310357506040513d601f19601f82011682018060405250810190613100919061527c565b60015b613185573d8060008114613133576040519150601f19603f3d011682016040523d82523d6000602084013e613138565b606091505b50600081510361317d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317490615115565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506131da565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161323d846115e6565b6132479190614026565b905060006007600084815260200190815260200160002054905081811461332c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506133b19190614026565b90506000600960008481526020019081526020016000205490506000600883815481106133e1576133e061447f565b5b9060005260206000200154905080600883815481106134035761340261447f565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613452576134516152a9565b5b6001900381819060005260206000200160009055905550505050565b6000613479836115e6565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361355c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355390615324565b60405180910390fd5b61356581612c21565b156135a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359c90615390565b60405180910390fd5b6135b160008383612ee9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136019190614270565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136c260008383612ffb565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b6136fc816136e9565b82525050565b600060208201905061371760008301846136f3565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61376681613731565b811461377157600080fd5b50565b6000813590506137838161375d565b92915050565b60006020828403121561379f5761379e613727565b5b60006137ad84828501613774565b91505092915050565b60008115159050919050565b6137cb816137b6565b82525050565b60006020820190506137e660008301846137c2565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561382657808201518184015260208101905061380b565b60008484015250505050565b6000601f19601f8301169050919050565b600061384e826137ec565b61385881856137f7565b9350613868818560208601613808565b61387181613832565b840191505092915050565b600060208201905081810360008301526138968184613843565b905092915050565b6138a7816136e9565b81146138b257600080fd5b50565b6000813590506138c48161389e565b92915050565b6000602082840312156138e0576138df613727565b5b60006138ee848285016138b5565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613922826138f7565b9050919050565b61393281613917565b82525050565b600060208201905061394d6000830184613929565b92915050565b61395c81613917565b811461396757600080fd5b50565b60008135905061397981613953565b92915050565b6000806040838503121561399657613995613727565b5b60006139a48582860161396a565b92505060206139b5858286016138b5565b9150509250929050565b6000602082840312156139d5576139d4613727565b5b60006139e38482850161396a565b91505092915050565b600080600060608486031215613a0557613a04613727565b5b6000613a138682870161396a565b9350506020613a248682870161396a565b9250506040613a35868287016138b5565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a74816136e9565b82525050565b6000613a868383613a6b565b60208301905092915050565b6000602082019050919050565b6000613aaa82613a3f565b613ab48185613a4a565b9350613abf83613a5b565b8060005b83811015613af0578151613ad78882613a7a565b9750613ae283613a92565b925050600181019050613ac3565b5085935050505092915050565b60006020820190508181036000830152613b178184613a9f565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613b6182613832565b810181811067ffffffffffffffff82111715613b8057613b7f613b29565b5b80604052505050565b6000613b9361371d565b9050613b9f8282613b58565b919050565b600067ffffffffffffffff821115613bbf57613bbe613b29565b5b613bc882613832565b9050602081019050919050565b82818337600083830152505050565b6000613bf7613bf284613ba4565b613b89565b905082815260208101848484011115613c1357613c12613b24565b5b613c1e848285613bd5565b509392505050565b600082601f830112613c3b57613c3a613b1f565b5b8135613c4b848260208601613be4565b91505092915050565b600060208284031215613c6a57613c69613727565b5b600082013567ffffffffffffffff811115613c8857613c8761372c565b5b613c9484828501613c26565b91505092915050565b600080600060608486031215613cb657613cb5613727565b5b6000613cc4868287016138b5565b9350506020613cd58682870161396a565b9250506040613ce68682870161396a565b9150509250925092565b600080fd5b600080fd5b60008083601f840112613d1057613d0f613b1f565b5b8235905067ffffffffffffffff811115613d2d57613d2c613cf0565b5b602083019150836020820283011115613d4957613d48613cf5565b5b9250929050565b60008083601f840112613d6657613d65613b1f565b5b8235905067ffffffffffffffff811115613d8357613d82613cf0565b5b602083019150836020820283011115613d9f57613d9e613cf5565b5b9250929050565b60008060008060408587031215613dc057613dbf613727565b5b600085013567ffffffffffffffff811115613dde57613ddd61372c565b5b613dea87828801613cfa565b9450945050602085013567ffffffffffffffff811115613e0d57613e0c61372c565b5b613e1987828801613d50565b925092505092959194509250565b613e30816137b6565b8114613e3b57600080fd5b50565b600081359050613e4d81613e27565b92915050565b60008060408385031215613e6a57613e69613727565b5b6000613e788582860161396a565b9250506020613e8985828601613e3e565b9150509250929050565b600067ffffffffffffffff821115613eae57613ead613b29565b5b613eb782613832565b9050602081019050919050565b6000613ed7613ed284613e93565b613b89565b905082815260208101848484011115613ef357613ef2613b24565b5b613efe848285613bd5565b509392505050565b600082601f830112613f1b57613f1a613b1f565b5b8135613f2b848260208601613ec4565b91505092915050565b60008060008060808587031215613f4e57613f4d613727565b5b6000613f5c8782880161396a565b9450506020613f6d8782880161396a565b9350506040613f7e878288016138b5565b925050606085013567ffffffffffffffff811115613f9f57613f9e61372c565b5b613fab87828801613f06565b91505092959194509250565b60008060408385031215613fce57613fcd613727565b5b6000613fdc8582860161396a565b9250506020613fed8582860161396a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614031826136e9565b915061403c836136e9565b925082820390508181111561405457614053613ff7565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140a157607f821691505b6020821081036140b4576140b361405a565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006141166021836137f7565b9150614121826140ba565b604082019050919050565b6000602082019050818103600083015261414581614109565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b60006141a8603e836137f7565b91506141b38261414c565b604082019050919050565b600060208201905081810360008301526141d78161419b565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b600061423a602e836137f7565b9150614245826141de565b604082019050919050565b600060208201905081810360008301526142698161422d565b9050919050565b600061427b826136e9565b9150614286836136e9565b925082820190508082111561429e5761429d613ff7565b5b92915050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614300602b836137f7565b915061430b826142a4565b604082019050919050565b6000602082019050818103600083015261432f816142f3565b9050919050565b7f4e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b600061436c601b836137f7565b915061437782614336565b602082019050919050565b6000602082019050818103600083015261439b8161435f565b9050919050565b7f4d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b60006143d86016836137f7565b91506143e3826143a2565b602082019050919050565b60006020820190508181036000830152614407816143cb565b9050919050565b6000614419826136e9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361444b5761444a613ff7565b5b600182019050919050565b6000614461826136e9565b91506000820361447457614473613ff7565b5b600182039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f596f7520646f206e6f74206861766520616e792066726565206d696e74730000600082015250565b60006144e4601e836137f7565b91506144ef826144ae565b602082019050919050565b60006020820190508181036000830152614513816144d7565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614576602c836137f7565b91506145818261451a565b604082019050919050565b600060208201905081810360008301526145a581614569565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261460e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826145d1565b61461886836145d1565b95508019841693508086168417925050509392505050565b6000819050919050565b600061465561465061464b846136e9565b614630565b6136e9565b9050919050565b6000819050919050565b61466f8361463a565b61468361467b8261465c565b8484546145de565b825550505050565b600090565b61469861468b565b6146a3818484614666565b505050565b5b818110156146c7576146bc600082614690565b6001810190506146a9565b5050565b601f82111561470c576146dd816145ac565b6146e6846145c1565b810160208510156146f5578190505b614709614701856145c1565b8301826146a8565b50505b505050565b600082821c905092915050565b600061472f60001984600802614711565b1980831691505092915050565b6000614748838361471e565b9150826002028217905092915050565b614761826137ec565b67ffffffffffffffff81111561477a57614779613b29565b5b6147848254614089565b61478f8282856146cb565b600060209050601f8311600181146147c257600084156147b0578287015190505b6147ba858261473c565b865550614822565b601f1984166147d0866145ac565b60005b828110156147f8578489015182556001820191506020850194506020810190506147d3565b868310156148155784890151614811601f89168261471e565b8355505b6001600288020188555050505b505050505050565b600060408201905061483f6000830185613929565b61484c60208301846136f3565b9392505050565b60008151905061486281613e27565b92915050565b60006020828403121561487e5761487d613727565b5b600061488c84828501614853565b91505092915050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006148cb6018836137f7565b91506148d682614895565b602082019050919050565b600060208201905081810360008301526148fa816148be565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b600061495d6029836137f7565b915061496882614901565b604082019050919050565b6000602082019050818103600083015261498c81614950565b9050919050565b60006060820190506149a86000830186613929565b6149b56020830185613929565b6149c260408301846136f3565b949350505050565b7f4d696e7420697320706175736564000000000000000000000000000000000000600082015250565b6000614a00600e836137f7565b9150614a0b826149ca565b602082019050919050565b60006020820190508181036000830152614a2f816149f3565b9050919050565b7f4d6178204e465420706572206164647265737320657863656564656400000000600082015250565b6000614a6c601c836137f7565b9150614a7782614a36565b602082019050919050565b60006020820190508181036000830152614a9b81614a5f565b9050919050565b7f5075626c6963206d696e74206861732066696e69736865642100000000000000600082015250565b6000614ad86019836137f7565b9150614ae382614aa2565b602082019050919050565b60006020820190508181036000830152614b0781614acb565b9050919050565b6000614b19826136e9565b9150614b24836136e9565b9250828202614b32816136e9565b91508282048414831517614b4957614b48613ff7565b5b5092915050565b6000604082019050614b656000830185613929565b614b726020830184613929565b9392505050565b600081519050614b888161389e565b92915050565b600060208284031215614ba457614ba3613727565b5b6000614bb284828501614b79565b91505092915050565b7f546f6b656e207472616e73666572206e6f7420617070726f7665640000000000600082015250565b6000614bf1601b836137f7565b9150614bfc82614bbb565b602082019050919050565b60006020820190508181036000830152614c2081614be4565b9050919050565b7f596f7520646f6e7420686176652074686973206d756368204442460000000000600082015250565b6000614c5d601b836137f7565b9150614c6882614c27565b602082019050919050565b60006020820190508181036000830152614c8c81614c50565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614cef602f836137f7565b9150614cfa82614c93565b604082019050919050565b60006020820190508181036000830152614d1e81614ce2565b9050919050565b600081905092915050565b6000614d3b826137ec565b614d458185614d25565b9350614d55818560208601613808565b80840191505092915050565b60008154614d6e81614089565b614d788186614d25565b94506001821660008114614d935760018114614da857614ddb565b60ff1983168652811515820286019350614ddb565b614db1856145ac565b60005b83811015614dd357815481890152600182019150602081019050614db4565b838801955050505b50505092915050565b6000614df08286614d30565b9150614dfc8285614d30565b9150614e088284614d61565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e716026836137f7565b9150614e7c82614e15565b604082019050919050565b60006020820190508181036000830152614ea081614e64565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614f036025836137f7565b9150614f0e82614ea7565b604082019050919050565b60006020820190508181036000830152614f3281614ef6565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f956024836137f7565b9150614fa082614f39565b604082019050919050565b60006020820190508181036000830152614fc481614f88565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006150016020836137f7565b915061500c82614fcb565b602082019050919050565b6000602082019050818103600083015261503081614ff4565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061506d6019836137f7565b915061507882615037565b602082019050919050565b6000602082019050818103600083015261509c81615060565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006150ff6032836137f7565b915061510a826150a3565b604082019050919050565b6000602082019050818103600083015261512e816150f2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061516f826136e9565b915061517a836136e9565b92508261518a57615189615135565b5b828204905092915050565b60006151a0826136e9565b91506151ab836136e9565b9250826151bb576151ba615135565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006151ed826151c6565b6151f781856151d1565b9350615207818560208601613808565b61521081613832565b840191505092915050565b60006080820190506152306000830187613929565b61523d6020830186613929565b61524a60408301856136f3565b818103606083015261525c81846151e2565b905095945050505050565b6000815190506152768161375d565b92915050565b60006020828403121561529257615291613727565b5b60006152a084828501615267565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061530e6020836137f7565b9150615319826152d8565b602082019050919050565b6000602082019050818103600083015261533d81615301565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061537a601c836137f7565b915061538582615344565b602082019050919050565b600060208201905081810360008301526153a98161536d565b905091905056fea264697066735822122049e23e42dbe0be07c32e073b838746418817a41ab3ee94bacf8d799aae7be8fc64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d535963344b44345438437945554665554a7261474d6f504646333970733555534444784156453556635973722f00000000000000000000
-----Decoded View---------------
Arg [0] : _initBaseURI (string): ipfs://QmSYc4KD4T8CyEUFeUJraGMoPFF39ps5USDDxAVE5VcYsr/
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d535963344b44345438437945554665554a7261474d6f50
Arg [3] : 4646333970733555534444784156453556635973722f00000000000000000000
Deployed Bytecode Sourcemap
41717:6193:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42847:217;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32993:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19402:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20915:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42146:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20432:417;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41807:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33633:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42519:55;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42340:71;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21615:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45654:120;;;:::i;:::-;;33301:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46764:478;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22022:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47250:363;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45782:86;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41986:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43390:614;;;:::i;:::-;;33823:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41916:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45198:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47621:128;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41950:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41775:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19113:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45876:98;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42074:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42468:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18844:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47757:150;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40359:103;;;:::i;:::-;;42747:92;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42420:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43072:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39711:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19571:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44012:1178;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21158:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45446:66;;;:::i;:::-;;42229:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22278:323;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42023:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42102:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46098:658;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42186:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41839:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45310:128;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21384:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45520:126;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40617:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42268:65;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41877:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42847:217;42893:7;42912:12;42927:1;42912:16;;42961:10;;42943:15;:28;42939:96;;;43008:15;42995:10;;:28;;;;:::i;:::-;42988:35;;42939:96;43052:4;43045:11;;;42847:217;:::o;32993:224::-;33095:4;33134:35;33119:50;;;:11;:50;;;;:90;;;;33173:36;33197:11;33173:23;:36::i;:::-;33119:90;33112:97;;32993:224;;;:::o;19402:100::-;19456:13;19489:5;19482:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19402:100;:::o;20915:171::-;20991:7;21011:23;21026:7;21011:14;:23::i;:::-;21054:15;:24;21070:7;21054:24;;;;;;;;;;;;;;;;;;;;;21047:31;;20915:171;;;:::o;42146:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20432:417::-;20513:13;20529:23;20544:7;20529:14;:23::i;:::-;20513:39;;20577:5;20571:11;;:2;:11;;;20563:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;20671:5;20655:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;20680:37;20697:5;20704:12;:10;:12::i;:::-;20680:16;:37::i;:::-;20655:62;20633:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;20820:21;20829:2;20833:7;20820:8;:21::i;:::-;20502:347;20432:417;;:::o;41807:25::-;;;;:::o;33633:113::-;33694:7;33721:10;:17;;;;33714:24;;33633:113;:::o;42519:55::-;;;;;;;;;;;;;;;;;:::o;42340:71::-;;;;;;;;;;;;;:::o;21615:336::-;21810:41;21829:12;:10;:12::i;:::-;21843:7;21810:18;:41::i;:::-;21802:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;21915:28;21925:4;21931:2;21935:7;21915:9;:28::i;:::-;21615:336;;;:::o;45654:120::-;39597:13;:11;:13::i;:::-;45712:1:::1;45703:6;:10;;;;45756:9;45737:15;:29;;;;:::i;:::-;45724:10;:42;;;;45654:120::o:0;33301:256::-;33398:7;33434:23;33451:5;33434:16;:23::i;:::-;33426:5;:31;33418:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;33523:12;:19;33536:5;33523:19;;;;;;;;;;;;;;;:26;33543:5;33523:26;;;;;;;;;;;;33516:33;;33301:256;;;;:::o;46764:478::-;39597:13;:11;:13::i;:::-;46831:14:::1;46848:13;:11;:13::i;:::-;46831:30;;46894:1;46880:11;:15;46872:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;46960:11;46946:10;;:25;;46938:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;47016:9;47028:1;47016:13;;47011:224;47036:11;47031:1;:16;47011:224;;47069:34;47079:11;;;;;;;;;;;47101:1;47092:6;:10;;;;:::i;:::-;47069:9;:34::i;:::-;47145:1;47118:12;:24;47140:1;47131:6;:10;;;;:::i;:::-;47118:24;;;;;;;;;;;:28;;;;47161:20;:33;47182:11;;;;;;;;;;;47161:33;;;;;;;;;;;;;;;;:35;;;;;;;;;:::i;:::-;;;;;;47211:10;;:12;;;;;;;;;:::i;:::-;;;;;;47049:3;;;;;:::i;:::-;;;;47011:224;;;;46820:422;46764:478:::0;:::o;22022:185::-;22160:39;22177:4;22183:2;22187:7;22160:39;;;;;;;;;;;;:16;:39::i;:::-;22022:185;;;:::o;47250:363::-;47310:16;47344:23;47370:17;47380:6;47370:9;:17::i;:::-;47344:43;;47398:25;47440:15;47426:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47398:58;;47472:9;47467:113;47487:15;47483:1;:19;47467:113;;;47538:30;47558:6;47566:1;47538:19;:30::i;:::-;47524:8;47533:1;47524:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;47504:3;;;;;:::i;:::-;;;;47467:113;;;;47597:8;47590:15;;;;47250:363;;;:::o;45782:86::-;39597:13;:11;:13::i;:::-;45852:8:::1;45845:4;:15;;;;45782:86:::0;:::o;41986:33::-;;;;:::o;43390:614::-;43425:14;43442:13;:11;:13::i;:::-;43425:30;;43466:14;43483:9;:21;43493:10;43483:21;;;;;;;;;;;;;;;;43466:38;;43532:1;43523:6;:10;43515:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;43595:6;43581:10;;:20;;43573:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;43648:9;43660:1;43648:13;;43643:286;43668:6;43663:1;:11;43643:286;;43696:33;43706:10;43727:1;43718:6;:10;;;;:::i;:::-;43696:9;:33::i;:::-;43771:1;43744:12;:24;43766:1;43757:6;:10;;;;:::i;:::-;43744:24;;;;;;;;;;;:28;;;;43787:20;:32;43808:10;43787:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;43836:9;:21;43846:10;43836:21;;;;;;;;;;;;;;;;:23;;;;;;;;;:::i;:::-;;;;;;43874:10;;:12;;;;;;;;;:::i;:::-;;;;;;43901:14;;:16;;;;;;;;;:::i;:::-;;;;;;43676:3;;;;;:::i;:::-;;;;43643:286;;;;43958:1;43944:10;;:15;43941:56;;43984:1;43975:6;:10;;;;43941:56;43414:590;;43390:614::o;33823:233::-;33898:7;33934:30;:28;:30::i;:::-;33926:5;:38;33918:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;34031:10;34042:5;34031:17;;;;;;;;:::i;:::-;;;;;;;;;;34024:24;;33823:233;;;:::o;41916:27::-;;;;:::o;45198:104::-;39597:13;:11;:13::i;:::-;45283:11:::1;45273:7;:21;;;;;;:::i;:::-;;45198:104:::0;:::o;47621:128::-;39597:13;:11;:13::i;:::-;47708:4:::1;47701:21;;;47723:10;47734:6;47701:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;47621:128:::0;;:::o;41950:29::-;;;;:::o;41775:25::-;;;;:::o;19113:222::-;19185:7;19205:13;19221:7;:16;19229:7;19221:16;;;;;;;;;;;;;;;;;;;;;19205:32;;19273:1;19256:19;;:5;:19;;;19248:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;19322:5;19315:12;;;19113:222;;;:::o;45876:98::-;39597:13;:11;:13::i;:::-;45959:7:::1;45945:11;;:21;;;;;;;;;;;;;;;;;;45876:98:::0;:::o;42074:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42468:44::-;;;;;;;;;;;;;;;;;:::o;18844:207::-;18916:7;18961:1;18944:19;;:5;:19;;;18936:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;19027:9;:16;19037:5;19027:16;;;;;;;;;;;;;;;;19020:23;;18844:207;;;:::o;47757:150::-;39597:13;:11;:13::i;:::-;47852:3:::1;47845:24;;;47878:4;47884:9;47895:3;47845:54;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;47757:150:::0;;;:::o;40359:103::-;39597:13;:11;:13::i;:::-;40424:30:::1;40451:1;40424:18;:30::i;:::-;40359:103::o:0;42747:92::-;39597:13;:11;:13::i;:::-;42830:4:::1;42809:18;:25;;;;42747:92:::0;:::o;42420:41::-;;;;;;;;;;;;;;;;;:::o;43072:310::-;39597:13;:11;:13::i;:::-;43178::::1;43211:9:::0;43206:136:::1;43226:6;;:13;;43222:1;:17;43206:136;;;43284:8;;43293:1;43284:11;;;;;;;:::i;:::-;;;;;;;;43261:9;:20;43271:6;;43278:1;43271:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;43261:20;;;;;;;;;;;;;;;:34;;;;43319:8;;43328:1;43319:11;;;;;;;:::i;:::-;;;;;;;;43310:20;;;;;:::i;:::-;;;43241:3;;;;;:::i;:::-;;;;43206:136;;;;43369:5;43352:14;:22;;;;43167:215;43072:310:::0;;;;:::o;39711:87::-;39757:7;39784:6;;;;;;;;;;;39777:13;;39711:87;:::o;19571:104::-;19627:13;19660:7;19653:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19571:104;:::o;44012:1178::-;44065:14;44082:13;:11;:13::i;:::-;44065:30;;44124:1;44114:6;;:11;44106:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;44177:1;44163:11;:15;44155:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;44215:24;44242:20;:32;44263:10;44242:32;;;;;;;;;;;;;;;;44215:59;;44327:18;;44312:11;44293:16;:30;;;;:::i;:::-;:52;;44285:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;44430:11;44411:14;;44398:10;;:27;;;;:::i;:::-;44397:44;;44389:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;44506:10;;44487:15;:29;;44479:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44559:13;44599:6;44590:4;;44576:11;:18;;;;:::i;:::-;44575:31;;;;:::i;:::-;44559:47;;44679:5;44632;;;;;;;;;;;44625:23;;;44649:10;44669:4;44625:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:59;;44617:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;44774:5;44742;;;;;;;;;;;44735:23;;;44759:10;44735:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;;44727:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;44829:5;;;;;;;;;;;44822:26;;;44849:10;44861:11;;;;;;;;;;;44874:5;44822:58;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44898:9;44910:1;44898:13;;44893:222;44918:11;44913:1;:16;44893:222;;44951:33;44961:10;44982:1;44973:6;:10;;;;:::i;:::-;44951:9;:33::i;:::-;45026:1;44999:12;:24;45021:1;45012:6;:10;;;;:::i;:::-;44999:24;;;;;;;;;;;:28;;;;45042:20;:32;45063:10;45042:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;45091:10;;:12;;;;;;;;;:::i;:::-;;;;;;44931:3;;;;;:::i;:::-;;;;44893:222;;;;45144:1;45130:10;;:15;45127:56;;45170:1;45161:6;:10;;;;45127:56;44054:1136;;;44012:1178;:::o;21158:155::-;21253:52;21272:12;:10;:12::i;:::-;21286:8;21296;21253:18;:52::i;:::-;21158:155;;:::o;45446:66::-;39597:13;:11;:13::i;:::-;45503:1:::1;45492:8;:12;;;;45446:66::o:0;42229:30::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22278:323::-;22452:41;22471:12;:10;:12::i;:::-;22485:7;22452:18;:41::i;:::-;22444:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;22555:38;22569:4;22575:2;22579:7;22588:4;22555:13;:38::i;:::-;22278:323;;;;:::o;42023:38::-;;;;:::o;42102:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46098:658::-;46171:13;46205:16;46213:7;46205;:16::i;:::-;46197:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;46286:23;46312:10;:19;46323:7;46312:19;;;;;;;;;;;46286:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46342:18;46363:10;:8;:10::i;:::-;46342:31;;46401:1;46389:8;;:13;46386:39;;46411:14;46404:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46386:39;46468:1;46452:4;46446:18;:23;46442:72;;46493:9;46486:16;;;;;;46442:72;46556:1;46536:9;46530:23;:27;46526:123;;;46605:4;46611:9;46622:13;46588:48;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46574:63;;;;;;46526:123;46700:4;46706:25;46723:7;46706:16;:25::i;:::-;46733:13;46683:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46669:79;;;;46098:658;;;;:::o;42186:36::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41839:31::-;;;;:::o;45310:128::-;39597:13;:11;:13::i;:::-;45413:17:::1;45397:13;:33;;;;;;:::i;:::-;;45310:128:::0;:::o;21384:164::-;21481:4;21505:18;:25;21524:5;21505:25;;;;;;;;;;;;;;;:35;21531:8;21505:35;;;;;;;;;;;;;;;;;;;;;;;;;21498:42;;21384:164;;;;:::o;45520:126::-;39597:13;:11;:13::i;:::-;45623:15:::1;45606:14;:32;;;;;;:::i;:::-;;45520:126:::0;:::o;40617:201::-;39597:13;:11;:13::i;:::-;40726:1:::1;40706:22;;:8;:22;;::::0;40698:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;40782:28;40801:8;40782:18;:28::i;:::-;40617:201:::0;:::o;42268:65::-;;;;;;;;;;;;;:::o;41877:32::-;;;;:::o;18475:305::-;18577:4;18629:25;18614:40;;;:11;:40;;;;:105;;;;18686:33;18671:48;;;:11;:48;;;;18614:105;:158;;;;18736:36;18760:11;18736:23;:36::i;:::-;18614:158;18594:178;;18475:305;;;:::o;28890:135::-;28972:16;28980:7;28972;:16::i;:::-;28964:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;28890:135;:::o;14710:98::-;14763:7;14790:10;14783:17;;14710:98;:::o;28169:174::-;28271:2;28244:15;:24;28260:7;28244:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;28327:7;28323:2;28289:46;;28298:23;28313:7;28298:14;:23::i;:::-;28289:46;;;;;;;;;;;;28169:174;;:::o;24402:264::-;24495:4;24512:13;24528:23;24543:7;24528:14;:23::i;:::-;24512:39;;24581:5;24570:16;;:7;:16;;;:52;;;;24590:32;24607:5;24614:7;24590:16;:32::i;:::-;24570:52;:87;;;;24650:7;24626:31;;:20;24638:7;24626:11;:20::i;:::-;:31;;;24570:87;24562:96;;;24402:264;;;;:::o;27425:625::-;27584:4;27557:31;;:23;27572:7;27557:14;:23::i;:::-;:31;;;27549:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;27663:1;27649:16;;:2;:16;;;27641:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;27719:39;27740:4;27746:2;27750:7;27719:20;:39::i;:::-;27823:29;27840:1;27844:7;27823:8;:29::i;:::-;27884:1;27865:9;:15;27875:4;27865:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;27913:1;27896:9;:13;27906:2;27896:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27944:2;27925:7;:16;27933:7;27925:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27983:7;27979:2;27964:27;;27973:4;27964:27;;;;;;;;;;;;28004:38;28024:4;28030:2;28034:7;28004:19;:38::i;:::-;27425:625;;;:::o;39876:132::-;39951:12;:10;:12::i;:::-;39940:23;;:7;:5;:7::i;:::-;:23;;;39932:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39876:132::o;25008:110::-;25084:26;25094:2;25098:7;25084:26;;;;;;;;;;;;:9;:26::i;:::-;25008:110;;:::o;40978:191::-;41052:16;41071:6;;;;;;;;;;;41052:25;;41097:8;41088:6;;:17;;;;;;;;;;;;;;;;;;41152:8;41121:40;;41142:8;41121:40;;;;;;;;;;;;41041:128;40978:191;:::o;28486:315::-;28641:8;28632:17;;:5;:17;;;28624:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;28728:8;28690:18;:25;28709:5;28690:25;;;;;;;;;;;;;;;:35;28716:8;28690:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;28774:8;28752:41;;28767:5;28752:41;;;28784:8;28752:41;;;;;;:::i;:::-;;;;;;;;28486:315;;;:::o;23482:313::-;23638:28;23648:4;23654:2;23658:7;23638:9;:28::i;:::-;23685:47;23708:4;23714:2;23718:7;23727:4;23685:22;:47::i;:::-;23677:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;23482:313;;;;:::o;24108:127::-;24173:4;24225:1;24197:30;;:7;:16;24205:7;24197:16;;;;;;;;;;;;;;;;;;;;;:30;;;;24190:37;;24108:127;;;:::o;45982:108::-;46042:13;46075:7;46068:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45982:108;:::o;15162:723::-;15218:13;15448:1;15439:5;:10;15435:53;;15466:10;;;;;;;;;;;;;;;;;;;;;15435:53;15498:12;15513:5;15498:20;;15529:14;15554:78;15569:1;15561:4;:9;15554:78;;15587:8;;;;;:::i;:::-;;;;15618:2;15610:10;;;;;:::i;:::-;;;15554:78;;;15642:19;15674:6;15664:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15642:39;;15692:154;15708:1;15699:5;:10;15692:154;;15736:1;15726:11;;;;;:::i;:::-;;;15803:2;15795:5;:10;;;;:::i;:::-;15782:2;:24;;;;:::i;:::-;15769:39;;15752:6;15759;15752:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;15832:2;15823:11;;;;;:::i;:::-;;;15692:154;;;15870:6;15856:21;;;;;15162:723;;;;:::o;17336:157::-;17421:4;17460:25;17445:40;;;:11;:40;;;;17438:47;;17336:157;;;:::o;34669:589::-;34813:45;34840:4;34846:2;34850:7;34813:26;:45::i;:::-;34891:1;34875:18;;:4;:18;;;34871:187;;34910:40;34942:7;34910:31;:40::i;:::-;34871:187;;;34980:2;34972:10;;:4;:10;;;34968:90;;34999:47;35032:4;35038:7;34999:32;:47::i;:::-;34968:90;34871:187;35086:1;35072:16;;:2;:16;;;35068:183;;35105:45;35142:7;35105:36;:45::i;:::-;35068:183;;;35178:4;35172:10;;:2;:10;;;35168:83;;35199:40;35227:2;35231:7;35199:27;:40::i;:::-;35168:83;35068:183;34669:589;;;:::o;31525:125::-;;;;:::o;25345:319::-;25474:18;25480:2;25484:7;25474:5;:18::i;:::-;25525:53;25556:1;25560:2;25564:7;25573:4;25525:22;:53::i;:::-;25503:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;25345:319;;;:::o;29589:853::-;29743:4;29764:15;:2;:13;;;:15::i;:::-;29760:675;;;29816:2;29800:36;;;29837:12;:10;:12::i;:::-;29851:4;29857:7;29866:4;29800:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;29796:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30058:1;30041:6;:13;:18;30037:328;;30084:60;;;;;;;;;;:::i;:::-;;;;;;;;30037:328;30315:6;30309:13;30300:6;30296:2;30292:15;30285:38;29796:584;29932:41;;;29922:51;;;:6;:51;;;;29915:58;;;;;29760:675;30419:4;30412:11;;29589:853;;;;;;;:::o;31014:126::-;;;;:::o;35981:164::-;36085:10;:17;;;;36058:15;:24;36074:7;36058:24;;;;;;;;;;;:44;;;;36113:10;36129:7;36113:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35981:164;:::o;36772:988::-;37038:22;37088:1;37063:22;37080:4;37063:16;:22::i;:::-;:26;;;;:::i;:::-;37038:51;;37100:18;37121:17;:26;37139:7;37121:26;;;;;;;;;;;;37100:47;;37268:14;37254:10;:28;37250:328;;37299:19;37321:12;:18;37334:4;37321:18;;;;;;;;;;;;;;;:34;37340:14;37321:34;;;;;;;;;;;;37299:56;;37405:11;37372:12;:18;37385:4;37372:18;;;;;;;;;;;;;;;:30;37391:10;37372:30;;;;;;;;;;;:44;;;;37522:10;37489:17;:30;37507:11;37489:30;;;;;;;;;;;:43;;;;37284:294;37250:328;37674:17;:26;37692:7;37674:26;;;;;;;;;;;37667:33;;;37718:12;:18;37731:4;37718:18;;;;;;;;;;;;;;;:34;37737:14;37718:34;;;;;;;;;;;37711:41;;;36853:907;;36772:988;;:::o;38055:1079::-;38308:22;38353:1;38333:10;:17;;;;:21;;;;:::i;:::-;38308:46;;38365:18;38386:15;:24;38402:7;38386:24;;;;;;;;;;;;38365:45;;38737:19;38759:10;38770:14;38759:26;;;;;;;;:::i;:::-;;;;;;;;;;38737:48;;38823:11;38798:10;38809;38798:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;38934:10;38903:15;:28;38919:11;38903:28;;;;;;;;;;;:41;;;;39075:15;:24;39091:7;39075:24;;;;;;;;;;;39068:31;;;39110:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38126:1008;;;38055:1079;:::o;35559:221::-;35644:14;35661:20;35678:2;35661:16;:20::i;:::-;35644:37;;35719:7;35692:12;:16;35705:2;35692:16;;;;;;;;;;;;;;;:24;35709:6;35692:24;;;;;;;;;;;:34;;;;35766:6;35737:17;:26;35755:7;35737:26;;;;;;;;;;;:35;;;;35633:147;35559:221;;:::o;26000:439::-;26094:1;26080:16;;:2;:16;;;26072:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;26153:16;26161:7;26153;:16::i;:::-;26152:17;26144:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;26215:45;26244:1;26248:2;26252:7;26215:20;:45::i;:::-;26290:1;26273:9;:13;26283:2;26273:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;26321:2;26302:7;:16;26310:7;26302:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;26366:7;26362:2;26341:33;;26358:1;26341:33;;;;;;;;;;;;26387:44;26415:1;26419:2;26423:7;26387:19;:44::i;:::-;26000:439;;:::o;7357:326::-;7417:4;7674:1;7652:7;:19;;;:23;7645:30;;7357:326;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:75::-;475:6;508:2;502:9;492:19;;442:75;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:149;805:7;845:66;838:5;834:78;823:89;;769:149;;;:::o;924:120::-;996:23;1013:5;996:23;:::i;:::-;989:5;986:34;976:62;;1034:1;1031;1024:12;976:62;924:120;:::o;1050:137::-;1095:5;1133:6;1120:20;1111:29;;1149:32;1175:5;1149:32;:::i;:::-;1050:137;;;;:::o;1193:327::-;1251:6;1300:2;1288:9;1279:7;1275:23;1271:32;1268:119;;;1306:79;;:::i;:::-;1268:119;1426:1;1451:52;1495:7;1486:6;1475:9;1471:22;1451:52;:::i;:::-;1441:62;;1397:116;1193:327;;;;:::o;1526:90::-;1560:7;1603:5;1596:13;1589:21;1578:32;;1526:90;;;:::o;1622:109::-;1703:21;1718:5;1703:21;:::i;:::-;1698:3;1691:34;1622:109;;:::o;1737:210::-;1824:4;1862:2;1851:9;1847:18;1839:26;;1875:65;1937:1;1926:9;1922:17;1913:6;1875:65;:::i;:::-;1737:210;;;;:::o;1953:99::-;2005:6;2039:5;2033:12;2023:22;;1953:99;;;:::o;2058:169::-;2142:11;2176:6;2171:3;2164:19;2216:4;2211:3;2207:14;2192:29;;2058:169;;;;:::o;2233:246::-;2314:1;2324:113;2338:6;2335:1;2332:13;2324:113;;;2423:1;2418:3;2414:11;2408:18;2404:1;2399:3;2395:11;2388:39;2360:2;2357:1;2353:10;2348:15;;2324:113;;;2471:1;2462:6;2457:3;2453:16;2446:27;2295:184;2233:246;;;:::o;2485:102::-;2526:6;2577:2;2573:7;2568:2;2561:5;2557:14;2553:28;2543:38;;2485:102;;;:::o;2593:377::-;2681:3;2709:39;2742:5;2709:39;:::i;:::-;2764:71;2828:6;2823:3;2764:71;:::i;:::-;2757:78;;2844:65;2902:6;2897:3;2890:4;2883:5;2879:16;2844:65;:::i;:::-;2934:29;2956:6;2934:29;:::i;:::-;2929:3;2925:39;2918:46;;2685:285;2593:377;;;;:::o;2976:313::-;3089:4;3127:2;3116:9;3112:18;3104:26;;3176:9;3170:4;3166:20;3162:1;3151:9;3147:17;3140:47;3204:78;3277:4;3268:6;3204:78;:::i;:::-;3196:86;;2976:313;;;;:::o;3295:122::-;3368:24;3386:5;3368:24;:::i;:::-;3361:5;3358:35;3348:63;;3407:1;3404;3397:12;3348:63;3295:122;:::o;3423:139::-;3469:5;3507:6;3494:20;3485:29;;3523:33;3550:5;3523:33;:::i;:::-;3423:139;;;;:::o;3568:329::-;3627:6;3676:2;3664:9;3655:7;3651:23;3647:32;3644:119;;;3682:79;;:::i;:::-;3644:119;3802:1;3827:53;3872:7;3863:6;3852:9;3848:22;3827:53;:::i;:::-;3817:63;;3773:117;3568:329;;;;:::o;3903:126::-;3940:7;3980:42;3973:5;3969:54;3958:65;;3903:126;;;:::o;4035:96::-;4072:7;4101:24;4119:5;4101:24;:::i;:::-;4090:35;;4035:96;;;:::o;4137:118::-;4224:24;4242:5;4224:24;:::i;:::-;4219:3;4212:37;4137:118;;:::o;4261:222::-;4354:4;4392:2;4381:9;4377:18;4369:26;;4405:71;4473:1;4462:9;4458:17;4449:6;4405:71;:::i;:::-;4261:222;;;;:::o;4489:122::-;4562:24;4580:5;4562:24;:::i;:::-;4555:5;4552:35;4542:63;;4601:1;4598;4591:12;4542:63;4489:122;:::o;4617:139::-;4663:5;4701:6;4688:20;4679:29;;4717:33;4744:5;4717:33;:::i;:::-;4617:139;;;;:::o;4762:474::-;4830:6;4838;4887:2;4875:9;4866:7;4862:23;4858:32;4855:119;;;4893:79;;:::i;:::-;4855:119;5013:1;5038:53;5083:7;5074:6;5063:9;5059:22;5038:53;:::i;:::-;5028:63;;4984:117;5140:2;5166:53;5211:7;5202:6;5191:9;5187:22;5166:53;:::i;:::-;5156:63;;5111:118;4762:474;;;;;:::o;5242:329::-;5301:6;5350:2;5338:9;5329:7;5325:23;5321:32;5318:119;;;5356:79;;:::i;:::-;5318:119;5476:1;5501:53;5546:7;5537:6;5526:9;5522:22;5501:53;:::i;:::-;5491:63;;5447:117;5242:329;;;;:::o;5577:619::-;5654:6;5662;5670;5719:2;5707:9;5698:7;5694:23;5690:32;5687:119;;;5725:79;;:::i;:::-;5687:119;5845:1;5870:53;5915:7;5906:6;5895:9;5891:22;5870:53;:::i;:::-;5860:63;;5816:117;5972:2;5998:53;6043:7;6034:6;6023:9;6019:22;5998:53;:::i;:::-;5988:63;;5943:118;6100:2;6126:53;6171:7;6162:6;6151:9;6147:22;6126:53;:::i;:::-;6116:63;;6071:118;5577:619;;;;;:::o;6202:114::-;6269:6;6303:5;6297:12;6287:22;;6202:114;;;:::o;6322:184::-;6421:11;6455:6;6450:3;6443:19;6495:4;6490:3;6486:14;6471:29;;6322:184;;;;:::o;6512:132::-;6579:4;6602:3;6594:11;;6632:4;6627:3;6623:14;6615:22;;6512:132;;;:::o;6650:108::-;6727:24;6745:5;6727:24;:::i;:::-;6722:3;6715:37;6650:108;;:::o;6764:179::-;6833:10;6854:46;6896:3;6888:6;6854:46;:::i;:::-;6932:4;6927:3;6923:14;6909:28;;6764:179;;;;:::o;6949:113::-;7019:4;7051;7046:3;7042:14;7034:22;;6949:113;;;:::o;7098:732::-;7217:3;7246:54;7294:5;7246:54;:::i;:::-;7316:86;7395:6;7390:3;7316:86;:::i;:::-;7309:93;;7426:56;7476:5;7426:56;:::i;:::-;7505:7;7536:1;7521:284;7546:6;7543:1;7540:13;7521:284;;;7622:6;7616:13;7649:63;7708:3;7693:13;7649:63;:::i;:::-;7642:70;;7735:60;7788:6;7735:60;:::i;:::-;7725:70;;7581:224;7568:1;7565;7561:9;7556:14;;7521:284;;;7525:14;7821:3;7814:10;;7222:608;;;7098:732;;;;:::o;7836:373::-;7979:4;8017:2;8006:9;8002:18;7994:26;;8066:9;8060:4;8056:20;8052:1;8041:9;8037:17;8030:47;8094:108;8197:4;8188:6;8094:108;:::i;:::-;8086:116;;7836:373;;;;:::o;8215:117::-;8324:1;8321;8314:12;8338:117;8447:1;8444;8437:12;8461:180;8509:77;8506:1;8499:88;8606:4;8603:1;8596:15;8630:4;8627:1;8620:15;8647:281;8730:27;8752:4;8730:27;:::i;:::-;8722:6;8718:40;8860:6;8848:10;8845:22;8824:18;8812:10;8809:34;8806:62;8803:88;;;8871:18;;:::i;:::-;8803:88;8911:10;8907:2;8900:22;8690:238;8647:281;;:::o;8934:129::-;8968:6;8995:20;;:::i;:::-;8985:30;;9024:33;9052:4;9044:6;9024:33;:::i;:::-;8934:129;;;:::o;9069:308::-;9131:4;9221:18;9213:6;9210:30;9207:56;;;9243:18;;:::i;:::-;9207:56;9281:29;9303:6;9281:29;:::i;:::-;9273:37;;9365:4;9359;9355:15;9347:23;;9069:308;;;:::o;9383:146::-;9480:6;9475:3;9470;9457:30;9521:1;9512:6;9507:3;9503:16;9496:27;9383:146;;;:::o;9535:425::-;9613:5;9638:66;9654:49;9696:6;9654:49;:::i;:::-;9638:66;:::i;:::-;9629:75;;9727:6;9720:5;9713:21;9765:4;9758:5;9754:16;9803:3;9794:6;9789:3;9785:16;9782:25;9779:112;;;9810:79;;:::i;:::-;9779:112;9900:54;9947:6;9942:3;9937;9900:54;:::i;:::-;9619:341;9535:425;;;;;:::o;9980:340::-;10036:5;10085:3;10078:4;10070:6;10066:17;10062:27;10052:122;;10093:79;;:::i;:::-;10052:122;10210:6;10197:20;10235:79;10310:3;10302:6;10295:4;10287:6;10283:17;10235:79;:::i;:::-;10226:88;;10042:278;9980:340;;;;:::o;10326:509::-;10395:6;10444:2;10432:9;10423:7;10419:23;10415:32;10412:119;;;10450:79;;:::i;:::-;10412:119;10598:1;10587:9;10583:17;10570:31;10628:18;10620:6;10617:30;10614:117;;;10650:79;;:::i;:::-;10614:117;10755:63;10810:7;10801:6;10790:9;10786:22;10755:63;:::i;:::-;10745:73;;10541:287;10326:509;;;;:::o;10841:619::-;10918:6;10926;10934;10983:2;10971:9;10962:7;10958:23;10954:32;10951:119;;;10989:79;;:::i;:::-;10951:119;11109:1;11134:53;11179:7;11170:6;11159:9;11155:22;11134:53;:::i;:::-;11124:63;;11080:117;11236:2;11262:53;11307:7;11298:6;11287:9;11283:22;11262:53;:::i;:::-;11252:63;;11207:118;11364:2;11390:53;11435:7;11426:6;11415:9;11411:22;11390:53;:::i;:::-;11380:63;;11335:118;10841:619;;;;;:::o;11466:117::-;11575:1;11572;11565:12;11589:117;11698:1;11695;11688:12;11729:568;11802:8;11812:6;11862:3;11855:4;11847:6;11843:17;11839:27;11829:122;;11870:79;;:::i;:::-;11829:122;11983:6;11970:20;11960:30;;12013:18;12005:6;12002:30;11999:117;;;12035:79;;:::i;:::-;11999:117;12149:4;12141:6;12137:17;12125:29;;12203:3;12195:4;12187:6;12183:17;12173:8;12169:32;12166:41;12163:128;;;12210:79;;:::i;:::-;12163:128;11729:568;;;;;:::o;12320:::-;12393:8;12403:6;12453:3;12446:4;12438:6;12434:17;12430:27;12420:122;;12461:79;;:::i;:::-;12420:122;12574:6;12561:20;12551:30;;12604:18;12596:6;12593:30;12590:117;;;12626:79;;:::i;:::-;12590:117;12740:4;12732:6;12728:17;12716:29;;12794:3;12786:4;12778:6;12774:17;12764:8;12760:32;12757:41;12754:128;;;12801:79;;:::i;:::-;12754:128;12320:568;;;;;:::o;12894:934::-;13016:6;13024;13032;13040;13089:2;13077:9;13068:7;13064:23;13060:32;13057:119;;;13095:79;;:::i;:::-;13057:119;13243:1;13232:9;13228:17;13215:31;13273:18;13265:6;13262:30;13259:117;;;13295:79;;:::i;:::-;13259:117;13408:80;13480:7;13471:6;13460:9;13456:22;13408:80;:::i;:::-;13390:98;;;;13186:312;13565:2;13554:9;13550:18;13537:32;13596:18;13588:6;13585:30;13582:117;;;13618:79;;:::i;:::-;13582:117;13731:80;13803:7;13794:6;13783:9;13779:22;13731:80;:::i;:::-;13713:98;;;;13508:313;12894:934;;;;;;;:::o;13834:116::-;13904:21;13919:5;13904:21;:::i;:::-;13897:5;13894:32;13884:60;;13940:1;13937;13930:12;13884:60;13834:116;:::o;13956:133::-;13999:5;14037:6;14024:20;14015:29;;14053:30;14077:5;14053:30;:::i;:::-;13956:133;;;;:::o;14095:468::-;14160:6;14168;14217:2;14205:9;14196:7;14192:23;14188:32;14185:119;;;14223:79;;:::i;:::-;14185:119;14343:1;14368:53;14413:7;14404:6;14393:9;14389:22;14368:53;:::i;:::-;14358:63;;14314:117;14470:2;14496:50;14538:7;14529:6;14518:9;14514:22;14496:50;:::i;:::-;14486:60;;14441:115;14095:468;;;;;:::o;14569:307::-;14630:4;14720:18;14712:6;14709:30;14706:56;;;14742:18;;:::i;:::-;14706:56;14780:29;14802:6;14780:29;:::i;:::-;14772:37;;14864:4;14858;14854:15;14846:23;;14569:307;;;:::o;14882:423::-;14959:5;14984:65;15000:48;15041:6;15000:48;:::i;:::-;14984:65;:::i;:::-;14975:74;;15072:6;15065:5;15058:21;15110:4;15103:5;15099:16;15148:3;15139:6;15134:3;15130:16;15127:25;15124:112;;;15155:79;;:::i;:::-;15124:112;15245:54;15292:6;15287:3;15282;15245:54;:::i;:::-;14965:340;14882:423;;;;;:::o;15324:338::-;15379:5;15428:3;15421:4;15413:6;15409:17;15405:27;15395:122;;15436:79;;:::i;:::-;15395:122;15553:6;15540:20;15578:78;15652:3;15644:6;15637:4;15629:6;15625:17;15578:78;:::i;:::-;15569:87;;15385:277;15324:338;;;;:::o;15668:943::-;15763:6;15771;15779;15787;15836:3;15824:9;15815:7;15811:23;15807:33;15804:120;;;15843:79;;:::i;:::-;15804:120;15963:1;15988:53;16033:7;16024:6;16013:9;16009:22;15988:53;:::i;:::-;15978:63;;15934:117;16090:2;16116:53;16161:7;16152:6;16141:9;16137:22;16116:53;:::i;:::-;16106:63;;16061:118;16218:2;16244:53;16289:7;16280:6;16269:9;16265:22;16244:53;:::i;:::-;16234:63;;16189:118;16374:2;16363:9;16359:18;16346:32;16405:18;16397:6;16394:30;16391:117;;;16427:79;;:::i;:::-;16391:117;16532:62;16586:7;16577:6;16566:9;16562:22;16532:62;:::i;:::-;16522:72;;16317:287;15668:943;;;;;;;:::o;16617:474::-;16685:6;16693;16742:2;16730:9;16721:7;16717:23;16713:32;16710:119;;;16748:79;;:::i;:::-;16710:119;16868:1;16893:53;16938:7;16929:6;16918:9;16914:22;16893:53;:::i;:::-;16883:63;;16839:117;16995:2;17021:53;17066:7;17057:6;17046:9;17042:22;17021:53;:::i;:::-;17011:63;;16966:118;16617:474;;;;;:::o;17097:180::-;17145:77;17142:1;17135:88;17242:4;17239:1;17232:15;17266:4;17263:1;17256:15;17283:194;17323:4;17343:20;17361:1;17343:20;:::i;:::-;17338:25;;17377:20;17395:1;17377:20;:::i;:::-;17372:25;;17421:1;17418;17414:9;17406:17;;17445:1;17439:4;17436:11;17433:37;;;17450:18;;:::i;:::-;17433:37;17283:194;;;;:::o;17483:180::-;17531:77;17528:1;17521:88;17628:4;17625:1;17618:15;17652:4;17649:1;17642:15;17669:320;17713:6;17750:1;17744:4;17740:12;17730:22;;17797:1;17791:4;17787:12;17818:18;17808:81;;17874:4;17866:6;17862:17;17852:27;;17808:81;17936:2;17928:6;17925:14;17905:18;17902:38;17899:84;;17955:18;;:::i;:::-;17899:84;17720:269;17669:320;;;:::o;17995:220::-;18135:34;18131:1;18123:6;18119:14;18112:58;18204:3;18199:2;18191:6;18187:15;18180:28;17995:220;:::o;18221:366::-;18363:3;18384:67;18448:2;18443:3;18384:67;:::i;:::-;18377:74;;18460:93;18549:3;18460:93;:::i;:::-;18578:2;18573:3;18569:12;18562:19;;18221:366;;;:::o;18593:419::-;18759:4;18797:2;18786:9;18782:18;18774:26;;18846:9;18840:4;18836:20;18832:1;18821:9;18817:17;18810:47;18874:131;19000:4;18874:131;:::i;:::-;18866:139;;18593:419;;;:::o;19018:249::-;19158:34;19154:1;19146:6;19142:14;19135:58;19227:32;19222:2;19214:6;19210:15;19203:57;19018:249;:::o;19273:366::-;19415:3;19436:67;19500:2;19495:3;19436:67;:::i;:::-;19429:74;;19512:93;19601:3;19512:93;:::i;:::-;19630:2;19625:3;19621:12;19614:19;;19273:366;;;:::o;19645:419::-;19811:4;19849:2;19838:9;19834:18;19826:26;;19898:9;19892:4;19888:20;19884:1;19873:9;19869:17;19862:47;19926:131;20052:4;19926:131;:::i;:::-;19918:139;;19645:419;;;:::o;20070:233::-;20210:34;20206:1;20198:6;20194:14;20187:58;20279:16;20274:2;20266:6;20262:15;20255:41;20070:233;:::o;20309:366::-;20451:3;20472:67;20536:2;20531:3;20472:67;:::i;:::-;20465:74;;20548:93;20637:3;20548:93;:::i;:::-;20666:2;20661:3;20657:12;20650:19;;20309:366;;;:::o;20681:419::-;20847:4;20885:2;20874:9;20870:18;20862:26;;20934:9;20928:4;20924:20;20920:1;20909:9;20905:17;20898:47;20962:131;21088:4;20962:131;:::i;:::-;20954:139;;20681:419;;;:::o;21106:191::-;21146:3;21165:20;21183:1;21165:20;:::i;:::-;21160:25;;21199:20;21217:1;21199:20;:::i;:::-;21194:25;;21242:1;21239;21235:9;21228:16;;21263:3;21260:1;21257:10;21254:36;;;21270:18;;:::i;:::-;21254:36;21106:191;;;;:::o;21303:230::-;21443:34;21439:1;21431:6;21427:14;21420:58;21512:13;21507:2;21499:6;21495:15;21488:38;21303:230;:::o;21539:366::-;21681:3;21702:67;21766:2;21761:3;21702:67;:::i;:::-;21695:74;;21778:93;21867:3;21778:93;:::i;:::-;21896:2;21891:3;21887:12;21880:19;;21539:366;;;:::o;21911:419::-;22077:4;22115:2;22104:9;22100:18;22092:26;;22164:9;22158:4;22154:20;22150:1;22139:9;22135:17;22128:47;22192:131;22318:4;22192:131;:::i;:::-;22184:139;;21911:419;;;:::o;22336:177::-;22476:29;22472:1;22464:6;22460:14;22453:53;22336:177;:::o;22519:366::-;22661:3;22682:67;22746:2;22741:3;22682:67;:::i;:::-;22675:74;;22758:93;22847:3;22758:93;:::i;:::-;22876:2;22871:3;22867:12;22860:19;;22519:366;;;:::o;22891:419::-;23057:4;23095:2;23084:9;23080:18;23072:26;;23144:9;23138:4;23134:20;23130:1;23119:9;23115:17;23108:47;23172:131;23298:4;23172:131;:::i;:::-;23164:139;;22891:419;;;:::o;23316:172::-;23456:24;23452:1;23444:6;23440:14;23433:48;23316:172;:::o;23494:366::-;23636:3;23657:67;23721:2;23716:3;23657:67;:::i;:::-;23650:74;;23733:93;23822:3;23733:93;:::i;:::-;23851:2;23846:3;23842:12;23835:19;;23494:366;;;:::o;23866:419::-;24032:4;24070:2;24059:9;24055:18;24047:26;;24119:9;24113:4;24109:20;24105:1;24094:9;24090:17;24083:47;24147:131;24273:4;24147:131;:::i;:::-;24139:139;;23866:419;;;:::o;24291:233::-;24330:3;24353:24;24371:5;24353:24;:::i;:::-;24344:33;;24399:66;24392:5;24389:77;24386:103;;24469:18;;:::i;:::-;24386:103;24516:1;24509:5;24505:13;24498:20;;24291:233;;;:::o;24530:171::-;24569:3;24592:24;24610:5;24592:24;:::i;:::-;24583:33;;24638:4;24631:5;24628:15;24625:41;;24646:18;;:::i;:::-;24625:41;24693:1;24686:5;24682:13;24675:20;;24530:171;;;:::o;24707:180::-;24755:77;24752:1;24745:88;24852:4;24849:1;24842:15;24876:4;24873:1;24866:15;24893:180;25033:32;25029:1;25021:6;25017:14;25010:56;24893:180;:::o;25079:366::-;25221:3;25242:67;25306:2;25301:3;25242:67;:::i;:::-;25235:74;;25318:93;25407:3;25318:93;:::i;:::-;25436:2;25431:3;25427:12;25420:19;;25079:366;;;:::o;25451:419::-;25617:4;25655:2;25644:9;25640:18;25632:26;;25704:9;25698:4;25694:20;25690:1;25679:9;25675:17;25668:47;25732:131;25858:4;25732:131;:::i;:::-;25724:139;;25451:419;;;:::o;25876:231::-;26016:34;26012:1;26004:6;26000:14;25993:58;26085:14;26080:2;26072:6;26068:15;26061:39;25876:231;:::o;26113:366::-;26255:3;26276:67;26340:2;26335:3;26276:67;:::i;:::-;26269:74;;26352:93;26441:3;26352:93;:::i;:::-;26470:2;26465:3;26461:12;26454:19;;26113:366;;;:::o;26485:419::-;26651:4;26689:2;26678:9;26674:18;26666:26;;26738:9;26732:4;26728:20;26724:1;26713:9;26709:17;26702:47;26766:131;26892:4;26766:131;:::i;:::-;26758:139;;26485:419;;;:::o;26910:141::-;26959:4;26982:3;26974:11;;27005:3;27002:1;26995:14;27039:4;27036:1;27026:18;27018:26;;26910:141;;;:::o;27057:93::-;27094:6;27141:2;27136;27129:5;27125:14;27121:23;27111:33;;27057:93;;;:::o;27156:107::-;27200:8;27250:5;27244:4;27240:16;27219:37;;27156:107;;;;:::o;27269:393::-;27338:6;27388:1;27376:10;27372:18;27411:97;27441:66;27430:9;27411:97;:::i;:::-;27529:39;27559:8;27548:9;27529:39;:::i;:::-;27517:51;;27601:4;27597:9;27590:5;27586:21;27577:30;;27650:4;27640:8;27636:19;27629:5;27626:30;27616:40;;27345:317;;27269:393;;;;;:::o;27668:60::-;27696:3;27717:5;27710:12;;27668:60;;;:::o;27734:142::-;27784:9;27817:53;27835:34;27844:24;27862:5;27844:24;:::i;:::-;27835:34;:::i;:::-;27817:53;:::i;:::-;27804:66;;27734:142;;;:::o;27882:75::-;27925:3;27946:5;27939:12;;27882:75;;;:::o;27963:269::-;28073:39;28104:7;28073:39;:::i;:::-;28134:91;28183:41;28207:16;28183:41;:::i;:::-;28175:6;28168:4;28162:11;28134:91;:::i;:::-;28128:4;28121:105;28039:193;27963:269;;;:::o;28238:73::-;28283:3;28238:73;:::o;28317:189::-;28394:32;;:::i;:::-;28435:65;28493:6;28485;28479:4;28435:65;:::i;:::-;28370:136;28317:189;;:::o;28512:186::-;28572:120;28589:3;28582:5;28579:14;28572:120;;;28643:39;28680:1;28673:5;28643:39;:::i;:::-;28616:1;28609:5;28605:13;28596:22;;28572:120;;;28512:186;;:::o;28704:543::-;28805:2;28800:3;28797:11;28794:446;;;28839:38;28871:5;28839:38;:::i;:::-;28923:29;28941:10;28923:29;:::i;:::-;28913:8;28909:44;29106:2;29094:10;29091:18;29088:49;;;29127:8;29112:23;;29088:49;29150:80;29206:22;29224:3;29206:22;:::i;:::-;29196:8;29192:37;29179:11;29150:80;:::i;:::-;28809:431;;28794:446;28704:543;;;:::o;29253:117::-;29307:8;29357:5;29351:4;29347:16;29326:37;;29253:117;;;;:::o;29376:169::-;29420:6;29453:51;29501:1;29497:6;29489:5;29486:1;29482:13;29453:51;:::i;:::-;29449:56;29534:4;29528;29524:15;29514:25;;29427:118;29376:169;;;;:::o;29550:295::-;29626:4;29772:29;29797:3;29791:4;29772:29;:::i;:::-;29764:37;;29834:3;29831:1;29827:11;29821:4;29818:21;29810:29;;29550:295;;;;:::o;29850:1395::-;29967:37;30000:3;29967:37;:::i;:::-;30069:18;30061:6;30058:30;30055:56;;;30091:18;;:::i;:::-;30055:56;30135:38;30167:4;30161:11;30135:38;:::i;:::-;30220:67;30280:6;30272;30266:4;30220:67;:::i;:::-;30314:1;30338:4;30325:17;;30370:2;30362:6;30359:14;30387:1;30382:618;;;;31044:1;31061:6;31058:77;;;31110:9;31105:3;31101:19;31095:26;31086:35;;31058:77;31161:67;31221:6;31214:5;31161:67;:::i;:::-;31155:4;31148:81;31017:222;30352:887;;30382:618;30434:4;30430:9;30422:6;30418:22;30468:37;30500:4;30468:37;:::i;:::-;30527:1;30541:208;30555:7;30552:1;30549:14;30541:208;;;30634:9;30629:3;30625:19;30619:26;30611:6;30604:42;30685:1;30677:6;30673:14;30663:24;;30732:2;30721:9;30717:18;30704:31;;30578:4;30575:1;30571:12;30566:17;;30541:208;;;30777:6;30768:7;30765:19;30762:179;;;30835:9;30830:3;30826:19;30820:26;30878:48;30920:4;30912:6;30908:17;30897:9;30878:48;:::i;:::-;30870:6;30863:64;30785:156;30762:179;30987:1;30983;30975:6;30971:14;30967:22;30961:4;30954:36;30389:611;;;30352:887;;29942:1303;;;29850:1395;;:::o;31251:332::-;31372:4;31410:2;31399:9;31395:18;31387:26;;31423:71;31491:1;31480:9;31476:17;31467:6;31423:71;:::i;:::-;31504:72;31572:2;31561:9;31557:18;31548:6;31504:72;:::i;:::-;31251:332;;;;;:::o;31589:137::-;31643:5;31674:6;31668:13;31659:22;;31690:30;31714:5;31690:30;:::i;:::-;31589:137;;;;:::o;31732:345::-;31799:6;31848:2;31836:9;31827:7;31823:23;31819:32;31816:119;;;31854:79;;:::i;:::-;31816:119;31974:1;31999:61;32052:7;32043:6;32032:9;32028:22;31999:61;:::i;:::-;31989:71;;31945:125;31732:345;;;;:::o;32083:174::-;32223:26;32219:1;32211:6;32207:14;32200:50;32083:174;:::o;32263:366::-;32405:3;32426:67;32490:2;32485:3;32426:67;:::i;:::-;32419:74;;32502:93;32591:3;32502:93;:::i;:::-;32620:2;32615:3;32611:12;32604:19;;32263:366;;;:::o;32635:419::-;32801:4;32839:2;32828:9;32824:18;32816:26;;32888:9;32882:4;32878:20;32874:1;32863:9;32859:17;32852:47;32916:131;33042:4;32916:131;:::i;:::-;32908:139;;32635:419;;;:::o;33060:228::-;33200:34;33196:1;33188:6;33184:14;33177:58;33269:11;33264:2;33256:6;33252:15;33245:36;33060:228;:::o;33294:366::-;33436:3;33457:67;33521:2;33516:3;33457:67;:::i;:::-;33450:74;;33533:93;33622:3;33533:93;:::i;:::-;33651:2;33646:3;33642:12;33635:19;;33294:366;;;:::o;33666:419::-;33832:4;33870:2;33859:9;33855:18;33847:26;;33919:9;33913:4;33909:20;33905:1;33894:9;33890:17;33883:47;33947:131;34073:4;33947:131;:::i;:::-;33939:139;;33666:419;;;:::o;34091:442::-;34240:4;34278:2;34267:9;34263:18;34255:26;;34291:71;34359:1;34348:9;34344:17;34335:6;34291:71;:::i;:::-;34372:72;34440:2;34429:9;34425:18;34416:6;34372:72;:::i;:::-;34454;34522:2;34511:9;34507:18;34498:6;34454:72;:::i;:::-;34091:442;;;;;;:::o;34539:164::-;34679:16;34675:1;34667:6;34663:14;34656:40;34539:164;:::o;34709:366::-;34851:3;34872:67;34936:2;34931:3;34872:67;:::i;:::-;34865:74;;34948:93;35037:3;34948:93;:::i;:::-;35066:2;35061:3;35057:12;35050:19;;34709:366;;;:::o;35081:419::-;35247:4;35285:2;35274:9;35270:18;35262:26;;35334:9;35328:4;35324:20;35320:1;35309:9;35305:17;35298:47;35362:131;35488:4;35362:131;:::i;:::-;35354:139;;35081:419;;;:::o;35506:178::-;35646:30;35642:1;35634:6;35630:14;35623:54;35506:178;:::o;35690:366::-;35832:3;35853:67;35917:2;35912:3;35853:67;:::i;:::-;35846:74;;35929:93;36018:3;35929:93;:::i;:::-;36047:2;36042:3;36038:12;36031:19;;35690:366;;;:::o;36062:419::-;36228:4;36266:2;36255:9;36251:18;36243:26;;36315:9;36309:4;36305:20;36301:1;36290:9;36286:17;36279:47;36343:131;36469:4;36343:131;:::i;:::-;36335:139;;36062:419;;;:::o;36487:175::-;36627:27;36623:1;36615:6;36611:14;36604:51;36487:175;:::o;36668:366::-;36810:3;36831:67;36895:2;36890:3;36831:67;:::i;:::-;36824:74;;36907:93;36996:3;36907:93;:::i;:::-;37025:2;37020:3;37016:12;37009:19;;36668:366;;;:::o;37040:419::-;37206:4;37244:2;37233:9;37229:18;37221:26;;37293:9;37287:4;37283:20;37279:1;37268:9;37264:17;37257:47;37321:131;37447:4;37321:131;:::i;:::-;37313:139;;37040:419;;;:::o;37465:410::-;37505:7;37528:20;37546:1;37528:20;:::i;:::-;37523:25;;37562:20;37580:1;37562:20;:::i;:::-;37557:25;;37617:1;37614;37610:9;37639:30;37657:11;37639:30;:::i;:::-;37628:41;;37818:1;37809:7;37805:15;37802:1;37799:22;37779:1;37772:9;37752:83;37729:139;;37848:18;;:::i;:::-;37729:139;37513:362;37465:410;;;;:::o;37881:332::-;38002:4;38040:2;38029:9;38025:18;38017:26;;38053:71;38121:1;38110:9;38106:17;38097:6;38053:71;:::i;:::-;38134:72;38202:2;38191:9;38187:18;38178:6;38134:72;:::i;:::-;37881:332;;;;;:::o;38219:143::-;38276:5;38307:6;38301:13;38292:22;;38323:33;38350:5;38323:33;:::i;:::-;38219:143;;;;:::o;38368:351::-;38438:6;38487:2;38475:9;38466:7;38462:23;38458:32;38455:119;;;38493:79;;:::i;:::-;38455:119;38613:1;38638:64;38694:7;38685:6;38674:9;38670:22;38638:64;:::i;:::-;38628:74;;38584:128;38368:351;;;;:::o;38725:177::-;38865:29;38861:1;38853:6;38849:14;38842:53;38725:177;:::o;38908:366::-;39050:3;39071:67;39135:2;39130:3;39071:67;:::i;:::-;39064:74;;39147:93;39236:3;39147:93;:::i;:::-;39265:2;39260:3;39256:12;39249:19;;38908:366;;;:::o;39280:419::-;39446:4;39484:2;39473:9;39469:18;39461:26;;39533:9;39527:4;39523:20;39519:1;39508:9;39504:17;39497:47;39561:131;39687:4;39561:131;:::i;:::-;39553:139;;39280:419;;;:::o;39705:177::-;39845:29;39841:1;39833:6;39829:14;39822:53;39705:177;:::o;39888:366::-;40030:3;40051:67;40115:2;40110:3;40051:67;:::i;:::-;40044:74;;40127:93;40216:3;40127:93;:::i;:::-;40245:2;40240:3;40236:12;40229:19;;39888:366;;;:::o;40260:419::-;40426:4;40464:2;40453:9;40449:18;40441:26;;40513:9;40507:4;40503:20;40499:1;40488:9;40484:17;40477:47;40541:131;40667:4;40541:131;:::i;:::-;40533:139;;40260:419;;;:::o;40685:234::-;40825:34;40821:1;40813:6;40809:14;40802:58;40894:17;40889:2;40881:6;40877:15;40870:42;40685:234;:::o;40925:366::-;41067:3;41088:67;41152:2;41147:3;41088:67;:::i;:::-;41081:74;;41164:93;41253:3;41164:93;:::i;:::-;41282:2;41277:3;41273:12;41266:19;;40925:366;;;:::o;41297:419::-;41463:4;41501:2;41490:9;41486:18;41478:26;;41550:9;41544:4;41540:20;41536:1;41525:9;41521:17;41514:47;41578:131;41704:4;41578:131;:::i;:::-;41570:139;;41297:419;;;:::o;41722:148::-;41824:11;41861:3;41846:18;;41722:148;;;;:::o;41876:390::-;41982:3;42010:39;42043:5;42010:39;:::i;:::-;42065:89;42147:6;42142:3;42065:89;:::i;:::-;42058:96;;42163:65;42221:6;42216:3;42209:4;42202:5;42198:16;42163:65;:::i;:::-;42253:6;42248:3;42244:16;42237:23;;41986:280;41876:390;;;;:::o;42296:874::-;42399:3;42436:5;42430:12;42465:36;42491:9;42465:36;:::i;:::-;42517:89;42599:6;42594:3;42517:89;:::i;:::-;42510:96;;42637:1;42626:9;42622:17;42653:1;42648:166;;;;42828:1;42823:341;;;;42615:549;;42648:166;42732:4;42728:9;42717;42713:25;42708:3;42701:38;42794:6;42787:14;42780:22;42772:6;42768:35;42763:3;42759:45;42752:52;;42648:166;;42823:341;42890:38;42922:5;42890:38;:::i;:::-;42950:1;42964:154;42978:6;42975:1;42972:13;42964:154;;;43052:7;43046:14;43042:1;43037:3;43033:11;43026:35;43102:1;43093:7;43089:15;43078:26;;43000:4;42997:1;42993:12;42988:17;;42964:154;;;43147:6;43142:3;43138:16;43131:23;;42830:334;;42615:549;;42403:767;;42296:874;;;;:::o;43176:589::-;43401:3;43423:95;43514:3;43505:6;43423:95;:::i;:::-;43416:102;;43535:95;43626:3;43617:6;43535:95;:::i;:::-;43528:102;;43647:92;43735:3;43726:6;43647:92;:::i;:::-;43640:99;;43756:3;43749:10;;43176:589;;;;;;:::o;43771:225::-;43911:34;43907:1;43899:6;43895:14;43888:58;43980:8;43975:2;43967:6;43963:15;43956:33;43771:225;:::o;44002:366::-;44144:3;44165:67;44229:2;44224:3;44165:67;:::i;:::-;44158:74;;44241:93;44330:3;44241:93;:::i;:::-;44359:2;44354:3;44350:12;44343:19;;44002:366;;;:::o;44374:419::-;44540:4;44578:2;44567:9;44563:18;44555:26;;44627:9;44621:4;44617:20;44613:1;44602:9;44598:17;44591:47;44655:131;44781:4;44655:131;:::i;:::-;44647:139;;44374:419;;;:::o;44799:224::-;44939:34;44935:1;44927:6;44923:14;44916:58;45008:7;45003:2;44995:6;44991:15;44984:32;44799:224;:::o;45029:366::-;45171:3;45192:67;45256:2;45251:3;45192:67;:::i;:::-;45185:74;;45268:93;45357:3;45268:93;:::i;:::-;45386:2;45381:3;45377:12;45370:19;;45029:366;;;:::o;45401:419::-;45567:4;45605:2;45594:9;45590:18;45582:26;;45654:9;45648:4;45644:20;45640:1;45629:9;45625:17;45618:47;45682:131;45808:4;45682:131;:::i;:::-;45674:139;;45401:419;;;:::o;45826:223::-;45966:34;45962:1;45954:6;45950:14;45943:58;46035:6;46030:2;46022:6;46018:15;46011:31;45826:223;:::o;46055:366::-;46197:3;46218:67;46282:2;46277:3;46218:67;:::i;:::-;46211:74;;46294:93;46383:3;46294:93;:::i;:::-;46412:2;46407:3;46403:12;46396:19;;46055:366;;;:::o;46427:419::-;46593:4;46631:2;46620:9;46616:18;46608:26;;46680:9;46674:4;46670:20;46666:1;46655:9;46651:17;46644:47;46708:131;46834:4;46708:131;:::i;:::-;46700:139;;46427:419;;;:::o;46852:182::-;46992:34;46988:1;46980:6;46976:14;46969:58;46852:182;:::o;47040:366::-;47182:3;47203:67;47267:2;47262:3;47203:67;:::i;:::-;47196:74;;47279:93;47368:3;47279:93;:::i;:::-;47397:2;47392:3;47388:12;47381:19;;47040:366;;;:::o;47412:419::-;47578:4;47616:2;47605:9;47601:18;47593:26;;47665:9;47659:4;47655:20;47651:1;47640:9;47636:17;47629:47;47693:131;47819:4;47693:131;:::i;:::-;47685:139;;47412:419;;;:::o;47837:175::-;47977:27;47973:1;47965:6;47961:14;47954:51;47837:175;:::o;48018:366::-;48160:3;48181:67;48245:2;48240:3;48181:67;:::i;:::-;48174:74;;48257:93;48346:3;48257:93;:::i;:::-;48375:2;48370:3;48366:12;48359:19;;48018:366;;;:::o;48390:419::-;48556:4;48594:2;48583:9;48579:18;48571:26;;48643:9;48637:4;48633:20;48629:1;48618:9;48614:17;48607:47;48671:131;48797:4;48671:131;:::i;:::-;48663:139;;48390:419;;;:::o;48815:237::-;48955:34;48951:1;48943:6;48939:14;48932:58;49024:20;49019:2;49011:6;49007:15;49000:45;48815:237;:::o;49058:366::-;49200:3;49221:67;49285:2;49280:3;49221:67;:::i;:::-;49214:74;;49297:93;49386:3;49297:93;:::i;:::-;49415:2;49410:3;49406:12;49399:19;;49058:366;;;:::o;49430:419::-;49596:4;49634:2;49623:9;49619:18;49611:26;;49683:9;49677:4;49673:20;49669:1;49658:9;49654:17;49647:47;49711:131;49837:4;49711:131;:::i;:::-;49703:139;;49430:419;;;:::o;49855:180::-;49903:77;49900:1;49893:88;50000:4;49997:1;49990:15;50024:4;50021:1;50014:15;50041:185;50081:1;50098:20;50116:1;50098:20;:::i;:::-;50093:25;;50132:20;50150:1;50132:20;:::i;:::-;50127:25;;50171:1;50161:35;;50176:18;;:::i;:::-;50161:35;50218:1;50215;50211:9;50206:14;;50041:185;;;;:::o;50232:176::-;50264:1;50281:20;50299:1;50281:20;:::i;:::-;50276:25;;50315:20;50333:1;50315:20;:::i;:::-;50310:25;;50354:1;50344:35;;50359:18;;:::i;:::-;50344:35;50400:1;50397;50393:9;50388:14;;50232:176;;;;:::o;50414:98::-;50465:6;50499:5;50493:12;50483:22;;50414:98;;;:::o;50518:168::-;50601:11;50635:6;50630:3;50623:19;50675:4;50670:3;50666:14;50651:29;;50518:168;;;;:::o;50692:373::-;50778:3;50806:38;50838:5;50806:38;:::i;:::-;50860:70;50923:6;50918:3;50860:70;:::i;:::-;50853:77;;50939:65;50997:6;50992:3;50985:4;50978:5;50974:16;50939:65;:::i;:::-;51029:29;51051:6;51029:29;:::i;:::-;51024:3;51020:39;51013:46;;50782:283;50692:373;;;;:::o;51071:640::-;51266:4;51304:3;51293:9;51289:19;51281:27;;51318:71;51386:1;51375:9;51371:17;51362:6;51318:71;:::i;:::-;51399:72;51467:2;51456:9;51452:18;51443:6;51399:72;:::i;:::-;51481;51549:2;51538:9;51534:18;51525:6;51481:72;:::i;:::-;51600:9;51594:4;51590:20;51585:2;51574:9;51570:18;51563:48;51628:76;51699:4;51690:6;51628:76;:::i;:::-;51620:84;;51071:640;;;;;;;:::o;51717:141::-;51773:5;51804:6;51798:13;51789:22;;51820:32;51846:5;51820:32;:::i;:::-;51717:141;;;;:::o;51864:349::-;51933:6;51982:2;51970:9;51961:7;51957:23;51953:32;51950:119;;;51988:79;;:::i;:::-;51950:119;52108:1;52133:63;52188:7;52179:6;52168:9;52164:22;52133:63;:::i;:::-;52123:73;;52079:127;51864:349;;;;:::o;52219:180::-;52267:77;52264:1;52257:88;52364:4;52361:1;52354:15;52388:4;52385:1;52378:15;52405:182;52545:34;52541:1;52533:6;52529:14;52522:58;52405:182;:::o;52593:366::-;52735:3;52756:67;52820:2;52815:3;52756:67;:::i;:::-;52749:74;;52832:93;52921:3;52832:93;:::i;:::-;52950:2;52945:3;52941:12;52934:19;;52593:366;;;:::o;52965:419::-;53131:4;53169:2;53158:9;53154:18;53146:26;;53218:9;53212:4;53208:20;53204:1;53193:9;53189:17;53182:47;53246:131;53372:4;53246:131;:::i;:::-;53238:139;;52965:419;;;:::o;53390:178::-;53530:30;53526:1;53518:6;53514:14;53507:54;53390:178;:::o;53574:366::-;53716:3;53737:67;53801:2;53796:3;53737:67;:::i;:::-;53730:74;;53813:93;53902:3;53813:93;:::i;:::-;53931:2;53926:3;53922:12;53915:19;;53574:366;;;:::o;53946:419::-;54112:4;54150:2;54139:9;54135:18;54127:26;;54199:9;54193:4;54189:20;54185:1;54174:9;54170:17;54163:47;54227:131;54353:4;54227:131;:::i;:::-;54219:139;;53946:419;;;:::o
Swarm Source
ipfs://49e23e42dbe0be07c32e073b838746418817a41ab3ee94bacf8d799aae7be8fc
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.