ERC-721
Overview
Max Total Supply
10,000 0xWOW
Holders
2,169
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 0xWOWLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
xwowContract
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-24 */ // 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) { 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; contract xwowContract is Ownable, ERC721A, ReentrancyGuard { mapping(address => uint256) private freeMintCountMap; uint256 public TotalTokenSize; uint256 public price; uint256 public MaxClaimToken; uint256 public MaxClaimTokenPerwallet; uint public ClaimPerTx; uint public MaxPerTx; bool public saleIsActive; constructor( uint256 maxBatchSize_, uint256 TotalToken_ ) ERC721A("0xWOW", "0xWOW", maxBatchSize_, TotalToken_) { MaxPerTx = maxBatchSize_; TotalTokenSize = TotalToken_; saleIsActive = true; price = 10000000000000000; MaxClaimToken = 1000; MaxClaimTokenPerwallet = 5; ClaimPerTx = 5; } /** SETTERS **/ function SetMaxperTxForClaim(uint _ClaimPerTx) external onlyOwner { ClaimPerTx = _ClaimPerTx; } function setMaxPerTx(uint _MaxPerTx) external onlyOwner { MaxPerTx = _MaxPerTx; } function setTotalTokenSize(uint _TotalToken) external onlyOwner { TotalTokenSize = _TotalToken; } function setprice(uint _price) external onlyOwner { price = _price; } function setMaxClaimToken(uint _MaxClaimToken) external onlyOwner { MaxClaimToken = _MaxClaimToken; } function SetSalesStart() public onlyOwner { saleIsActive = !saleIsActive; } function setOwnersExplicit(uint256 quantity) external onlyOwner nonReentrant { _setOwnersExplicit(quantity); } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } string private _baseAPIURI; function setBaseURI(string calldata baseURI) external onlyOwner { _baseAPIURI = baseURI; } /** GETTERS **/ function _baseURI() internal view virtual override returns (string memory) { return _baseAPIURI; } function getOwnershipData(uint256 tokenId) external view returns (TokenOwnership memory) { return ownershipOf(tokenId); } 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; } } function withdraw() external onlyOwner nonReentrant { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Transfer failed."); } function MintTo(address _to,uint256 mintamount) external onlyOwner { require(totalSupply() + mintamount <= TotalTokenSize, "Max token minted already"); _safeMint(_to, mintamount); } function Claim(uint256 mintamount) external payable { require(saleIsActive, "Sale is not started"); require(mintamount > 0 && mintamount <= ClaimPerTx, "Can not mint more than 5 token per tx"); require(freeMintCountMap[msg.sender] + mintamount <= MaxClaimTokenPerwallet, "Can not mint more than 5 token per wallet"); require(totalSupply() + mintamount <= MaxClaimToken, "Max token is minted already"); _safeMint(msg.sender, mintamount); freeMintCountMap[msg.sender] += mintamount; } function Mint(uint256 mintamount) external payable { require(saleIsActive, "Sale is not started"); require(totalSupply() + mintamount <= TotalTokenSize, "Max token is minted already"); require(mintamount > 0 && mintamount <= MaxPerTx, "Can not mint more than 20 token per tx"); require(msg.value >= price*mintamount, "Not paid enough ETH."); _safeMint(msg.sender, mintamount); } }
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":[{"internalType":"uint256","name":"mintamount","type":"uint256"}],"name":"Claim","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"ClaimPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxClaimToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxClaimTokenPerwallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintamount","type":"uint256"}],"name":"Mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"mintamount","type":"uint256"}],"name":"MintTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ClaimPerTx","type":"uint256"}],"name":"SetMaxperTxForClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SetSalesStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TotalTokenSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"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":"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":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","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":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"uint256","name":"_MaxClaimToken","type":"uint256"}],"name":"setMaxClaimToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MaxPerTx","type":"uint256"}],"name":"setMaxPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_TotalToken","type":"uint256"}],"name":"setTotalTokenSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setprice","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
60c0604052600060015560006008553480156200001b57600080fd5b5060405162005a4338038062005a43833981810160405281019062000041919062000394565b6040518060400160405280600581526020017f3078574f570000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f3078574f570000000000000000000000000000000000000000000000000000008152508383620000cf620000c36200020160201b60201c565b6200020960201b60201c565b6000811162000115576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200010c90620004c7565b60405180910390fd5b600082116200015b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200015290620004a5565b60405180910390fd5b836002908051906020019062000173929190620002cd565b5082600390805190602001906200018c929190620002cd565b508160a0818152505080608081815250505050505060016009819055508160108190555080600b819055506001601160006101000a81548160ff021916908315150217905550662386f26fc10000600c819055506103e8600d819055506005600e819055506005600f81905550505062000583565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002db9062000504565b90600052602060002090601f016020900481019282620002ff57600085556200034b565b82601f106200031a57805160ff19168380011785556200034b565b828001600101855582156200034b579182015b828111156200034a5782518255916020019190600101906200032d565b5b5090506200035a91906200035e565b5090565b5b80821115620003795760008160009055506001016200035f565b5090565b6000815190506200038e8162000569565b92915050565b60008060408385031215620003a857600080fd5b6000620003b8858286016200037d565b9250506020620003cb858286016200037d565b9150509250929050565b6000620003e4602783620004e9565b91507f455243373231413a206d61782062617463682073697a65206d7573742062652060008301527f6e6f6e7a65726f000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006200044c602e83620004e9565b91507f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008301527f6e6f6e7a65726f20737570706c790000000000000000000000000000000000006020830152604082019050919050565b60006020820190508181036000830152620004c081620003d5565b9050919050565b60006020820190508181036000830152620004e2816200043d565b9050919050565b600082825260208201905092915050565b6000819050919050565b600060028204905060018216806200051d57607f821691505b602082108114156200053457620005336200053a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6200057481620004fa565b81146200058057600080fd5b50565b60805160a051615485620005be60003960008181612c2e01528181612c5701526134220152600081816129b601526129ea01526154856000f3fe6080604052600436106102515760003560e01c806378b28d9111610139578063c6f6f216116100b6578063d7224ba01161007a578063d7224ba014610890578063dc33e681146108bb578063e6e1311b146108f8578063e985e9c514610923578063eb8d244414610960578063f2fde38b1461098b57610251565b8063c6f6f216146107ad578063c87b56dd146107d6578063d02d493714610813578063d31ce9681461083e578063d49f0fa51461086757610251565b806395d89b41116100fd57806395d89b41146106da578063a035b1fe14610705578063a22cb46514610730578063b470b11314610759578063b88d4fde1461078457610251565b806378b28d91146105f05780637bb2b3c1146106195780638462151c146106355780638da5cb5b146106725780639231ab2a1461069d57610251565b80633ccfd60b116101d25780635c5f40a7116101965780635c5f40a7146104e05780635d25f4ec1461050b5780636352211e1461053657806370a0823114610573578063715018a6146105b0578063784bd77f146105c757610251565b80633ccfd60b1461042357806342842e0e1461043a5780634f6ccce71461046357806354870bc6146104a057806355f804b3146104b757610251565b806318160ddd1161021957806318160ddd1461034057806323b872dd1461036b5780632ccee9be146103945780632d20fb60146103bd5780632f745c59146103e657610251565b806301ffc9a71461025657806306fdde031461029357806307883703146102be578063081812fc146102da578063095ea7b314610317575b600080fd5b34801561026257600080fd5b5061027d60048036038101906102789190613bfe565b6109b4565b60405161028a9190614a80565b60405180910390f35b34801561029f57600080fd5b506102a8610afe565b6040516102b59190614a9b565b60405180910390f35b6102d860048036038101906102d39190613c95565b610b90565b005b3480156102e657600080fd5b5061030160048036038101906102fc9190613c95565b610ce4565b60405161030e91906149f7565b60405180910390f35b34801561032357600080fd5b5061033e60048036038101906103399190613bc2565b610d69565b005b34801561034c57600080fd5b50610355610e82565b6040516103629190614ed8565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d9190613abc565b610e8c565b005b3480156103a057600080fd5b506103bb60048036038101906103b69190613bc2565b610e9c565b005b3480156103c957600080fd5b506103e460048036038101906103df9190613c95565b610f7d565b005b3480156103f257600080fd5b5061040d60048036038101906104089190613bc2565b61105b565b60405161041a9190614ed8565b60405180910390f35b34801561042f57600080fd5b50610438611259565b005b34801561044657600080fd5b50610461600480360381019061045c9190613abc565b6113da565b005b34801561046f57600080fd5b5061048a60048036038101906104859190613c95565b6113fa565b6040516104979190614ed8565b60405180910390f35b3480156104ac57600080fd5b506104b561144d565b005b3480156104c357600080fd5b506104de60048036038101906104d99190613c50565b6114f5565b005b3480156104ec57600080fd5b506104f5611587565b6040516105029190614ed8565b60405180910390f35b34801561051757600080fd5b5061052061158d565b60405161052d9190614ed8565b60405180910390f35b34801561054257600080fd5b5061055d60048036038101906105589190613c95565b611593565b60405161056a91906149f7565b60405180910390f35b34801561057f57600080fd5b5061059a60048036038101906105959190613a57565b6115a9565b6040516105a79190614ed8565b60405180910390f35b3480156105bc57600080fd5b506105c5611692565b005b3480156105d357600080fd5b506105ee60048036038101906105e99190613c95565b61171a565b005b3480156105fc57600080fd5b5061061760048036038101906106129190613c95565b6117a0565b005b610633600480360381019061062e9190613c95565b611826565b005b34801561064157600080fd5b5061065c60048036038101906106579190613a57565b611a0f565b6040516106699190614a5e565b60405180910390f35b34801561067e57600080fd5b50610687611b8b565b60405161069491906149f7565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf9190613c95565b611bb4565b6040516106d19190614ebd565b60405180910390f35b3480156106e657600080fd5b506106ef611bcc565b6040516106fc9190614a9b565b60405180910390f35b34801561071157600080fd5b5061071a611c5e565b6040516107279190614ed8565b60405180910390f35b34801561073c57600080fd5b5061075760048036038101906107529190613b86565b611c64565b005b34801561076557600080fd5b5061076e611de5565b60405161077b9190614ed8565b60405180910390f35b34801561079057600080fd5b506107ab60048036038101906107a69190613b0b565b611deb565b005b3480156107b957600080fd5b506107d460048036038101906107cf9190613c95565b611e47565b005b3480156107e257600080fd5b506107fd60048036038101906107f89190613c95565b611ecd565b60405161080a9190614a9b565b60405180910390f35b34801561081f57600080fd5b50610828611f74565b6040516108359190614ed8565b60405180910390f35b34801561084a57600080fd5b5061086560048036038101906108609190613c95565b611f7a565b005b34801561087357600080fd5b5061088e60048036038101906108899190613c95565b612000565b005b34801561089c57600080fd5b506108a5612086565b6040516108b29190614ed8565b60405180910390f35b3480156108c757600080fd5b506108e260048036038101906108dd9190613a57565b61208c565b6040516108ef9190614ed8565b60405180910390f35b34801561090457600080fd5b5061090d61209e565b60405161091a9190614ed8565b60405180910390f35b34801561092f57600080fd5b5061094a60048036038101906109459190613a80565b6120a4565b6040516109579190614a80565b60405180910390f35b34801561096c57600080fd5b50610975612138565b6040516109829190614a80565b60405180910390f35b34801561099757600080fd5b506109b260048036038101906109ad9190613a57565b61214b565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a7f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ae757507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610af75750610af682612243565b5b9050919050565b606060028054610b0d9061527a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b399061527a565b8015610b865780601f10610b5b57610100808354040283529160200191610b86565b820191906000526020600020905b815481529060010190602001808311610b6957829003601f168201915b5050505050905090565b601160009054906101000a900460ff16610bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd690614b9d565b60405180910390fd5b600b5481610beb610e82565b610bf59190615021565b1115610c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2d90614bbd565b60405180910390fd5b600081118015610c4857506010548111155b610c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7e90614c7d565b60405180910390fd5b80600c54610c9591906150a8565b341015610cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cce90614d1d565b60405180910390fd5b610ce133826122ad565b50565b6000610cef826122cb565b610d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2590614e7d565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7482611593565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddc90614d5d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e046122d9565b73ffffffffffffffffffffffffffffffffffffffff161480610e335750610e3281610e2d6122d9565b6120a4565b5b610e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6990614bdd565b60405180910390fd5b610e7d8383836122e1565b505050565b6000600154905090565b610e97838383612393565b505050565b610ea46122d9565b73ffffffffffffffffffffffffffffffffffffffff16610ec2611b8b565b73ffffffffffffffffffffffffffffffffffffffff1614610f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0f90614c9d565b60405180910390fd5b600b5481610f24610e82565b610f2e9190615021565b1115610f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6690614b7d565b60405180910390fd5b610f7982826122ad565b5050565b610f856122d9565b73ffffffffffffffffffffffffffffffffffffffff16610fa3611b8b565b73ffffffffffffffffffffffffffffffffffffffff1614610ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff090614c9d565b60405180910390fd5b6002600954141561103f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103690614e3d565b60405180910390fd5b60026009819055506110508161294c565b600160098190555050565b6000611066836115a9565b82106110a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109e90614abd565b60405180910390fd5b60006110b1610e82565b905060008060005b83811015611217576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146111ab57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561120357868414156111f4578195505050505050611253565b83806111ff906152ac565b9450505b50808061120f906152ac565b9150506110b9565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a90614dfd565b60405180910390fd5b92915050565b6112616122d9565b73ffffffffffffffffffffffffffffffffffffffff1661127f611b8b565b73ffffffffffffffffffffffffffffffffffffffff16146112d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cc90614c9d565b60405180910390fd5b6002600954141561131b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131290614e3d565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611349906149e2565b60006040518083038185875af1925050503d8060008114611386576040519150601f19603f3d011682016040523d82523d6000602084013e61138b565b606091505b50509050806113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c690614d7d565b60405180910390fd5b506001600981905550565b6113f583838360405180602001604052806000815250611deb565b505050565b6000611404610e82565b8210611445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143c90614b1d565b60405180910390fd5b819050919050565b6114556122d9565b73ffffffffffffffffffffffffffffffffffffffff16611473611b8b565b73ffffffffffffffffffffffffffffffffffffffff16146114c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c090614c9d565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b6114fd6122d9565b73ffffffffffffffffffffffffffffffffffffffff1661151b611b8b565b73ffffffffffffffffffffffffffffffffffffffff1614611571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156890614c9d565b60405180910390fd5b81816012919061158292919061385f565b505050565b600e5481565b60105481565b600061159e82612bda565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190614c3d565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61169a6122d9565b73ffffffffffffffffffffffffffffffffffffffff166116b8611b8b565b73ffffffffffffffffffffffffffffffffffffffff161461170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170590614c9d565b60405180910390fd5b6117186000612ddd565b565b6117226122d9565b73ffffffffffffffffffffffffffffffffffffffff16611740611b8b565b73ffffffffffffffffffffffffffffffffffffffff1614611796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178d90614c9d565b60405180910390fd5b80600b8190555050565b6117a86122d9565b73ffffffffffffffffffffffffffffffffffffffff166117c6611b8b565b73ffffffffffffffffffffffffffffffffffffffff161461181c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181390614c9d565b60405180910390fd5b80600d8190555050565b601160009054906101000a900460ff16611875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186c90614b9d565b60405180910390fd5b6000811180156118875750600f548111155b6118c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bd90614c1d565b60405180910390fd5b600e5481600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119149190615021565b1115611955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194c90614d3d565b60405180910390fd5b600d5481611961610e82565b61196b9190615021565b11156119ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a390614bbd565b60405180910390fd5b6119b633826122ad565b80600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a059190615021565b9250508190555050565b60606000611a1c836115a9565b90506000811415611a9f57600067ffffffffffffffff811115611a68577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611a965781602001602082028036833780820191505090505b50915050611b86565b60008167ffffffffffffffff811115611ae1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611b0f5781602001602082028036833780820191505090505b50905060005b82811015611b7f57611b27858261105b565b828281518110611b60577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080611b77906152ac565b915050611b15565b8193505050505b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611bbc6138e5565b611bc582612bda565b9050919050565b606060038054611bdb9061527a565b80601f0160208091040260200160405190810160405280929190818152602001828054611c079061527a565b8015611c545780601f10611c2957610100808354040283529160200191611c54565b820191906000526020600020905b815481529060010190602001808311611c3757829003601f168201915b5050505050905090565b600c5481565b611c6c6122d9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd190614cdd565b60405180910390fd5b8060076000611ce76122d9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611d946122d9565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611dd99190614a80565b60405180910390a35050565b600f5481565b611df6848484612393565b611e0284848484612ea1565b611e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3890614d9d565b60405180910390fd5b50505050565b611e4f6122d9565b73ffffffffffffffffffffffffffffffffffffffff16611e6d611b8b565b73ffffffffffffffffffffffffffffffffffffffff1614611ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eba90614c9d565b60405180910390fd5b8060108190555050565b6060611ed8826122cb565b611f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0e90614cbd565b60405180910390fd5b6000611f21613038565b90506000815111611f415760405180602001604052806000815250611f6c565b80611f4b846130ca565b604051602001611f5c9291906149be565b6040516020818303038152906040525b915050919050565b600b5481565b611f826122d9565b73ffffffffffffffffffffffffffffffffffffffff16611fa0611b8b565b73ffffffffffffffffffffffffffffffffffffffff1614611ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fed90614c9d565b60405180910390fd5b80600f8190555050565b6120086122d9565b73ffffffffffffffffffffffffffffffffffffffff16612026611b8b565b73ffffffffffffffffffffffffffffffffffffffff161461207c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207390614c9d565b60405180910390fd5b80600c8190555050565b60085481565b600061209782613277565b9050919050565b600d5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601160009054906101000a900460ff1681565b6121536122d9565b73ffffffffffffffffffffffffffffffffffffffff16612171611b8b565b73ffffffffffffffffffffffffffffffffffffffff16146121c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121be90614c9d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e90614add565b60405180910390fd5b61224081612ddd565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6122c7828260405180602001604052806000815250613360565b5050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061239e82612bda565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166123c56122d9565b73ffffffffffffffffffffffffffffffffffffffff16148061242157506123ea6122d9565b73ffffffffffffffffffffffffffffffffffffffff1661240984610ce4565b73ffffffffffffffffffffffffffffffffffffffff16145b8061243d575061243c82600001516124376122d9565b6120a4565b5b90508061247f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247690614cfd565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146124f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e890614c5d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255890614b3d565b60405180910390fd5b61256e8585856001613840565b61257e60008484600001516122e1565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166125ec9190615102565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166126909190614fdb565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846127969190615021565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156128dc5761280c816122cb565b156128db576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129448686866001613846565b505050505050565b6000600854905060008211612996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298d90614bfd565b60405180910390fd5b6000600183836129a69190615021565b6129b09190615136565b905060017f00000000000000000000000000000000000000000000000000000000000000006129df9190615136565b811115612a165760017f0000000000000000000000000000000000000000000000000000000000000000612a139190615136565b90505b612a1f816122cb565b612a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5590614e1d565b60405180910390fd5b60008290505b818111612bc157600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612bae576000612ae182612bda565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612bb9906152ac565b915050612a64565b50600181612bcf9190615021565b600881905550505050565b612be26138e5565b612beb826122cb565b612c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2190614afd565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612c8e5760017f000000000000000000000000000000000000000000000000000000000000000084612c819190615136565b612c8b9190615021565b90505b60008390505b818110612d9c576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612d8857809350505050612dd8565b508080612d9490615250565b915050612c94565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dcf90614e5d565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612ec28473ffffffffffffffffffffffffffffffffffffffff1661384c565b1561302b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612eeb6122d9565b8786866040518563ffffffff1660e01b8152600401612f0d9493929190614a12565b602060405180830381600087803b158015612f2757600080fd5b505af1925050508015612f5857506040513d601f19601f82011682018060405250810190612f559190613c27565b60015b612fdb573d8060008114612f88576040519150601f19603f3d011682016040523d82523d6000602084013e612f8d565b606091505b50600081511415612fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fca90614d9d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613030565b600190505b949350505050565b6060601280546130479061527a565b80601f01602080910402602001604051908101604052809291908181526020018280546130739061527a565b80156130c05780601f10613095576101008083540402835291602001916130c0565b820191906000526020600020905b8154815290600101906020018083116130a357829003601f168201915b5050505050905090565b60606000821415613112576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613272565b600082905060005b6000821461314457808061312d906152ac565b915050600a8261313d9190615077565b915061311a565b60008167ffffffffffffffff811115613186577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156131b85781602001600182028036833780820191505090505b5090505b6000851461326b576001826131d19190615136565b9150600a856131e091906152f5565b60306131ec9190615021565b60f81b818381518110613228577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132649190615077565b94506131bc565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132df90614b5d565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156133d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ce90614ddd565b60405180910390fd5b6133e0816122cb565b15613420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341790614dbd565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115613483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347a90614e9d565b60405180910390fd5b6134906000858386613840565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161358d9190614fdb565b6fffffffffffffffffffffffffffffffff1681526020018583602001516135b49190614fdb565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561382357818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46137c36000888488612ea1565b613802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f990614d9d565b60405180910390fd5b818061380d906152ac565b925050808061381b906152ac565b915050613752565b50806001819055506138386000878588613846565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b82805461386b9061527a565b90600052602060002090601f01602090048101928261388d57600085556138d4565b82601f106138a657803560ff19168380011785556138d4565b828001600101855582156138d4579182015b828111156138d35782358255916020019190600101906138b8565b5b5090506138e1919061391f565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613938576000816000905550600101613920565b5090565b600061394f61394a84614f24565b614ef3565b90508281526020810184848401111561396757600080fd5b61397284828561520e565b509392505050565b600081359050613989816153f3565b92915050565b60008135905061399e8161540a565b92915050565b6000813590506139b381615421565b92915050565b6000815190506139c881615421565b92915050565b600082601f8301126139df57600080fd5b81356139ef84826020860161393c565b91505092915050565b60008083601f840112613a0a57600080fd5b8235905067ffffffffffffffff811115613a2357600080fd5b602083019150836001820283011115613a3b57600080fd5b9250929050565b600081359050613a5181615438565b92915050565b600060208284031215613a6957600080fd5b6000613a778482850161397a565b91505092915050565b60008060408385031215613a9357600080fd5b6000613aa18582860161397a565b9250506020613ab28582860161397a565b9150509250929050565b600080600060608486031215613ad157600080fd5b6000613adf8682870161397a565b9350506020613af08682870161397a565b9250506040613b0186828701613a42565b9150509250925092565b60008060008060808587031215613b2157600080fd5b6000613b2f8782880161397a565b9450506020613b408782880161397a565b9350506040613b5187828801613a42565b925050606085013567ffffffffffffffff811115613b6e57600080fd5b613b7a878288016139ce565b91505092959194509250565b60008060408385031215613b9957600080fd5b6000613ba78582860161397a565b9250506020613bb88582860161398f565b9150509250929050565b60008060408385031215613bd557600080fd5b6000613be38582860161397a565b9250506020613bf485828601613a42565b9150509250929050565b600060208284031215613c1057600080fd5b6000613c1e848285016139a4565b91505092915050565b600060208284031215613c3957600080fd5b6000613c47848285016139b9565b91505092915050565b60008060208385031215613c6357600080fd5b600083013567ffffffffffffffff811115613c7d57600080fd5b613c89858286016139f8565b92509250509250929050565b600060208284031215613ca757600080fd5b6000613cb584828501613a42565b91505092915050565b6000613cca8383614991565b60208301905092915050565b613cdf8161516a565b82525050565b613cee8161516a565b82525050565b6000613cff82614f64565b613d098185614f92565b9350613d1483614f54565b8060005b83811015613d45578151613d2c8882613cbe565b9750613d3783614f85565b925050600181019050613d18565b5085935050505092915050565b613d5b8161517c565b82525050565b6000613d6c82614f6f565b613d768185614fa3565b9350613d8681856020860161521d565b613d8f816153e2565b840191505092915050565b6000613da582614f7a565b613daf8185614fbf565b9350613dbf81856020860161521d565b613dc8816153e2565b840191505092915050565b6000613dde82614f7a565b613de88185614fd0565b9350613df881856020860161521d565b80840191505092915050565b6000613e11602283614fbf565b91507f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e77602683614fbf565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613edd602a83614fbf565b91507f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008301527f74656e7420746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f43602383614fbf565b91507f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008301527f6e647300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613fa9602583614fbf565b91507f455243373231413a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061400f603183614fbf565b91507f455243373231413a206e756d626572206d696e74656420717565727920666f7260008301527f20746865207a65726f20616464726573730000000000000000000000000000006020830152604082019050919050565b6000614075601883614fbf565b91507f4d617820746f6b656e206d696e74656420616c726561647900000000000000006000830152602082019050919050565b60006140b5601383614fbf565b91507f53616c65206973206e6f742073746172746564000000000000000000000000006000830152602082019050919050565b60006140f5601b83614fbf565b91507f4d617820746f6b656e206973206d696e74656420616c726561647900000000006000830152602082019050919050565b6000614135603983614fbf565b91507f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006020830152604082019050919050565b600061419b601883614fbf565b91507f7175616e74697479206d757374206265206e6f6e7a65726f00000000000000006000830152602082019050919050565b60006141db602583614fbf565b91507f43616e206e6f74206d696e74206d6f7265207468616e203520746f6b656e207060008301527f65722074780000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614241602b83614fbf565b91507f455243373231413a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b60006142a7602683614fbf565b91507f455243373231413a207472616e736665722066726f6d20696e636f727265637460008301527f206f776e657200000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061430d602683614fbf565b91507f43616e206e6f74206d696e74206d6f7265207468616e20323020746f6b656e2060008301527f70657220747800000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614373602083614fbf565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006143b3602f83614fbf565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000614419601a83614fbf565b91507f455243373231413a20617070726f766520746f2063616c6c65720000000000006000830152602082019050919050565b6000614459603283614fbf565b91507f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b60006144bf601483614fbf565b91507f4e6f74207061696420656e6f756768204554482e0000000000000000000000006000830152602082019050919050565b60006144ff602983614fbf565b91507f43616e206e6f74206d696e74206d6f7265207468616e203520746f6b656e207060008301527f65722077616c6c657400000000000000000000000000000000000000000000006020830152604082019050919050565b6000614565602283614fbf565b91507f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145cb600083614fb4565b9150600082019050919050565b60006145e5601083614fbf565b91507f5472616e73666572206661696c65642e000000000000000000000000000000006000830152602082019050919050565b6000614625603383614fbf565b91507f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008301527f6563656976657220696d706c656d656e746572000000000000000000000000006020830152604082019050919050565b600061468b601d83614fbf565b91507f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006000830152602082019050919050565b60006146cb602183614fbf565b91507f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614731602e83614fbf565b91507f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008301527f6f776e657220627920696e6465780000000000000000000000000000000000006020830152604082019050919050565b6000614797602683614fbf565b91507f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008301527f6c65616e757000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006147fd601f83614fbf565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b600061483d602f83614fbf565b91507f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008301527f206f776e6572206f6620746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006148a3602d83614fbf565b91507f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008301527f78697374656e7420746f6b656e000000000000000000000000000000000000006020830152604082019050919050565b6000614909602283614fbf565b91507f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008301527f67680000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6040820160008201516149786000850182613cd6565b50602082015161498b60208501826149af565b50505050565b61499a816151f0565b82525050565b6149a9816151f0565b82525050565b6149b8816151fa565b82525050565b60006149ca8285613dd3565b91506149d68284613dd3565b91508190509392505050565b60006149ed826145be565b9150819050919050565b6000602082019050614a0c6000830184613ce5565b92915050565b6000608082019050614a276000830187613ce5565b614a346020830186613ce5565b614a4160408301856149a0565b8181036060830152614a538184613d61565b905095945050505050565b60006020820190508181036000830152614a788184613cf4565b905092915050565b6000602082019050614a956000830184613d52565b92915050565b60006020820190508181036000830152614ab58184613d9a565b905092915050565b60006020820190508181036000830152614ad681613e04565b9050919050565b60006020820190508181036000830152614af681613e6a565b9050919050565b60006020820190508181036000830152614b1681613ed0565b9050919050565b60006020820190508181036000830152614b3681613f36565b9050919050565b60006020820190508181036000830152614b5681613f9c565b9050919050565b60006020820190508181036000830152614b7681614002565b9050919050565b60006020820190508181036000830152614b9681614068565b9050919050565b60006020820190508181036000830152614bb6816140a8565b9050919050565b60006020820190508181036000830152614bd6816140e8565b9050919050565b60006020820190508181036000830152614bf681614128565b9050919050565b60006020820190508181036000830152614c168161418e565b9050919050565b60006020820190508181036000830152614c36816141ce565b9050919050565b60006020820190508181036000830152614c5681614234565b9050919050565b60006020820190508181036000830152614c768161429a565b9050919050565b60006020820190508181036000830152614c9681614300565b9050919050565b60006020820190508181036000830152614cb681614366565b9050919050565b60006020820190508181036000830152614cd6816143a6565b9050919050565b60006020820190508181036000830152614cf68161440c565b9050919050565b60006020820190508181036000830152614d168161444c565b9050919050565b60006020820190508181036000830152614d36816144b2565b9050919050565b60006020820190508181036000830152614d56816144f2565b9050919050565b60006020820190508181036000830152614d7681614558565b9050919050565b60006020820190508181036000830152614d96816145d8565b9050919050565b60006020820190508181036000830152614db681614618565b9050919050565b60006020820190508181036000830152614dd68161467e565b9050919050565b60006020820190508181036000830152614df6816146be565b9050919050565b60006020820190508181036000830152614e1681614724565b9050919050565b60006020820190508181036000830152614e368161478a565b9050919050565b60006020820190508181036000830152614e56816147f0565b9050919050565b60006020820190508181036000830152614e7681614830565b9050919050565b60006020820190508181036000830152614e9681614896565b9050919050565b60006020820190508181036000830152614eb6816148fc565b9050919050565b6000604082019050614ed26000830184614962565b92915050565b6000602082019050614eed60008301846149a0565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614f1a57614f196153b3565b5b8060405250919050565b600067ffffffffffffffff821115614f3f57614f3e6153b3565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fe6826151b4565b9150614ff1836151b4565b9250826fffffffffffffffffffffffffffffffff0382111561501657615015615326565b5b828201905092915050565b600061502c826151f0565b9150615037836151f0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561506c5761506b615326565b5b828201905092915050565b6000615082826151f0565b915061508d836151f0565b92508261509d5761509c615355565b5b828204905092915050565b60006150b3826151f0565b91506150be836151f0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150f7576150f6615326565b5b828202905092915050565b600061510d826151b4565b9150615118836151b4565b92508282101561512b5761512a615326565b5b828203905092915050565b6000615141826151f0565b915061514c836151f0565b92508282101561515f5761515e615326565b5b828203905092915050565b6000615175826151d0565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561523b578082015181840152602081019050615220565b8381111561524a576000848401525b50505050565b600061525b826151f0565b9150600082141561526f5761526e615326565b5b600182039050919050565b6000600282049050600182168061529257607f821691505b602082108114156152a6576152a5615384565b5b50919050565b60006152b7826151f0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152ea576152e9615326565b5b600182019050919050565b6000615300826151f0565b915061530b836151f0565b92508261531b5761531a615355565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6153fc8161516a565b811461540757600080fd5b50565b6154138161517c565b811461541e57600080fd5b50565b61542a81615188565b811461543557600080fd5b50565b615441816151f0565b811461544c57600080fd5b5056fea2646970667358221220155ed11a7c94f2b2e1fb061bc166df660f88db41405e54e8b46603e52a003e8964736f6c6343000800003300000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000002710
Deployed Bytecode
0x6080604052600436106102515760003560e01c806378b28d9111610139578063c6f6f216116100b6578063d7224ba01161007a578063d7224ba014610890578063dc33e681146108bb578063e6e1311b146108f8578063e985e9c514610923578063eb8d244414610960578063f2fde38b1461098b57610251565b8063c6f6f216146107ad578063c87b56dd146107d6578063d02d493714610813578063d31ce9681461083e578063d49f0fa51461086757610251565b806395d89b41116100fd57806395d89b41146106da578063a035b1fe14610705578063a22cb46514610730578063b470b11314610759578063b88d4fde1461078457610251565b806378b28d91146105f05780637bb2b3c1146106195780638462151c146106355780638da5cb5b146106725780639231ab2a1461069d57610251565b80633ccfd60b116101d25780635c5f40a7116101965780635c5f40a7146104e05780635d25f4ec1461050b5780636352211e1461053657806370a0823114610573578063715018a6146105b0578063784bd77f146105c757610251565b80633ccfd60b1461042357806342842e0e1461043a5780634f6ccce71461046357806354870bc6146104a057806355f804b3146104b757610251565b806318160ddd1161021957806318160ddd1461034057806323b872dd1461036b5780632ccee9be146103945780632d20fb60146103bd5780632f745c59146103e657610251565b806301ffc9a71461025657806306fdde031461029357806307883703146102be578063081812fc146102da578063095ea7b314610317575b600080fd5b34801561026257600080fd5b5061027d60048036038101906102789190613bfe565b6109b4565b60405161028a9190614a80565b60405180910390f35b34801561029f57600080fd5b506102a8610afe565b6040516102b59190614a9b565b60405180910390f35b6102d860048036038101906102d39190613c95565b610b90565b005b3480156102e657600080fd5b5061030160048036038101906102fc9190613c95565b610ce4565b60405161030e91906149f7565b60405180910390f35b34801561032357600080fd5b5061033e60048036038101906103399190613bc2565b610d69565b005b34801561034c57600080fd5b50610355610e82565b6040516103629190614ed8565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d9190613abc565b610e8c565b005b3480156103a057600080fd5b506103bb60048036038101906103b69190613bc2565b610e9c565b005b3480156103c957600080fd5b506103e460048036038101906103df9190613c95565b610f7d565b005b3480156103f257600080fd5b5061040d60048036038101906104089190613bc2565b61105b565b60405161041a9190614ed8565b60405180910390f35b34801561042f57600080fd5b50610438611259565b005b34801561044657600080fd5b50610461600480360381019061045c9190613abc565b6113da565b005b34801561046f57600080fd5b5061048a60048036038101906104859190613c95565b6113fa565b6040516104979190614ed8565b60405180910390f35b3480156104ac57600080fd5b506104b561144d565b005b3480156104c357600080fd5b506104de60048036038101906104d99190613c50565b6114f5565b005b3480156104ec57600080fd5b506104f5611587565b6040516105029190614ed8565b60405180910390f35b34801561051757600080fd5b5061052061158d565b60405161052d9190614ed8565b60405180910390f35b34801561054257600080fd5b5061055d60048036038101906105589190613c95565b611593565b60405161056a91906149f7565b60405180910390f35b34801561057f57600080fd5b5061059a60048036038101906105959190613a57565b6115a9565b6040516105a79190614ed8565b60405180910390f35b3480156105bc57600080fd5b506105c5611692565b005b3480156105d357600080fd5b506105ee60048036038101906105e99190613c95565b61171a565b005b3480156105fc57600080fd5b5061061760048036038101906106129190613c95565b6117a0565b005b610633600480360381019061062e9190613c95565b611826565b005b34801561064157600080fd5b5061065c60048036038101906106579190613a57565b611a0f565b6040516106699190614a5e565b60405180910390f35b34801561067e57600080fd5b50610687611b8b565b60405161069491906149f7565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf9190613c95565b611bb4565b6040516106d19190614ebd565b60405180910390f35b3480156106e657600080fd5b506106ef611bcc565b6040516106fc9190614a9b565b60405180910390f35b34801561071157600080fd5b5061071a611c5e565b6040516107279190614ed8565b60405180910390f35b34801561073c57600080fd5b5061075760048036038101906107529190613b86565b611c64565b005b34801561076557600080fd5b5061076e611de5565b60405161077b9190614ed8565b60405180910390f35b34801561079057600080fd5b506107ab60048036038101906107a69190613b0b565b611deb565b005b3480156107b957600080fd5b506107d460048036038101906107cf9190613c95565b611e47565b005b3480156107e257600080fd5b506107fd60048036038101906107f89190613c95565b611ecd565b60405161080a9190614a9b565b60405180910390f35b34801561081f57600080fd5b50610828611f74565b6040516108359190614ed8565b60405180910390f35b34801561084a57600080fd5b5061086560048036038101906108609190613c95565b611f7a565b005b34801561087357600080fd5b5061088e60048036038101906108899190613c95565b612000565b005b34801561089c57600080fd5b506108a5612086565b6040516108b29190614ed8565b60405180910390f35b3480156108c757600080fd5b506108e260048036038101906108dd9190613a57565b61208c565b6040516108ef9190614ed8565b60405180910390f35b34801561090457600080fd5b5061090d61209e565b60405161091a9190614ed8565b60405180910390f35b34801561092f57600080fd5b5061094a60048036038101906109459190613a80565b6120a4565b6040516109579190614a80565b60405180910390f35b34801561096c57600080fd5b50610975612138565b6040516109829190614a80565b60405180910390f35b34801561099757600080fd5b506109b260048036038101906109ad9190613a57565b61214b565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a7f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ae757507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610af75750610af682612243565b5b9050919050565b606060028054610b0d9061527a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b399061527a565b8015610b865780601f10610b5b57610100808354040283529160200191610b86565b820191906000526020600020905b815481529060010190602001808311610b6957829003601f168201915b5050505050905090565b601160009054906101000a900460ff16610bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd690614b9d565b60405180910390fd5b600b5481610beb610e82565b610bf59190615021565b1115610c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2d90614bbd565b60405180910390fd5b600081118015610c4857506010548111155b610c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7e90614c7d565b60405180910390fd5b80600c54610c9591906150a8565b341015610cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cce90614d1d565b60405180910390fd5b610ce133826122ad565b50565b6000610cef826122cb565b610d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2590614e7d565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d7482611593565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddc90614d5d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e046122d9565b73ffffffffffffffffffffffffffffffffffffffff161480610e335750610e3281610e2d6122d9565b6120a4565b5b610e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6990614bdd565b60405180910390fd5b610e7d8383836122e1565b505050565b6000600154905090565b610e97838383612393565b505050565b610ea46122d9565b73ffffffffffffffffffffffffffffffffffffffff16610ec2611b8b565b73ffffffffffffffffffffffffffffffffffffffff1614610f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0f90614c9d565b60405180910390fd5b600b5481610f24610e82565b610f2e9190615021565b1115610f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6690614b7d565b60405180910390fd5b610f7982826122ad565b5050565b610f856122d9565b73ffffffffffffffffffffffffffffffffffffffff16610fa3611b8b565b73ffffffffffffffffffffffffffffffffffffffff1614610ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff090614c9d565b60405180910390fd5b6002600954141561103f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103690614e3d565b60405180910390fd5b60026009819055506110508161294c565b600160098190555050565b6000611066836115a9565b82106110a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109e90614abd565b60405180910390fd5b60006110b1610e82565b905060008060005b83811015611217576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146111ab57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561120357868414156111f4578195505050505050611253565b83806111ff906152ac565b9450505b50808061120f906152ac565b9150506110b9565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a90614dfd565b60405180910390fd5b92915050565b6112616122d9565b73ffffffffffffffffffffffffffffffffffffffff1661127f611b8b565b73ffffffffffffffffffffffffffffffffffffffff16146112d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cc90614c9d565b60405180910390fd5b6002600954141561131b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131290614e3d565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611349906149e2565b60006040518083038185875af1925050503d8060008114611386576040519150601f19603f3d011682016040523d82523d6000602084013e61138b565b606091505b50509050806113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c690614d7d565b60405180910390fd5b506001600981905550565b6113f583838360405180602001604052806000815250611deb565b505050565b6000611404610e82565b8210611445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143c90614b1d565b60405180910390fd5b819050919050565b6114556122d9565b73ffffffffffffffffffffffffffffffffffffffff16611473611b8b565b73ffffffffffffffffffffffffffffffffffffffff16146114c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c090614c9d565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b6114fd6122d9565b73ffffffffffffffffffffffffffffffffffffffff1661151b611b8b565b73ffffffffffffffffffffffffffffffffffffffff1614611571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156890614c9d565b60405180910390fd5b81816012919061158292919061385f565b505050565b600e5481565b60105481565b600061159e82612bda565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190614c3d565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61169a6122d9565b73ffffffffffffffffffffffffffffffffffffffff166116b8611b8b565b73ffffffffffffffffffffffffffffffffffffffff161461170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170590614c9d565b60405180910390fd5b6117186000612ddd565b565b6117226122d9565b73ffffffffffffffffffffffffffffffffffffffff16611740611b8b565b73ffffffffffffffffffffffffffffffffffffffff1614611796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178d90614c9d565b60405180910390fd5b80600b8190555050565b6117a86122d9565b73ffffffffffffffffffffffffffffffffffffffff166117c6611b8b565b73ffffffffffffffffffffffffffffffffffffffff161461181c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181390614c9d565b60405180910390fd5b80600d8190555050565b601160009054906101000a900460ff16611875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186c90614b9d565b60405180910390fd5b6000811180156118875750600f548111155b6118c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bd90614c1d565b60405180910390fd5b600e5481600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119149190615021565b1115611955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194c90614d3d565b60405180910390fd5b600d5481611961610e82565b61196b9190615021565b11156119ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a390614bbd565b60405180910390fd5b6119b633826122ad565b80600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a059190615021565b9250508190555050565b60606000611a1c836115a9565b90506000811415611a9f57600067ffffffffffffffff811115611a68577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611a965781602001602082028036833780820191505090505b50915050611b86565b60008167ffffffffffffffff811115611ae1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611b0f5781602001602082028036833780820191505090505b50905060005b82811015611b7f57611b27858261105b565b828281518110611b60577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080611b77906152ac565b915050611b15565b8193505050505b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611bbc6138e5565b611bc582612bda565b9050919050565b606060038054611bdb9061527a565b80601f0160208091040260200160405190810160405280929190818152602001828054611c079061527a565b8015611c545780601f10611c2957610100808354040283529160200191611c54565b820191906000526020600020905b815481529060010190602001808311611c3757829003601f168201915b5050505050905090565b600c5481565b611c6c6122d9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd190614cdd565b60405180910390fd5b8060076000611ce76122d9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611d946122d9565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611dd99190614a80565b60405180910390a35050565b600f5481565b611df6848484612393565b611e0284848484612ea1565b611e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3890614d9d565b60405180910390fd5b50505050565b611e4f6122d9565b73ffffffffffffffffffffffffffffffffffffffff16611e6d611b8b565b73ffffffffffffffffffffffffffffffffffffffff1614611ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eba90614c9d565b60405180910390fd5b8060108190555050565b6060611ed8826122cb565b611f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0e90614cbd565b60405180910390fd5b6000611f21613038565b90506000815111611f415760405180602001604052806000815250611f6c565b80611f4b846130ca565b604051602001611f5c9291906149be565b6040516020818303038152906040525b915050919050565b600b5481565b611f826122d9565b73ffffffffffffffffffffffffffffffffffffffff16611fa0611b8b565b73ffffffffffffffffffffffffffffffffffffffff1614611ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fed90614c9d565b60405180910390fd5b80600f8190555050565b6120086122d9565b73ffffffffffffffffffffffffffffffffffffffff16612026611b8b565b73ffffffffffffffffffffffffffffffffffffffff161461207c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207390614c9d565b60405180910390fd5b80600c8190555050565b60085481565b600061209782613277565b9050919050565b600d5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601160009054906101000a900460ff1681565b6121536122d9565b73ffffffffffffffffffffffffffffffffffffffff16612171611b8b565b73ffffffffffffffffffffffffffffffffffffffff16146121c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121be90614c9d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e90614add565b60405180910390fd5b61224081612ddd565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6122c7828260405180602001604052806000815250613360565b5050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061239e82612bda565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166123c56122d9565b73ffffffffffffffffffffffffffffffffffffffff16148061242157506123ea6122d9565b73ffffffffffffffffffffffffffffffffffffffff1661240984610ce4565b73ffffffffffffffffffffffffffffffffffffffff16145b8061243d575061243c82600001516124376122d9565b6120a4565b5b90508061247f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247690614cfd565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146124f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e890614c5d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255890614b3d565b60405180910390fd5b61256e8585856001613840565b61257e60008484600001516122e1565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166125ec9190615102565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166126909190614fdb565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846127969190615021565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156128dc5761280c816122cb565b156128db576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129448686866001613846565b505050505050565b6000600854905060008211612996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298d90614bfd565b60405180910390fd5b6000600183836129a69190615021565b6129b09190615136565b905060017f00000000000000000000000000000000000000000000000000000000000027106129df9190615136565b811115612a165760017f0000000000000000000000000000000000000000000000000000000000002710612a139190615136565b90505b612a1f816122cb565b612a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5590614e1d565b60405180910390fd5b60008290505b818111612bc157600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612bae576000612ae182612bda565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612bb9906152ac565b915050612a64565b50600181612bcf9190615021565b600881905550505050565b612be26138e5565b612beb826122cb565b612c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2190614afd565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000148310612c8e5760017f000000000000000000000000000000000000000000000000000000000000001484612c819190615136565b612c8b9190615021565b90505b60008390505b818110612d9c576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612d8857809350505050612dd8565b508080612d9490615250565b915050612c94565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dcf90614e5d565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612ec28473ffffffffffffffffffffffffffffffffffffffff1661384c565b1561302b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612eeb6122d9565b8786866040518563ffffffff1660e01b8152600401612f0d9493929190614a12565b602060405180830381600087803b158015612f2757600080fd5b505af1925050508015612f5857506040513d601f19601f82011682018060405250810190612f559190613c27565b60015b612fdb573d8060008114612f88576040519150601f19603f3d011682016040523d82523d6000602084013e612f8d565b606091505b50600081511415612fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fca90614d9d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613030565b600190505b949350505050565b6060601280546130479061527a565b80601f01602080910402602001604051908101604052809291908181526020018280546130739061527a565b80156130c05780601f10613095576101008083540402835291602001916130c0565b820191906000526020600020905b8154815290600101906020018083116130a357829003601f168201915b5050505050905090565b60606000821415613112576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613272565b600082905060005b6000821461314457808061312d906152ac565b915050600a8261313d9190615077565b915061311a565b60008167ffffffffffffffff811115613186577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156131b85781602001600182028036833780820191505090505b5090505b6000851461326b576001826131d19190615136565b9150600a856131e091906152f5565b60306131ec9190615021565b60f81b818381518110613228577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132649190615077565b94506131bc565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132df90614b5d565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156133d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ce90614ddd565b60405180910390fd5b6133e0816122cb565b15613420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341790614dbd565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000014831115613483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347a90614e9d565b60405180910390fd5b6134906000858386613840565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161358d9190614fdb565b6fffffffffffffffffffffffffffffffff1681526020018583602001516135b49190614fdb565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561382357818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46137c36000888488612ea1565b613802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f990614d9d565b60405180910390fd5b818061380d906152ac565b925050808061381b906152ac565b915050613752565b50806001819055506138386000878588613846565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b82805461386b9061527a565b90600052602060002090601f01602090048101928261388d57600085556138d4565b82601f106138a657803560ff19168380011785556138d4565b828001600101855582156138d4579182015b828111156138d35782358255916020019190600101906138b8565b5b5090506138e1919061391f565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613938576000816000905550600101613920565b5090565b600061394f61394a84614f24565b614ef3565b90508281526020810184848401111561396757600080fd5b61397284828561520e565b509392505050565b600081359050613989816153f3565b92915050565b60008135905061399e8161540a565b92915050565b6000813590506139b381615421565b92915050565b6000815190506139c881615421565b92915050565b600082601f8301126139df57600080fd5b81356139ef84826020860161393c565b91505092915050565b60008083601f840112613a0a57600080fd5b8235905067ffffffffffffffff811115613a2357600080fd5b602083019150836001820283011115613a3b57600080fd5b9250929050565b600081359050613a5181615438565b92915050565b600060208284031215613a6957600080fd5b6000613a778482850161397a565b91505092915050565b60008060408385031215613a9357600080fd5b6000613aa18582860161397a565b9250506020613ab28582860161397a565b9150509250929050565b600080600060608486031215613ad157600080fd5b6000613adf8682870161397a565b9350506020613af08682870161397a565b9250506040613b0186828701613a42565b9150509250925092565b60008060008060808587031215613b2157600080fd5b6000613b2f8782880161397a565b9450506020613b408782880161397a565b9350506040613b5187828801613a42565b925050606085013567ffffffffffffffff811115613b6e57600080fd5b613b7a878288016139ce565b91505092959194509250565b60008060408385031215613b9957600080fd5b6000613ba78582860161397a565b9250506020613bb88582860161398f565b9150509250929050565b60008060408385031215613bd557600080fd5b6000613be38582860161397a565b9250506020613bf485828601613a42565b9150509250929050565b600060208284031215613c1057600080fd5b6000613c1e848285016139a4565b91505092915050565b600060208284031215613c3957600080fd5b6000613c47848285016139b9565b91505092915050565b60008060208385031215613c6357600080fd5b600083013567ffffffffffffffff811115613c7d57600080fd5b613c89858286016139f8565b92509250509250929050565b600060208284031215613ca757600080fd5b6000613cb584828501613a42565b91505092915050565b6000613cca8383614991565b60208301905092915050565b613cdf8161516a565b82525050565b613cee8161516a565b82525050565b6000613cff82614f64565b613d098185614f92565b9350613d1483614f54565b8060005b83811015613d45578151613d2c8882613cbe565b9750613d3783614f85565b925050600181019050613d18565b5085935050505092915050565b613d5b8161517c565b82525050565b6000613d6c82614f6f565b613d768185614fa3565b9350613d8681856020860161521d565b613d8f816153e2565b840191505092915050565b6000613da582614f7a565b613daf8185614fbf565b9350613dbf81856020860161521d565b613dc8816153e2565b840191505092915050565b6000613dde82614f7a565b613de88185614fd0565b9350613df881856020860161521d565b80840191505092915050565b6000613e11602283614fbf565b91507f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e77602683614fbf565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613edd602a83614fbf565b91507f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008301527f74656e7420746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f43602383614fbf565b91507f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008301527f6e647300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613fa9602583614fbf565b91507f455243373231413a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061400f603183614fbf565b91507f455243373231413a206e756d626572206d696e74656420717565727920666f7260008301527f20746865207a65726f20616464726573730000000000000000000000000000006020830152604082019050919050565b6000614075601883614fbf565b91507f4d617820746f6b656e206d696e74656420616c726561647900000000000000006000830152602082019050919050565b60006140b5601383614fbf565b91507f53616c65206973206e6f742073746172746564000000000000000000000000006000830152602082019050919050565b60006140f5601b83614fbf565b91507f4d617820746f6b656e206973206d696e74656420616c726561647900000000006000830152602082019050919050565b6000614135603983614fbf565b91507f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006020830152604082019050919050565b600061419b601883614fbf565b91507f7175616e74697479206d757374206265206e6f6e7a65726f00000000000000006000830152602082019050919050565b60006141db602583614fbf565b91507f43616e206e6f74206d696e74206d6f7265207468616e203520746f6b656e207060008301527f65722074780000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614241602b83614fbf565b91507f455243373231413a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b60006142a7602683614fbf565b91507f455243373231413a207472616e736665722066726f6d20696e636f727265637460008301527f206f776e657200000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061430d602683614fbf565b91507f43616e206e6f74206d696e74206d6f7265207468616e20323020746f6b656e2060008301527f70657220747800000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614373602083614fbf565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006143b3602f83614fbf565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000614419601a83614fbf565b91507f455243373231413a20617070726f766520746f2063616c6c65720000000000006000830152602082019050919050565b6000614459603283614fbf565b91507f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b60006144bf601483614fbf565b91507f4e6f74207061696420656e6f756768204554482e0000000000000000000000006000830152602082019050919050565b60006144ff602983614fbf565b91507f43616e206e6f74206d696e74206d6f7265207468616e203520746f6b656e207060008301527f65722077616c6c657400000000000000000000000000000000000000000000006020830152604082019050919050565b6000614565602283614fbf565b91507f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145cb600083614fb4565b9150600082019050919050565b60006145e5601083614fbf565b91507f5472616e73666572206661696c65642e000000000000000000000000000000006000830152602082019050919050565b6000614625603383614fbf565b91507f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008301527f6563656976657220696d706c656d656e746572000000000000000000000000006020830152604082019050919050565b600061468b601d83614fbf565b91507f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006000830152602082019050919050565b60006146cb602183614fbf565b91507f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614731602e83614fbf565b91507f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008301527f6f776e657220627920696e6465780000000000000000000000000000000000006020830152604082019050919050565b6000614797602683614fbf565b91507f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008301527f6c65616e757000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006147fd601f83614fbf565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b600061483d602f83614fbf565b91507f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008301527f206f776e6572206f6620746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006148a3602d83614fbf565b91507f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008301527f78697374656e7420746f6b656e000000000000000000000000000000000000006020830152604082019050919050565b6000614909602283614fbf565b91507f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008301527f67680000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6040820160008201516149786000850182613cd6565b50602082015161498b60208501826149af565b50505050565b61499a816151f0565b82525050565b6149a9816151f0565b82525050565b6149b8816151fa565b82525050565b60006149ca8285613dd3565b91506149d68284613dd3565b91508190509392505050565b60006149ed826145be565b9150819050919050565b6000602082019050614a0c6000830184613ce5565b92915050565b6000608082019050614a276000830187613ce5565b614a346020830186613ce5565b614a4160408301856149a0565b8181036060830152614a538184613d61565b905095945050505050565b60006020820190508181036000830152614a788184613cf4565b905092915050565b6000602082019050614a956000830184613d52565b92915050565b60006020820190508181036000830152614ab58184613d9a565b905092915050565b60006020820190508181036000830152614ad681613e04565b9050919050565b60006020820190508181036000830152614af681613e6a565b9050919050565b60006020820190508181036000830152614b1681613ed0565b9050919050565b60006020820190508181036000830152614b3681613f36565b9050919050565b60006020820190508181036000830152614b5681613f9c565b9050919050565b60006020820190508181036000830152614b7681614002565b9050919050565b60006020820190508181036000830152614b9681614068565b9050919050565b60006020820190508181036000830152614bb6816140a8565b9050919050565b60006020820190508181036000830152614bd6816140e8565b9050919050565b60006020820190508181036000830152614bf681614128565b9050919050565b60006020820190508181036000830152614c168161418e565b9050919050565b60006020820190508181036000830152614c36816141ce565b9050919050565b60006020820190508181036000830152614c5681614234565b9050919050565b60006020820190508181036000830152614c768161429a565b9050919050565b60006020820190508181036000830152614c9681614300565b9050919050565b60006020820190508181036000830152614cb681614366565b9050919050565b60006020820190508181036000830152614cd6816143a6565b9050919050565b60006020820190508181036000830152614cf68161440c565b9050919050565b60006020820190508181036000830152614d168161444c565b9050919050565b60006020820190508181036000830152614d36816144b2565b9050919050565b60006020820190508181036000830152614d56816144f2565b9050919050565b60006020820190508181036000830152614d7681614558565b9050919050565b60006020820190508181036000830152614d96816145d8565b9050919050565b60006020820190508181036000830152614db681614618565b9050919050565b60006020820190508181036000830152614dd68161467e565b9050919050565b60006020820190508181036000830152614df6816146be565b9050919050565b60006020820190508181036000830152614e1681614724565b9050919050565b60006020820190508181036000830152614e368161478a565b9050919050565b60006020820190508181036000830152614e56816147f0565b9050919050565b60006020820190508181036000830152614e7681614830565b9050919050565b60006020820190508181036000830152614e9681614896565b9050919050565b60006020820190508181036000830152614eb6816148fc565b9050919050565b6000604082019050614ed26000830184614962565b92915050565b6000602082019050614eed60008301846149a0565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614f1a57614f196153b3565b5b8060405250919050565b600067ffffffffffffffff821115614f3f57614f3e6153b3565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fe6826151b4565b9150614ff1836151b4565b9250826fffffffffffffffffffffffffffffffff0382111561501657615015615326565b5b828201905092915050565b600061502c826151f0565b9150615037836151f0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561506c5761506b615326565b5b828201905092915050565b6000615082826151f0565b915061508d836151f0565b92508261509d5761509c615355565b5b828204905092915050565b60006150b3826151f0565b91506150be836151f0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150f7576150f6615326565b5b828202905092915050565b600061510d826151b4565b9150615118836151b4565b92508282101561512b5761512a615326565b5b828203905092915050565b6000615141826151f0565b915061514c836151f0565b92508282101561515f5761515e615326565b5b828203905092915050565b6000615175826151d0565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561523b578082015181840152602081019050615220565b8381111561524a576000848401525b50505050565b600061525b826151f0565b9150600082141561526f5761526e615326565b5b600182039050919050565b6000600282049050600182168061529257607f821691505b602082108114156152a6576152a5615384565b5b50919050565b60006152b7826151f0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152ea576152e9615326565b5b600182019050919050565b6000615300826151f0565b915061530b836151f0565b92508261531b5761531a615355565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6153fc8161516a565b811461540757600080fd5b50565b6154138161517c565b811461541e57600080fd5b50565b61542a81615188565b811461543557600080fd5b50565b615441816151f0565b811461544c57600080fd5b5056fea2646970667358221220155ed11a7c94f2b2e1fb061bc166df660f88db41405e54e8b46603e52a003e8964736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000002710
-----Decoded View---------------
Arg [0] : maxBatchSize_ (uint256): 20
Arg [1] : TotalToken_ (uint256): 10000
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [1] : 0000000000000000000000000000000000000000000000000000000000002710
Deployed Bytecode Sourcemap
40857:3834:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21930:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23656:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44274:412;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24953:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24516:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20495:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25803:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43532:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42216:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21122:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43347:176;;;;;;;;;;;;;:::i;:::-;;26016:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20658:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42125:83;;;;;;;;;;;;;:::i;:::-;;42490:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41076:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41155:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23479:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22356:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38235:94;;;;;;;;;;;;;:::i;:::-;;41798:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42000:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43744:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42884:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37584:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42731:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23811:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41013:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25221:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41122:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26236:319;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41700:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23972:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40978:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41588:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41909:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30659:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42340:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41041:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25558:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41185:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38484:192;;;;;;;;;;;;;;;;;;;;;;;:::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;44274:412::-;44340:12;;;;;;;;;;;44332:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;44421:14;;44407:10;44391:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:44;;44383:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;44499:1;44486:10;:14;:40;;;;;44518:8;;44504:10;:22;;44486:40;44478:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;44603:10;44597:5;;:16;;;;:::i;:::-;44584:9;:29;;44576:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;44647:33;44657:10;44669;44647:9;:33::i;:::-;44274:412;:::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;:::-;24516:379;;;:::o;20495:94::-;20548:7;20571:12;;20564:19;;20495:94;:::o;25803:150::-;25919:28;25929:4;25935:2;25939:7;25919:9;:28::i;:::-;25803:150;;;:::o;43532:206::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43652:14:::1;;43638:10;43622:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:44;;43614:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;43704:26;43714:3;43719:10;43704:9;:26::i;:::-;43532:206:::0;;:::o;42216:118::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35696:1:::1;36292:7;;:19;;36284:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;35696:1;36425:7;:18;;;;42300:28:::2;42319:8;42300:18;:28::i;:::-;35652:1:::1;36604:7;:22;;;;42216:118:::0;:::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;21448:350;21488:3;;;;;:::i;:::-;;;;21448:350;;;;21804:56;;;;;;;;;;:::i;:::-;;;;;;;;21122:744;;;;;:::o;43347:176::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35696:1:::1;36292:7;;:19;;36284:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;35696:1;36425:7;:18;;;;43407:12:::2;43425:10;:15;;43448:21;43425:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43406:68;;;43489:7;43481:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;36456:1;35652::::1;36604:7;:22;;;;43347:176::o:0;26016:157::-;26128:39;26145:4;26151:2;26155:7;26128:39;;;;;;;;;;;;:16;:39::i;:::-;26016:157;;;:::o;20658:177::-;20725:7;20757:13;:11;:13::i;:::-;20749:5;:21;20741:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;20824:5;20817:12;;20658:177;;;:::o;42125:83::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42190:12:::1;;;;;;;;;;;42189:13;42174:12;;:28;;;;;;;;;;;;;;;;;;42125:83::o:0;42490:98::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42575:7:::1;;42561:11;:21;;;;;;;:::i;:::-;;42490:98:::0;;:::o;41076:38::-;;;;:::o;41155:24::-;;;;:::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;38235:94::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38300:21:::1;38318:1;38300:9;:21::i;:::-;38235:94::o:0;41798:105::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41886:11:::1;41869:14;:28;;;;41798:105:::0;:::o;42000:109::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42089:14:::1;42073:13;:30;;;;42000:109:::0;:::o;43744:524::-;43811:12;;;;;;;;;;;43803:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;43875:1;43862:10;:14;:42;;;;;43894:10;;43880;:24;;43862:42;43854:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;44008:22;;43994:10;43963:16;:28;43980:10;43963:28;;;;;;;;;;;;;;;;:41;;;;:::i;:::-;:67;;43955:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;44126:13;;44112:10;44096:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:43;;44088:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;44180:33;44190:10;44202;44180:9;:33::i;:::-;44252:10;44220:16;:28;44237:10;44220:28;;;;;;;;;;;;;;;;:42;;;;;;;:::i;:::-;;;;;;;;43744:524;:::o;42884:456::-;42945:16;42971:18;42992:17;43002:6;42992:9;:17::i;:::-;42971:38;;43034:1;43020:10;:15;43016:319;;;43069:1;43055:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43048:23;;;;;43016:319;43096:23;43136:10;43122:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43096:51;;43158:13;43182:122;43206:10;43198:5;:18;43182:122;;;43258:34;43278:6;43286:5;43258:19;:34::i;:::-;43242:6;43249:5;43242:13;;;;;;;;;;;;;;;;;;;;;:50;;;;;43218:7;;;;;:::i;:::-;;;;43182:122;;;43321:6;43314:13;;;;;42884:456;;;;:::o;37584:87::-;37630:7;37657:6;;;;;;;;;;;37650:13;;37584:87;:::o;42731:147::-;42812:21;;:::i;:::-;42852:20;42864:7;42852:11;:20::i;:::-;42845:27;;42731:147;;;:::o;23811:98::-;23867:13;23896:7;23889:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23811:98;:::o;41013:21::-;;;;:::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;41122:26::-;;;;:::o;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;41700:89::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41774:9:::1;41763:8;:20;;;;41700:89:::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;40978:30::-;;;;:::o;41588:103::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41674:11:::1;41661:10;:24;;;;41588:103:::0;:::o;41909:77::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41974:6:::1;41966:5;:14;;;;41909:77:::0;:::o;30659:43::-;;;;:::o;42340:107::-;42398:7;42421:20;42435:5;42421:13;:20::i;:::-;42414:27;;42340:107;;;:::o;41041:29::-;;;;:::o;25558:186::-;25680:4;25703:18;:25;25722:5;25703:25;;;;;;;;;;;;;;;:35;25729:8;25703:35;;;;;;;;;;;;;;;;;;;;;;;;;25696:42;;25558:186;;;;:::o;41185:28::-;;;;;;;;;;;;;:::o;38484:192::-;37815:12;:10;:12::i;:::-;37804:23;;:7;:5;:7::i;:::-;:23;;;37796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38593:1:::1;38573:22;;:8;:22;;;;38565:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38649:19;38659:8;38649:9;:19::i;:::-;38484:192:::0;:::o;306:157::-;391:4;430:25;415:40;;;:11;:40;;;;408:47;;306:157;;;:::o;26905:98::-;26970:27;26980:2;26984:8;26970:27;;;;;;;;;;;;:9;:27::i;:::-;26905:98;;:::o;26794:105::-;26851:4;26881:12;;26871:7;:22;26864:29;;26794:105;;;:::o;14481:98::-;14534:7;14561:10;14554:17;;14481:98;:::o;30481:172::-;30605:2;30578:15;:24;30594:7;30578:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30639:7;30635:2;30619:28;;30628:5;30619:28;;;;;;;;;;;;30481:172;;;:::o;28846:1529::-;28943:35;28981:20;28993:7;28981:11;:20::i;:::-;28943:58;;29010:22;29052:13;:18;;;29036:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;29105:12;:10;:12::i;:::-;29081:36;;:20;29093:7;29081:11;:20::i;:::-;:36;;;29036:81;:142;;;;29128:50;29145:13;:18;;;29165:12;:10;:12::i;:::-;29128:16;:50::i;:::-;29036:142;29010:169;;29204:17;29188:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;29336:4;29314:26;;:13;:18;;;:26;;;29298:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;29425:1;29411:16;;:2;:16;;;;29403:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29478:43;29500:4;29506:2;29510:7;29519:1;29478:21;:43::i;:::-;29578:49;29595:1;29599:7;29608:13;:18;;;29578:8;:49::i;:::-;29666:1;29636:12;:18;29649:4;29636:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29702:1;29674:12;:16;29687:2;29674:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29733:43;;;;;;;;29748:2;29733:43;;;;;;29759:15;29733:43;;;;;29710:11;:20;29722:7;29710:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30004:19;30036:1;30026:7;:11;;;;:::i;:::-;30004:33;;30089:1;30048:43;;:11;:24;30060:11;30048:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;30044:236;;;30106:20;30114:11;30106:7;:20::i;:::-;30102:171;;;30166:97;;;;;;;;30193:13;:18;;;30166:97;;;;;;30224:13;:28;;;30166:97;;;;;30139:11;:24;30151:11;30139:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30102:171;30044:236;30312:7;30308:2;30293:27;;30302:4;30293:27;;;;;;;;;;;;30327:42;30348:4;30354:2;30358:7;30367:1;30327:20;:42::i;:::-;28846:1529;;;;;;:::o;30807:838::-;30869:25;30897:24;;30869:52;;30947:1;30936:8;:12;30928:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;30984:16;31034:1;31023:8;31003:17;:28;;;;:::i;:::-;:32;;;;:::i;:::-;30984:51;;31070:1;31057:10;:14;;;;:::i;:::-;31046:8;:25;31042:73;;;31106:1;31093:10;:14;;;;:::i;:::-;31082:25;;31042:73;31230:17;31238:8;31230:7;:17::i;:::-;31222:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31302:9;31314:17;31302:29;;31297:297;31338:8;31333:1;:13;31297:297;;31397:1;31366:33;;:11;:14;31378:1;31366:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;31362:225;;;31412:31;31446:14;31458:1;31446:11;:14::i;:::-;31412:48;;31488:89;;;;;;;;31515:9;:14;;;31488:89;;;;;;31542:9;:24;;;31488:89;;;;;31471:11;:14;31483:1;31471:14;;;;;;;;;;;:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31362:225;;31348:3;;;;;:::i;:::-;;;;31297:297;;;;31638:1;31627:8;:12;;;;:::i;:::-;31600:24;:39;;;;30807:838;;;:::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;23142:212;23199:6;;;;;:::i;:::-;;;;23142:212;;;;23362:57;;;;;;;;;;:::i;:::-;;;;;;;;22819:606;;;;:::o;38684:173::-;38740:16;38759:6;;;;;;;;;;;38740:25;;38785:8;38776:6;;:17;;;;;;;;;;;;;;;;;;38840:8;38809:40;;38830:8;38809:40;;;;;;;;;;;;38684:173;;:::o;32188:690::-;32325:4;32342:15;:2;:13;;;:15::i;:::-;32338:535;;;32397:2;32381:36;;;32418:12;:10;:12::i;:::-;32432:4;32438:7;32447:5;32381:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32368:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32629:1;32612:6;:13;:18;32608:215;;;32645:61;;;;;;;;;;:::i;:::-;;;;;;;;32608:215;32791:6;32785:13;32776:6;32772:2;32768:15;32761:38;32368:464;32513:45;;;32503:55;;;:6;:55;;;;32496:62;;;;;32338:535;32861:4;32854:11;;32188:690;;;;;;;:::o;42616:106::-;42676:13;42705:11;42698:18;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42616: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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;15618:2;15609:11;;;;;:::i;:::-;;;15478:154;;;15656:6;15642:21;;;;;14948:723;;;;:::o;22573:240::-;22634:7;22683:1;22666:19;;:5;:19;;;;22650:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;22774:12;:19;22787:5;22774:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;22766:41;;22759:48;;22573:240;;;:::o;27342:1272::-;27447:20;27470:12;;27447:35;;27511:1;27497:16;;:2;:16;;;;27489:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27688:21;27696:12;27688:7;:21::i;:::-;27687:22;27679:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27770:12;27758:8;:24;;27750:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27830:61;27860:1;27864:2;27868:12;27882:8;27830:21;:61::i;:::-;27900:30;27933:12;:16;27946:2;27933:16;;;;;;;;;;;;;;;27900:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27975:119;;;;;;;;28025:8;27995:11;:19;;;:39;;;;:::i;:::-;27975:119;;;;;;28078:8;28043:11;:24;;;:44;;;;:::i;:::-;27975:119;;;;;27956:12;:16;27969:2;27956:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28129:43;;;;;;;;28144:2;28129:43;;;;;;28155:15;28129:43;;;;;28101:11;:25;28113:12;28101:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28181:20;28204:12;28181:35;;28230:9;28225:281;28249:8;28245:1;:12;28225:281;;;28303:12;28299:2;28278:38;;28295:1;28278:38;;;;;;;;;;;;28343:59;28374:1;28378:2;28382:12;28396:5;28343:22;:59::i;:::-;28325:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;28484:14;;;;;:::i;:::-;;;;28259:3;;;;;:::i;:::-;;;;28225:281;;;;28529:12;28514;:27;;;;28548:60;28577:1;28581:2;28585:12;28599:8;28548:20;:60::i;:::-;27342:1272;;;;;;:::o;33340:141::-;;;;;:::o;33867: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:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:139::-;;439:6;426:20;417:29;;455:33;482:5;455:33;:::i;:::-;407:87;;;;:::o;500:133::-;;581:6;568:20;559:29;;597:30;621:5;597:30;:::i;:::-;549:84;;;;:::o;639:137::-;;722:6;709:20;700:29;;738:32;764:5;738:32;:::i;:::-;690:86;;;;:::o;782:141::-;;869:6;863:13;854:22;;885:32;911:5;885:32;:::i;:::-;844:79;;;;:::o;942:271::-;;1046:3;1039:4;1031:6;1027:17;1023:27;1013:2;;1064:1;1061;1054:12;1013:2;1104:6;1091:20;1129:78;1203:3;1195:6;1188:4;1180:6;1176:17;1129:78;:::i;:::-;1120:87;;1003:210;;;;;:::o;1233:352::-;;;1351:3;1344:4;1336:6;1332:17;1328:27;1318:2;;1369:1;1366;1359:12;1318:2;1405:6;1392:20;1382:30;;1435:18;1427:6;1424:30;1421:2;;;1467:1;1464;1457:12;1421:2;1504:4;1496:6;1492:17;1480:29;;1558:3;1550:4;1542:6;1538:17;1528:8;1524:32;1521:41;1518:2;;;1575:1;1572;1565:12;1518:2;1308:277;;;;;:::o;1591:139::-;;1675:6;1662:20;1653:29;;1691:33;1718:5;1691:33;:::i;:::-;1643:87;;;;:::o;1736:262::-;;1844:2;1832:9;1823:7;1819:23;1815:32;1812:2;;;1860:1;1857;1850:12;1812:2;1903:1;1928:53;1973:7;1964:6;1953:9;1949:22;1928:53;:::i;:::-;1918:63;;1874:117;1802:196;;;;:::o;2004:407::-;;;2129:2;2117:9;2108:7;2104:23;2100:32;2097:2;;;2145:1;2142;2135:12;2097:2;2188:1;2213:53;2258:7;2249:6;2238:9;2234:22;2213:53;:::i;:::-;2203:63;;2159:117;2315:2;2341:53;2386:7;2377:6;2366:9;2362:22;2341:53;:::i;:::-;2331:63;;2286:118;2087:324;;;;;:::o;2417:552::-;;;;2559:2;2547:9;2538:7;2534:23;2530:32;2527:2;;;2575:1;2572;2565:12;2527:2;2618:1;2643:53;2688:7;2679:6;2668:9;2664:22;2643:53;:::i;:::-;2633:63;;2589:117;2745:2;2771:53;2816:7;2807:6;2796:9;2792:22;2771:53;:::i;:::-;2761:63;;2716:118;2873:2;2899:53;2944:7;2935:6;2924:9;2920:22;2899:53;:::i;:::-;2889:63;;2844:118;2517:452;;;;;:::o;2975:809::-;;;;;3143:3;3131:9;3122:7;3118:23;3114:33;3111:2;;;3160:1;3157;3150:12;3111:2;3203:1;3228:53;3273:7;3264:6;3253:9;3249:22;3228:53;:::i;:::-;3218:63;;3174:117;3330:2;3356:53;3401:7;3392:6;3381:9;3377:22;3356:53;:::i;:::-;3346:63;;3301:118;3458:2;3484:53;3529:7;3520:6;3509:9;3505:22;3484:53;:::i;:::-;3474:63;;3429:118;3614:2;3603:9;3599:18;3586:32;3645:18;3637:6;3634:30;3631:2;;;3677:1;3674;3667:12;3631:2;3705:62;3759:7;3750:6;3739:9;3735:22;3705:62;:::i;:::-;3695:72;;3557:220;3101:683;;;;;;;:::o;3790:401::-;;;3912:2;3900:9;3891:7;3887:23;3883:32;3880:2;;;3928:1;3925;3918:12;3880:2;3971:1;3996:53;4041:7;4032:6;4021:9;4017:22;3996:53;:::i;:::-;3986:63;;3942:117;4098:2;4124:50;4166:7;4157:6;4146:9;4142:22;4124:50;:::i;:::-;4114:60;;4069:115;3870:321;;;;;:::o;4197:407::-;;;4322:2;4310:9;4301:7;4297:23;4293:32;4290:2;;;4338:1;4335;4328:12;4290:2;4381:1;4406:53;4451:7;4442:6;4431:9;4427:22;4406:53;:::i;:::-;4396:63;;4352:117;4508:2;4534:53;4579:7;4570:6;4559:9;4555:22;4534:53;:::i;:::-;4524:63;;4479:118;4280:324;;;;;:::o;4610:260::-;;4717:2;4705:9;4696:7;4692:23;4688:32;4685:2;;;4733:1;4730;4723:12;4685:2;4776:1;4801:52;4845:7;4836:6;4825:9;4821:22;4801:52;:::i;:::-;4791:62;;4747:116;4675:195;;;;:::o;4876:282::-;;4994:2;4982:9;4973:7;4969:23;4965:32;4962:2;;;5010:1;5007;5000:12;4962:2;5053:1;5078:63;5133:7;5124:6;5113:9;5109:22;5078:63;:::i;:::-;5068:73;;5024:127;4952:206;;;;:::o;5164:395::-;;;5292:2;5280:9;5271:7;5267:23;5263:32;5260:2;;;5308:1;5305;5298:12;5260:2;5379:1;5368:9;5364:17;5351:31;5409:18;5401:6;5398:30;5395:2;;;5441:1;5438;5431:12;5395:2;5477:65;5534:7;5525:6;5514:9;5510:22;5477:65;:::i;:::-;5459:83;;;;5322:230;5250:309;;;;;:::o;5565:262::-;;5673:2;5661:9;5652:7;5648:23;5644:32;5641:2;;;5689:1;5686;5679:12;5641:2;5732:1;5757:53;5802:7;5793:6;5782:9;5778:22;5757:53;:::i;:::-;5747:63;;5703:117;5631:196;;;;:::o;5833:179::-;;5923:46;5965:3;5957:6;5923:46;:::i;:::-;6001:4;5996:3;5992:14;5978:28;;5913:99;;;;:::o;6018:108::-;6095:24;6113:5;6095:24;:::i;:::-;6090:3;6083:37;6073:53;;:::o;6132:118::-;6219:24;6237:5;6219:24;:::i;:::-;6214:3;6207:37;6197:53;;:::o;6286:732::-;;6434:54;6482:5;6434:54;:::i;:::-;6504:86;6583:6;6578:3;6504:86;:::i;:::-;6497:93;;6614:56;6664:5;6614:56;:::i;:::-;6693:7;6724:1;6709:284;6734:6;6731:1;6728:13;6709:284;;;6810:6;6804:13;6837:63;6896:3;6881:13;6837:63;:::i;:::-;6830:70;;6923:60;6976:6;6923:60;:::i;:::-;6913:70;;6769:224;6756:1;6753;6749:9;6744:14;;6709:284;;;6713:14;7009:3;7002:10;;6410:608;;;;;;;:::o;7024:109::-;7105:21;7120:5;7105:21;:::i;:::-;7100:3;7093:34;7083:50;;:::o;7139:360::-;;7253:38;7285:5;7253:38;:::i;:::-;7307:70;7370:6;7365:3;7307:70;:::i;:::-;7300:77;;7386:52;7431:6;7426:3;7419:4;7412:5;7408:16;7386:52;:::i;:::-;7463:29;7485:6;7463:29;:::i;:::-;7458:3;7454:39;7447:46;;7229:270;;;;;:::o;7505:364::-;;7621:39;7654:5;7621:39;:::i;:::-;7676:71;7740:6;7735:3;7676:71;:::i;:::-;7669:78;;7756:52;7801:6;7796:3;7789:4;7782:5;7778:16;7756:52;:::i;:::-;7833:29;7855:6;7833:29;:::i;:::-;7828:3;7824:39;7817:46;;7597:272;;;;;:::o;7875:377::-;;8009:39;8042:5;8009:39;:::i;:::-;8064:89;8146:6;8141:3;8064:89;:::i;:::-;8057:96;;8162:52;8207:6;8202:3;8195:4;8188:5;8184:16;8162:52;:::i;:::-;8239:6;8234:3;8230:16;8223:23;;7985:267;;;;;:::o;8258:366::-;;8421:67;8485:2;8480:3;8421:67;:::i;:::-;8414:74;;8518:34;8514:1;8509:3;8505:11;8498:55;8584:4;8579:2;8574:3;8570:12;8563:26;8615:2;8610:3;8606:12;8599:19;;8404:220;;;:::o;8630:370::-;;8793:67;8857:2;8852:3;8793:67;:::i;:::-;8786:74;;8890:34;8886:1;8881:3;8877:11;8870:55;8956:8;8951:2;8946:3;8942:12;8935:30;8991:2;8986:3;8982:12;8975:19;;8776:224;;;:::o;9006:374::-;;9169:67;9233:2;9228:3;9169:67;:::i;:::-;9162:74;;9266:34;9262:1;9257:3;9253:11;9246:55;9332:12;9327:2;9322:3;9318:12;9311:34;9371:2;9366:3;9362:12;9355:19;;9152:228;;;:::o;9386:367::-;;9549:67;9613:2;9608:3;9549:67;:::i;:::-;9542:74;;9646:34;9642:1;9637:3;9633:11;9626:55;9712:5;9707:2;9702:3;9698:12;9691:27;9744:2;9739:3;9735:12;9728:19;;9532:221;;;:::o;9759:369::-;;9922:67;9986:2;9981:3;9922:67;:::i;:::-;9915:74;;10019:34;10015:1;10010:3;10006:11;9999:55;10085:7;10080:2;10075:3;10071:12;10064:29;10119:2;10114:3;10110:12;10103:19;;9905:223;;;:::o;10134:381::-;;10297:67;10361:2;10356:3;10297:67;:::i;:::-;10290:74;;10394:34;10390:1;10385:3;10381:11;10374:55;10460:19;10455:2;10450:3;10446:12;10439:41;10506:2;10501:3;10497:12;10490:19;;10280:235;;;:::o;10521:322::-;;10684:67;10748:2;10743:3;10684:67;:::i;:::-;10677:74;;10781:26;10777:1;10772:3;10768:11;10761:47;10834:2;10829:3;10825:12;10818:19;;10667:176;;;:::o;10849:317::-;;11012:67;11076:2;11071:3;11012:67;:::i;:::-;11005:74;;11109:21;11105:1;11100:3;11096:11;11089:42;11157:2;11152:3;11148:12;11141:19;;10995:171;;;:::o;11172:325::-;;11335:67;11399:2;11394:3;11335:67;:::i;:::-;11328:74;;11432:29;11428:1;11423:3;11419:11;11412:50;11488:2;11483:3;11479:12;11472:19;;11318:179;;;:::o;11503:389::-;;11666:67;11730:2;11725:3;11666:67;:::i;:::-;11659:74;;11763:34;11759:1;11754:3;11750:11;11743:55;11829:27;11824:2;11819:3;11815:12;11808:49;11883:2;11878:3;11874:12;11867:19;;11649:243;;;:::o;11898:322::-;;12061:67;12125:2;12120:3;12061:67;:::i;:::-;12054:74;;12158:26;12154:1;12149:3;12145:11;12138:47;12211:2;12206:3;12202:12;12195:19;;12044:176;;;:::o;12226:369::-;;12389:67;12453:2;12448:3;12389:67;:::i;:::-;12382:74;;12486:34;12482:1;12477:3;12473:11;12466:55;12552:7;12547:2;12542:3;12538:12;12531:29;12586:2;12581:3;12577:12;12570:19;;12372:223;;;:::o;12601:375::-;;12764:67;12828:2;12823:3;12764:67;:::i;:::-;12757:74;;12861:34;12857:1;12852:3;12848:11;12841:55;12927:13;12922:2;12917:3;12913:12;12906:35;12967:2;12962:3;12958:12;12951:19;;12747:229;;;:::o;12982:370::-;;13145:67;13209:2;13204:3;13145:67;:::i;:::-;13138:74;;13242:34;13238:1;13233:3;13229:11;13222:55;13308:8;13303:2;13298:3;13294:12;13287:30;13343:2;13338:3;13334:12;13327:19;;13128:224;;;:::o;13358:370::-;;13521:67;13585:2;13580:3;13521:67;:::i;:::-;13514:74;;13618:34;13614:1;13609:3;13605:11;13598:55;13684:8;13679:2;13674:3;13670:12;13663:30;13719:2;13714:3;13710:12;13703:19;;13504:224;;;:::o;13734:330::-;;13897:67;13961:2;13956:3;13897:67;:::i;:::-;13890:74;;13994:34;13990:1;13985:3;13981:11;13974:55;14055:2;14050:3;14046:12;14039:19;;13880:184;;;:::o;14070:379::-;;14233:67;14297:2;14292:3;14233:67;:::i;:::-;14226:74;;14330:34;14326:1;14321:3;14317:11;14310:55;14396:17;14391:2;14386:3;14382:12;14375:39;14440:2;14435:3;14431:12;14424:19;;14216:233;;;:::o;14455:324::-;;14618:67;14682:2;14677:3;14618:67;:::i;:::-;14611:74;;14715:28;14711:1;14706:3;14702:11;14695:49;14770:2;14765:3;14761:12;14754:19;;14601:178;;;:::o;14785:382::-;;14948:67;15012:2;15007:3;14948:67;:::i;:::-;14941:74;;15045:34;15041:1;15036:3;15032:11;15025:55;15111:20;15106:2;15101:3;15097:12;15090:42;15158:2;15153:3;15149:12;15142:19;;14931:236;;;:::o;15173:318::-;;15336:67;15400:2;15395:3;15336:67;:::i;:::-;15329:74;;15433:22;15429:1;15424:3;15420:11;15413:43;15482:2;15477:3;15473:12;15466:19;;15319:172;;;:::o;15497:373::-;;15660:67;15724:2;15719:3;15660:67;:::i;:::-;15653:74;;15757:34;15753:1;15748:3;15744:11;15737:55;15823:11;15818:2;15813:3;15809:12;15802:33;15861:2;15856:3;15852:12;15845:19;;15643:227;;;:::o;15876:366::-;;16039:67;16103:2;16098:3;16039:67;:::i;:::-;16032:74;;16136:34;16132:1;16127:3;16123:11;16116:55;16202:4;16197:2;16192:3;16188:12;16181:26;16233:2;16228:3;16224:12;16217:19;;16022:220;;;:::o;16248:297::-;;16428:83;16509:1;16504:3;16428:83;:::i;:::-;16421:90;;16537:1;16532:3;16528:11;16521:18;;16411:134;;;:::o;16551:314::-;;16714:67;16778:2;16773:3;16714:67;:::i;:::-;16707:74;;16811:18;16807:1;16802:3;16798:11;16791:39;16856:2;16851:3;16847:12;16840:19;;16697:168;;;:::o;16871:383::-;;17034:67;17098:2;17093:3;17034:67;:::i;:::-;17027:74;;17131:34;17127:1;17122:3;17118:11;17111:55;17197:21;17192:2;17187:3;17183:12;17176:43;17245:2;17240:3;17236:12;17229:19;;17017:237;;;:::o;17260:327::-;;17423:67;17487:2;17482:3;17423:67;:::i;:::-;17416:74;;17520:31;17516:1;17511:3;17507:11;17500:52;17578:2;17573:3;17569:12;17562:19;;17406:181;;;:::o;17593:365::-;;17756:67;17820:2;17815:3;17756:67;:::i;:::-;17749:74;;17853:34;17849:1;17844:3;17840:11;17833:55;17919:3;17914:2;17909:3;17905:12;17898:25;17949:2;17944:3;17940:12;17933:19;;17739:219;;;:::o;17964:378::-;;18127:67;18191:2;18186:3;18127:67;:::i;:::-;18120:74;;18224:34;18220:1;18215:3;18211:11;18204:55;18290:16;18285:2;18280:3;18276:12;18269:38;18333:2;18328:3;18324:12;18317:19;;18110:232;;;:::o;18348:370::-;;18511:67;18575:2;18570:3;18511:67;:::i;:::-;18504:74;;18608:34;18604:1;18599:3;18595:11;18588:55;18674:8;18669:2;18664:3;18660:12;18653:30;18709:2;18704:3;18700:12;18693:19;;18494:224;;;:::o;18724:329::-;;18887:67;18951:2;18946:3;18887:67;:::i;:::-;18880:74;;18984:33;18980:1;18975:3;18971:11;18964:54;19044:2;19039:3;19035:12;19028:19;;18870:183;;;:::o;19059:379::-;;19222:67;19286:2;19281:3;19222:67;:::i;:::-;19215:74;;19319:34;19315:1;19310:3;19306:11;19299:55;19385:17;19380:2;19375:3;19371:12;19364:39;19429:2;19424:3;19420:12;19413:19;;19205:233;;;:::o;19444:377::-;;19607:67;19671:2;19666:3;19607:67;:::i;:::-;19600:74;;19704:34;19700:1;19695:3;19691:11;19684:55;19770:15;19765:2;19760:3;19756:12;19749:37;19812:2;19807:3;19803:12;19796:19;;19590:231;;;:::o;19827:366::-;;19990:67;20054:2;20049:3;19990:67;:::i;:::-;19983:74;;20087:34;20083:1;20078:3;20074:11;20067:55;20153:4;20148:2;20143:3;20139:12;20132:26;20184:2;20179:3;20175:12;20168:19;;19973:220;;;:::o;20269:527::-;20428:4;20423:3;20419:14;20515:4;20508:5;20504:16;20498:23;20534:63;20591:4;20586:3;20582:14;20568:12;20534:63;:::i;:::-;20443:164;20699:4;20692:5;20688:16;20682:23;20718:61;20773:4;20768:3;20764:14;20750:12;20718:61;:::i;:::-;20617:172;20397:399;;;:::o;20802:108::-;20879:24;20897:5;20879:24;:::i;:::-;20874:3;20867:37;20857:53;;:::o;20916:118::-;21003:24;21021:5;21003:24;:::i;:::-;20998:3;20991:37;20981:53;;:::o;21040:105::-;21115:23;21132:5;21115:23;:::i;:::-;21110:3;21103:36;21093:52;;:::o;21151:435::-;;21353:95;21444:3;21435:6;21353:95;:::i;:::-;21346:102;;21465:95;21556:3;21547:6;21465:95;:::i;:::-;21458:102;;21577:3;21570:10;;21335:251;;;;;:::o;21592:379::-;;21798:147;21941:3;21798:147;:::i;:::-;21791:154;;21962:3;21955:10;;21780:191;;;:::o;21977:222::-;;22108:2;22097:9;22093:18;22085:26;;22121:71;22189:1;22178:9;22174:17;22165:6;22121:71;:::i;:::-;22075:124;;;;:::o;22205:640::-;;22438:3;22427:9;22423:19;22415:27;;22452:71;22520:1;22509:9;22505:17;22496:6;22452:71;:::i;:::-;22533:72;22601:2;22590:9;22586:18;22577:6;22533:72;:::i;:::-;22615;22683:2;22672:9;22668:18;22659:6;22615:72;:::i;:::-;22734:9;22728:4;22724:20;22719:2;22708:9;22704:18;22697:48;22762:76;22833:4;22824:6;22762:76;:::i;:::-;22754:84;;22405:440;;;;;;;:::o;22851:373::-;;23032:2;23021:9;23017:18;23009:26;;23081:9;23075:4;23071:20;23067:1;23056:9;23052:17;23045:47;23109:108;23212:4;23203:6;23109:108;:::i;:::-;23101:116;;22999:225;;;;:::o;23230:210::-;;23355:2;23344:9;23340:18;23332:26;;23368:65;23430:1;23419:9;23415:17;23406:6;23368:65;:::i;:::-;23322:118;;;;:::o;23446:313::-;;23597:2;23586:9;23582:18;23574:26;;23646:9;23640:4;23636:20;23632:1;23621:9;23617:17;23610:47;23674:78;23747:4;23738:6;23674:78;:::i;:::-;23666:86;;23564:195;;;;:::o;23765:419::-;;23969:2;23958:9;23954:18;23946:26;;24018:9;24012:4;24008:20;24004:1;23993:9;23989:17;23982:47;24046:131;24172:4;24046:131;:::i;:::-;24038:139;;23936:248;;;:::o;24190:419::-;;24394:2;24383:9;24379:18;24371:26;;24443:9;24437:4;24433:20;24429:1;24418:9;24414:17;24407:47;24471:131;24597:4;24471:131;:::i;:::-;24463:139;;24361:248;;;:::o;24615:419::-;;24819:2;24808:9;24804:18;24796:26;;24868:9;24862:4;24858:20;24854:1;24843:9;24839:17;24832:47;24896:131;25022:4;24896:131;:::i;:::-;24888:139;;24786:248;;;:::o;25040:419::-;;25244:2;25233:9;25229:18;25221:26;;25293:9;25287:4;25283:20;25279:1;25268:9;25264:17;25257:47;25321:131;25447:4;25321:131;:::i;:::-;25313:139;;25211:248;;;:::o;25465:419::-;;25669:2;25658:9;25654:18;25646:26;;25718:9;25712:4;25708:20;25704:1;25693:9;25689:17;25682:47;25746:131;25872:4;25746:131;:::i;:::-;25738:139;;25636:248;;;:::o;25890:419::-;;26094:2;26083:9;26079:18;26071:26;;26143:9;26137:4;26133:20;26129:1;26118:9;26114:17;26107:47;26171:131;26297:4;26171:131;:::i;:::-;26163:139;;26061:248;;;:::o;26315:419::-;;26519:2;26508:9;26504:18;26496:26;;26568:9;26562:4;26558:20;26554:1;26543:9;26539:17;26532:47;26596:131;26722:4;26596:131;:::i;:::-;26588:139;;26486:248;;;:::o;26740:419::-;;26944:2;26933:9;26929:18;26921:26;;26993:9;26987:4;26983:20;26979:1;26968:9;26964:17;26957:47;27021:131;27147:4;27021:131;:::i;:::-;27013:139;;26911:248;;;:::o;27165:419::-;;27369:2;27358:9;27354:18;27346:26;;27418:9;27412:4;27408:20;27404:1;27393:9;27389:17;27382:47;27446:131;27572:4;27446:131;:::i;:::-;27438:139;;27336:248;;;:::o;27590:419::-;;27794:2;27783:9;27779:18;27771:26;;27843:9;27837:4;27833:20;27829:1;27818:9;27814:17;27807:47;27871:131;27997:4;27871:131;:::i;:::-;27863:139;;27761:248;;;:::o;28015:419::-;;28219:2;28208:9;28204:18;28196:26;;28268:9;28262:4;28258:20;28254:1;28243:9;28239:17;28232:47;28296:131;28422:4;28296:131;:::i;:::-;28288:139;;28186:248;;;:::o;28440:419::-;;28644:2;28633:9;28629:18;28621:26;;28693:9;28687:4;28683:20;28679:1;28668:9;28664:17;28657:47;28721:131;28847:4;28721:131;:::i;:::-;28713:139;;28611:248;;;:::o;28865:419::-;;29069:2;29058:9;29054:18;29046:26;;29118:9;29112:4;29108:20;29104:1;29093:9;29089:17;29082:47;29146:131;29272:4;29146:131;:::i;:::-;29138:139;;29036:248;;;:::o;29290:419::-;;29494:2;29483:9;29479:18;29471:26;;29543:9;29537:4;29533:20;29529:1;29518:9;29514:17;29507:47;29571:131;29697:4;29571:131;:::i;:::-;29563:139;;29461:248;;;:::o;29715:419::-;;29919:2;29908:9;29904:18;29896:26;;29968:9;29962:4;29958:20;29954:1;29943:9;29939:17;29932:47;29996:131;30122:4;29996:131;:::i;:::-;29988:139;;29886:248;;;:::o;30140:419::-;;30344:2;30333:9;30329:18;30321:26;;30393:9;30387:4;30383:20;30379:1;30368:9;30364:17;30357:47;30421:131;30547:4;30421:131;:::i;:::-;30413:139;;30311:248;;;:::o;30565:419::-;;30769:2;30758:9;30754:18;30746:26;;30818:9;30812:4;30808:20;30804:1;30793:9;30789:17;30782:47;30846:131;30972:4;30846:131;:::i;:::-;30838:139;;30736:248;;;:::o;30990:419::-;;31194:2;31183:9;31179:18;31171:26;;31243:9;31237:4;31233:20;31229:1;31218:9;31214:17;31207:47;31271:131;31397:4;31271:131;:::i;:::-;31263:139;;31161:248;;;:::o;31415:419::-;;31619:2;31608:9;31604:18;31596:26;;31668:9;31662:4;31658:20;31654:1;31643:9;31639:17;31632:47;31696:131;31822:4;31696:131;:::i;:::-;31688:139;;31586:248;;;:::o;31840:419::-;;32044:2;32033:9;32029:18;32021:26;;32093:9;32087:4;32083:20;32079:1;32068:9;32064:17;32057:47;32121:131;32247:4;32121:131;:::i;:::-;32113:139;;32011:248;;;:::o;32265:419::-;;32469:2;32458:9;32454:18;32446:26;;32518:9;32512:4;32508:20;32504:1;32493:9;32489:17;32482:47;32546:131;32672:4;32546:131;:::i;:::-;32538:139;;32436:248;;;:::o;32690:419::-;;32894:2;32883:9;32879:18;32871:26;;32943:9;32937:4;32933:20;32929:1;32918:9;32914:17;32907:47;32971:131;33097:4;32971:131;:::i;:::-;32963:139;;32861:248;;;:::o;33115:419::-;;33319:2;33308:9;33304:18;33296:26;;33368:9;33362:4;33358:20;33354:1;33343:9;33339:17;33332:47;33396:131;33522:4;33396:131;:::i;:::-;33388:139;;33286:248;;;:::o;33540:419::-;;33744:2;33733:9;33729:18;33721:26;;33793:9;33787:4;33783:20;33779:1;33768:9;33764:17;33757:47;33821:131;33947:4;33821:131;:::i;:::-;33813:139;;33711:248;;;:::o;33965:419::-;;34169:2;34158:9;34154:18;34146:26;;34218:9;34212:4;34208:20;34204:1;34193:9;34189:17;34182:47;34246:131;34372:4;34246:131;:::i;:::-;34238:139;;34136:248;;;:::o;34390:419::-;;34594:2;34583:9;34579:18;34571:26;;34643:9;34637:4;34633:20;34629:1;34618:9;34614:17;34607:47;34671:131;34797:4;34671:131;:::i;:::-;34663:139;;34561:248;;;:::o;34815:419::-;;35019:2;35008:9;35004:18;34996:26;;35068:9;35062:4;35058:20;35054:1;35043:9;35039:17;35032:47;35096:131;35222:4;35096:131;:::i;:::-;35088:139;;34986:248;;;:::o;35240:419::-;;35444:2;35433:9;35429:18;35421:26;;35493:9;35487:4;35483:20;35479:1;35468:9;35464:17;35457:47;35521:131;35647:4;35521:131;:::i;:::-;35513:139;;35411:248;;;:::o;35665:419::-;;35869:2;35858:9;35854:18;35846:26;;35918:9;35912:4;35908:20;35904:1;35893:9;35889:17;35882:47;35946:131;36072:4;35946:131;:::i;:::-;35938:139;;35836:248;;;:::o;36090:419::-;;36294:2;36283:9;36279:18;36271:26;;36343:9;36337:4;36333:20;36329:1;36318:9;36314:17;36307:47;36371:131;36497:4;36371:131;:::i;:::-;36363:139;;36261:248;;;:::o;36515:419::-;;36719:2;36708:9;36704:18;36696:26;;36768:9;36762:4;36758:20;36754:1;36743:9;36739:17;36732:47;36796:131;36922:4;36796:131;:::i;:::-;36788:139;;36686:248;;;:::o;36940:419::-;;37144:2;37133:9;37129:18;37121:26;;37193:9;37187:4;37183:20;37179:1;37168:9;37164:17;37157:47;37221:131;37347:4;37221:131;:::i;:::-;37213:139;;37111:248;;;:::o;37365:346::-;;37558:2;37547:9;37543:18;37535:26;;37571:133;37701:1;37690:9;37686:17;37677:6;37571:133;:::i;:::-;37525:186;;;;:::o;37717:222::-;;37848:2;37837:9;37833:18;37825:26;;37861:71;37929:1;37918:9;37914:17;37905:6;37861:71;:::i;:::-;37815:124;;;;:::o;37945:283::-;;38011:2;38005:9;37995:19;;38053:4;38045:6;38041:17;38160:6;38148:10;38145:22;38124:18;38112:10;38109:34;38106:62;38103:2;;;38171:18;;:::i;:::-;38103:2;38211:10;38207:2;38200:22;37985:243;;;;:::o;38234:331::-;;38385:18;38377:6;38374:30;38371:2;;;38407:18;;:::i;:::-;38371:2;38492:4;38488:9;38481:4;38473:6;38469:17;38465:33;38457:41;;38553:4;38547;38543:15;38535:23;;38300:265;;;:::o;38571:132::-;;38661:3;38653:11;;38691:4;38686:3;38682:14;38674:22;;38643:60;;;:::o;38709:114::-;;38810:5;38804:12;38794:22;;38783:40;;;:::o;38829:98::-;;38914:5;38908:12;38898:22;;38887:40;;;:::o;38933:99::-;;39019:5;39013:12;39003:22;;38992:40;;;:::o;39038:113::-;;39140:4;39135:3;39131:14;39123:22;;39113:38;;;:::o;39157:184::-;;39290:6;39285:3;39278:19;39330:4;39325:3;39321:14;39306:29;;39268:73;;;;:::o;39347:168::-;;39464:6;39459:3;39452:19;39504:4;39499:3;39495:14;39480:29;;39442:73;;;;:::o;39521:147::-;;39659:3;39644:18;;39634:34;;;;:::o;39674:169::-;;39792:6;39787:3;39780:19;39832:4;39827:3;39823:14;39808:29;;39770:73;;;;:::o;39849:148::-;;39988:3;39973:18;;39963:34;;;;:::o;40003:273::-;;40062:20;40080:1;40062:20;:::i;:::-;40057:25;;40096:20;40114:1;40096:20;:::i;:::-;40091:25;;40218:1;40182:34;40178:42;40175:1;40172:49;40169:2;;;40224:18;;:::i;:::-;40169:2;40268:1;40265;40261:9;40254:16;;40047:229;;;;:::o;40282:305::-;;40341:20;40359:1;40341:20;:::i;:::-;40336:25;;40375:20;40393:1;40375:20;:::i;:::-;40370:25;;40529:1;40461:66;40457:74;40454:1;40451:81;40448:2;;;40535:18;;:::i;:::-;40448:2;40579:1;40576;40572:9;40565:16;;40326:261;;;;:::o;40593:185::-;;40650:20;40668:1;40650:20;:::i;:::-;40645:25;;40684:20;40702:1;40684:20;:::i;:::-;40679:25;;40723:1;40713:2;;40728:18;;:::i;:::-;40713:2;40770:1;40767;40763:9;40758:14;;40635:143;;;;:::o;40784:348::-;;40847:20;40865:1;40847:20;:::i;:::-;40842:25;;40881:20;40899:1;40881:20;:::i;:::-;40876:25;;41069:1;41001:66;40997:74;40994:1;40991:81;40986:1;40979:9;40972:17;40968:105;40965:2;;;41076:18;;:::i;:::-;40965:2;41124:1;41121;41117:9;41106:20;;40832:300;;;;:::o;41138:191::-;;41198:20;41216:1;41198:20;:::i;:::-;41193:25;;41232:20;41250:1;41232:20;:::i;:::-;41227:25;;41271:1;41268;41265:8;41262:2;;;41276:18;;:::i;:::-;41262:2;41321:1;41318;41314:9;41306:17;;41183:146;;;;:::o;41335:191::-;;41395:20;41413:1;41395:20;:::i;:::-;41390:25;;41429:20;41447:1;41429:20;:::i;:::-;41424:25;;41468:1;41465;41462:8;41459:2;;;41473:18;;:::i;:::-;41459:2;41518:1;41515;41511:9;41503:17;;41380:146;;;;:::o;41532:96::-;;41598:24;41616:5;41598:24;:::i;:::-;41587:35;;41577:51;;;:::o;41634:90::-;;41711:5;41704:13;41697:21;41686:32;;41676:48;;;:::o;41730:149::-;;41806:66;41799:5;41795:78;41784:89;;41774:105;;;:::o;41885:118::-;;41962:34;41955:5;41951:46;41940:57;;41930:73;;;:::o;42009:126::-;;42086:42;42079:5;42075:54;42064:65;;42054:81;;;:::o;42141:77::-;;42207:5;42196:16;;42186:32;;;:::o;42224:101::-;;42300:18;42293:5;42289:30;42278:41;;42268:57;;;:::o;42331:154::-;42415:6;42410:3;42405;42392:30;42477:1;42468:6;42463:3;42459:16;42452:27;42382:103;;;:::o;42491:307::-;42559:1;42569:113;42583:6;42580:1;42577:13;42569:113;;;42668:1;42663:3;42659:11;42653:18;42649:1;42644:3;42640:11;42633:39;42605:2;42602:1;42598:10;42593:15;;42569:113;;;42700:6;42697:1;42694:13;42691:2;;;42780:1;42771:6;42766:3;42762:16;42755:27;42691:2;42540:258;;;;:::o;42804:171::-;;42866:24;42884:5;42866:24;:::i;:::-;42857:33;;42912:4;42905:5;42902:15;42899:2;;;42920:18;;:::i;:::-;42899:2;42967:1;42960:5;42956:13;42949:20;;42847:128;;;:::o;42981:320::-;;43062:1;43056:4;43052:12;43042:22;;43109:1;43103:4;43099:12;43130:18;43120:2;;43186:4;43178:6;43174:17;43164:27;;43120:2;43248;43240:6;43237:14;43217:18;43214:38;43211:2;;;43267:18;;:::i;:::-;43211:2;43032:269;;;;:::o;43307:233::-;;43369:24;43387:5;43369:24;:::i;:::-;43360:33;;43415:66;43408:5;43405:77;43402:2;;;43485:18;;:::i;:::-;43402:2;43532:1;43525:5;43521:13;43514:20;;43350:190;;;:::o;43546:176::-;;43595:20;43613:1;43595:20;:::i;:::-;43590:25;;43629:20;43647:1;43629:20;:::i;:::-;43624:25;;43668:1;43658:2;;43673:18;;:::i;:::-;43658:2;43714:1;43711;43707:9;43702:14;;43580:142;;;;:::o;43728:180::-;43776:77;43773:1;43766:88;43873:4;43870:1;43863:15;43897:4;43894:1;43887:15;43914:180;43962:77;43959:1;43952:88;44059:4;44056:1;44049:15;44083:4;44080:1;44073:15;44100:180;44148:77;44145:1;44138:88;44245:4;44242:1;44235:15;44269:4;44266:1;44259:15;44286:180;44334:77;44331:1;44324:88;44431:4;44428:1;44421:15;44455:4;44452:1;44445:15;44472:102;;44564:2;44560:7;44555:2;44548:5;44544:14;44540:28;44530:38;;44520:54;;;:::o;44580:122::-;44653:24;44671:5;44653:24;:::i;:::-;44646:5;44643:35;44633:2;;44692:1;44689;44682:12;44633:2;44623:79;:::o;44708:116::-;44778:21;44793:5;44778:21;:::i;:::-;44771:5;44768:32;44758:2;;44814:1;44811;44804:12;44758:2;44748:76;:::o;44830:120::-;44902:23;44919:5;44902:23;:::i;:::-;44895:5;44892:34;44882:2;;44940:1;44937;44930:12;44882:2;44872:78;:::o;44956:122::-;45029:24;45047:5;45029:24;:::i;:::-;45022:5;45019:35;45009:2;;45068:1;45065;45058:12;45009:2;44999:79;:::o
Swarm Source
ipfs://155ed11a7c94f2b2e1fb061bc166df660f88db41405e54e8b46603e52a003e89
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.