ERC-721
Overview
Max Total Supply
73 MightyGojiras3DVX
Holders
19
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
0 MightyGojiras3DVXLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
mightygojiras3dcontract
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-15 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } pragma solidity ^0.8.0; abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 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); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @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); } pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128. * * Does not support burning tokens to address(0). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 0; uint256 internal immutable TotalToken; uint256 internal immutable maxBatchSize; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) private _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev * `maxBatchSize` refers to how much a minter can mint at a time. * `TotalToken_` refers to how many tokens are in the collection. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 TotalToken_ ) { require( TotalToken_ > 0, "ERC721A: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; TotalToken = TotalToken_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(TotalToken). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("ERC721A: unable to get token of owner by index"); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "ERC721A: balance query for the zero address"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721A: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: 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`), */ function _exists(uint256 tokenId) internal view returns (bool) { //@dan return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - there must be `quantity` tokens remaining unminted in the total collection. * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > TotalToken - 1) { endIndex = TotalToken - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @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(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721A: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } return computedHash; } } pragma solidity ^0.8.0; pragma abicoder v2; /** * @dev Token GOJ */ interface IGOJ { function burn(address _from, uint256 _amount) external; function balanceOf(address account) external view returns (uint256); } /** * @dev mightygojiras */ contract mightygojiras3dcontract is ERC721A, Ownable, ReentrancyGuard { uint256 public mightygojiraPrice = 40000000000000000; // 0.04ETH uint public MAX_mightygojira_PURCHASE = 20; uint256 public maxGenesisCount = 3000; uint256 public MINT_BY_GOJ_PRICE = 1000 ether; bool public MintSaleIsActive = true; IGOJ public GOJ; //GOJ token constructor( uint256 maxBatchSize_, uint256 TotalToken_ ) ERC721A("Mighty Gojiras 3D VX", "MightyGojiras3DVX", maxBatchSize_, TotalToken_) { MAX_mightygojira_PURCHASE = maxBatchSize_; maxGenesisCount = TotalToken_; } modifier mightygojiraOwner(uint256 mightygojiraId) { require(ownerOf(mightygojiraId) == msg.sender, "You do not have this mightygojira"); _; } function withdraw() external onlyOwner nonReentrant { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Transfer failed."); } function Reserve(address _to, uint256 _reserveAmount) public onlyOwner { require(totalSupply() + _reserveAmount <= maxGenesisCount, "Purchase would exceed max supply of mightygojiras"); _safeMint(_to, _reserveAmount); } function setMaxPerTx(uint _MAX_mightygojira_PURCHASE) external onlyOwner { MAX_mightygojira_PURCHASE = _MAX_mightygojira_PURCHASE; } function setMINT_BY_GOJ_PRICE(uint _MINT_BY_GOJ_PRICE) external onlyOwner { MINT_BY_GOJ_PRICE = _MINT_BY_GOJ_PRICE; } function setMintPrice(uint price) external onlyOwner { mightygojiraPrice = price; } function setmaxGenesisCount(uint256 _maxGenesisCount) external onlyOwner { maxGenesisCount = _maxGenesisCount; } function flipMintSaleState() public onlyOwner { MintSaleIsActive = !MintSaleIsActive; } function setGOJTokenContract(address GOJAddress) external onlyOwner { GOJ = IGOJ(GOJAddress); } function mintmightygojiras(uint numberOfTokens) public payable { require(MintSaleIsActive, "Sale must be active to mint mightygojira"); require(numberOfTokens > 0 && numberOfTokens <= MAX_mightygojira_PURCHASE, "Can only mint 20 mightygojira at a time"); require(totalSupply() + numberOfTokens <= maxGenesisCount, "Purchase would exceed max supply of mightygojiras"); require(msg.value >= mightygojiraPrice * numberOfTokens, "Ether value sent is not correct"); _safeMint(msg.sender, numberOfTokens); } function mintmightygojirasbyGOJ(uint numberOfTokens) public payable { require(MintSaleIsActive, "Sale must be active to mint mightygojira"); require(numberOfTokens > 0 && numberOfTokens <= MAX_mightygojira_PURCHASE, "Can only mint 20 mightygojira at a time"); require(totalSupply()+numberOfTokens <= maxGenesisCount, "Purchase would exceed max supply of mightygojiras"); require(GOJ.balanceOf(msg.sender)>= MINT_BY_GOJ_PRICE * numberOfTokens, "Not enough GOJ value"); uint GOJPrice = MINT_BY_GOJ_PRICE * numberOfTokens; GOJ.burn(msg.sender, GOJPrice); _safeMint(msg.sender, numberOfTokens); } function tokensOfOwner(address _owner) external view returns(uint256[] memory ) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) { return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); uint256 index; for (index = 0; index < tokenCount; index++) { result[index] = tokenOfOwnerByIndex(_owner, index); } return result; } } string private _baseAPIURI; function setBaseURI(string calldata baseURI) external onlyOwner { _baseAPIURI = baseURI; } function _baseURI() internal view virtual override returns (string memory) { return _baseAPIURI; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"maxBatchSize_","type":"uint256"},{"internalType":"uint256","name":"TotalToken_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"GOJ","outputs":[{"internalType":"contract IGOJ","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_mightygojira_PURCHASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_BY_GOJ_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MintSaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_reserveAmount","type":"uint256"}],"name":"Reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipMintSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxGenesisCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mightygojiraPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintmightygojiras","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintmightygojirasbyGOJ","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"GOJAddress","type":"address"}],"name":"setGOJTokenContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MINT_BY_GOJ_PRICE","type":"uint256"}],"name":"setMINT_BY_GOJ_PRICE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MAX_mightygojira_PURCHASE","type":"uint256"}],"name":"setMaxPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxGenesisCount","type":"uint256"}],"name":"setmaxGenesisCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c0604052600080556000600755668e1bc9bf040000600a556014600b55610bb8600c55683635c9adc5dea00000600d556001600e60006101000a81548160ff0219169083151502179055503480156200005857600080fd5b506040516200555b3803806200555b83398181016040528101906200007e919062000391565b6040518060400160405280601481526020017f4d696768747920476f6a697261732033442056580000000000000000000000008152506040518060400160405280601181526020017f4d6967687479476f6a697261733344565800000000000000000000000000000081525083836000811162000132576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001299062000448565b60405180910390fd5b6000821162000178576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200016f9062000426565b60405180910390fd5b836001908051906020019062000190929190620002ca565b508260029080519060200190620001a9929190620002ca565b508160a08181525050806080818152505050505050620001de620001d2620001fc60201b60201c565b6200020460201b60201c565b600160098190555081600b8190555080600c819055505050620005a7565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002d89062000485565b90600052602060002090601f016020900481019282620002fc576000855562000348565b82601f106200031757805160ff191683800117855562000348565b8280016001018555821562000348579182015b82811115620003475782518255916020019190600101906200032a565b5b5090506200035791906200035b565b5090565b5b80821115620003765760008160009055506001016200035c565b5090565b6000815190506200038b816200058d565b92915050565b60008060408385031215620003ab57620003aa620004ea565b5b6000620003bb858286016200037a565b9250506020620003ce858286016200037a565b9150509250929050565b6000620003e76027836200046a565b9150620003f482620004ef565b604082019050919050565b60006200040e602e836200046a565b91506200041b826200053e565b604082019050919050565b600060208201905081810360008301526200044181620003d8565b9050919050565b600060208201905081810360008301526200046381620003ff565b9050919050565b600082825260208201905092915050565b6000819050919050565b600060028204905060018216806200049e57607f821691505b60208210811415620004b557620004b4620004bb565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b62000598816200047b565b8114620005a457600080fd5b50565b60805160a051614f83620005d8600039600081816128360152818161285f0152612ef6015260005050614f836000f3fe6080604052600436106102255760003560e01c8063715018a611610123578063b88d4fde116100ab578063e83c653d1161006f578063e83c653d146107e4578063e985e9c51461080f578063ef91e12b1461084c578063f2fde38b14610868578063f4a0a5281461089157610225565b8063b88d4fde14610701578063c6f6f2161461072a578063c87b56dd14610753578063d49f806714610790578063d7224ba0146107b957610225565b80638da5cb5b116100f25780638da5cb5b1461064257806395d89b411461066d5780639b08abdc14610698578063a22cb465146106c1578063a66bcb8c146106ea57610225565b8063715018a61461059857806372682c55146105af5780638462151c146105da5780638595c8221461061757610225565b80633ccfd60b116101b15780634f6ccce7116101755780634f6ccce71461048f57806355f804b3146104cc57806361c8427c146104f55780636352211e1461051e57806370a082311461055b57610225565b80633ccfd60b146103d057806341240e66146103e757806342842e0e146104105780634c127f18146104395780634d43d49e1461046457610225565b806318160ddd116101f857806318160ddd146102f85780631a2028551461032357806323b872dd1461033f5780632a3800e4146103685780632f745c591461039357610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063095ea7b3146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613717565b6108ba565b60405161025e9190613e3b565b60405180910390f35b34801561027357600080fd5b5061027c610a04565b6040516102899190613e71565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b491906137be565b610a96565b6040516102c69190613d89565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f191906136d7565b610b1b565b005b34801561030457600080fd5b5061030d610c34565b60405161031a91906141f3565b60405180910390f35b61033d600480360381019061033891906137be565b610c3d565b005b34801561034b57600080fd5b50610366600480360381019061036191906135c1565b610d91565b005b34801561037457600080fd5b5061037d610da1565b60405161038a9190613e3b565b60405180910390f35b34801561039f57600080fd5b506103ba60048036038101906103b591906136d7565b610db4565b6040516103c791906141f3565b60405180910390f35b3480156103dc57600080fd5b506103e5610fb2565b005b3480156103f357600080fd5b5061040e600480360381019061040991906137be565b611133565b005b34801561041c57600080fd5b50610437600480360381019061043291906135c1565b6111b9565b005b34801561044557600080fd5b5061044e6111d9565b60405161045b91906141f3565b60405180910390f35b34801561047057600080fd5b506104796111df565b60405161048691906141f3565b60405180910390f35b34801561049b57600080fd5b506104b660048036038101906104b191906137be565b6111e5565b6040516104c391906141f3565b60405180910390f35b3480156104d857600080fd5b506104f360048036038101906104ee9190613771565b611238565b005b34801561050157600080fd5b5061051c600480360381019061051791906136d7565b6112ca565b005b34801561052a57600080fd5b50610545600480360381019061054091906137be565b6113ab565b6040516105529190613d89565b60405180910390f35b34801561056757600080fd5b50610582600480360381019061057d9190613554565b6113c1565b60405161058f91906141f3565b60405180910390f35b3480156105a457600080fd5b506105ad6114aa565b005b3480156105bb57600080fd5b506105c4611532565b6040516105d191906141f3565b60405180910390f35b3480156105e657600080fd5b5061060160048036038101906105fc9190613554565b611538565b60405161060e9190613e19565b60405180910390f35b34801561062357600080fd5b5061062c611642565b60405161063991906141f3565b60405180910390f35b34801561064e57600080fd5b50610657611648565b6040516106649190613d89565b60405180910390f35b34801561067957600080fd5b50610682611672565b60405161068f9190613e71565b60405180910390f35b3480156106a457600080fd5b506106bf60048036038101906106ba91906137be565b611704565b005b3480156106cd57600080fd5b506106e860048036038101906106e39190613697565b61178a565b005b3480156106f657600080fd5b506106ff61190b565b005b34801561070d57600080fd5b5061072860048036038101906107239190613614565b6119b3565b005b34801561073657600080fd5b50610751600480360381019061074c91906137be565b611a0f565b005b34801561075f57600080fd5b5061077a600480360381019061077591906137be565b611a95565b6040516107879190613e71565b60405180910390f35b34801561079c57600080fd5b506107b760048036038101906107b29190613554565b611b3c565b005b3480156107c557600080fd5b506107ce611bfc565b6040516107db91906141f3565b60405180910390f35b3480156107f057600080fd5b506107f9611c02565b6040516108069190613e56565b60405180910390f35b34801561081b57600080fd5b5061083660048036038101906108319190613581565b611c28565b6040516108439190613e3b565b60405180910390f35b610866600480360381019061086191906137be565b611cbc565b005b34801561087457600080fd5b5061088f600480360381019061088a9190613554565b611f5c565b005b34801561089d57600080fd5b506108b860048036038101906108b391906137be565b612054565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061098557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109ed57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109fd57506109fc826120da565b5b9050919050565b606060018054610a13906145ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3f906145ac565b8015610a8c5780601f10610a6157610100808354040283529160200191610a8c565b820191906000526020600020905b815481529060010190602001808311610a6f57829003601f168201915b5050505050905090565b6000610aa182612144565b610ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad7906141b3565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b26826113ab565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8e90614093565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bb6612151565b73ffffffffffffffffffffffffffffffffffffffff161480610be55750610be481610bdf612151565b611c28565b5b610c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1b90613f93565b60405180910390fd5b610c2f838383612159565b505050565b60008054905090565b600e60009054906101000a900460ff16610c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8390613fb3565b60405180910390fd5b600081118015610c9e5750600b548111155b610cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd490613f73565b60405180910390fd5b600c5481610ce9610c34565b610cf39190614331565b1115610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2b906140b3565b60405180910390fd5b80600a54610d4291906143b8565b341015610d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7b90613f53565b60405180910390fd5b610d8e338261220b565b50565b610d9c838383612229565b505050565b600e60009054906101000a900460ff1681565b6000610dbf836113c1565b8210610e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df790613e93565b60405180910390fd5b6000610e0a610c34565b905060008060005b83811015610f70576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610f0457806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f5c5786841415610f4d578195505050505050610fac565b8380610f589061460f565b9450505b508080610f689061460f565b915050610e12565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa390614153565b60405180910390fd5b92915050565b610fba612151565b73ffffffffffffffffffffffffffffffffffffffff16610fd8611648565b73ffffffffffffffffffffffffffffffffffffffff161461102e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102590614013565b60405180910390fd5b60026009541415611074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106b90614173565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff16476040516110a290613d74565b60006040518083038185875af1925050503d80600081146110df576040519150601f19603f3d011682016040523d82523d6000602084013e6110e4565b606091505b5050905080611128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111f906140d3565b60405180910390fd5b506001600981905550565b61113b612151565b73ffffffffffffffffffffffffffffffffffffffff16611159611648565b73ffffffffffffffffffffffffffffffffffffffff16146111af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a690614013565b60405180910390fd5b80600d8190555050565b6111d4838383604051806020016040528060008152506119b3565b505050565b600d5481565b600a5481565b60006111ef610c34565b8210611230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122790613f13565b60405180910390fd5b819050919050565b611240612151565b73ffffffffffffffffffffffffffffffffffffffff1661125e611648565b73ffffffffffffffffffffffffffffffffffffffff16146112b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ab90614013565b60405180910390fd5b8181600f91906112c5929190613333565b505050565b6112d2612151565b73ffffffffffffffffffffffffffffffffffffffff166112f0611648565b73ffffffffffffffffffffffffffffffffffffffff1614611346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133d90614013565b60405180910390fd5b600c5481611352610c34565b61135c9190614331565b111561139d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611394906140b3565b60405180910390fd5b6113a7828261220b565b5050565b60006113b6826127e2565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142990613fd3565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6114b2612151565b73ffffffffffffffffffffffffffffffffffffffff166114d0611648565b73ffffffffffffffffffffffffffffffffffffffff1614611526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151d90614013565b60405180910390fd5b61153060006129e5565b565b600c5481565b60606000611545836113c1565b905060008114156115a257600067ffffffffffffffff81111561156b5761156a614745565b5b6040519080825280602002602001820160405280156115995781602001602082028036833780820191505090505b5091505061163d565b60008167ffffffffffffffff8111156115be576115bd614745565b5b6040519080825280602002602001820160405280156115ec5781602001602082028036833780820191505090505b50905060005b82811015611636576116048582610db4565b82828151811061161757611616614716565b5b602002602001018181525050808061162e9061460f565b9150506115f2565b8193505050505b919050565b600b5481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611681906145ac565b80601f01602080910402602001604051908101604052809291908181526020018280546116ad906145ac565b80156116fa5780601f106116cf576101008083540402835291602001916116fa565b820191906000526020600020905b8154815290600101906020018083116116dd57829003601f168201915b5050505050905090565b61170c612151565b73ffffffffffffffffffffffffffffffffffffffff1661172a611648565b73ffffffffffffffffffffffffffffffffffffffff1614611780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177790614013565b60405180910390fd5b80600c8190555050565b611792612151565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f790614053565b60405180910390fd5b806006600061180d612151565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118ba612151565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118ff9190613e3b565b60405180910390a35050565b611913612151565b73ffffffffffffffffffffffffffffffffffffffff16611931611648565b73ffffffffffffffffffffffffffffffffffffffff1614611987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197e90614013565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b6119be848484612229565b6119ca84848484612aab565b611a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a00906140f3565b60405180910390fd5b50505050565b611a17612151565b73ffffffffffffffffffffffffffffffffffffffff16611a35611648565b73ffffffffffffffffffffffffffffffffffffffff1614611a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8290614013565b60405180910390fd5b80600b8190555050565b6060611aa082612144565b611adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad690614033565b60405180910390fd5b6000611ae9612c42565b90506000815111611b095760405180602001604052806000815250611b34565b80611b1384612cd4565b604051602001611b24929190613d50565b6040516020818303038152906040525b915050919050565b611b44612151565b73ffffffffffffffffffffffffffffffffffffffff16611b62611648565b73ffffffffffffffffffffffffffffffffffffffff1614611bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baf90614013565b60405180910390fd5b80600e60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60075481565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e60009054906101000a900460ff16611d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0290613fb3565b60405180910390fd5b600081118015611d1d5750600b548111155b611d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5390613f73565b60405180910390fd5b600c5481611d68610c34565b611d729190614331565b1115611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa906140b3565b60405180910390fd5b80600d54611dc191906143b8565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611e1c9190613d89565b60206040518083038186803b158015611e3457600080fd5b505afa158015611e48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6c91906137eb565b1015611ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea490613eb3565b60405180910390fd5b600081600d54611ebd91906143b8565b9050600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33836040518363ffffffff1660e01b8152600401611f1c929190613df0565b600060405180830381600087803b158015611f3657600080fd5b505af1158015611f4a573d6000803e3d6000fd5b50505050611f58338361220b565b5050565b611f64612151565b73ffffffffffffffffffffffffffffffffffffffff16611f82611648565b73ffffffffffffffffffffffffffffffffffffffff1614611fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcf90614013565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203f90613ed3565b60405180910390fd5b612051816129e5565b50565b61205c612151565b73ffffffffffffffffffffffffffffffffffffffff1661207a611648565b73ffffffffffffffffffffffffffffffffffffffff16146120d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c790614013565b60405180910390fd5b80600a8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b612225828260405180602001604052806000815250612e35565b5050565b6000612234826127e2565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661225b612151565b73ffffffffffffffffffffffffffffffffffffffff1614806122b75750612280612151565b73ffffffffffffffffffffffffffffffffffffffff1661229f84610a96565b73ffffffffffffffffffffffffffffffffffffffff16145b806122d357506122d282600001516122cd612151565b611c28565b5b905080612315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230c90614073565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237e90613ff3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156123f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ee90613f33565b60405180910390fd5b6124048585856001613314565b6124146000848460000151612159565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166124829190614412565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661252691906142eb565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461262c9190614331565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612772576126a281612144565b15612771576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127da868686600161331a565b505050505050565b6127ea6133b9565b6127f382612144565b612832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282990613ef3565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000083106128965760017f0000000000000000000000000000000000000000000000000000000000000000846128899190614446565b6128939190614331565b90505b60008390505b8181106129a4576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612990578093505050506129e0565b50808061299c90614582565b91505061289c565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d790614193565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612acc8473ffffffffffffffffffffffffffffffffffffffff16613320565b15612c35578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612af5612151565b8786866040518563ffffffff1660e01b8152600401612b179493929190613da4565b602060405180830381600087803b158015612b3157600080fd5b505af1925050508015612b6257506040513d601f19601f82011682018060405250810190612b5f9190613744565b60015b612be5573d8060008114612b92576040519150601f19603f3d011682016040523d82523d6000602084013e612b97565b606091505b50600081511415612bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd4906140f3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c3a565b600190505b949350505050565b6060600f8054612c51906145ac565b80601f0160208091040260200160405190810160405280929190818152602001828054612c7d906145ac565b8015612cca5780601f10612c9f57610100808354040283529160200191612cca565b820191906000526020600020905b815481529060010190602001808311612cad57829003601f168201915b5050505050905090565b60606000821415612d1c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e30565b600082905060005b60008214612d4e578080612d379061460f565b915050600a82612d479190614387565b9150612d24565b60008167ffffffffffffffff811115612d6a57612d69614745565b5b6040519080825280601f01601f191660200182016040528015612d9c5781602001600182028036833780820191505090505b5090505b60008514612e2957600182612db59190614446565b9150600a85612dc49190614658565b6030612dd09190614331565b60f81b818381518110612de657612de5614716565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e229190614387565b9450612da0565b8093505050505b919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea290614133565b60405180910390fd5b612eb481612144565b15612ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eeb90614113565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115612f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4e906141d3565b60405180910390fd5b612f646000858386613314565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161306191906142eb565b6fffffffffffffffffffffffffffffffff16815260200185836020015161308891906142eb565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156132f757818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46132976000888488612aab565b6132d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132cd906140f3565b60405180910390fd5b81806132e19061460f565b92505080806132ef9061460f565b915050613226565b508060008190555061330c600087858861331a565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b82805461333f906145ac565b90600052602060002090601f01602090048101928261336157600085556133a8565b82601f1061337a57803560ff19168380011785556133a8565b828001600101855582156133a8579182015b828111156133a757823582559160200191906001019061338c565b5b5090506133b591906133f3565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561340c5760008160009055506001016133f4565b5090565b600061342361341e84614233565b61420e565b90508281526020810184848401111561343f5761343e614783565b5b61344a848285614540565b509392505050565b60008135905061346181614ef1565b92915050565b60008135905061347681614f08565b92915050565b60008135905061348b81614f1f565b92915050565b6000815190506134a081614f1f565b92915050565b600082601f8301126134bb576134ba614779565b5b81356134cb848260208601613410565b91505092915050565b60008083601f8401126134ea576134e9614779565b5b8235905067ffffffffffffffff81111561350757613506614774565b5b6020830191508360018202830111156135235761352261477e565b5b9250929050565b60008135905061353981614f36565b92915050565b60008151905061354e81614f36565b92915050565b60006020828403121561356a5761356961478d565b5b600061357884828501613452565b91505092915050565b600080604083850312156135985761359761478d565b5b60006135a685828601613452565b92505060206135b785828601613452565b9150509250929050565b6000806000606084860312156135da576135d961478d565b5b60006135e886828701613452565b93505060206135f986828701613452565b925050604061360a8682870161352a565b9150509250925092565b6000806000806080858703121561362e5761362d61478d565b5b600061363c87828801613452565b945050602061364d87828801613452565b935050604061365e8782880161352a565b925050606085013567ffffffffffffffff81111561367f5761367e614788565b5b61368b878288016134a6565b91505092959194509250565b600080604083850312156136ae576136ad61478d565b5b60006136bc85828601613452565b92505060206136cd85828601613467565b9150509250929050565b600080604083850312156136ee576136ed61478d565b5b60006136fc85828601613452565b925050602061370d8582860161352a565b9150509250929050565b60006020828403121561372d5761372c61478d565b5b600061373b8482850161347c565b91505092915050565b60006020828403121561375a5761375961478d565b5b600061376884828501613491565b91505092915050565b600080602083850312156137885761378761478d565b5b600083013567ffffffffffffffff8111156137a6576137a5614788565b5b6137b2858286016134d4565b92509250509250929050565b6000602082840312156137d4576137d361478d565b5b60006137e28482850161352a565b91505092915050565b6000602082840312156138015761380061478d565b5b600061380f8482850161353f565b91505092915050565b60006138248383613d32565b60208301905092915050565b6138398161447a565b82525050565b600061384a82614274565b61385481856142a2565b935061385f83614264565b8060005b838110156138905781516138778882613818565b975061388283614295565b925050600181019050613863565b5085935050505092915050565b6138a68161448c565b82525050565b60006138b78261427f565b6138c181856142b3565b93506138d181856020860161454f565b6138da81614792565b840191505092915050565b6138ee8161450a565b82525050565b60006138ff8261428a565b61390981856142cf565b935061391981856020860161454f565b61392281614792565b840191505092915050565b60006139388261428a565b61394281856142e0565b935061395281856020860161454f565b80840191505092915050565b600061396b6022836142cf565b9150613976826147a3565b604082019050919050565b600061398e6014836142cf565b9150613999826147f2565b602082019050919050565b60006139b16026836142cf565b91506139bc8261481b565b604082019050919050565b60006139d4602a836142cf565b91506139df8261486a565b604082019050919050565b60006139f76023836142cf565b9150613a02826148b9565b604082019050919050565b6000613a1a6025836142cf565b9150613a2582614908565b604082019050919050565b6000613a3d601f836142cf565b9150613a4882614957565b602082019050919050565b6000613a606027836142cf565b9150613a6b82614980565b604082019050919050565b6000613a836039836142cf565b9150613a8e826149cf565b604082019050919050565b6000613aa66028836142cf565b9150613ab182614a1e565b604082019050919050565b6000613ac9602b836142cf565b9150613ad482614a6d565b604082019050919050565b6000613aec6026836142cf565b9150613af782614abc565b604082019050919050565b6000613b0f6020836142cf565b9150613b1a82614b0b565b602082019050919050565b6000613b32602f836142cf565b9150613b3d82614b34565b604082019050919050565b6000613b55601a836142cf565b9150613b6082614b83565b602082019050919050565b6000613b786032836142cf565b9150613b8382614bac565b604082019050919050565b6000613b9b6022836142cf565b9150613ba682614bfb565b604082019050919050565b6000613bbe6031836142cf565b9150613bc982614c4a565b604082019050919050565b6000613be16000836142c4565b9150613bec82614c99565b600082019050919050565b6000613c046010836142cf565b9150613c0f82614c9c565b602082019050919050565b6000613c276033836142cf565b9150613c3282614cc5565b604082019050919050565b6000613c4a601d836142cf565b9150613c5582614d14565b602082019050919050565b6000613c6d6021836142cf565b9150613c7882614d3d565b604082019050919050565b6000613c90602e836142cf565b9150613c9b82614d8c565b604082019050919050565b6000613cb3601f836142cf565b9150613cbe82614ddb565b602082019050919050565b6000613cd6602f836142cf565b9150613ce182614e04565b604082019050919050565b6000613cf9602d836142cf565b9150613d0482614e53565b604082019050919050565b6000613d1c6022836142cf565b9150613d2782614ea2565b604082019050919050565b613d3b81614500565b82525050565b613d4a81614500565b82525050565b6000613d5c828561392d565b9150613d68828461392d565b91508190509392505050565b6000613d7f82613bd4565b9150819050919050565b6000602082019050613d9e6000830184613830565b92915050565b6000608082019050613db96000830187613830565b613dc66020830186613830565b613dd36040830185613d41565b8181036060830152613de581846138ac565b905095945050505050565b6000604082019050613e056000830185613830565b613e126020830184613d41565b9392505050565b60006020820190508181036000830152613e33818461383f565b905092915050565b6000602082019050613e50600083018461389d565b92915050565b6000602082019050613e6b60008301846138e5565b92915050565b60006020820190508181036000830152613e8b81846138f4565b905092915050565b60006020820190508181036000830152613eac8161395e565b9050919050565b60006020820190508181036000830152613ecc81613981565b9050919050565b60006020820190508181036000830152613eec816139a4565b9050919050565b60006020820190508181036000830152613f0c816139c7565b9050919050565b60006020820190508181036000830152613f2c816139ea565b9050919050565b60006020820190508181036000830152613f4c81613a0d565b9050919050565b60006020820190508181036000830152613f6c81613a30565b9050919050565b60006020820190508181036000830152613f8c81613a53565b9050919050565b60006020820190508181036000830152613fac81613a76565b9050919050565b60006020820190508181036000830152613fcc81613a99565b9050919050565b60006020820190508181036000830152613fec81613abc565b9050919050565b6000602082019050818103600083015261400c81613adf565b9050919050565b6000602082019050818103600083015261402c81613b02565b9050919050565b6000602082019050818103600083015261404c81613b25565b9050919050565b6000602082019050818103600083015261406c81613b48565b9050919050565b6000602082019050818103600083015261408c81613b6b565b9050919050565b600060208201905081810360008301526140ac81613b8e565b9050919050565b600060208201905081810360008301526140cc81613bb1565b9050919050565b600060208201905081810360008301526140ec81613bf7565b9050919050565b6000602082019050818103600083015261410c81613c1a565b9050919050565b6000602082019050818103600083015261412c81613c3d565b9050919050565b6000602082019050818103600083015261414c81613c60565b9050919050565b6000602082019050818103600083015261416c81613c83565b9050919050565b6000602082019050818103600083015261418c81613ca6565b9050919050565b600060208201905081810360008301526141ac81613cc9565b9050919050565b600060208201905081810360008301526141cc81613cec565b9050919050565b600060208201905081810360008301526141ec81613d0f565b9050919050565b60006020820190506142086000830184613d41565b92915050565b6000614218614229565b905061422482826145de565b919050565b6000604051905090565b600067ffffffffffffffff82111561424e5761424d614745565b5b61425782614792565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006142f6826144c4565b9150614301836144c4565b9250826fffffffffffffffffffffffffffffffff0382111561432657614325614689565b5b828201905092915050565b600061433c82614500565b915061434783614500565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561437c5761437b614689565b5b828201905092915050565b600061439282614500565b915061439d83614500565b9250826143ad576143ac6146b8565b5b828204905092915050565b60006143c382614500565b91506143ce83614500565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561440757614406614689565b5b828202905092915050565b600061441d826144c4565b9150614428836144c4565b92508282101561443b5761443a614689565b5b828203905092915050565b600061445182614500565b915061445c83614500565b92508282101561446f5761446e614689565b5b828203905092915050565b6000614485826144e0565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006145158261451c565b9050919050565b60006145278261452e565b9050919050565b6000614539826144e0565b9050919050565b82818337600083830152505050565b60005b8381101561456d578082015181840152602081019050614552565b8381111561457c576000848401525b50505050565b600061458d82614500565b915060008214156145a1576145a0614689565b5b600182039050919050565b600060028204905060018216806145c457607f821691505b602082108114156145d8576145d76146e7565b5b50919050565b6145e782614792565b810181811067ffffffffffffffff8211171561460657614605614745565b5b80604052505050565b600061461a82614500565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561464d5761464c614689565b5b600182019050919050565b600061466382614500565b915061466e83614500565b92508261467e5761467d6146b8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820474f4a2076616c7565000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f43616e206f6e6c79206d696e74203230206d6967687479676f6a69726120617460008201527f20612074696d6500000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f53616c65206d7573742062652061637469766520746f206d696e74206d69676860008201527f7479676f6a697261000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f66206d6967687479676f6a69726173000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b614efa8161447a565b8114614f0557600080fd5b50565b614f118161448c565b8114614f1c57600080fd5b50565b614f2881614498565b8114614f3357600080fd5b50565b614f3f81614500565b8114614f4a57600080fd5b5056fea26469706673582212205752cef1b0be29b64e668a16957a5733db3e3f3433a46f5d832e213cfa775cff64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000bb8
Deployed Bytecode
0x6080604052600436106102255760003560e01c8063715018a611610123578063b88d4fde116100ab578063e83c653d1161006f578063e83c653d146107e4578063e985e9c51461080f578063ef91e12b1461084c578063f2fde38b14610868578063f4a0a5281461089157610225565b8063b88d4fde14610701578063c6f6f2161461072a578063c87b56dd14610753578063d49f806714610790578063d7224ba0146107b957610225565b80638da5cb5b116100f25780638da5cb5b1461064257806395d89b411461066d5780639b08abdc14610698578063a22cb465146106c1578063a66bcb8c146106ea57610225565b8063715018a61461059857806372682c55146105af5780638462151c146105da5780638595c8221461061757610225565b80633ccfd60b116101b15780634f6ccce7116101755780634f6ccce71461048f57806355f804b3146104cc57806361c8427c146104f55780636352211e1461051e57806370a082311461055b57610225565b80633ccfd60b146103d057806341240e66146103e757806342842e0e146104105780634c127f18146104395780634d43d49e1461046457610225565b806318160ddd116101f857806318160ddd146102f85780631a2028551461032357806323b872dd1461033f5780632a3800e4146103685780632f745c591461039357610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063095ea7b3146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613717565b6108ba565b60405161025e9190613e3b565b60405180910390f35b34801561027357600080fd5b5061027c610a04565b6040516102899190613e71565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b491906137be565b610a96565b6040516102c69190613d89565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f191906136d7565b610b1b565b005b34801561030457600080fd5b5061030d610c34565b60405161031a91906141f3565b60405180910390f35b61033d600480360381019061033891906137be565b610c3d565b005b34801561034b57600080fd5b50610366600480360381019061036191906135c1565b610d91565b005b34801561037457600080fd5b5061037d610da1565b60405161038a9190613e3b565b60405180910390f35b34801561039f57600080fd5b506103ba60048036038101906103b591906136d7565b610db4565b6040516103c791906141f3565b60405180910390f35b3480156103dc57600080fd5b506103e5610fb2565b005b3480156103f357600080fd5b5061040e600480360381019061040991906137be565b611133565b005b34801561041c57600080fd5b50610437600480360381019061043291906135c1565b6111b9565b005b34801561044557600080fd5b5061044e6111d9565b60405161045b91906141f3565b60405180910390f35b34801561047057600080fd5b506104796111df565b60405161048691906141f3565b60405180910390f35b34801561049b57600080fd5b506104b660048036038101906104b191906137be565b6111e5565b6040516104c391906141f3565b60405180910390f35b3480156104d857600080fd5b506104f360048036038101906104ee9190613771565b611238565b005b34801561050157600080fd5b5061051c600480360381019061051791906136d7565b6112ca565b005b34801561052a57600080fd5b50610545600480360381019061054091906137be565b6113ab565b6040516105529190613d89565b60405180910390f35b34801561056757600080fd5b50610582600480360381019061057d9190613554565b6113c1565b60405161058f91906141f3565b60405180910390f35b3480156105a457600080fd5b506105ad6114aa565b005b3480156105bb57600080fd5b506105c4611532565b6040516105d191906141f3565b60405180910390f35b3480156105e657600080fd5b5061060160048036038101906105fc9190613554565b611538565b60405161060e9190613e19565b60405180910390f35b34801561062357600080fd5b5061062c611642565b60405161063991906141f3565b60405180910390f35b34801561064e57600080fd5b50610657611648565b6040516106649190613d89565b60405180910390f35b34801561067957600080fd5b50610682611672565b60405161068f9190613e71565b60405180910390f35b3480156106a457600080fd5b506106bf60048036038101906106ba91906137be565b611704565b005b3480156106cd57600080fd5b506106e860048036038101906106e39190613697565b61178a565b005b3480156106f657600080fd5b506106ff61190b565b005b34801561070d57600080fd5b5061072860048036038101906107239190613614565b6119b3565b005b34801561073657600080fd5b50610751600480360381019061074c91906137be565b611a0f565b005b34801561075f57600080fd5b5061077a600480360381019061077591906137be565b611a95565b6040516107879190613e71565b60405180910390f35b34801561079c57600080fd5b506107b760048036038101906107b29190613554565b611b3c565b005b3480156107c557600080fd5b506107ce611bfc565b6040516107db91906141f3565b60405180910390f35b3480156107f057600080fd5b506107f9611c02565b6040516108069190613e56565b60405180910390f35b34801561081b57600080fd5b5061083660048036038101906108319190613581565b611c28565b6040516108439190613e3b565b60405180910390f35b610866600480360381019061086191906137be565b611cbc565b005b34801561087457600080fd5b5061088f600480360381019061088a9190613554565b611f5c565b005b34801561089d57600080fd5b506108b860048036038101906108b391906137be565b612054565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061098557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109ed57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109fd57506109fc826120da565b5b9050919050565b606060018054610a13906145ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3f906145ac565b8015610a8c5780601f10610a6157610100808354040283529160200191610a8c565b820191906000526020600020905b815481529060010190602001808311610a6f57829003601f168201915b5050505050905090565b6000610aa182612144565b610ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad7906141b3565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b26826113ab565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8e90614093565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bb6612151565b73ffffffffffffffffffffffffffffffffffffffff161480610be55750610be481610bdf612151565b611c28565b5b610c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1b90613f93565b60405180910390fd5b610c2f838383612159565b505050565b60008054905090565b600e60009054906101000a900460ff16610c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8390613fb3565b60405180910390fd5b600081118015610c9e5750600b548111155b610cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd490613f73565b60405180910390fd5b600c5481610ce9610c34565b610cf39190614331565b1115610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2b906140b3565b60405180910390fd5b80600a54610d4291906143b8565b341015610d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7b90613f53565b60405180910390fd5b610d8e338261220b565b50565b610d9c838383612229565b505050565b600e60009054906101000a900460ff1681565b6000610dbf836113c1565b8210610e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df790613e93565b60405180910390fd5b6000610e0a610c34565b905060008060005b83811015610f70576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610f0457806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f5c5786841415610f4d578195505050505050610fac565b8380610f589061460f565b9450505b508080610f689061460f565b915050610e12565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa390614153565b60405180910390fd5b92915050565b610fba612151565b73ffffffffffffffffffffffffffffffffffffffff16610fd8611648565b73ffffffffffffffffffffffffffffffffffffffff161461102e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102590614013565b60405180910390fd5b60026009541415611074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106b90614173565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff16476040516110a290613d74565b60006040518083038185875af1925050503d80600081146110df576040519150601f19603f3d011682016040523d82523d6000602084013e6110e4565b606091505b5050905080611128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111f906140d3565b60405180910390fd5b506001600981905550565b61113b612151565b73ffffffffffffffffffffffffffffffffffffffff16611159611648565b73ffffffffffffffffffffffffffffffffffffffff16146111af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a690614013565b60405180910390fd5b80600d8190555050565b6111d4838383604051806020016040528060008152506119b3565b505050565b600d5481565b600a5481565b60006111ef610c34565b8210611230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122790613f13565b60405180910390fd5b819050919050565b611240612151565b73ffffffffffffffffffffffffffffffffffffffff1661125e611648565b73ffffffffffffffffffffffffffffffffffffffff16146112b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ab90614013565b60405180910390fd5b8181600f91906112c5929190613333565b505050565b6112d2612151565b73ffffffffffffffffffffffffffffffffffffffff166112f0611648565b73ffffffffffffffffffffffffffffffffffffffff1614611346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133d90614013565b60405180910390fd5b600c5481611352610c34565b61135c9190614331565b111561139d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611394906140b3565b60405180910390fd5b6113a7828261220b565b5050565b60006113b6826127e2565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142990613fd3565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6114b2612151565b73ffffffffffffffffffffffffffffffffffffffff166114d0611648565b73ffffffffffffffffffffffffffffffffffffffff1614611526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151d90614013565b60405180910390fd5b61153060006129e5565b565b600c5481565b60606000611545836113c1565b905060008114156115a257600067ffffffffffffffff81111561156b5761156a614745565b5b6040519080825280602002602001820160405280156115995781602001602082028036833780820191505090505b5091505061163d565b60008167ffffffffffffffff8111156115be576115bd614745565b5b6040519080825280602002602001820160405280156115ec5781602001602082028036833780820191505090505b50905060005b82811015611636576116048582610db4565b82828151811061161757611616614716565b5b602002602001018181525050808061162e9061460f565b9150506115f2565b8193505050505b919050565b600b5481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611681906145ac565b80601f01602080910402602001604051908101604052809291908181526020018280546116ad906145ac565b80156116fa5780601f106116cf576101008083540402835291602001916116fa565b820191906000526020600020905b8154815290600101906020018083116116dd57829003601f168201915b5050505050905090565b61170c612151565b73ffffffffffffffffffffffffffffffffffffffff1661172a611648565b73ffffffffffffffffffffffffffffffffffffffff1614611780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177790614013565b60405180910390fd5b80600c8190555050565b611792612151565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f790614053565b60405180910390fd5b806006600061180d612151565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118ba612151565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118ff9190613e3b565b60405180910390a35050565b611913612151565b73ffffffffffffffffffffffffffffffffffffffff16611931611648565b73ffffffffffffffffffffffffffffffffffffffff1614611987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197e90614013565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b6119be848484612229565b6119ca84848484612aab565b611a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a00906140f3565b60405180910390fd5b50505050565b611a17612151565b73ffffffffffffffffffffffffffffffffffffffff16611a35611648565b73ffffffffffffffffffffffffffffffffffffffff1614611a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8290614013565b60405180910390fd5b80600b8190555050565b6060611aa082612144565b611adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad690614033565b60405180910390fd5b6000611ae9612c42565b90506000815111611b095760405180602001604052806000815250611b34565b80611b1384612cd4565b604051602001611b24929190613d50565b6040516020818303038152906040525b915050919050565b611b44612151565b73ffffffffffffffffffffffffffffffffffffffff16611b62611648565b73ffffffffffffffffffffffffffffffffffffffff1614611bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baf90614013565b60405180910390fd5b80600e60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60075481565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e60009054906101000a900460ff16611d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0290613fb3565b60405180910390fd5b600081118015611d1d5750600b548111155b611d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5390613f73565b60405180910390fd5b600c5481611d68610c34565b611d729190614331565b1115611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa906140b3565b60405180910390fd5b80600d54611dc191906143b8565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611e1c9190613d89565b60206040518083038186803b158015611e3457600080fd5b505afa158015611e48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6c91906137eb565b1015611ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea490613eb3565b60405180910390fd5b600081600d54611ebd91906143b8565b9050600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33836040518363ffffffff1660e01b8152600401611f1c929190613df0565b600060405180830381600087803b158015611f3657600080fd5b505af1158015611f4a573d6000803e3d6000fd5b50505050611f58338361220b565b5050565b611f64612151565b73ffffffffffffffffffffffffffffffffffffffff16611f82611648565b73ffffffffffffffffffffffffffffffffffffffff1614611fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcf90614013565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203f90613ed3565b60405180910390fd5b612051816129e5565b50565b61205c612151565b73ffffffffffffffffffffffffffffffffffffffff1661207a611648565b73ffffffffffffffffffffffffffffffffffffffff16146120d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c790614013565b60405180910390fd5b80600a8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b612225828260405180602001604052806000815250612e35565b5050565b6000612234826127e2565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661225b612151565b73ffffffffffffffffffffffffffffffffffffffff1614806122b75750612280612151565b73ffffffffffffffffffffffffffffffffffffffff1661229f84610a96565b73ffffffffffffffffffffffffffffffffffffffff16145b806122d357506122d282600001516122cd612151565b611c28565b5b905080612315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230c90614073565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237e90613ff3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156123f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ee90613f33565b60405180910390fd5b6124048585856001613314565b6124146000848460000151612159565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166124829190614412565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661252691906142eb565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461262c9190614331565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612772576126a281612144565b15612771576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127da868686600161331a565b505050505050565b6127ea6133b9565b6127f382612144565b612832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282990613ef3565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000001483106128965760017f0000000000000000000000000000000000000000000000000000000000000014846128899190614446565b6128939190614331565b90505b60008390505b8181106129a4576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612990578093505050506129e0565b50808061299c90614582565b91505061289c565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d790614193565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612acc8473ffffffffffffffffffffffffffffffffffffffff16613320565b15612c35578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612af5612151565b8786866040518563ffffffff1660e01b8152600401612b179493929190613da4565b602060405180830381600087803b158015612b3157600080fd5b505af1925050508015612b6257506040513d601f19601f82011682018060405250810190612b5f9190613744565b60015b612be5573d8060008114612b92576040519150601f19603f3d011682016040523d82523d6000602084013e612b97565b606091505b50600081511415612bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd4906140f3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c3a565b600190505b949350505050565b6060600f8054612c51906145ac565b80601f0160208091040260200160405190810160405280929190818152602001828054612c7d906145ac565b8015612cca5780601f10612c9f57610100808354040283529160200191612cca565b820191906000526020600020905b815481529060010190602001808311612cad57829003601f168201915b5050505050905090565b60606000821415612d1c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e30565b600082905060005b60008214612d4e578080612d379061460f565b915050600a82612d479190614387565b9150612d24565b60008167ffffffffffffffff811115612d6a57612d69614745565b5b6040519080825280601f01601f191660200182016040528015612d9c5781602001600182028036833780820191505090505b5090505b60008514612e2957600182612db59190614446565b9150600a85612dc49190614658565b6030612dd09190614331565b60f81b818381518110612de657612de5614716565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e229190614387565b9450612da0565b8093505050505b919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea290614133565b60405180910390fd5b612eb481612144565b15612ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eeb90614113565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000014831115612f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4e906141d3565b60405180910390fd5b612f646000858386613314565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161306191906142eb565b6fffffffffffffffffffffffffffffffff16815260200185836020015161308891906142eb565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156132f757818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46132976000888488612aab565b6132d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132cd906140f3565b60405180910390fd5b81806132e19061460f565b92505080806132ef9061460f565b915050613226565b508060008190555061330c600087858861331a565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b82805461333f906145ac565b90600052602060002090601f01602090048101928261336157600085556133a8565b82601f1061337a57803560ff19168380011785556133a8565b828001600101855582156133a8579182015b828111156133a757823582559160200191906001019061338c565b5b5090506133b591906133f3565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561340c5760008160009055506001016133f4565b5090565b600061342361341e84614233565b61420e565b90508281526020810184848401111561343f5761343e614783565b5b61344a848285614540565b509392505050565b60008135905061346181614ef1565b92915050565b60008135905061347681614f08565b92915050565b60008135905061348b81614f1f565b92915050565b6000815190506134a081614f1f565b92915050565b600082601f8301126134bb576134ba614779565b5b81356134cb848260208601613410565b91505092915050565b60008083601f8401126134ea576134e9614779565b5b8235905067ffffffffffffffff81111561350757613506614774565b5b6020830191508360018202830111156135235761352261477e565b5b9250929050565b60008135905061353981614f36565b92915050565b60008151905061354e81614f36565b92915050565b60006020828403121561356a5761356961478d565b5b600061357884828501613452565b91505092915050565b600080604083850312156135985761359761478d565b5b60006135a685828601613452565b92505060206135b785828601613452565b9150509250929050565b6000806000606084860312156135da576135d961478d565b5b60006135e886828701613452565b93505060206135f986828701613452565b925050604061360a8682870161352a565b9150509250925092565b6000806000806080858703121561362e5761362d61478d565b5b600061363c87828801613452565b945050602061364d87828801613452565b935050604061365e8782880161352a565b925050606085013567ffffffffffffffff81111561367f5761367e614788565b5b61368b878288016134a6565b91505092959194509250565b600080604083850312156136ae576136ad61478d565b5b60006136bc85828601613452565b92505060206136cd85828601613467565b9150509250929050565b600080604083850312156136ee576136ed61478d565b5b60006136fc85828601613452565b925050602061370d8582860161352a565b9150509250929050565b60006020828403121561372d5761372c61478d565b5b600061373b8482850161347c565b91505092915050565b60006020828403121561375a5761375961478d565b5b600061376884828501613491565b91505092915050565b600080602083850312156137885761378761478d565b5b600083013567ffffffffffffffff8111156137a6576137a5614788565b5b6137b2858286016134d4565b92509250509250929050565b6000602082840312156137d4576137d361478d565b5b60006137e28482850161352a565b91505092915050565b6000602082840312156138015761380061478d565b5b600061380f8482850161353f565b91505092915050565b60006138248383613d32565b60208301905092915050565b6138398161447a565b82525050565b600061384a82614274565b61385481856142a2565b935061385f83614264565b8060005b838110156138905781516138778882613818565b975061388283614295565b925050600181019050613863565b5085935050505092915050565b6138a68161448c565b82525050565b60006138b78261427f565b6138c181856142b3565b93506138d181856020860161454f565b6138da81614792565b840191505092915050565b6138ee8161450a565b82525050565b60006138ff8261428a565b61390981856142cf565b935061391981856020860161454f565b61392281614792565b840191505092915050565b60006139388261428a565b61394281856142e0565b935061395281856020860161454f565b80840191505092915050565b600061396b6022836142cf565b9150613976826147a3565b604082019050919050565b600061398e6014836142cf565b9150613999826147f2565b602082019050919050565b60006139b16026836142cf565b91506139bc8261481b565b604082019050919050565b60006139d4602a836142cf565b91506139df8261486a565b604082019050919050565b60006139f76023836142cf565b9150613a02826148b9565b604082019050919050565b6000613a1a6025836142cf565b9150613a2582614908565b604082019050919050565b6000613a3d601f836142cf565b9150613a4882614957565b602082019050919050565b6000613a606027836142cf565b9150613a6b82614980565b604082019050919050565b6000613a836039836142cf565b9150613a8e826149cf565b604082019050919050565b6000613aa66028836142cf565b9150613ab182614a1e565b604082019050919050565b6000613ac9602b836142cf565b9150613ad482614a6d565b604082019050919050565b6000613aec6026836142cf565b9150613af782614abc565b604082019050919050565b6000613b0f6020836142cf565b9150613b1a82614b0b565b602082019050919050565b6000613b32602f836142cf565b9150613b3d82614b34565b604082019050919050565b6000613b55601a836142cf565b9150613b6082614b83565b602082019050919050565b6000613b786032836142cf565b9150613b8382614bac565b604082019050919050565b6000613b9b6022836142cf565b9150613ba682614bfb565b604082019050919050565b6000613bbe6031836142cf565b9150613bc982614c4a565b604082019050919050565b6000613be16000836142c4565b9150613bec82614c99565b600082019050919050565b6000613c046010836142cf565b9150613c0f82614c9c565b602082019050919050565b6000613c276033836142cf565b9150613c3282614cc5565b604082019050919050565b6000613c4a601d836142cf565b9150613c5582614d14565b602082019050919050565b6000613c6d6021836142cf565b9150613c7882614d3d565b604082019050919050565b6000613c90602e836142cf565b9150613c9b82614d8c565b604082019050919050565b6000613cb3601f836142cf565b9150613cbe82614ddb565b602082019050919050565b6000613cd6602f836142cf565b9150613ce182614e04565b604082019050919050565b6000613cf9602d836142cf565b9150613d0482614e53565b604082019050919050565b6000613d1c6022836142cf565b9150613d2782614ea2565b604082019050919050565b613d3b81614500565b82525050565b613d4a81614500565b82525050565b6000613d5c828561392d565b9150613d68828461392d565b91508190509392505050565b6000613d7f82613bd4565b9150819050919050565b6000602082019050613d9e6000830184613830565b92915050565b6000608082019050613db96000830187613830565b613dc66020830186613830565b613dd36040830185613d41565b8181036060830152613de581846138ac565b905095945050505050565b6000604082019050613e056000830185613830565b613e126020830184613d41565b9392505050565b60006020820190508181036000830152613e33818461383f565b905092915050565b6000602082019050613e50600083018461389d565b92915050565b6000602082019050613e6b60008301846138e5565b92915050565b60006020820190508181036000830152613e8b81846138f4565b905092915050565b60006020820190508181036000830152613eac8161395e565b9050919050565b60006020820190508181036000830152613ecc81613981565b9050919050565b60006020820190508181036000830152613eec816139a4565b9050919050565b60006020820190508181036000830152613f0c816139c7565b9050919050565b60006020820190508181036000830152613f2c816139ea565b9050919050565b60006020820190508181036000830152613f4c81613a0d565b9050919050565b60006020820190508181036000830152613f6c81613a30565b9050919050565b60006020820190508181036000830152613f8c81613a53565b9050919050565b60006020820190508181036000830152613fac81613a76565b9050919050565b60006020820190508181036000830152613fcc81613a99565b9050919050565b60006020820190508181036000830152613fec81613abc565b9050919050565b6000602082019050818103600083015261400c81613adf565b9050919050565b6000602082019050818103600083015261402c81613b02565b9050919050565b6000602082019050818103600083015261404c81613b25565b9050919050565b6000602082019050818103600083015261406c81613b48565b9050919050565b6000602082019050818103600083015261408c81613b6b565b9050919050565b600060208201905081810360008301526140ac81613b8e565b9050919050565b600060208201905081810360008301526140cc81613bb1565b9050919050565b600060208201905081810360008301526140ec81613bf7565b9050919050565b6000602082019050818103600083015261410c81613c1a565b9050919050565b6000602082019050818103600083015261412c81613c3d565b9050919050565b6000602082019050818103600083015261414c81613c60565b9050919050565b6000602082019050818103600083015261416c81613c83565b9050919050565b6000602082019050818103600083015261418c81613ca6565b9050919050565b600060208201905081810360008301526141ac81613cc9565b9050919050565b600060208201905081810360008301526141cc81613cec565b9050919050565b600060208201905081810360008301526141ec81613d0f565b9050919050565b60006020820190506142086000830184613d41565b92915050565b6000614218614229565b905061422482826145de565b919050565b6000604051905090565b600067ffffffffffffffff82111561424e5761424d614745565b5b61425782614792565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006142f6826144c4565b9150614301836144c4565b9250826fffffffffffffffffffffffffffffffff0382111561432657614325614689565b5b828201905092915050565b600061433c82614500565b915061434783614500565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561437c5761437b614689565b5b828201905092915050565b600061439282614500565b915061439d83614500565b9250826143ad576143ac6146b8565b5b828204905092915050565b60006143c382614500565b91506143ce83614500565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561440757614406614689565b5b828202905092915050565b600061441d826144c4565b9150614428836144c4565b92508282101561443b5761443a614689565b5b828203905092915050565b600061445182614500565b915061445c83614500565b92508282101561446f5761446e614689565b5b828203905092915050565b6000614485826144e0565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006145158261451c565b9050919050565b60006145278261452e565b9050919050565b6000614539826144e0565b9050919050565b82818337600083830152505050565b60005b8381101561456d578082015181840152602081019050614552565b8381111561457c576000848401525b50505050565b600061458d82614500565b915060008214156145a1576145a0614689565b5b600182039050919050565b600060028204905060018216806145c457607f821691505b602082108114156145d8576145d76146e7565b5b50919050565b6145e782614792565b810181811067ffffffffffffffff8211171561460657614605614745565b5b80604052505050565b600061461a82614500565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561464d5761464c614689565b5b600182019050919050565b600061466382614500565b915061466e83614500565b92508261467e5761467d6146b8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820474f4a2076616c7565000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f43616e206f6e6c79206d696e74203230206d6967687479676f6a69726120617460008201527f20612074696d6500000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f53616c65206d7573742062652061637469766520746f206d696e74206d69676860008201527f7479676f6a697261000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f66206d6967687479676f6a69726173000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b614efa8161447a565b8114614f0557600080fd5b50565b614f118161448c565b8114614f1c57600080fd5b50565b614f2881614498565b8114614f3357600080fd5b50565b614f3f81614500565b8114614f4a57600080fd5b5056fea26469706673582212205752cef1b0be29b64e668a16957a5733db3e3f3433a46f5d832e213cfa775cff64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000bb8
-----Decoded View---------------
Arg [0] : maxBatchSize_ (uint256): 20
Arg [1] : TotalToken_ (uint256): 3000
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000bb8
Deployed Bytecode Sourcemap
41112:3965:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21930:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23656:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24953:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24516:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20495:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43162:552;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25803:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41418:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21122:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41929:176;;;;;;;;;;;;;:::i;:::-;;42541:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26016:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41362:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41191:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20658:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44859:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42117:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23479:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22356:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38247:94;;;;;;;;;;;;;:::i;:::-;;41318:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44364:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41265:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37596:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23811:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42794:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25221:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42934:101;;;;;;;;;;;;;:::i;:::-;;26236:319;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42379:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23972:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43040:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30671:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41460:15;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25558:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43728:630;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38496:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42688:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21930:370;22057:4;22102:25;22087:40;;;:11;:40;;;;:99;;;;22153:33;22138:48;;;:11;:48;;;;22087:99;:160;;;;22212:35;22197:50;;;:11;:50;;;;22087:160;:207;;;;22258:36;22282:11;22258:23;:36::i;:::-;22087:207;22073:221;;21930:370;;;:::o;23656:94::-;23710:13;23739:5;23732:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23656:94;:::o;24953:204::-;25021:7;25045:16;25053:7;25045;:16::i;:::-;25037:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25127:15;:24;25143:7;25127:24;;;;;;;;;;;;;;;;;;;;;25120:31;;24953:204;;;:::o;24516:379::-;24585:13;24601:24;24617:7;24601:15;:24::i;:::-;24585:40;;24646:5;24640:11;;:2;:11;;;;24632:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;24731:5;24715:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24740:37;24757:5;24764:12;:10;:12::i;:::-;24740:16;:37::i;:::-;24715:62;24699:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;24861:28;24870:2;24874:7;24883:5;24861:8;:28::i;:::-;24578:317;24516:379;;:::o;20495:94::-;20548:7;20571:12;;20564:19;;20495:94;:::o;43162:552::-;43244:16;;;;;;;;;;;43236:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;43341:1;43324:14;:18;:65;;;;;43364:25;;43346:14;:43;;43324:65;43316:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;43486:15;;43468:14;43452:13;:11;:13::i;:::-;:30;;;;:::i;:::-;:49;;43444:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;43607:14;43587:17;;:34;;;;:::i;:::-;43574:9;:47;;43566:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;43670:37;43680:10;43692:14;43670:9;:37::i;:::-;43162:552;:::o;25803:150::-;25919:28;25929:4;25935:2;25939:7;25919:9;:28::i;:::-;25803:150;;;:::o;41418:35::-;;;;;;;;;;;;;:::o;21122:744::-;21231:7;21266:16;21276:5;21266:9;:16::i;:::-;21258:5;:24;21250:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;21328:22;21353:13;:11;:13::i;:::-;21328:38;;21373:19;21403:25;21453:9;21448:350;21472:14;21468:1;:18;21448:350;;;21502:31;21536:11;:14;21548:1;21536:14;;;;;;;;;;;21502:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21589:1;21563:28;;:9;:14;;;:28;;;21559:89;;21624:9;:14;;;21604:34;;21559:89;21681:5;21660:26;;:17;:26;;;21656:135;;;21718:5;21703:11;:20;21699:59;;;21745:1;21738:8;;;;;;;;;21699:59;21768:13;;;;;:::i;:::-;;;;21656:135;21493:305;21488:3;;;;;:::i;:::-;;;;21448:350;;;;21804:56;;;;;;;;;;:::i;:::-;;;;;;;;21122:744;;;;;:::o;41929:176::-;37827:12;:10;:12::i;:::-;37816:23;;:7;:5;:7::i;:::-;:23;;;37808:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35708:1:::1;36304:7;;:19;;36296:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;35708:1;36437:7;:18;;;;41989:12:::2;42007:10;:15;;42030:21;42007:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41988:68;;;42071:7;42063:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;41981:124;35664:1:::1;36616:7;:22;;;;41929:176::o:0;42541:131::-;37827:12;:10;:12::i;:::-;37816:23;;:7;:5;:7::i;:::-;:23;;;37808:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42646:18:::1;42626:17;:38;;;;42541:131:::0;:::o;26016:157::-;26128:39;26145:4;26151:2;26155:7;26128:39;;;;;;;;;;;;:16;:39::i;:::-;26016:157;;;:::o;41362:45::-;;;;:::o;41191:55::-;;;;:::o;20658:177::-;20725:7;20757:13;:11;:13::i;:::-;20749:5;:21;20741:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;20824:5;20817:12;;20658:177;;;:::o;44859:98::-;37827:12;:10;:12::i;:::-;37816:23;;:7;:5;:7::i;:::-;:23;;;37808:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44944:7:::1;;44930:11;:21;;;;;;;:::i;:::-;;44859:98:::0;;:::o;42117:250::-;37827:12;:10;:12::i;:::-;37816:23;;:7;:5;:7::i;:::-;:23;;;37808:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42249:15:::1;;42231:14;42215:13;:11;:13::i;:::-;:30;;;;:::i;:::-;:49;;42207:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;42329:30;42339:3;42344:14;42329:9;:30::i;:::-;42117:250:::0;;:::o;23479:118::-;23543:7;23566:20;23578:7;23566:11;:20::i;:::-;:25;;;23559:32;;23479:118;;;:::o;22356:211::-;22420:7;22461:1;22444:19;;:5;:19;;;;22436:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;22533:12;:19;22546:5;22533:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;22525:36;;22518:43;;22356:211;;;:::o;38247:94::-;37827:12;:10;:12::i;:::-;37816:23;;:7;:5;:7::i;:::-;:23;;;37808:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38312:21:::1;38330:1;38312:9;:21::i;:::-;38247:94::o:0;41318:37::-;;;;:::o;44364:456::-;44425:16;44451:18;44472:17;44482:6;44472:9;:17::i;:::-;44451:38;;44514:1;44500:10;:15;44496:319;;;44549:1;44535:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44528:23;;;;;44496:319;44576:23;44616:10;44602:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44576:51;;44638:13;44662:122;44686:10;44678:5;:18;44662:122;;;44738:34;44758:6;44766:5;44738:19;:34::i;:::-;44722:6;44729:5;44722:13;;;;;;;;:::i;:::-;;;;;;;:50;;;;;44698:7;;;;;:::i;:::-;;;;44662:122;;;44801:6;44794:13;;;;;44364:456;;;;:::o;41265:42::-;;;;:::o;37596:87::-;37642:7;37669:6;;;;;;;;;;;37662:13;;37596:87;:::o;23811:98::-;23867:13;23896:7;23889:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23811:98;:::o;42794:126::-;37827:12;:10;:12::i;:::-;37816:23;;:7;:5;:7::i;:::-;:23;;;37808:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42896:16:::1;42878:15;:34;;;;42794:126:::0;:::o;25221:274::-;25324:12;:10;:12::i;:::-;25312:24;;:8;:24;;;;25304:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;25421:8;25376:18;:32;25395:12;:10;:12::i;:::-;25376:32;;;;;;;;;;;;;;;:42;25409:8;25376:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25470:8;25441:48;;25456:12;:10;:12::i;:::-;25441:48;;;25480:8;25441:48;;;;;;:::i;:::-;;;;;;;;25221:274;;:::o;42934:101::-;37827:12;:10;:12::i;:::-;37816:23;;:7;:5;:7::i;:::-;:23;;;37808:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43011:16:::1;;;;;;;;;;;43010:17;42991:16;;:36;;;;;;;;;;;;;;;;;;42934:101::o:0;26236:319::-;26381:28;26391:4;26397:2;26401:7;26381:9;:28::i;:::-;26432:48;26455:4;26461:2;26465:7;26474:5;26432:22;:48::i;:::-;26416:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;26236:319;;;;:::o;42379:146::-;37827:12;:10;:12::i;:::-;37816:23;;:7;:5;:7::i;:::-;:23;;;37808:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42491:26:::1;42463:25;:54;;;;42379:146:::0;:::o;23972:394::-;24070:13;24111:16;24119:7;24111;:16::i;:::-;24095:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;24201:21;24225:10;:8;:10::i;:::-;24201:34;;24280:1;24262:7;24256:21;:25;:104;;;;;;;;;;;;;;;;;24317:7;24326:18;:7;:16;:18::i;:::-;24300:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24256:104;24242:118;;;23972:394;;;:::o;43040:109::-;37827:12;:10;:12::i;:::-;37816:23;;:7;:5;:7::i;:::-;:23;;;37808:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43130:10:::1;43119:3;;:22;;;;;;;;;;;;;;;;;;43040:109:::0;:::o;30671:43::-;;;;:::o;41460:15::-;;;;;;;;;;;;;:::o;25558:186::-;25680:4;25703:18;:25;25722:5;25703:25;;;;;;;;;;;;;;;:35;25729:8;25703:35;;;;;;;;;;;;;;;;;;;;;;;;;25696:42;;25558:186;;;;:::o;43728:630::-;43811:16;;;;;;;;;;;43803:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;43904:1;43887:14;:18;:65;;;;;43927:25;;43909:14;:43;;43887:65;43879:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;44043:15;;44025:14;44011:13;:11;:13::i;:::-;:28;;;;:::i;:::-;:47;;44003:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;44175:14;44155:17;;:34;;;;:::i;:::-;44127:3;;;;;;;;;;;:13;;;44141:10;44127:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:62;;44119:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;44223:13;44259:14;44239:17;;:34;;;;:::i;:::-;44223:50;;44280:3;;;;;;;;;;;:8;;;44289:10;44301:8;44280:30;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44317:37;44327:10;44339:14;44317:9;:37::i;:::-;43796:562;43728:630;:::o;38496:192::-;37827:12;:10;:12::i;:::-;37816:23;;:7;:5;:7::i;:::-;:23;;;37808:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38605:1:::1;38585:22;;:8;:22;;;;38577:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38661:19;38671:8;38661:9;:19::i;:::-;38496:192:::0;:::o;42688:97::-;37827:12;:10;:12::i;:::-;37816:23;;:7;:5;:7::i;:::-;:23;;;37808:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42772:5:::1;42752:17;:25;;;;42688:97:::0;:::o;306:157::-;391:4;430:25;415:40;;;:11;:40;;;;408:47;;306:157;;;:::o;26794:117::-;26851:4;26893:12;;26883:7;:22;26876:29;;26794:117;;;:::o;14481:98::-;14534:7;14561:10;14554:17;;14481:98;:::o;30493:172::-;30617:2;30590:15;:24;30606:7;30590:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30651:7;30647:2;30631:28;;30640:5;30631:28;;;;;;;;;;;;30493:172;;;:::o;26917:98::-;26982:27;26992:2;26996:8;26982:27;;;;;;;;;;;;:9;:27::i;:::-;26917:98;;:::o;28858:1529::-;28955:35;28993:20;29005:7;28993:11;:20::i;:::-;28955:58;;29022:22;29064:13;:18;;;29048:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;29117:12;:10;:12::i;:::-;29093:36;;:20;29105:7;29093:11;:20::i;:::-;:36;;;29048:81;:142;;;;29140:50;29157:13;:18;;;29177:12;:10;:12::i;:::-;29140:16;:50::i;:::-;29048:142;29022:169;;29216:17;29200:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;29348:4;29326:26;;:13;:18;;;:26;;;29310:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;29437:1;29423:16;;:2;:16;;;;29415:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29490:43;29512:4;29518:2;29522:7;29531:1;29490:21;:43::i;:::-;29590:49;29607:1;29611:7;29620:13;:18;;;29590:8;:49::i;:::-;29678:1;29648:12;:18;29661:4;29648:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29714:1;29686:12;:16;29699:2;29686:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29745:43;;;;;;;;29760:2;29745:43;;;;;;29771:15;29745:43;;;;;29722:11;:20;29734:7;29722:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30016:19;30048:1;30038:7;:11;;;;:::i;:::-;30016:33;;30101:1;30060:43;;:11;:24;30072:11;30060:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;30056:236;;;30118:20;30126:11;30118:7;:20::i;:::-;30114:171;;;30178:97;;;;;;;;30205:13;:18;;;30178:97;;;;;;30236:13;:28;;;30178:97;;;;;30151:11;:24;30163:11;30151:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30114:171;30056:236;30324:7;30320:2;30305:27;;30314:4;30305:27;;;;;;;;;;;;30339:42;30360:4;30366:2;30370:7;30379:1;30339:20;:42::i;:::-;28948:1439;;;28858:1529;;;:::o;22819:606::-;22895:21;;:::i;:::-;22936:16;22944:7;22936;:16::i;:::-;22928:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23008:26;23056:12;23045:7;:23;23041:93;;23125:1;23110:12;23100:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;23079:47;;23041:93;23147:12;23162:7;23147:22;;23142:212;23179:18;23171:4;:26;23142:212;;23216:31;23250:11;:17;23262:4;23250:17;;;;;;;;;;;23216:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23306:1;23280:28;;:9;:14;;;:28;;;23276:71;;23328:9;23321:16;;;;;;;23276:71;23207:147;23199:6;;;;;:::i;:::-;;;;23142:212;;;;23362:57;;;;;;;;;;:::i;:::-;;;;;;;;22819:606;;;;:::o;38696:173::-;38752:16;38771:6;;;;;;;;;;;38752:25;;38797:8;38788:6;;:17;;;;;;;;;;;;;;;;;;38852:8;38821:40;;38842:8;38821:40;;;;;;;;;;;;38741:128;38696:173;:::o;32200:690::-;32337:4;32354:15;:2;:13;;;:15::i;:::-;32350:535;;;32409:2;32393:36;;;32430:12;:10;:12::i;:::-;32444:4;32450:7;32459:5;32393:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32380:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32641:1;32624:6;:13;:18;32620:215;;;32657:61;;;;;;;;;;:::i;:::-;;;;;;;;32620:215;32803:6;32797:13;32788:6;32784:2;32780:15;32773:38;32380:464;32525:45;;;32515:55;;;:6;:55;;;;32508:62;;;;;32350:535;32873:4;32866:11;;32200:690;;;;;;;:::o;44965:106::-;45025:13;45054:11;45047:18;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44965:106;:::o;14948:723::-;15004:13;15234:1;15225:5;:10;15221:53;;;15252:10;;;;;;;;;;;;;;;;;;;;;15221:53;15284:12;15299:5;15284:20;;15315:14;15340:78;15355:1;15347:4;:9;15340:78;;15373:8;;;;;:::i;:::-;;;;15404:2;15396:10;;;;;:::i;:::-;;;15340:78;;;15428:19;15460:6;15450:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15428:39;;15478:154;15494:1;15485:5;:10;15478:154;;15522:1;15512:11;;;;;:::i;:::-;;;15589:2;15581:5;:10;;;;:::i;:::-;15568:2;:24;;;;:::i;:::-;15555:39;;15538:6;15545;15538:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;15618:2;15609:11;;;;;:::i;:::-;;;15478:154;;;15656:6;15642:21;;;;;14948:723;;;;:::o;27354:1272::-;27459:20;27482:12;;27459:35;;27523:1;27509:16;;:2;:16;;;;27501:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27700:21;27708:12;27700:7;:21::i;:::-;27699:22;27691:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27782:12;27770:8;:24;;27762:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27842:61;27872:1;27876:2;27880:12;27894:8;27842:21;:61::i;:::-;27912:30;27945:12;:16;27958:2;27945:16;;;;;;;;;;;;;;;27912:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27987:119;;;;;;;;28037:8;28007:11;:19;;;:39;;;;:::i;:::-;27987:119;;;;;;28090:8;28055:11;:24;;;:44;;;;:::i;:::-;27987:119;;;;;27968:12;:16;27981:2;27968:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28141:43;;;;;;;;28156:2;28141:43;;;;;;28167:15;28141:43;;;;;28113:11;:25;28125:12;28113:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28193:20;28216:12;28193:35;;28242:9;28237:281;28261:8;28257:1;:12;28237:281;;;28315:12;28311:2;28290:38;;28307:1;28290:38;;;;;;;;;;;;28355:59;28386:1;28390:2;28394:12;28408:5;28355:22;:59::i;:::-;28337:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;28496:14;;;;;:::i;:::-;;;;28271:3;;;;;:::i;:::-;;;;28237:281;;;;28541:12;28526;:27;;;;28560:60;28589:1;28593:2;28597:12;28611:8;28560:20;:60::i;:::-;27452:1174;;;27354:1272;;;:::o;33352:141::-;;;;;:::o;33879:140::-;;;;;:::o;1178:387::-;1238:4;1446:12;1513:7;1501:20;1493:28;;1556:1;1549:4;:8;1542:15;;;1178:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1368:553::-;1426:8;1436:6;1486:3;1479:4;1471:6;1467:17;1463:27;1453:122;;1494:79;;:::i;:::-;1453:122;1607:6;1594:20;1584:30;;1637:18;1629:6;1626:30;1623:117;;;1659:79;;:::i;:::-;1623:117;1773:4;1765:6;1761:17;1749:29;;1827:3;1819:4;1811:6;1807:17;1797:8;1793:32;1790:41;1787:128;;;1834:79;;:::i;:::-;1787:128;1368:553;;;;;:::o;1927:139::-;1973:5;2011:6;1998:20;1989:29;;2027:33;2054:5;2027:33;:::i;:::-;1927:139;;;;:::o;2072:143::-;2129:5;2160:6;2154:13;2145:22;;2176:33;2203:5;2176:33;:::i;:::-;2072:143;;;;:::o;2221:329::-;2280:6;2329:2;2317:9;2308:7;2304:23;2300:32;2297:119;;;2335:79;;:::i;:::-;2297:119;2455:1;2480:53;2525:7;2516:6;2505:9;2501:22;2480:53;:::i;:::-;2470:63;;2426:117;2221:329;;;;:::o;2556:474::-;2624:6;2632;2681:2;2669:9;2660:7;2656:23;2652:32;2649:119;;;2687:79;;:::i;:::-;2649:119;2807:1;2832:53;2877:7;2868:6;2857:9;2853:22;2832:53;:::i;:::-;2822:63;;2778:117;2934:2;2960:53;3005:7;2996:6;2985:9;2981:22;2960:53;:::i;:::-;2950:63;;2905:118;2556:474;;;;;:::o;3036:619::-;3113:6;3121;3129;3178:2;3166:9;3157:7;3153:23;3149:32;3146:119;;;3184:79;;:::i;:::-;3146:119;3304:1;3329:53;3374:7;3365:6;3354:9;3350:22;3329:53;:::i;:::-;3319:63;;3275:117;3431:2;3457:53;3502:7;3493:6;3482:9;3478:22;3457:53;:::i;:::-;3447:63;;3402:118;3559:2;3585:53;3630:7;3621:6;3610:9;3606:22;3585:53;:::i;:::-;3575:63;;3530:118;3036:619;;;;;:::o;3661:943::-;3756:6;3764;3772;3780;3829:3;3817:9;3808:7;3804:23;3800:33;3797:120;;;3836:79;;:::i;:::-;3797:120;3956:1;3981:53;4026:7;4017:6;4006:9;4002:22;3981:53;:::i;:::-;3971:63;;3927:117;4083:2;4109:53;4154:7;4145:6;4134:9;4130:22;4109:53;:::i;:::-;4099:63;;4054:118;4211:2;4237:53;4282:7;4273:6;4262:9;4258:22;4237:53;:::i;:::-;4227:63;;4182:118;4367:2;4356:9;4352:18;4339:32;4398:18;4390:6;4387:30;4384:117;;;4420:79;;:::i;:::-;4384:117;4525:62;4579:7;4570:6;4559:9;4555:22;4525:62;:::i;:::-;4515:72;;4310:287;3661:943;;;;;;;:::o;4610:468::-;4675:6;4683;4732:2;4720:9;4711:7;4707:23;4703:32;4700:119;;;4738:79;;:::i;:::-;4700:119;4858:1;4883:53;4928:7;4919:6;4908:9;4904:22;4883:53;:::i;:::-;4873:63;;4829:117;4985:2;5011:50;5053:7;5044:6;5033:9;5029:22;5011:50;:::i;:::-;5001:60;;4956:115;4610:468;;;;;:::o;5084:474::-;5152:6;5160;5209:2;5197:9;5188:7;5184:23;5180:32;5177:119;;;5215:79;;:::i;:::-;5177:119;5335:1;5360:53;5405:7;5396:6;5385:9;5381:22;5360:53;:::i;:::-;5350:63;;5306:117;5462:2;5488:53;5533:7;5524:6;5513:9;5509:22;5488:53;:::i;:::-;5478:63;;5433:118;5084:474;;;;;:::o;5564:327::-;5622:6;5671:2;5659:9;5650:7;5646:23;5642:32;5639:119;;;5677:79;;:::i;:::-;5639:119;5797:1;5822:52;5866:7;5857:6;5846:9;5842:22;5822:52;:::i;:::-;5812:62;;5768:116;5564:327;;;;:::o;5897:349::-;5966:6;6015:2;6003:9;5994:7;5990:23;5986:32;5983:119;;;6021:79;;:::i;:::-;5983:119;6141:1;6166:63;6221:7;6212:6;6201:9;6197:22;6166:63;:::i;:::-;6156:73;;6112:127;5897:349;;;;:::o;6252:529::-;6323:6;6331;6380:2;6368:9;6359:7;6355:23;6351:32;6348:119;;;6386:79;;:::i;:::-;6348:119;6534:1;6523:9;6519:17;6506:31;6564:18;6556:6;6553:30;6550:117;;;6586:79;;:::i;:::-;6550:117;6699:65;6756:7;6747:6;6736:9;6732:22;6699:65;:::i;:::-;6681:83;;;;6477:297;6252:529;;;;;:::o;6787:329::-;6846:6;6895:2;6883:9;6874:7;6870:23;6866:32;6863:119;;;6901:79;;:::i;:::-;6863:119;7021:1;7046:53;7091:7;7082:6;7071:9;7067:22;7046:53;:::i;:::-;7036:63;;6992:117;6787:329;;;;:::o;7122:351::-;7192:6;7241:2;7229:9;7220:7;7216:23;7212:32;7209:119;;;7247:79;;:::i;:::-;7209:119;7367:1;7392:64;7448:7;7439:6;7428:9;7424:22;7392:64;:::i;:::-;7382:74;;7338:128;7122:351;;;;:::o;7479:179::-;7548:10;7569:46;7611:3;7603:6;7569:46;:::i;:::-;7647:4;7642:3;7638:14;7624:28;;7479:179;;;;:::o;7664:118::-;7751:24;7769:5;7751:24;:::i;:::-;7746:3;7739:37;7664:118;;:::o;7818:732::-;7937:3;7966:54;8014:5;7966:54;:::i;:::-;8036:86;8115:6;8110:3;8036:86;:::i;:::-;8029:93;;8146:56;8196:5;8146:56;:::i;:::-;8225:7;8256:1;8241:284;8266:6;8263:1;8260:13;8241:284;;;8342:6;8336:13;8369:63;8428:3;8413:13;8369:63;:::i;:::-;8362:70;;8455:60;8508:6;8455:60;:::i;:::-;8445:70;;8301:224;8288:1;8285;8281:9;8276:14;;8241:284;;;8245:14;8541:3;8534:10;;7942:608;;;7818:732;;;;:::o;8556:109::-;8637:21;8652:5;8637:21;:::i;:::-;8632:3;8625:34;8556:109;;:::o;8671:360::-;8757:3;8785:38;8817:5;8785:38;:::i;:::-;8839:70;8902:6;8897:3;8839:70;:::i;:::-;8832:77;;8918:52;8963:6;8958:3;8951:4;8944:5;8940:16;8918:52;:::i;:::-;8995:29;9017:6;8995:29;:::i;:::-;8990:3;8986:39;8979:46;;8761:270;8671:360;;;;:::o;9037:157::-;9137:50;9181:5;9137:50;:::i;:::-;9132:3;9125:63;9037:157;;:::o;9200:364::-;9288:3;9316:39;9349:5;9316:39;:::i;:::-;9371:71;9435:6;9430:3;9371:71;:::i;:::-;9364:78;;9451:52;9496:6;9491:3;9484:4;9477:5;9473:16;9451:52;:::i;:::-;9528:29;9550:6;9528:29;:::i;:::-;9523:3;9519:39;9512:46;;9292:272;9200:364;;;;:::o;9570:377::-;9676:3;9704:39;9737:5;9704:39;:::i;:::-;9759:89;9841:6;9836:3;9759:89;:::i;:::-;9752:96;;9857:52;9902:6;9897:3;9890:4;9883:5;9879:16;9857:52;:::i;:::-;9934:6;9929:3;9925:16;9918:23;;9680:267;9570:377;;;;:::o;9953:366::-;10095:3;10116:67;10180:2;10175:3;10116:67;:::i;:::-;10109:74;;10192:93;10281:3;10192:93;:::i;:::-;10310:2;10305:3;10301:12;10294:19;;9953:366;;;:::o;10325:::-;10467:3;10488:67;10552:2;10547:3;10488:67;:::i;:::-;10481:74;;10564:93;10653:3;10564:93;:::i;:::-;10682:2;10677:3;10673:12;10666:19;;10325:366;;;:::o;10697:::-;10839:3;10860:67;10924:2;10919:3;10860:67;:::i;:::-;10853:74;;10936:93;11025:3;10936:93;:::i;:::-;11054:2;11049:3;11045:12;11038:19;;10697:366;;;:::o;11069:::-;11211:3;11232:67;11296:2;11291:3;11232:67;:::i;:::-;11225:74;;11308:93;11397:3;11308:93;:::i;:::-;11426:2;11421:3;11417:12;11410:19;;11069:366;;;:::o;11441:::-;11583:3;11604:67;11668:2;11663:3;11604:67;:::i;:::-;11597:74;;11680:93;11769:3;11680:93;:::i;:::-;11798:2;11793:3;11789:12;11782:19;;11441:366;;;:::o;11813:::-;11955:3;11976:67;12040:2;12035:3;11976:67;:::i;:::-;11969:74;;12052:93;12141:3;12052:93;:::i;:::-;12170:2;12165:3;12161:12;12154:19;;11813:366;;;:::o;12185:::-;12327:3;12348:67;12412:2;12407:3;12348:67;:::i;:::-;12341:74;;12424:93;12513:3;12424:93;:::i;:::-;12542:2;12537:3;12533:12;12526:19;;12185:366;;;:::o;12557:::-;12699:3;12720:67;12784:2;12779:3;12720:67;:::i;:::-;12713:74;;12796:93;12885:3;12796:93;:::i;:::-;12914:2;12909:3;12905:12;12898:19;;12557:366;;;:::o;12929:::-;13071:3;13092:67;13156:2;13151:3;13092:67;:::i;:::-;13085:74;;13168:93;13257:3;13168:93;:::i;:::-;13286:2;13281:3;13277:12;13270:19;;12929:366;;;:::o;13301:::-;13443:3;13464:67;13528:2;13523:3;13464:67;:::i;:::-;13457:74;;13540:93;13629:3;13540:93;:::i;:::-;13658:2;13653:3;13649:12;13642:19;;13301:366;;;:::o;13673:::-;13815:3;13836:67;13900:2;13895:3;13836:67;:::i;:::-;13829:74;;13912:93;14001:3;13912:93;:::i;:::-;14030:2;14025:3;14021:12;14014:19;;13673:366;;;:::o;14045:::-;14187:3;14208:67;14272:2;14267:3;14208:67;:::i;:::-;14201:74;;14284:93;14373:3;14284:93;:::i;:::-;14402:2;14397:3;14393:12;14386:19;;14045:366;;;:::o;14417:::-;14559:3;14580:67;14644:2;14639:3;14580:67;:::i;:::-;14573:74;;14656:93;14745:3;14656:93;:::i;:::-;14774:2;14769:3;14765:12;14758:19;;14417:366;;;:::o;14789:::-;14931:3;14952:67;15016:2;15011:3;14952:67;:::i;:::-;14945:74;;15028:93;15117:3;15028:93;:::i;:::-;15146:2;15141:3;15137:12;15130:19;;14789:366;;;:::o;15161:::-;15303:3;15324:67;15388:2;15383:3;15324:67;:::i;:::-;15317:74;;15400:93;15489:3;15400:93;:::i;:::-;15518:2;15513:3;15509:12;15502:19;;15161:366;;;:::o;15533:::-;15675:3;15696:67;15760:2;15755:3;15696:67;:::i;:::-;15689:74;;15772:93;15861:3;15772:93;:::i;:::-;15890:2;15885:3;15881:12;15874:19;;15533:366;;;:::o;15905:::-;16047:3;16068:67;16132:2;16127:3;16068:67;:::i;:::-;16061:74;;16144:93;16233:3;16144:93;:::i;:::-;16262:2;16257:3;16253:12;16246:19;;15905:366;;;:::o;16277:::-;16419:3;16440:67;16504:2;16499:3;16440:67;:::i;:::-;16433:74;;16516:93;16605:3;16516:93;:::i;:::-;16634:2;16629:3;16625:12;16618:19;;16277:366;;;:::o;16649:398::-;16808:3;16829:83;16910:1;16905:3;16829:83;:::i;:::-;16822:90;;16921:93;17010:3;16921:93;:::i;:::-;17039:1;17034:3;17030:11;17023:18;;16649:398;;;:::o;17053:366::-;17195:3;17216:67;17280:2;17275:3;17216:67;:::i;:::-;17209:74;;17292:93;17381:3;17292:93;:::i;:::-;17410:2;17405:3;17401:12;17394:19;;17053:366;;;:::o;17425:::-;17567:3;17588:67;17652:2;17647:3;17588:67;:::i;:::-;17581:74;;17664:93;17753:3;17664:93;:::i;:::-;17782:2;17777:3;17773:12;17766:19;;17425:366;;;:::o;17797:::-;17939:3;17960:67;18024:2;18019:3;17960:67;:::i;:::-;17953:74;;18036:93;18125:3;18036:93;:::i;:::-;18154:2;18149:3;18145:12;18138:19;;17797:366;;;:::o;18169:::-;18311:3;18332:67;18396:2;18391:3;18332:67;:::i;:::-;18325:74;;18408:93;18497:3;18408:93;:::i;:::-;18526:2;18521:3;18517:12;18510:19;;18169:366;;;:::o;18541:::-;18683:3;18704:67;18768:2;18763:3;18704:67;:::i;:::-;18697:74;;18780:93;18869:3;18780:93;:::i;:::-;18898:2;18893:3;18889:12;18882:19;;18541:366;;;:::o;18913:::-;19055:3;19076:67;19140:2;19135:3;19076:67;:::i;:::-;19069:74;;19152:93;19241:3;19152:93;:::i;:::-;19270:2;19265:3;19261:12;19254:19;;18913:366;;;:::o;19285:::-;19427:3;19448:67;19512:2;19507:3;19448:67;:::i;:::-;19441:74;;19524:93;19613:3;19524:93;:::i;:::-;19642:2;19637:3;19633:12;19626:19;;19285:366;;;:::o;19657:::-;19799:3;19820:67;19884:2;19879:3;19820:67;:::i;:::-;19813:74;;19896:93;19985:3;19896:93;:::i;:::-;20014:2;20009:3;20005:12;19998:19;;19657:366;;;:::o;20029:::-;20171:3;20192:67;20256:2;20251:3;20192:67;:::i;:::-;20185:74;;20268:93;20357:3;20268:93;:::i;:::-;20386:2;20381:3;20377:12;20370:19;;20029:366;;;:::o;20401:108::-;20478:24;20496:5;20478:24;:::i;:::-;20473:3;20466:37;20401:108;;:::o;20515:118::-;20602:24;20620:5;20602:24;:::i;:::-;20597:3;20590:37;20515:118;;:::o;20639:435::-;20819:3;20841:95;20932:3;20923:6;20841:95;:::i;:::-;20834:102;;20953:95;21044:3;21035:6;20953:95;:::i;:::-;20946:102;;21065:3;21058:10;;20639:435;;;;;:::o;21080:379::-;21264:3;21286:147;21429:3;21286:147;:::i;:::-;21279:154;;21450:3;21443:10;;21080:379;;;:::o;21465:222::-;21558:4;21596:2;21585:9;21581:18;21573:26;;21609:71;21677:1;21666:9;21662:17;21653:6;21609:71;:::i;:::-;21465:222;;;;:::o;21693:640::-;21888:4;21926:3;21915:9;21911:19;21903:27;;21940:71;22008:1;21997:9;21993:17;21984:6;21940:71;:::i;:::-;22021:72;22089:2;22078:9;22074:18;22065:6;22021:72;:::i;:::-;22103;22171:2;22160:9;22156:18;22147:6;22103:72;:::i;:::-;22222:9;22216:4;22212:20;22207:2;22196:9;22192:18;22185:48;22250:76;22321:4;22312:6;22250:76;:::i;:::-;22242:84;;21693:640;;;;;;;:::o;22339:332::-;22460:4;22498:2;22487:9;22483:18;22475:26;;22511:71;22579:1;22568:9;22564:17;22555:6;22511:71;:::i;:::-;22592:72;22660:2;22649:9;22645:18;22636:6;22592:72;:::i;:::-;22339:332;;;;;:::o;22677:373::-;22820:4;22858:2;22847:9;22843:18;22835:26;;22907:9;22901:4;22897:20;22893:1;22882:9;22878:17;22871:47;22935:108;23038:4;23029:6;22935:108;:::i;:::-;22927:116;;22677:373;;;;:::o;23056:210::-;23143:4;23181:2;23170:9;23166:18;23158:26;;23194:65;23256:1;23245:9;23241:17;23232:6;23194:65;:::i;:::-;23056:210;;;;:::o;23272:248::-;23378:4;23416:2;23405:9;23401:18;23393:26;;23429:84;23510:1;23499:9;23495:17;23486:6;23429:84;:::i;:::-;23272:248;;;;:::o;23526:313::-;23639:4;23677:2;23666:9;23662:18;23654:26;;23726:9;23720:4;23716:20;23712:1;23701:9;23697:17;23690:47;23754:78;23827:4;23818:6;23754:78;:::i;:::-;23746:86;;23526:313;;;;:::o;23845:419::-;24011:4;24049:2;24038:9;24034:18;24026:26;;24098:9;24092:4;24088:20;24084:1;24073:9;24069:17;24062:47;24126:131;24252:4;24126:131;:::i;:::-;24118:139;;23845:419;;;:::o;24270:::-;24436:4;24474:2;24463:9;24459:18;24451:26;;24523:9;24517:4;24513:20;24509:1;24498:9;24494:17;24487:47;24551:131;24677:4;24551:131;:::i;:::-;24543:139;;24270:419;;;:::o;24695:::-;24861:4;24899:2;24888:9;24884:18;24876:26;;24948:9;24942:4;24938:20;24934:1;24923:9;24919:17;24912:47;24976:131;25102:4;24976:131;:::i;:::-;24968:139;;24695:419;;;:::o;25120:::-;25286:4;25324:2;25313:9;25309:18;25301:26;;25373:9;25367:4;25363:20;25359:1;25348:9;25344:17;25337:47;25401:131;25527:4;25401:131;:::i;:::-;25393:139;;25120:419;;;:::o;25545:::-;25711:4;25749:2;25738:9;25734:18;25726:26;;25798:9;25792:4;25788:20;25784:1;25773:9;25769:17;25762:47;25826:131;25952:4;25826:131;:::i;:::-;25818:139;;25545:419;;;:::o;25970:::-;26136:4;26174:2;26163:9;26159:18;26151:26;;26223:9;26217:4;26213:20;26209:1;26198:9;26194:17;26187:47;26251:131;26377:4;26251:131;:::i;:::-;26243:139;;25970:419;;;:::o;26395:::-;26561:4;26599:2;26588:9;26584:18;26576:26;;26648:9;26642:4;26638:20;26634:1;26623:9;26619:17;26612:47;26676:131;26802:4;26676:131;:::i;:::-;26668:139;;26395:419;;;:::o;26820:::-;26986:4;27024:2;27013:9;27009:18;27001:26;;27073:9;27067:4;27063:20;27059:1;27048:9;27044:17;27037:47;27101:131;27227:4;27101:131;:::i;:::-;27093:139;;26820:419;;;:::o;27245:::-;27411:4;27449:2;27438:9;27434:18;27426:26;;27498:9;27492:4;27488:20;27484:1;27473:9;27469:17;27462:47;27526:131;27652:4;27526:131;:::i;:::-;27518:139;;27245:419;;;:::o;27670:::-;27836:4;27874:2;27863:9;27859:18;27851:26;;27923:9;27917:4;27913:20;27909:1;27898:9;27894:17;27887:47;27951:131;28077:4;27951:131;:::i;:::-;27943:139;;27670:419;;;:::o;28095:::-;28261:4;28299:2;28288:9;28284:18;28276:26;;28348:9;28342:4;28338:20;28334:1;28323:9;28319:17;28312:47;28376:131;28502:4;28376:131;:::i;:::-;28368:139;;28095:419;;;:::o;28520:::-;28686:4;28724:2;28713:9;28709:18;28701:26;;28773:9;28767:4;28763:20;28759:1;28748:9;28744:17;28737:47;28801:131;28927:4;28801:131;:::i;:::-;28793:139;;28520:419;;;:::o;28945:::-;29111:4;29149:2;29138:9;29134:18;29126:26;;29198:9;29192:4;29188:20;29184:1;29173:9;29169:17;29162:47;29226:131;29352:4;29226:131;:::i;:::-;29218:139;;28945:419;;;:::o;29370:::-;29536:4;29574:2;29563:9;29559:18;29551:26;;29623:9;29617:4;29613:20;29609:1;29598:9;29594:17;29587:47;29651:131;29777:4;29651:131;:::i;:::-;29643:139;;29370:419;;;:::o;29795:::-;29961:4;29999:2;29988:9;29984:18;29976:26;;30048:9;30042:4;30038:20;30034:1;30023:9;30019:17;30012:47;30076:131;30202:4;30076:131;:::i;:::-;30068:139;;29795:419;;;:::o;30220:::-;30386:4;30424:2;30413:9;30409:18;30401:26;;30473:9;30467:4;30463:20;30459:1;30448:9;30444:17;30437:47;30501:131;30627:4;30501:131;:::i;:::-;30493:139;;30220:419;;;:::o;30645:::-;30811:4;30849:2;30838:9;30834:18;30826:26;;30898:9;30892:4;30888:20;30884:1;30873:9;30869:17;30862:47;30926:131;31052:4;30926:131;:::i;:::-;30918:139;;30645:419;;;:::o;31070:::-;31236:4;31274:2;31263:9;31259:18;31251:26;;31323:9;31317:4;31313:20;31309:1;31298:9;31294:17;31287:47;31351:131;31477:4;31351:131;:::i;:::-;31343:139;;31070:419;;;:::o;31495:::-;31661:4;31699:2;31688:9;31684:18;31676:26;;31748:9;31742:4;31738:20;31734:1;31723:9;31719:17;31712:47;31776:131;31902:4;31776:131;:::i;:::-;31768:139;;31495:419;;;:::o;31920:::-;32086:4;32124:2;32113:9;32109:18;32101:26;;32173:9;32167:4;32163:20;32159:1;32148:9;32144:17;32137:47;32201:131;32327:4;32201:131;:::i;:::-;32193:139;;31920:419;;;:::o;32345:::-;32511:4;32549:2;32538:9;32534:18;32526:26;;32598:9;32592:4;32588:20;32584:1;32573:9;32569:17;32562:47;32626:131;32752:4;32626:131;:::i;:::-;32618:139;;32345:419;;;:::o;32770:::-;32936:4;32974:2;32963:9;32959:18;32951:26;;33023:9;33017:4;33013:20;33009:1;32998:9;32994:17;32987:47;33051:131;33177:4;33051:131;:::i;:::-;33043:139;;32770:419;;;:::o;33195:::-;33361:4;33399:2;33388:9;33384:18;33376:26;;33448:9;33442:4;33438:20;33434:1;33423:9;33419:17;33412:47;33476:131;33602:4;33476:131;:::i;:::-;33468:139;;33195:419;;;:::o;33620:::-;33786:4;33824:2;33813:9;33809:18;33801:26;;33873:9;33867:4;33863:20;33859:1;33848:9;33844:17;33837:47;33901:131;34027:4;33901:131;:::i;:::-;33893:139;;33620:419;;;:::o;34045:::-;34211:4;34249:2;34238:9;34234:18;34226:26;;34298:9;34292:4;34288:20;34284:1;34273:9;34269:17;34262:47;34326:131;34452:4;34326:131;:::i;:::-;34318:139;;34045:419;;;:::o;34470:::-;34636:4;34674:2;34663:9;34659:18;34651:26;;34723:9;34717:4;34713:20;34709:1;34698:9;34694:17;34687:47;34751:131;34877:4;34751:131;:::i;:::-;34743:139;;34470:419;;;:::o;34895:::-;35061:4;35099:2;35088:9;35084:18;35076:26;;35148:9;35142:4;35138:20;35134:1;35123:9;35119:17;35112:47;35176:131;35302:4;35176:131;:::i;:::-;35168:139;;34895:419;;;:::o;35320:222::-;35413:4;35451:2;35440:9;35436:18;35428:26;;35464:71;35532:1;35521:9;35517:17;35508:6;35464:71;:::i;:::-;35320:222;;;;:::o;35548:129::-;35582:6;35609:20;;:::i;:::-;35599:30;;35638:33;35666:4;35658:6;35638:33;:::i;:::-;35548:129;;;:::o;35683:75::-;35716:6;35749:2;35743:9;35733:19;;35683:75;:::o;35764:307::-;35825:4;35915:18;35907:6;35904:30;35901:56;;;35937:18;;:::i;:::-;35901:56;35975:29;35997:6;35975:29;:::i;:::-;35967:37;;36059:4;36053;36049:15;36041:23;;35764:307;;;:::o;36077:132::-;36144:4;36167:3;36159:11;;36197:4;36192:3;36188:14;36180:22;;36077:132;;;:::o;36215:114::-;36282:6;36316:5;36310:12;36300:22;;36215:114;;;:::o;36335:98::-;36386:6;36420:5;36414:12;36404:22;;36335:98;;;:::o;36439:99::-;36491:6;36525:5;36519:12;36509:22;;36439:99;;;:::o;36544:113::-;36614:4;36646;36641:3;36637:14;36629:22;;36544:113;;;:::o;36663:184::-;36762:11;36796:6;36791:3;36784:19;36836:4;36831:3;36827:14;36812:29;;36663:184;;;;:::o;36853:168::-;36936:11;36970:6;36965:3;36958:19;37010:4;37005:3;37001:14;36986:29;;36853:168;;;;:::o;37027:147::-;37128:11;37165:3;37150:18;;37027:147;;;;:::o;37180:169::-;37264:11;37298:6;37293:3;37286:19;37338:4;37333:3;37329:14;37314:29;;37180:169;;;;:::o;37355:148::-;37457:11;37494:3;37479:18;;37355:148;;;;:::o;37509:273::-;37549:3;37568:20;37586:1;37568:20;:::i;:::-;37563:25;;37602:20;37620:1;37602:20;:::i;:::-;37597:25;;37724:1;37688:34;37684:42;37681:1;37678:49;37675:75;;;37730:18;;:::i;:::-;37675:75;37774:1;37771;37767:9;37760:16;;37509:273;;;;:::o;37788:305::-;37828:3;37847:20;37865:1;37847:20;:::i;:::-;37842:25;;37881:20;37899:1;37881:20;:::i;:::-;37876:25;;38035:1;37967:66;37963:74;37960:1;37957:81;37954:107;;;38041:18;;:::i;:::-;37954:107;38085:1;38082;38078:9;38071:16;;37788:305;;;;:::o;38099:185::-;38139:1;38156:20;38174:1;38156:20;:::i;:::-;38151:25;;38190:20;38208:1;38190:20;:::i;:::-;38185:25;;38229:1;38219:35;;38234:18;;:::i;:::-;38219:35;38276:1;38273;38269:9;38264:14;;38099:185;;;;:::o;38290:348::-;38330:7;38353:20;38371:1;38353:20;:::i;:::-;38348:25;;38387:20;38405:1;38387:20;:::i;:::-;38382:25;;38575:1;38507:66;38503:74;38500:1;38497:81;38492:1;38485:9;38478:17;38474:105;38471:131;;;38582:18;;:::i;:::-;38471:131;38630:1;38627;38623:9;38612:20;;38290:348;;;;:::o;38644:191::-;38684:4;38704:20;38722:1;38704:20;:::i;:::-;38699:25;;38738:20;38756:1;38738:20;:::i;:::-;38733:25;;38777:1;38774;38771:8;38768:34;;;38782:18;;:::i;:::-;38768:34;38827:1;38824;38820:9;38812:17;;38644:191;;;;:::o;38841:::-;38881:4;38901:20;38919:1;38901:20;:::i;:::-;38896:25;;38935:20;38953:1;38935:20;:::i;:::-;38930:25;;38974:1;38971;38968:8;38965:34;;;38979:18;;:::i;:::-;38965:34;39024:1;39021;39017:9;39009:17;;38841:191;;;;:::o;39038:96::-;39075:7;39104:24;39122:5;39104:24;:::i;:::-;39093:35;;39038:96;;;:::o;39140:90::-;39174:7;39217:5;39210:13;39203:21;39192:32;;39140:90;;;:::o;39236:149::-;39272:7;39312:66;39305:5;39301:78;39290:89;;39236:149;;;:::o;39391:118::-;39428:7;39468:34;39461:5;39457:46;39446:57;;39391:118;;;:::o;39515:126::-;39552:7;39592:42;39585:5;39581:54;39570:65;;39515:126;;;:::o;39647:77::-;39684:7;39713:5;39702:16;;39647:77;;;:::o;39730:139::-;39793:9;39826:37;39857:5;39826:37;:::i;:::-;39813:50;;39730:139;;;:::o;39875:126::-;39925:9;39958:37;39989:5;39958:37;:::i;:::-;39945:50;;39875:126;;;:::o;40007:113::-;40057:9;40090:24;40108:5;40090:24;:::i;:::-;40077:37;;40007:113;;;:::o;40126:154::-;40210:6;40205:3;40200;40187:30;40272:1;40263:6;40258:3;40254:16;40247:27;40126:154;;;:::o;40286:307::-;40354:1;40364:113;40378:6;40375:1;40372:13;40364:113;;;40463:1;40458:3;40454:11;40448:18;40444:1;40439:3;40435:11;40428:39;40400:2;40397:1;40393:10;40388:15;;40364:113;;;40495:6;40492:1;40489:13;40486:101;;;40575:1;40566:6;40561:3;40557:16;40550:27;40486:101;40335:258;40286:307;;;:::o;40599:171::-;40638:3;40661:24;40679:5;40661:24;:::i;:::-;40652:33;;40707:4;40700:5;40697:15;40694:41;;;40715:18;;:::i;:::-;40694:41;40762:1;40755:5;40751:13;40744:20;;40599:171;;;:::o;40776:320::-;40820:6;40857:1;40851:4;40847:12;40837:22;;40904:1;40898:4;40894:12;40925:18;40915:81;;40981:4;40973:6;40969:17;40959:27;;40915:81;41043:2;41035:6;41032:14;41012:18;41009:38;41006:84;;;41062:18;;:::i;:::-;41006:84;40827:269;40776:320;;;:::o;41102:281::-;41185:27;41207:4;41185:27;:::i;:::-;41177:6;41173:40;41315:6;41303:10;41300:22;41279:18;41267:10;41264:34;41261:62;41258:88;;;41326:18;;:::i;:::-;41258:88;41366:10;41362:2;41355:22;41145:238;41102:281;;:::o;41389:233::-;41428:3;41451:24;41469:5;41451:24;:::i;:::-;41442:33;;41497:66;41490:5;41487:77;41484:103;;;41567:18;;:::i;:::-;41484:103;41614:1;41607:5;41603:13;41596:20;;41389:233;;;:::o;41628:176::-;41660:1;41677:20;41695:1;41677:20;:::i;:::-;41672:25;;41711:20;41729:1;41711:20;:::i;:::-;41706:25;;41750:1;41740:35;;41755:18;;:::i;:::-;41740:35;41796:1;41793;41789:9;41784:14;;41628:176;;;;:::o;41810:180::-;41858:77;41855:1;41848:88;41955:4;41952:1;41945:15;41979:4;41976:1;41969:15;41996:180;42044:77;42041:1;42034:88;42141:4;42138:1;42131:15;42165:4;42162:1;42155:15;42182:180;42230:77;42227:1;42220:88;42327:4;42324:1;42317:15;42351:4;42348:1;42341:15;42368:180;42416:77;42413:1;42406:88;42513:4;42510:1;42503:15;42537:4;42534:1;42527:15;42554:180;42602:77;42599:1;42592:88;42699:4;42696:1;42689:15;42723:4;42720:1;42713:15;42740:117;42849:1;42846;42839:12;42863:117;42972:1;42969;42962:12;42986:117;43095:1;43092;43085:12;43109:117;43218:1;43215;43208:12;43232:117;43341:1;43338;43331:12;43355:117;43464:1;43461;43454:12;43478:102;43519:6;43570:2;43566:7;43561:2;43554:5;43550:14;43546:28;43536:38;;43478:102;;;:::o;43586:221::-;43726:34;43722:1;43714:6;43710:14;43703:58;43795:4;43790:2;43782:6;43778:15;43771:29;43586:221;:::o;43813:170::-;43953:22;43949:1;43941:6;43937:14;43930:46;43813:170;:::o;43989:225::-;44129:34;44125:1;44117:6;44113:14;44106:58;44198:8;44193:2;44185:6;44181:15;44174:33;43989:225;:::o;44220:229::-;44360:34;44356:1;44348:6;44344:14;44337:58;44429:12;44424:2;44416:6;44412:15;44405:37;44220:229;:::o;44455:222::-;44595:34;44591:1;44583:6;44579:14;44572:58;44664:5;44659:2;44651:6;44647:15;44640:30;44455:222;:::o;44683:224::-;44823:34;44819:1;44811:6;44807:14;44800:58;44892:7;44887:2;44879:6;44875:15;44868:32;44683:224;:::o;44913:181::-;45053:33;45049:1;45041:6;45037:14;45030:57;44913:181;:::o;45100:226::-;45240:34;45236:1;45228:6;45224:14;45217:58;45309:9;45304:2;45296:6;45292:15;45285:34;45100:226;:::o;45332:244::-;45472:34;45468:1;45460:6;45456:14;45449:58;45541:27;45536:2;45528:6;45524:15;45517:52;45332:244;:::o;45582:227::-;45722:34;45718:1;45710:6;45706:14;45699:58;45791:10;45786:2;45778:6;45774:15;45767:35;45582:227;:::o;45815:230::-;45955:34;45951:1;45943:6;45939:14;45932:58;46024:13;46019:2;46011:6;46007:15;46000:38;45815:230;:::o;46051:225::-;46191:34;46187:1;46179:6;46175:14;46168:58;46260:8;46255:2;46247:6;46243:15;46236:33;46051:225;:::o;46282:182::-;46422:34;46418:1;46410:6;46406:14;46399:58;46282:182;:::o;46470:234::-;46610:34;46606:1;46598:6;46594:14;46587:58;46679:17;46674:2;46666:6;46662:15;46655:42;46470:234;:::o;46710:176::-;46850:28;46846:1;46838:6;46834:14;46827:52;46710:176;:::o;46892:237::-;47032:34;47028:1;47020:6;47016:14;47009:58;47101:20;47096:2;47088:6;47084:15;47077:45;46892:237;:::o;47135:221::-;47275:34;47271:1;47263:6;47259:14;47252:58;47344:4;47339:2;47331:6;47327:15;47320:29;47135:221;:::o;47362:236::-;47502:34;47498:1;47490:6;47486:14;47479:58;47571:19;47566:2;47558:6;47554:15;47547:44;47362:236;:::o;47604:114::-;;:::o;47724:166::-;47864:18;47860:1;47852:6;47848:14;47841:42;47724:166;:::o;47896:238::-;48036:34;48032:1;48024:6;48020:14;48013:58;48105:21;48100:2;48092:6;48088:15;48081:46;47896:238;:::o;48140:179::-;48280:31;48276:1;48268:6;48264:14;48257:55;48140:179;:::o;48325:220::-;48465:34;48461:1;48453:6;48449:14;48442:58;48534:3;48529:2;48521:6;48517:15;48510:28;48325:220;:::o;48551:233::-;48691:34;48687:1;48679:6;48675:14;48668:58;48760:16;48755:2;48747:6;48743:15;48736:41;48551:233;:::o;48790:181::-;48930:33;48926:1;48918:6;48914:14;48907:57;48790:181;:::o;48977:234::-;49117:34;49113:1;49105:6;49101:14;49094:58;49186:17;49181:2;49173:6;49169:15;49162:42;48977:234;:::o;49217:232::-;49357:34;49353:1;49345:6;49341:14;49334:58;49426:15;49421:2;49413:6;49409:15;49402:40;49217:232;:::o;49455:221::-;49595:34;49591:1;49583:6;49579:14;49572:58;49664:4;49659:2;49651:6;49647:15;49640:29;49455:221;:::o;49682:122::-;49755:24;49773:5;49755:24;:::i;:::-;49748:5;49745:35;49735:63;;49794:1;49791;49784:12;49735:63;49682:122;:::o;49810:116::-;49880:21;49895:5;49880:21;:::i;:::-;49873:5;49870:32;49860:60;;49916:1;49913;49906:12;49860:60;49810:116;:::o;49932:120::-;50004:23;50021:5;50004:23;:::i;:::-;49997:5;49994:34;49984:62;;50042:1;50039;50032:12;49984:62;49932:120;:::o;50058:122::-;50131:24;50149:5;50131:24;:::i;:::-;50124:5;50121:35;50111:63;;50170:1;50167;50160:12;50111:63;50058:122;:::o
Swarm Source
ipfs://5752cef1b0be29b64e668a16957a5733db3e3f3433a46f5d832e213cfa775cff
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.