ERC-721
Overview
Max Total Supply
2,962 LUBA
Holders
867
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 LUBALoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Luba
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./Ownable.sol"; import "./ReentrancyGuard.sol"; import "./ERC721A.sol"; import "./Strings.sol"; import "./Address.sol"; import "./Context.sol"; import "./ERC165.sol"; import "./IERC165.sol"; import "./IERC721.sol"; import "./IERC721Enumerable.sol"; import "./IERC721Metadata.sol"; import "./IERC721Receiver.sol"; interface ContractInterface { function ownerOf(uint256 tokenId) external payable returns(address); } contract Luba is Ownable, ERC721A, ReentrancyGuard { uint256 public immutable maxPerAddressDuringMint; bool isStart = false; constructor( uint256 maxBatchSize_, uint256 collectionSize_ ) ERC721A("LUBA", "LUBA", maxBatchSize_, collectionSize_) { maxPerAddressDuringMint = maxBatchSize_; } modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } mapping(uint256 => bool) public vaildID; address balubaAddress; function airdrop(uint256 tokenId1,uint256 tokenId2) public payable { require(isStart == true,"not start"); require(totalSupply() + 1 < collectionSize,"can not mint"); ContractInterface balubaContract = ContractInterface(balubaAddress); require(msg.sender == balubaContract.ownerOf(tokenId1) && msg.sender == balubaContract.ownerOf(tokenId2),"not owner"); require(vaildTokenId(tokenId1)==true&&vaildTokenId(tokenId2)==true,"not vaild tokenId"); vaildID[tokenId1]=true; vaildID[tokenId2]=true; _safeMint(msg.sender,1); } function setContract(address baluba) external onlyOwner { balubaAddress = baluba; isStart =true; } function vaildTokenId(uint256 _tokenId) public view returns(bool){ bool vaild = vaildID[_tokenId]; return !vaild; } // // metadata URI string private _baseTokenURI; function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string calldata baseURI) external onlyOwner { _baseTokenURI = baseURI; } function withdrawMoney() external onlyOwner nonReentrant { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Transfer failed."); } function setOwnersExplicit(uint256 quantity) external onlyOwner nonReentrant { _setOwnersExplicit(quantity); } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } function getOwnershipData(uint256 tokenId) external view returns (TokenOwnership memory) { return ownershipOf(tokenId); } }
// SPDX-License-Identifier: MIT 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); } } } }
// SPDX-License-Identifier: MIT 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; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./IERC721Enumerable.sol"; import "./Address.sol"; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.sol"; import "./Ownable.sol"; /** * @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, Ownable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } // struct BurnData{ // address addr; // uint256 burnNumber; // uint64 startTimestamp; // } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 1; uint256 internal immutable collectionSize; uint256 internal immutable maxBatchSize; // Token name string private _name; // Token symbol string private _symbol; // string private baseExtension = ".json"; string private _blindURI; bool private _isBlind ; // 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; //Mapping from tokenId to burn address mapping(uint256 => address) burnedAddress; /** * @dev * `maxBatchSize` refers to how much a minter can mint at a time. * `collectionSize_` refers to how many tokens are in the collection. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 collectionSize_ ) { require( collectionSize_ > 0, "ERC721A: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; collectionSize = collectionSize_; _isBlind = true; } function setBlindURI(string calldata blindURI) public onlyOwner{ _blindURI = blindURI; } function openblind() public onlyOwner { _isBlind= !_isBlind; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex-1; } /** * @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(collectionSize). 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 = 1; address currOwnershipAddr = address(0); for (uint256 i = 1; 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) { if(_isBlind){ return _blindURI; }else{ require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); require( tokenId!=0, "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(),baseExtension)) : "";} } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); 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 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 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); } function burn(address from,uint256 _tokenId) public { 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" ); _beforeTokenTransfers(from, address(0),_tokenId, 1); _approve(prevOwnership.addr, _tokenId, address(0)); _addressData[from].balance -= 1; emit Transfer(from, address(0), _tokenId); _afterTokenTransfers(from, address(0), _tokenId, 1); burnedAddress[_tokenId] = from; _ownerships[_tokenId] = TokenOwnership(address(0), uint64(block.timestamp)); } function whoBurned(uint256 tokenId) public view returns(address){ return burnedAddress[tokenId] ; } /** * @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 > collectionSize - 1) { endIndex = collectionSize - 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 {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @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); }
// SPDX-License-Identifier: MIT 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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./Context.sol"; /** * @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); } }
// SPDX-License-Identifier: MIT 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; } }
// SPDX-License-Identifier: MIT 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); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"maxBatchSize_","type":"uint256"},{"internalType":"uint256","name":"collectionSize_","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":"tokenId1","type":"uint256"},{"internalType":"uint256","name":"tokenId2","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"payable","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":"address","name":"from","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"maxPerAddressDuringMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"openblind","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"blindURI","type":"string"}],"name":"setBlindURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"baluba","type":"address"}],"name":"setContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"vaildID","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"vaildTokenId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"whoBurned","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60e0604052600180556040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600490805190602001906200005592919062000308565b506000600c556000600e60006101000a81548160ff0219169083151502179055503480156200008357600080fd5b50604051620059c5380380620059c58339818101604052810190620000a99190620003cf565b6040518060400160405280600481526020017f4c554241000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4c554241000000000000000000000000000000000000000000000000000000008152508383620001376200012b6200023c60201b60201c565b6200024460201b60201c565b600081116200017d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001749062000486565b60405180910390fd5b60008211620001c3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001ba9062000464565b60405180910390fd5b8360029080519060200190620001db92919062000308565b508260039080519060200190620001f492919062000308565b508160a0818152505080608081815250506001600660006101000a81548160ff021916908315150217905550505050506001600d819055508160c081815250505050620005e5565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200031690620004c3565b90600052602060002090601f0160209004810192826200033a576000855562000386565b82601f106200035557805160ff191683800117855562000386565b8280016001018555821562000386579182015b828111156200038557825182559160200191906001019062000368565b5b50905062000395919062000399565b5090565b5b80821115620003b45760008160009055506001016200039a565b5090565b600081519050620003c981620005cb565b92915050565b60008060408385031215620003e957620003e862000528565b5b6000620003f985828601620003b8565b92505060206200040c85828601620003b8565b9150509250929050565b600062000425602783620004a8565b915062000432826200052d565b604082019050919050565b60006200044c602e83620004a8565b915062000459826200057c565b604082019050919050565b600060208201905081810360008301526200047f8162000416565b9050919050565b60006020820190508181036000830152620004a1816200043d565b9050919050565b600082825260208201905092915050565b6000819050919050565b60006002820490506001821680620004dc57607f821691505b60208210811415620004f357620004f2620004f9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b620005d681620004b9565b8114620005e257600080fd5b50565b60805160a05160c0516153946200063160003960006116d9015260008181612b8701528181612bb001526133590152600081816111690152818161290f015261294301526153946000f3fe6080604052600436106101f95760003560e01c806370a082311161010d578063a22cb465116100a0578063c87b56dd1161006f578063c87b56dd14610732578063d7224ba01461076f578063dc33e6811461079a578063e985e9c5146107d7578063f2fde38b14610814576101f9565b8063a22cb465146106a0578063ac446002146106c9578063b88d4fde146106e0578063ba0a064314610709576101f9565b80638da5cb5b116100dc5780638da5cb5b146105e45780639231ab2a1461060f57806395d89b411461064c5780639dc29fac14610677576101f9565b806370a082311461053c578063715018a61461057957806375f890ab146105905780638bc35c2f146105b9576101f9565b80632d20fb60116101905780634f6ccce71161015f5780634f6ccce71461044057806355f804b31461047d5780636151797d146104a65780636352211e146104e35780636f243a9c14610520576101f9565b80632d20fb60146103745780632f745c591461039d5780633010fa13146103da57806342842e0e14610417576101f9565b806310952e36116101cc57806310952e36146102cc57806318160ddd146102e357806323b872dd1461030e578063277abd3714610337576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190613b9b565b61083d565b60405161023291906142ef565b60405180910390f35b34801561024757600080fd5b50610250610987565b60405161025d919061430a565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190613c42565b610a19565b60405161029a9190614288565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c59190613b5b565b610a9e565b005b3480156102d857600080fd5b506102e1610bb7565b005b3480156102ef57600080fd5b506102f8610c5f565b60405161030591906146c7565b60405180910390f35b34801561031a57600080fd5b5061033560048036038101906103309190613a45565b610c74565b005b34801561034357600080fd5b5061035e60048036038101906103599190613c42565b610c84565b60405161036b9190614288565b60405180910390f35b34801561038057600080fd5b5061039b60048036038101906103969190613c42565b610cc1565b005b3480156103a957600080fd5b506103c460048036038101906103bf9190613b5b565b610d9f565b6040516103d191906146c7565b60405180910390f35b3480156103e657600080fd5b5061040160048036038101906103fc9190613c42565b610fa6565b60405161040e91906142ef565b60405180910390f35b34801561042357600080fd5b5061043e60048036038101906104399190613a45565b610fc6565b005b34801561044c57600080fd5b5061046760048036038101906104629190613c42565b610fe6565b60405161047491906146c7565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f9190613bf5565b611039565b005b3480156104b257600080fd5b506104cd60048036038101906104c89190613c42565b6110cb565b6040516104da91906142ef565b60405180910390f35b3480156104ef57600080fd5b5061050a60048036038101906105059190613c42565b6110fb565b6040516105179190614288565b60405180910390f35b61053a60048036038101906105359190613c6f565b611111565b005b34801561054857600080fd5b50610563600480360381019061055e91906139ab565b61148b565b60405161057091906146c7565b60405180910390f35b34801561058557600080fd5b5061058e611574565b005b34801561059c57600080fd5b506105b760048036038101906105b291906139ab565b6115fc565b005b3480156105c557600080fd5b506105ce6116d7565b6040516105db91906146c7565b60405180910390f35b3480156105f057600080fd5b506105f96116fb565b6040516106069190614288565b60405180910390f35b34801561061b57600080fd5b5061063660048036038101906106319190613c42565b611724565b60405161064391906146ac565b60405180910390f35b34801561065857600080fd5b5061066161173c565b60405161066e919061430a565b60405180910390f35b34801561068357600080fd5b5061069e60048036038101906106999190613b5b565b6117ce565b005b3480156106ac57600080fd5b506106c760048036038101906106c29190613b1b565b611b00565b005b3480156106d557600080fd5b506106de611c81565b005b3480156106ec57600080fd5b5061070760048036038101906107029190613a98565b611e02565b005b34801561071557600080fd5b50610730600480360381019061072b9190613bf5565b611e5e565b005b34801561073e57600080fd5b5061075960048036038101906107549190613c42565b611ef0565b604051610766919061430a565b60405180910390f35b34801561077b57600080fd5b50610784612086565b60405161079191906146c7565b60405180910390f35b3480156107a657600080fd5b506107c160048036038101906107bc91906139ab565b61208c565b6040516107ce91906146c7565b60405180910390f35b3480156107e357600080fd5b506107fe60048036038101906107f99190613a05565b61209e565b60405161080b91906142ef565b60405180910390f35b34801561082057600080fd5b5061083b600480360381019061083691906139ab565b612132565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061090857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061097057507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610980575061097f8261222a565b5b9050919050565b606060028054610996906149e0565b80601f01602080910402602001604051908101604052809291908181526020018280546109c2906149e0565b8015610a0f5780601f106109e457610100808354040283529160200191610a0f565b820191906000526020600020905b8154815290600101906020018083116109f257829003601f168201915b5050505050905090565b6000610a2482612294565b610a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5a9061466c565b60405180910390fd5b6009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aa9826110fb565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b11906144ec565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b396122a2565b73ffffffffffffffffffffffffffffffffffffffff161480610b685750610b6781610b626122a2565b61209e565b5b610ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9e906143ec565b60405180910390fd5b610bb28383836122aa565b505050565b610bbf6122a2565b73ffffffffffffffffffffffffffffffffffffffff16610bdd6116fb565b73ffffffffffffffffffffffffffffffffffffffff1614610c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2a9061446c565b60405180910390fd5b600660009054906101000a900460ff1615600660006101000a81548160ff021916908315150217905550565b600060018054610c6f919061489c565b905090565b610c7f83838361235c565b505050565b6000600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610cc96122a2565b73ffffffffffffffffffffffffffffffffffffffff16610ce76116fb565b73ffffffffffffffffffffffffffffffffffffffff1614610d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d349061446c565b60405180910390fd5b6002600d541415610d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7a9061460c565b60405180910390fd5b6002600d81905550610d94816128a5565b6001600d8190555050565b6000610daa8361148b565b821115610dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de39061432c565b60405180910390fd5b6000610df6610c5f565b9050600060019050600080600190505b83811015610f64576000600760008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610ef857806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f505786841415610f41578195505050505050610fa0565b8380610f4c90614a43565b9450505b508080610f5c90614a43565b915050610e06565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f97906145cc565b60405180910390fd5b92915050565b600f6020528060005260406000206000915054906101000a900460ff1681565b610fe183838360405180602001604052806000815250611e02565b505050565b6000610ff0610c5f565b8210611031576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611028906143ac565b60405180910390fd5b819050919050565b6110416122a2565b73ffffffffffffffffffffffffffffffffffffffff1661105f6116fb565b73ffffffffffffffffffffffffffffffffffffffff16146110b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ac9061446c565b60405180910390fd5b8181601191906110c692919061378a565b505050565b600080600f600084815260200190815260200160002060009054906101000a900460ff1690508015915050919050565b600061110682612b33565b600001519050919050565b60011515600e60009054906101000a900460ff16151514611167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115e9061434c565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001611192610c5f565b61119c91906147e1565b106111dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d39061450c565b60405180910390fd5b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b815260040161123c91906146c7565b602060405180830381600087803b15801561125657600080fd5b505af115801561126a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128e91906139d8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614801561137d57508073ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016112fc91906146c7565b602060405180830381600087803b15801561131657600080fd5b505af115801561132a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134e91906139d8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6113bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b39061464c565b60405180910390fd5b600115156113c9846110cb565b15151480156113e45750600115156113e0836110cb565b1515145b611423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141a9061458c565b60405180910390fd5b6001600f600085815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f600084815260200190815260200160002060006101000a81548160ff021916908315150217905550611486336001612d36565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f39061442c565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61157c6122a2565b73ffffffffffffffffffffffffffffffffffffffff1661159a6116fb565b73ffffffffffffffffffffffffffffffffffffffff16146115f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e79061446c565b60405180910390fd5b6115fa6000612d54565b565b6116046122a2565b73ffffffffffffffffffffffffffffffffffffffff166116226116fb565b73ffffffffffffffffffffffffffffffffffffffff1614611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f9061446c565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e60006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61172c613810565b61173582612b33565b9050919050565b60606003805461174b906149e0565b80601f0160208091040260200160405190810160405280929190818152602001828054611777906149e0565b80156117c45780601f10611799576101008083540402835291602001916117c4565b820191906000526020600020905b8154815290600101906020018083116117a757829003601f168201915b5050505050905090565b60006117d982612b33565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166118006122a2565b73ffffffffffffffffffffffffffffffffffffffff16148061185c57506118256122a2565b73ffffffffffffffffffffffffffffffffffffffff1661184484610a19565b73ffffffffffffffffffffffffffffffffffffffff16145b80611878575061187782600001516118726122a2565b61209e565b5b9050806118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b1906144cc565b60405180910390fd5b6118c8846000856001612e18565b6118d882600001518460006122aa565b6001600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166119469190614868565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555082600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46119e6846000856001612e1e565b83600b600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506007600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505050505050565b611b086122a2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6d906144ac565b60405180910390fd5b80600a6000611b836122a2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c306122a2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c7591906142ef565b60405180910390a35050565b611c896122a2565b73ffffffffffffffffffffffffffffffffffffffff16611ca76116fb565b73ffffffffffffffffffffffffffffffffffffffff1614611cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf49061446c565b60405180910390fd5b6002600d541415611d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3a9061460c565b60405180910390fd5b6002600d8190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611d7190614273565b60006040518083038185875af1925050503d8060008114611dae576040519150601f19603f3d011682016040523d82523d6000602084013e611db3565b606091505b5050905080611df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dee9061452c565b60405180910390fd5b506001600d81905550565b611e0d84848461235c565b611e1984848484612e24565b611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f9061454c565b60405180910390fd5b50505050565b611e666122a2565b73ffffffffffffffffffffffffffffffffffffffff16611e846116fb565b73ffffffffffffffffffffffffffffffffffffffff1614611eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed19061446c565b60405180910390fd5b818160059190611eeb92919061378a565b505050565b6060600660009054906101000a900460ff1615611f995760058054611f14906149e0565b80601f0160208091040260200160405190810160405280929190818152602001828054611f40906149e0565b8015611f8d5780601f10611f6257610100808354040283529160200191611f8d565b820191906000526020600020905b815481529060010190602001808311611f7057829003601f168201915b50505050509050612081565b611fa282612294565b611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd89061448c565b60405180910390fd5b6000821415612025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201c9061448c565b60405180910390fd5b600061202f612fbb565b9050600081511161204f576040518060200160405280600081525061207d565b806120598461304d565b600460405160200161206d93929190614242565b6040516020818303038152906040525b9150505b919050565b600c5481565b6000612097826131ae565b9050919050565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61213a6122a2565b73ffffffffffffffffffffffffffffffffffffffff166121586116fb565b73ffffffffffffffffffffffffffffffffffffffff16146121ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a59061446c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561221e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122159061436c565b60405180910390fd5b61222781612d54565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826009600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061236782612b33565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661238e6122a2565b73ffffffffffffffffffffffffffffffffffffffff1614806123ea57506123b36122a2565b73ffffffffffffffffffffffffffffffffffffffff166123d284610a19565b73ffffffffffffffffffffffffffffffffffffffff16145b80612406575061240582600001516124006122a2565b61209e565b5b905080612448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243f906144cc565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146124ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b19061444c565b60405180910390fd5b6124c78585856001612e18565b6124d760008484600001516122aa565b6001600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166125459190614868565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166125e9919061479b565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506007600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846126ef91906147e1565b9050600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156128355761276581612294565b15612834576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506007600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461289d8686866001612e1e565b505050505050565b6000600c549050600082116128ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e69061440c565b60405180910390fd5b6000600183836128ff91906147e1565b612909919061489c565b905060017f0000000000000000000000000000000000000000000000000000000000000000612938919061489c565b81111561296f5760017f000000000000000000000000000000000000000000000000000000000000000061296c919061489c565b90505b61297881612294565b6129b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ae906145ec565b60405180910390fd5b60008290505b818111612b1a57600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612b07576000612a3a82612b33565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506007600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612b1290614a43565b9150506129bd565b50600181612b2891906147e1565b600c81905550505050565b612b3b613810565b612b4482612294565b612b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7a9061438c565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612be75760017f000000000000000000000000000000000000000000000000000000000000000084612bda919061489c565b612be491906147e1565b90505b60008390505b818110612cf5576000600760008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ce157809350505050612d31565b508080612ced906149b6565b915050612bed565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d289061462c565b60405180910390fd5b919050565b612d50828260405180602001604052806000815250613297565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b50505050565b50505050565b6000612e458473ffffffffffffffffffffffffffffffffffffffff16613777565b15612fae578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e6e6122a2565b8786866040518563ffffffff1660e01b8152600401612e9094939291906142a3565b602060405180830381600087803b158015612eaa57600080fd5b505af1925050508015612edb57506040513d601f19601f82011682018060405250810190612ed89190613bc8565b60015b612f5e573d8060008114612f0b576040519150601f19603f3d011682016040523d82523d6000602084013e612f10565b606091505b50600081511415612f56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4d9061454c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612fb3565b600190505b949350505050565b606060118054612fca906149e0565b80601f0160208091040260200160405190810160405280929190818152602001828054612ff6906149e0565b80156130435780601f1061301857610100808354040283529160200191613043565b820191906000526020600020905b81548152906001019060200180831161302657829003601f168201915b5050505050905090565b60606000821415613095576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131a9565b600082905060005b600082146130c75780806130b090614a43565b915050600a826130c09190614837565b915061309d565b60008167ffffffffffffffff8111156130e3576130e2614b79565b5b6040519080825280601f01601f1916602001820160405280156131155781602001600182028036833780820191505090505b5090505b600085146131a25760018261312e919061489c565b9150600a8561313d9190614a8c565b603061314991906147e1565b60f81b81838151811061315f5761315e614b4a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561319b9190614837565b9450613119565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561321f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613216906143cc565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561330e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613305906145ac565b60405180910390fd5b61331781612294565b15613357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334e9061456c565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008311156133ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b19061468c565b60405180910390fd5b6133c76000858386612e18565b6000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516134c4919061479b565b6fffffffffffffffffffffffffffffffff1681526020018583602001516134eb919061479b565b6fffffffffffffffffffffffffffffffff16815250600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506007600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561375a57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136fa6000888488612e24565b613739576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137309061454c565b60405180910390fd5b818061374490614a43565b925050808061375290614a43565b915050613689565b508060018190555061376f6000878588612e1e565b505050505050565b600080823b905060008111915050919050565b828054613796906149e0565b90600052602060002090601f0160209004810192826137b857600085556137ff565b82601f106137d157803560ff19168380011785556137ff565b828001600101855582156137ff579182015b828111156137fe5782358255916020019190600101906137e3565b5b50905061380c919061384a565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561386357600081600090555060010161384b565b5090565b600061387a61387584614707565b6146e2565b90508281526020810184848401111561389657613895614bb7565b5b6138a1848285614974565b509392505050565b6000813590506138b881615302565b92915050565b6000815190506138cd81615302565b92915050565b6000813590506138e281615319565b92915050565b6000813590506138f781615330565b92915050565b60008151905061390c81615330565b92915050565b600082601f83011261392757613926614bad565b5b8135613937848260208601613867565b91505092915050565b60008083601f84011261395657613955614bad565b5b8235905067ffffffffffffffff81111561397357613972614ba8565b5b60208301915083600182028301111561398f5761398e614bb2565b5b9250929050565b6000813590506139a581615347565b92915050565b6000602082840312156139c1576139c0614bc1565b5b60006139cf848285016138a9565b91505092915050565b6000602082840312156139ee576139ed614bc1565b5b60006139fc848285016138be565b91505092915050565b60008060408385031215613a1c57613a1b614bc1565b5b6000613a2a858286016138a9565b9250506020613a3b858286016138a9565b9150509250929050565b600080600060608486031215613a5e57613a5d614bc1565b5b6000613a6c868287016138a9565b9350506020613a7d868287016138a9565b9250506040613a8e86828701613996565b9150509250925092565b60008060008060808587031215613ab257613ab1614bc1565b5b6000613ac0878288016138a9565b9450506020613ad1878288016138a9565b9350506040613ae287828801613996565b925050606085013567ffffffffffffffff811115613b0357613b02614bbc565b5b613b0f87828801613912565b91505092959194509250565b60008060408385031215613b3257613b31614bc1565b5b6000613b40858286016138a9565b9250506020613b51858286016138d3565b9150509250929050565b60008060408385031215613b7257613b71614bc1565b5b6000613b80858286016138a9565b9250506020613b9185828601613996565b9150509250929050565b600060208284031215613bb157613bb0614bc1565b5b6000613bbf848285016138e8565b91505092915050565b600060208284031215613bde57613bdd614bc1565b5b6000613bec848285016138fd565b91505092915050565b60008060208385031215613c0c57613c0b614bc1565b5b600083013567ffffffffffffffff811115613c2a57613c29614bbc565b5b613c3685828601613940565b92509250509250929050565b600060208284031215613c5857613c57614bc1565b5b6000613c6684828501613996565b91505092915050565b60008060408385031215613c8657613c85614bc1565b5b6000613c9485828601613996565b9250506020613ca585828601613996565b9150509250929050565b613cb8816148d0565b82525050565b613cc7816148d0565b82525050565b613cd6816148e2565b82525050565b6000613ce78261474d565b613cf18185614763565b9350613d01818560208601614983565b613d0a81614bc6565b840191505092915050565b6000613d2082614758565b613d2a818561477f565b9350613d3a818560208601614983565b613d4381614bc6565b840191505092915050565b6000613d5982614758565b613d638185614790565b9350613d73818560208601614983565b80840191505092915050565b60008154613d8c816149e0565b613d968186614790565b94506001821660008114613db15760018114613dc257613df5565b60ff19831686528186019350613df5565b613dcb85614738565b60005b83811015613ded57815481890152600182019150602081019050613dce565b838801955050505b50505092915050565b6000613e0b60228361477f565b9150613e1682614bd7565b604082019050919050565b6000613e2e60098361477f565b9150613e3982614c26565b602082019050919050565b6000613e5160268361477f565b9150613e5c82614c4f565b604082019050919050565b6000613e74602a8361477f565b9150613e7f82614c9e565b604082019050919050565b6000613e9760238361477f565b9150613ea282614ced565b604082019050919050565b6000613eba60318361477f565b9150613ec582614d3c565b604082019050919050565b6000613edd60398361477f565b9150613ee882614d8b565b604082019050919050565b6000613f0060188361477f565b9150613f0b82614dda565b602082019050919050565b6000613f23602b8361477f565b9150613f2e82614e03565b604082019050919050565b6000613f4660268361477f565b9150613f5182614e52565b604082019050919050565b6000613f6960208361477f565b9150613f7482614ea1565b602082019050919050565b6000613f8c602f8361477f565b9150613f9782614eca565b604082019050919050565b6000613faf601a8361477f565b9150613fba82614f19565b602082019050919050565b6000613fd260328361477f565b9150613fdd82614f42565b604082019050919050565b6000613ff560228361477f565b915061400082614f91565b604082019050919050565b6000614018600c8361477f565b915061402382614fe0565b602082019050919050565b600061403b600083614774565b915061404682615009565b600082019050919050565b600061405e60108361477f565b91506140698261500c565b602082019050919050565b600061408160338361477f565b915061408c82615035565b604082019050919050565b60006140a4601d8361477f565b91506140af82615084565b602082019050919050565b60006140c760118361477f565b91506140d2826150ad565b602082019050919050565b60006140ea60218361477f565b91506140f5826150d6565b604082019050919050565b600061410d602e8361477f565b915061411882615125565b604082019050919050565b600061413060268361477f565b915061413b82615174565b604082019050919050565b6000614153601f8361477f565b915061415e826151c3565b602082019050919050565b6000614176602f8361477f565b9150614181826151ec565b604082019050919050565b600061419960098361477f565b91506141a48261523b565b602082019050919050565b60006141bc602d8361477f565b91506141c782615264565b604082019050919050565b60006141df60228361477f565b91506141ea826152b3565b604082019050919050565b60408201600082015161420b6000850182613caf565b50602082015161421e6020850182614233565b50505050565b61422d81614956565b82525050565b61423c81614960565b82525050565b600061424e8286613d4e565b915061425a8285613d4e565b91506142668284613d7f565b9150819050949350505050565b600061427e8261402e565b9150819050919050565b600060208201905061429d6000830184613cbe565b92915050565b60006080820190506142b86000830187613cbe565b6142c56020830186613cbe565b6142d26040830185614224565b81810360608301526142e48184613cdc565b905095945050505050565b60006020820190506143046000830184613ccd565b92915050565b600060208201905081810360008301526143248184613d15565b905092915050565b6000602082019050818103600083015261434581613dfe565b9050919050565b6000602082019050818103600083015261436581613e21565b9050919050565b6000602082019050818103600083015261438581613e44565b9050919050565b600060208201905081810360008301526143a581613e67565b9050919050565b600060208201905081810360008301526143c581613e8a565b9050919050565b600060208201905081810360008301526143e581613ead565b9050919050565b6000602082019050818103600083015261440581613ed0565b9050919050565b6000602082019050818103600083015261442581613ef3565b9050919050565b6000602082019050818103600083015261444581613f16565b9050919050565b6000602082019050818103600083015261446581613f39565b9050919050565b6000602082019050818103600083015261448581613f5c565b9050919050565b600060208201905081810360008301526144a581613f7f565b9050919050565b600060208201905081810360008301526144c581613fa2565b9050919050565b600060208201905081810360008301526144e581613fc5565b9050919050565b6000602082019050818103600083015261450581613fe8565b9050919050565b600060208201905081810360008301526145258161400b565b9050919050565b6000602082019050818103600083015261454581614051565b9050919050565b6000602082019050818103600083015261456581614074565b9050919050565b6000602082019050818103600083015261458581614097565b9050919050565b600060208201905081810360008301526145a5816140ba565b9050919050565b600060208201905081810360008301526145c5816140dd565b9050919050565b600060208201905081810360008301526145e581614100565b9050919050565b6000602082019050818103600083015261460581614123565b9050919050565b6000602082019050818103600083015261462581614146565b9050919050565b6000602082019050818103600083015261464581614169565b9050919050565b600060208201905081810360008301526146658161418c565b9050919050565b60006020820190508181036000830152614685816141af565b9050919050565b600060208201905081810360008301526146a5816141d2565b9050919050565b60006040820190506146c160008301846141f5565b92915050565b60006020820190506146dc6000830184614224565b92915050565b60006146ec6146fd565b90506146f88282614a12565b919050565b6000604051905090565b600067ffffffffffffffff82111561472257614721614b79565b5b61472b82614bc6565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006147a68261491a565b91506147b18361491a565b9250826fffffffffffffffffffffffffffffffff038211156147d6576147d5614abd565b5b828201905092915050565b60006147ec82614956565b91506147f783614956565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561482c5761482b614abd565b5b828201905092915050565b600061484282614956565b915061484d83614956565b92508261485d5761485c614aec565b5b828204905092915050565b60006148738261491a565b915061487e8361491a565b92508282101561489157614890614abd565b5b828203905092915050565b60006148a782614956565b91506148b283614956565b9250828210156148c5576148c4614abd565b5b828203905092915050565b60006148db82614936565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156149a1578082015181840152602081019050614986565b838111156149b0576000848401525b50505050565b60006149c182614956565b915060008214156149d5576149d4614abd565b5b600182039050919050565b600060028204905060018216806149f857607f821691505b60208210811415614a0c57614a0b614b1b565b5b50919050565b614a1b82614bc6565b810181811067ffffffffffffffff82111715614a3a57614a39614b79565b5b80604052505050565b6000614a4e82614956565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a8157614a80614abd565b5b600182019050919050565b6000614a9782614956565b9150614aa283614956565b925082614ab257614ab1614aec565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f742073746172740000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e740000000000000000000000000000000000000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f6e6f74207661696c6420746f6b656e4964000000000000000000000000000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f6e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61530b816148d0565b811461531657600080fd5b50565b615322816148e2565b811461532d57600080fd5b50565b615339816148ee565b811461534457600080fd5b50565b61535081614956565b811461535b57600080fd5b5056fea2646970667358221220d99f3260e85c0be86043f568e54ddbf1c2148488b80f8838a9893608577af7e964736f6c6343000807003300000000000000000000000000000000000000000000000000000000000013880000000000000000000000000000000000000000000000000000000000001388
Deployed Bytecode
0x6080604052600436106101f95760003560e01c806370a082311161010d578063a22cb465116100a0578063c87b56dd1161006f578063c87b56dd14610732578063d7224ba01461076f578063dc33e6811461079a578063e985e9c5146107d7578063f2fde38b14610814576101f9565b8063a22cb465146106a0578063ac446002146106c9578063b88d4fde146106e0578063ba0a064314610709576101f9565b80638da5cb5b116100dc5780638da5cb5b146105e45780639231ab2a1461060f57806395d89b411461064c5780639dc29fac14610677576101f9565b806370a082311461053c578063715018a61461057957806375f890ab146105905780638bc35c2f146105b9576101f9565b80632d20fb60116101905780634f6ccce71161015f5780634f6ccce71461044057806355f804b31461047d5780636151797d146104a65780636352211e146104e35780636f243a9c14610520576101f9565b80632d20fb60146103745780632f745c591461039d5780633010fa13146103da57806342842e0e14610417576101f9565b806310952e36116101cc57806310952e36146102cc57806318160ddd146102e357806323b872dd1461030e578063277abd3714610337576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190613b9b565b61083d565b60405161023291906142ef565b60405180910390f35b34801561024757600080fd5b50610250610987565b60405161025d919061430a565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190613c42565b610a19565b60405161029a9190614288565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c59190613b5b565b610a9e565b005b3480156102d857600080fd5b506102e1610bb7565b005b3480156102ef57600080fd5b506102f8610c5f565b60405161030591906146c7565b60405180910390f35b34801561031a57600080fd5b5061033560048036038101906103309190613a45565b610c74565b005b34801561034357600080fd5b5061035e60048036038101906103599190613c42565b610c84565b60405161036b9190614288565b60405180910390f35b34801561038057600080fd5b5061039b60048036038101906103969190613c42565b610cc1565b005b3480156103a957600080fd5b506103c460048036038101906103bf9190613b5b565b610d9f565b6040516103d191906146c7565b60405180910390f35b3480156103e657600080fd5b5061040160048036038101906103fc9190613c42565b610fa6565b60405161040e91906142ef565b60405180910390f35b34801561042357600080fd5b5061043e60048036038101906104399190613a45565b610fc6565b005b34801561044c57600080fd5b5061046760048036038101906104629190613c42565b610fe6565b60405161047491906146c7565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f9190613bf5565b611039565b005b3480156104b257600080fd5b506104cd60048036038101906104c89190613c42565b6110cb565b6040516104da91906142ef565b60405180910390f35b3480156104ef57600080fd5b5061050a60048036038101906105059190613c42565b6110fb565b6040516105179190614288565b60405180910390f35b61053a60048036038101906105359190613c6f565b611111565b005b34801561054857600080fd5b50610563600480360381019061055e91906139ab565b61148b565b60405161057091906146c7565b60405180910390f35b34801561058557600080fd5b5061058e611574565b005b34801561059c57600080fd5b506105b760048036038101906105b291906139ab565b6115fc565b005b3480156105c557600080fd5b506105ce6116d7565b6040516105db91906146c7565b60405180910390f35b3480156105f057600080fd5b506105f96116fb565b6040516106069190614288565b60405180910390f35b34801561061b57600080fd5b5061063660048036038101906106319190613c42565b611724565b60405161064391906146ac565b60405180910390f35b34801561065857600080fd5b5061066161173c565b60405161066e919061430a565b60405180910390f35b34801561068357600080fd5b5061069e60048036038101906106999190613b5b565b6117ce565b005b3480156106ac57600080fd5b506106c760048036038101906106c29190613b1b565b611b00565b005b3480156106d557600080fd5b506106de611c81565b005b3480156106ec57600080fd5b5061070760048036038101906107029190613a98565b611e02565b005b34801561071557600080fd5b50610730600480360381019061072b9190613bf5565b611e5e565b005b34801561073e57600080fd5b5061075960048036038101906107549190613c42565b611ef0565b604051610766919061430a565b60405180910390f35b34801561077b57600080fd5b50610784612086565b60405161079191906146c7565b60405180910390f35b3480156107a657600080fd5b506107c160048036038101906107bc91906139ab565b61208c565b6040516107ce91906146c7565b60405180910390f35b3480156107e357600080fd5b506107fe60048036038101906107f99190613a05565b61209e565b60405161080b91906142ef565b60405180910390f35b34801561082057600080fd5b5061083b600480360381019061083691906139ab565b612132565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061090857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061097057507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610980575061097f8261222a565b5b9050919050565b606060028054610996906149e0565b80601f01602080910402602001604051908101604052809291908181526020018280546109c2906149e0565b8015610a0f5780601f106109e457610100808354040283529160200191610a0f565b820191906000526020600020905b8154815290600101906020018083116109f257829003601f168201915b5050505050905090565b6000610a2482612294565b610a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5a9061466c565b60405180910390fd5b6009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aa9826110fb565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b11906144ec565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b396122a2565b73ffffffffffffffffffffffffffffffffffffffff161480610b685750610b6781610b626122a2565b61209e565b5b610ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9e906143ec565b60405180910390fd5b610bb28383836122aa565b505050565b610bbf6122a2565b73ffffffffffffffffffffffffffffffffffffffff16610bdd6116fb565b73ffffffffffffffffffffffffffffffffffffffff1614610c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2a9061446c565b60405180910390fd5b600660009054906101000a900460ff1615600660006101000a81548160ff021916908315150217905550565b600060018054610c6f919061489c565b905090565b610c7f83838361235c565b505050565b6000600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610cc96122a2565b73ffffffffffffffffffffffffffffffffffffffff16610ce76116fb565b73ffffffffffffffffffffffffffffffffffffffff1614610d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d349061446c565b60405180910390fd5b6002600d541415610d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7a9061460c565b60405180910390fd5b6002600d81905550610d94816128a5565b6001600d8190555050565b6000610daa8361148b565b821115610dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de39061432c565b60405180910390fd5b6000610df6610c5f565b9050600060019050600080600190505b83811015610f64576000600760008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610ef857806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f505786841415610f41578195505050505050610fa0565b8380610f4c90614a43565b9450505b508080610f5c90614a43565b915050610e06565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f97906145cc565b60405180910390fd5b92915050565b600f6020528060005260406000206000915054906101000a900460ff1681565b610fe183838360405180602001604052806000815250611e02565b505050565b6000610ff0610c5f565b8210611031576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611028906143ac565b60405180910390fd5b819050919050565b6110416122a2565b73ffffffffffffffffffffffffffffffffffffffff1661105f6116fb565b73ffffffffffffffffffffffffffffffffffffffff16146110b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ac9061446c565b60405180910390fd5b8181601191906110c692919061378a565b505050565b600080600f600084815260200190815260200160002060009054906101000a900460ff1690508015915050919050565b600061110682612b33565b600001519050919050565b60011515600e60009054906101000a900460ff16151514611167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115e9061434c565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000013886001611192610c5f565b61119c91906147e1565b106111dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d39061450c565b60405180910390fd5b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b815260040161123c91906146c7565b602060405180830381600087803b15801561125657600080fd5b505af115801561126a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128e91906139d8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614801561137d57508073ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016112fc91906146c7565b602060405180830381600087803b15801561131657600080fd5b505af115801561132a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134e91906139d8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6113bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b39061464c565b60405180910390fd5b600115156113c9846110cb565b15151480156113e45750600115156113e0836110cb565b1515145b611423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141a9061458c565b60405180910390fd5b6001600f600085815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f600084815260200190815260200160002060006101000a81548160ff021916908315150217905550611486336001612d36565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f39061442c565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61157c6122a2565b73ffffffffffffffffffffffffffffffffffffffff1661159a6116fb565b73ffffffffffffffffffffffffffffffffffffffff16146115f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e79061446c565b60405180910390fd5b6115fa6000612d54565b565b6116046122a2565b73ffffffffffffffffffffffffffffffffffffffff166116226116fb565b73ffffffffffffffffffffffffffffffffffffffff1614611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f9061446c565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e60006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000138881565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61172c613810565b61173582612b33565b9050919050565b60606003805461174b906149e0565b80601f0160208091040260200160405190810160405280929190818152602001828054611777906149e0565b80156117c45780601f10611799576101008083540402835291602001916117c4565b820191906000526020600020905b8154815290600101906020018083116117a757829003601f168201915b5050505050905090565b60006117d982612b33565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166118006122a2565b73ffffffffffffffffffffffffffffffffffffffff16148061185c57506118256122a2565b73ffffffffffffffffffffffffffffffffffffffff1661184484610a19565b73ffffffffffffffffffffffffffffffffffffffff16145b80611878575061187782600001516118726122a2565b61209e565b5b9050806118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b1906144cc565b60405180910390fd5b6118c8846000856001612e18565b6118d882600001518460006122aa565b6001600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166119469190614868565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555082600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46119e6846000856001612e1e565b83600b600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506007600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505050505050565b611b086122a2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6d906144ac565b60405180910390fd5b80600a6000611b836122a2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c306122a2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c7591906142ef565b60405180910390a35050565b611c896122a2565b73ffffffffffffffffffffffffffffffffffffffff16611ca76116fb565b73ffffffffffffffffffffffffffffffffffffffff1614611cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf49061446c565b60405180910390fd5b6002600d541415611d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3a9061460c565b60405180910390fd5b6002600d8190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611d7190614273565b60006040518083038185875af1925050503d8060008114611dae576040519150601f19603f3d011682016040523d82523d6000602084013e611db3565b606091505b5050905080611df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dee9061452c565b60405180910390fd5b506001600d81905550565b611e0d84848461235c565b611e1984848484612e24565b611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f9061454c565b60405180910390fd5b50505050565b611e666122a2565b73ffffffffffffffffffffffffffffffffffffffff16611e846116fb565b73ffffffffffffffffffffffffffffffffffffffff1614611eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed19061446c565b60405180910390fd5b818160059190611eeb92919061378a565b505050565b6060600660009054906101000a900460ff1615611f995760058054611f14906149e0565b80601f0160208091040260200160405190810160405280929190818152602001828054611f40906149e0565b8015611f8d5780601f10611f6257610100808354040283529160200191611f8d565b820191906000526020600020905b815481529060010190602001808311611f7057829003601f168201915b50505050509050612081565b611fa282612294565b611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd89061448c565b60405180910390fd5b6000821415612025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201c9061448c565b60405180910390fd5b600061202f612fbb565b9050600081511161204f576040518060200160405280600081525061207d565b806120598461304d565b600460405160200161206d93929190614242565b6040516020818303038152906040525b9150505b919050565b600c5481565b6000612097826131ae565b9050919050565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61213a6122a2565b73ffffffffffffffffffffffffffffffffffffffff166121586116fb565b73ffffffffffffffffffffffffffffffffffffffff16146121ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a59061446c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561221e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122159061436c565b60405180910390fd5b61222781612d54565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826009600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061236782612b33565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661238e6122a2565b73ffffffffffffffffffffffffffffffffffffffff1614806123ea57506123b36122a2565b73ffffffffffffffffffffffffffffffffffffffff166123d284610a19565b73ffffffffffffffffffffffffffffffffffffffff16145b80612406575061240582600001516124006122a2565b61209e565b5b905080612448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243f906144cc565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146124ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b19061444c565b60405180910390fd5b6124c78585856001612e18565b6124d760008484600001516122aa565b6001600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166125459190614868565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166125e9919061479b565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506007600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846126ef91906147e1565b9050600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156128355761276581612294565b15612834576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506007600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461289d8686866001612e1e565b505050505050565b6000600c549050600082116128ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e69061440c565b60405180910390fd5b6000600183836128ff91906147e1565b612909919061489c565b905060017f0000000000000000000000000000000000000000000000000000000000001388612938919061489c565b81111561296f5760017f000000000000000000000000000000000000000000000000000000000000138861296c919061489c565b90505b61297881612294565b6129b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ae906145ec565b60405180910390fd5b60008290505b818111612b1a57600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612b07576000612a3a82612b33565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506007600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612b1290614a43565b9150506129bd565b50600181612b2891906147e1565b600c81905550505050565b612b3b613810565b612b4482612294565b612b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7a9061438c565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000013888310612be75760017f000000000000000000000000000000000000000000000000000000000000138884612bda919061489c565b612be491906147e1565b90505b60008390505b818110612cf5576000600760008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ce157809350505050612d31565b508080612ced906149b6565b915050612bed565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d289061462c565b60405180910390fd5b919050565b612d50828260405180602001604052806000815250613297565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b50505050565b50505050565b6000612e458473ffffffffffffffffffffffffffffffffffffffff16613777565b15612fae578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e6e6122a2565b8786866040518563ffffffff1660e01b8152600401612e9094939291906142a3565b602060405180830381600087803b158015612eaa57600080fd5b505af1925050508015612edb57506040513d601f19601f82011682018060405250810190612ed89190613bc8565b60015b612f5e573d8060008114612f0b576040519150601f19603f3d011682016040523d82523d6000602084013e612f10565b606091505b50600081511415612f56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4d9061454c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612fb3565b600190505b949350505050565b606060118054612fca906149e0565b80601f0160208091040260200160405190810160405280929190818152602001828054612ff6906149e0565b80156130435780601f1061301857610100808354040283529160200191613043565b820191906000526020600020905b81548152906001019060200180831161302657829003601f168201915b5050505050905090565b60606000821415613095576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131a9565b600082905060005b600082146130c75780806130b090614a43565b915050600a826130c09190614837565b915061309d565b60008167ffffffffffffffff8111156130e3576130e2614b79565b5b6040519080825280601f01601f1916602001820160405280156131155781602001600182028036833780820191505090505b5090505b600085146131a25760018261312e919061489c565b9150600a8561313d9190614a8c565b603061314991906147e1565b60f81b81838151811061315f5761315e614b4a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561319b9190614837565b9450613119565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561321f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613216906143cc565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561330e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613305906145ac565b60405180910390fd5b61331781612294565b15613357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334e9061456c565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000013888311156133ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b19061468c565b60405180910390fd5b6133c76000858386612e18565b6000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516134c4919061479b565b6fffffffffffffffffffffffffffffffff1681526020018583602001516134eb919061479b565b6fffffffffffffffffffffffffffffffff16815250600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506007600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561375a57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136fa6000888488612e24565b613739576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137309061454c565b60405180910390fd5b818061374490614a43565b925050808061375290614a43565b915050613689565b508060018190555061376f6000878588612e1e565b505050505050565b600080823b905060008111915050919050565b828054613796906149e0565b90600052602060002090601f0160209004810192826137b857600085556137ff565b82601f106137d157803560ff19168380011785556137ff565b828001600101855582156137ff579182015b828111156137fe5782358255916020019190600101906137e3565b5b50905061380c919061384a565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561386357600081600090555060010161384b565b5090565b600061387a61387584614707565b6146e2565b90508281526020810184848401111561389657613895614bb7565b5b6138a1848285614974565b509392505050565b6000813590506138b881615302565b92915050565b6000815190506138cd81615302565b92915050565b6000813590506138e281615319565b92915050565b6000813590506138f781615330565b92915050565b60008151905061390c81615330565b92915050565b600082601f83011261392757613926614bad565b5b8135613937848260208601613867565b91505092915050565b60008083601f84011261395657613955614bad565b5b8235905067ffffffffffffffff81111561397357613972614ba8565b5b60208301915083600182028301111561398f5761398e614bb2565b5b9250929050565b6000813590506139a581615347565b92915050565b6000602082840312156139c1576139c0614bc1565b5b60006139cf848285016138a9565b91505092915050565b6000602082840312156139ee576139ed614bc1565b5b60006139fc848285016138be565b91505092915050565b60008060408385031215613a1c57613a1b614bc1565b5b6000613a2a858286016138a9565b9250506020613a3b858286016138a9565b9150509250929050565b600080600060608486031215613a5e57613a5d614bc1565b5b6000613a6c868287016138a9565b9350506020613a7d868287016138a9565b9250506040613a8e86828701613996565b9150509250925092565b60008060008060808587031215613ab257613ab1614bc1565b5b6000613ac0878288016138a9565b9450506020613ad1878288016138a9565b9350506040613ae287828801613996565b925050606085013567ffffffffffffffff811115613b0357613b02614bbc565b5b613b0f87828801613912565b91505092959194509250565b60008060408385031215613b3257613b31614bc1565b5b6000613b40858286016138a9565b9250506020613b51858286016138d3565b9150509250929050565b60008060408385031215613b7257613b71614bc1565b5b6000613b80858286016138a9565b9250506020613b9185828601613996565b9150509250929050565b600060208284031215613bb157613bb0614bc1565b5b6000613bbf848285016138e8565b91505092915050565b600060208284031215613bde57613bdd614bc1565b5b6000613bec848285016138fd565b91505092915050565b60008060208385031215613c0c57613c0b614bc1565b5b600083013567ffffffffffffffff811115613c2a57613c29614bbc565b5b613c3685828601613940565b92509250509250929050565b600060208284031215613c5857613c57614bc1565b5b6000613c6684828501613996565b91505092915050565b60008060408385031215613c8657613c85614bc1565b5b6000613c9485828601613996565b9250506020613ca585828601613996565b9150509250929050565b613cb8816148d0565b82525050565b613cc7816148d0565b82525050565b613cd6816148e2565b82525050565b6000613ce78261474d565b613cf18185614763565b9350613d01818560208601614983565b613d0a81614bc6565b840191505092915050565b6000613d2082614758565b613d2a818561477f565b9350613d3a818560208601614983565b613d4381614bc6565b840191505092915050565b6000613d5982614758565b613d638185614790565b9350613d73818560208601614983565b80840191505092915050565b60008154613d8c816149e0565b613d968186614790565b94506001821660008114613db15760018114613dc257613df5565b60ff19831686528186019350613df5565b613dcb85614738565b60005b83811015613ded57815481890152600182019150602081019050613dce565b838801955050505b50505092915050565b6000613e0b60228361477f565b9150613e1682614bd7565b604082019050919050565b6000613e2e60098361477f565b9150613e3982614c26565b602082019050919050565b6000613e5160268361477f565b9150613e5c82614c4f565b604082019050919050565b6000613e74602a8361477f565b9150613e7f82614c9e565b604082019050919050565b6000613e9760238361477f565b9150613ea282614ced565b604082019050919050565b6000613eba60318361477f565b9150613ec582614d3c565b604082019050919050565b6000613edd60398361477f565b9150613ee882614d8b565b604082019050919050565b6000613f0060188361477f565b9150613f0b82614dda565b602082019050919050565b6000613f23602b8361477f565b9150613f2e82614e03565b604082019050919050565b6000613f4660268361477f565b9150613f5182614e52565b604082019050919050565b6000613f6960208361477f565b9150613f7482614ea1565b602082019050919050565b6000613f8c602f8361477f565b9150613f9782614eca565b604082019050919050565b6000613faf601a8361477f565b9150613fba82614f19565b602082019050919050565b6000613fd260328361477f565b9150613fdd82614f42565b604082019050919050565b6000613ff560228361477f565b915061400082614f91565b604082019050919050565b6000614018600c8361477f565b915061402382614fe0565b602082019050919050565b600061403b600083614774565b915061404682615009565b600082019050919050565b600061405e60108361477f565b91506140698261500c565b602082019050919050565b600061408160338361477f565b915061408c82615035565b604082019050919050565b60006140a4601d8361477f565b91506140af82615084565b602082019050919050565b60006140c760118361477f565b91506140d2826150ad565b602082019050919050565b60006140ea60218361477f565b91506140f5826150d6565b604082019050919050565b600061410d602e8361477f565b915061411882615125565b604082019050919050565b600061413060268361477f565b915061413b82615174565b604082019050919050565b6000614153601f8361477f565b915061415e826151c3565b602082019050919050565b6000614176602f8361477f565b9150614181826151ec565b604082019050919050565b600061419960098361477f565b91506141a48261523b565b602082019050919050565b60006141bc602d8361477f565b91506141c782615264565b604082019050919050565b60006141df60228361477f565b91506141ea826152b3565b604082019050919050565b60408201600082015161420b6000850182613caf565b50602082015161421e6020850182614233565b50505050565b61422d81614956565b82525050565b61423c81614960565b82525050565b600061424e8286613d4e565b915061425a8285613d4e565b91506142668284613d7f565b9150819050949350505050565b600061427e8261402e565b9150819050919050565b600060208201905061429d6000830184613cbe565b92915050565b60006080820190506142b86000830187613cbe565b6142c56020830186613cbe565b6142d26040830185614224565b81810360608301526142e48184613cdc565b905095945050505050565b60006020820190506143046000830184613ccd565b92915050565b600060208201905081810360008301526143248184613d15565b905092915050565b6000602082019050818103600083015261434581613dfe565b9050919050565b6000602082019050818103600083015261436581613e21565b9050919050565b6000602082019050818103600083015261438581613e44565b9050919050565b600060208201905081810360008301526143a581613e67565b9050919050565b600060208201905081810360008301526143c581613e8a565b9050919050565b600060208201905081810360008301526143e581613ead565b9050919050565b6000602082019050818103600083015261440581613ed0565b9050919050565b6000602082019050818103600083015261442581613ef3565b9050919050565b6000602082019050818103600083015261444581613f16565b9050919050565b6000602082019050818103600083015261446581613f39565b9050919050565b6000602082019050818103600083015261448581613f5c565b9050919050565b600060208201905081810360008301526144a581613f7f565b9050919050565b600060208201905081810360008301526144c581613fa2565b9050919050565b600060208201905081810360008301526144e581613fc5565b9050919050565b6000602082019050818103600083015261450581613fe8565b9050919050565b600060208201905081810360008301526145258161400b565b9050919050565b6000602082019050818103600083015261454581614051565b9050919050565b6000602082019050818103600083015261456581614074565b9050919050565b6000602082019050818103600083015261458581614097565b9050919050565b600060208201905081810360008301526145a5816140ba565b9050919050565b600060208201905081810360008301526145c5816140dd565b9050919050565b600060208201905081810360008301526145e581614100565b9050919050565b6000602082019050818103600083015261460581614123565b9050919050565b6000602082019050818103600083015261462581614146565b9050919050565b6000602082019050818103600083015261464581614169565b9050919050565b600060208201905081810360008301526146658161418c565b9050919050565b60006020820190508181036000830152614685816141af565b9050919050565b600060208201905081810360008301526146a5816141d2565b9050919050565b60006040820190506146c160008301846141f5565b92915050565b60006020820190506146dc6000830184614224565b92915050565b60006146ec6146fd565b90506146f88282614a12565b919050565b6000604051905090565b600067ffffffffffffffff82111561472257614721614b79565b5b61472b82614bc6565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006147a68261491a565b91506147b18361491a565b9250826fffffffffffffffffffffffffffffffff038211156147d6576147d5614abd565b5b828201905092915050565b60006147ec82614956565b91506147f783614956565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561482c5761482b614abd565b5b828201905092915050565b600061484282614956565b915061484d83614956565b92508261485d5761485c614aec565b5b828204905092915050565b60006148738261491a565b915061487e8361491a565b92508282101561489157614890614abd565b5b828203905092915050565b60006148a782614956565b91506148b283614956565b9250828210156148c5576148c4614abd565b5b828203905092915050565b60006148db82614936565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156149a1578082015181840152602081019050614986565b838111156149b0576000848401525b50505050565b60006149c182614956565b915060008214156149d5576149d4614abd565b5b600182039050919050565b600060028204905060018216806149f857607f821691505b60208210811415614a0c57614a0b614b1b565b5b50919050565b614a1b82614bc6565b810181811067ffffffffffffffff82111715614a3a57614a39614b79565b5b80604052505050565b6000614a4e82614956565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a8157614a80614abd565b5b600182019050919050565b6000614a9782614956565b9150614aa283614956565b925082614ab257614ab1614aec565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f742073746172740000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e740000000000000000000000000000000000000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f6e6f74207661696c6420746f6b656e4964000000000000000000000000000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f6e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61530b816148d0565b811461531657600080fd5b50565b615322816148e2565b811461532d57600080fd5b50565b615339816148ee565b811461534457600080fd5b50565b61535081614956565b811461535b57600080fd5b5056fea2646970667358221220d99f3260e85c0be86043f568e54ddbf1c2148488b80f8838a9893608577af7e964736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000013880000000000000000000000000000000000000000000000000000000000001388
-----Decoded View---------------
Arg [0] : maxBatchSize_ (uint256): 5000
Arg [1] : collectionSize_ (uint256): 5000
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000001388
Arg [1] : 0000000000000000000000000000000000000000000000000000000000001388
Deployed Bytecode Sourcemap
511:2219:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4501:370:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6227:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7923:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7486:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2922:71;;;;;;;;;;;;;:::i;:::-;;3059:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8773:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12364:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2343:118:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3692:745:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;951:39:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8978:157:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3224:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2050:100:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1743:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6050:118:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1025:597:9;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4927:211:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1650:94:10;;;;;;;;;;;;;:::i;:::-;;1626:111:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;567:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;999:87:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2580:147:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6382:98:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11572:788;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8191:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2156:181:9;;;;;;;;;;;;;:::i;:::-;;9198:311:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2820:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6547:561;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14517:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2467:107:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8528:186:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1899:192:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4501:370:3;4628:4;4673:25;4658:40;;;:11;:40;;;;:99;;;;4724:33;4709:48;;;:11;:48;;;;4658:99;:160;;;;4783:35;4768:50;;;:11;:50;;;;4658:160;:207;;;;4829:36;4853:11;4829:23;:36::i;:::-;4658:207;4644:221;;4501:370;;;:::o;6227:94::-;6281:13;6310:5;6303:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6227:94;:::o;7923:204::-;7991:7;8015:16;8023:7;8015;:16::i;:::-;8007:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;8097:15;:24;8113:7;8097:24;;;;;;;;;;;;;;;;;;;;;8090:31;;7923:204;;;:::o;7486:379::-;7555:13;7571:24;7587:7;7571:15;:24::i;:::-;7555:40;;7616:5;7610:11;;:2;:11;;;;7602:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;7701:5;7685:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;7710:37;7727:5;7734:12;:10;:12::i;:::-;7710:16;:37::i;:::-;7685:62;7669:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;7831:28;7840:2;7844:7;7853:5;7831:8;:28::i;:::-;7548:317;7486:379;;:::o;2922:71::-;1230:12:10;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2978:8:3::1;;;;;;;;;;;2977:9;2967:8;;:19;;;;;;;;;;;;;;;;;;2922:71::o:0;3059:96::-;3112:7;3148:1;3135:12;;:14;;;;:::i;:::-;3128:21;;3059:96;:::o;8773:142::-;8881:28;8891:4;8897:2;8901:7;8881:9;:28::i;:::-;8773:142;;;:::o;12364:107::-;12420:7;12442:13;:22;12456:7;12442:22;;;;;;;;;;;;;;;;;;;;;12435:29;;12364:107;;;:::o;2343:118:9:-;1230:12:10;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1713:1:11::1;2309:7;;:19;;2301:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1713:1;2442:7;:18;;;;2427:28:9::2;2446:8;2427:18;:28::i;:::-;1669:1:11::1;2621:7;:22;;;;2343:118:9::0;:::o;3692:745:3:-;3801:7;3837:16;3847:5;3837:9;:16::i;:::-;3828:5;:25;;3820:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;3899:22;3924:13;:11;:13::i;:::-;3899:38;;3944:19;3966:1;3944:23;;3974:25;4024:9;4036:1;4024:13;;4019:350;4043:14;4039:1;:18;4019:350;;;4073:31;4107:11;:14;4119:1;4107:14;;;;;;;;;;;4073:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4160:1;4134:28;;:9;:14;;;:28;;;4130:89;;4195:9;:14;;;4175:34;;4130:89;4252:5;4231:26;;:17;:26;;;4227:135;;;4289:5;4274:11;:20;4270:59;;;4316:1;4309:8;;;;;;;;;4270:59;4339:13;;;;;:::i;:::-;;;;4227:135;4064:305;4059:3;;;;;:::i;:::-;;;;4019:350;;;;4375:56;;;;;;;;;;:::i;:::-;;;;;;;;3692:745;;;;;:::o;951:39:9:-;;;;;;;;;;;;;;;;;;;;;;:::o;8978:157:3:-;9090:39;9107:4;9113:2;9117:7;9090:39;;;;;;;;;;;;:16;:39::i;:::-;8978:157;;;:::o;3224:177::-;3291:7;3323:13;:11;:13::i;:::-;3315:5;:21;3307:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;3390:5;3383:12;;3224:177;;;:::o;2050:100:9:-;1230:12:10;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2137:7:9::1;;2121:13;:23;;;;;;;:::i;:::-;;2050:100:::0;;:::o;1743:128::-;1803:4;1815:10;1828:7;:17;1836:8;1828:17;;;;;;;;;;;;;;;;;;;;;1815:30;;1860:5;1859:6;1852:13;;;1743:128;;;:::o;6050:118:3:-;6114:7;6137:20;6149:7;6137:11;:20::i;:::-;:25;;;6130:32;;6050:118;;;:::o;1025:597:9:-;1139:4;1128:15;;:7;;;;;;;;;;;:15;;;1120:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;1193:14;1189:1;1173:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:34;1165:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;1232:32;1285:13;;;;;;;;;;;1232:67;;1330:14;:22;;;1353:8;1330:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1316:46;;:10;:46;;;:96;;;;;1380:14;:22;;;1403:8;1380:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1366:46;;:10;:46;;;1316:96;1308:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;1466:4;1442:28;;:22;1455:8;1442:12;:22::i;:::-;:28;;;:58;;;;;1496:4;1472:28;;:22;1485:8;1472:12;:22::i;:::-;:28;;;1442:58;1434:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;1548:4;1530:7;:17;1538:8;1530:17;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;1579:4;1561:7;:17;1569:8;1561:17;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;1591:23;1601:10;1612:1;1591:9;:23::i;:::-;1111:511;1025:597;;:::o;4927:211:3:-;4991:7;5032:1;5015:19;;:5;:19;;;;5007:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;5104:12;:19;5117:5;5104:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;5096:36;;5089:43;;4927:211;;;:::o;1650:94:10:-;1230:12;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1715:21:::1;1733:1;1715:9;:21::i;:::-;1650:94::o:0;1626:111:9:-;1230:12:10;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1705:6:9::1;1689:13;;:22;;;;;;;;;;;;;;;;;;1727:4;1718:7;;:13;;;;;;;;;;;;;;;;;;1626:111:::0;:::o;567:48::-;;;:::o;999:87:10:-;1045:7;1072:6;;;;;;;;;;;1065:13;;999:87;:::o;2580:147:9:-;2661:21;;:::i;:::-;2701:20;2713:7;2701:11;:20::i;:::-;2694:27;;2580:147;;;:::o;6382:98:3:-;6438:13;6467:7;6460:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6382:98;:::o;11572:788::-;11632:35;11670:21;11682:8;11670:11;:21::i;:::-;11632:59;;11698:22;11740:13;:18;;;11724:34;;:12;:10;:12::i;:::-;:34;;;:82;;;;11794:12;:10;:12::i;:::-;11769:37;;:21;11781:8;11769:11;:21::i;:::-;:37;;;11724:82;:143;;;;11817:50;11834:13;:18;;;11854:12;:10;:12::i;:::-;11817:16;:50::i;:::-;11724:143;11698:170;;11891:17;11875:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;11983:51;12005:4;12019:1;12022:8;12032:1;11983:21;:51::i;:::-;12041:50;12050:13;:18;;;12070:8;12088:1;12041:8;:50::i;:::-;12128:1;12098:12;:18;12111:4;12098:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12168:8;12164:1;12141:36;;12150:4;12141:36;;;;;;;;;;;;12184:51;12205:4;12219:1;12223:8;12233:1;12184:20;:51::i;:::-;12268:4;12242:13;:23;12256:8;12242:23;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;12303:51;;;;;;;;12326:1;12303:51;;;;;;12337:15;12303:51;;;;;12279:11;:21;12291:8;12279:21;;;;;;;;;;;:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11625:735;;11572:788;;:::o;8191:274::-;8294:12;:10;:12::i;:::-;8282:24;;:8;:24;;;;8274:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;8391:8;8346:18;:32;8365:12;:10;:12::i;:::-;8346:32;;;;;;;;;;;;;;;:42;8379:8;8346:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;8440:8;8411:48;;8426:12;:10;:12::i;:::-;8411:48;;;8450:8;8411:48;;;;;;:::i;:::-;;;;;;;;8191:274;;:::o;2156:181:9:-;1230:12:10;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1713:1:11::1;2309:7;;:19;;2301:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1713:1;2442:7;:18;;;;2221:12:9::2;2239:10;:15;;2262:21;2239:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2220:68;;;2303:7;2295:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;2213:124;1669:1:11::1;2621:7;:22;;;;2156:181:9:o:0;9198:311:3:-;9335:28;9345:4;9351:2;9355:7;9335:9;:28::i;:::-;9386:48;9409:4;9415:2;9419:7;9428:5;9386:22;:48::i;:::-;9370:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;9198:311;;;;:::o;2820:98::-;1230:12:10;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2902:8:3::1;;2890:9;:20;;;;;;;:::i;:::-;;2820:98:::0;;:::o;6547:561::-;6645:13;6673:8;;;;;;;;;;;6670:433;;;6698:9;6691:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6670:433;6742:16;6750:7;6742;:16::i;:::-;6726:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;6855:1;6846:7;:10;;6830:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;6928:21;6952:10;:8;:10::i;:::-;6928:34;;7007:1;6989:7;6983:21;:25;:118;;;;;;;;;;;;;;;;;7044:7;7053:18;:7;:16;:18::i;:::-;7072:13;7027:59;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6983:118;6969:132;;;6547:561;;;;:::o;14517:43::-;;;;:::o;2467:107:9:-;2525:7;2548:20;2562:5;2548:13;:20::i;:::-;2541:27;;2467:107;;;:::o;8528:186:3:-;8650:4;8673:18;:25;8692:5;8673:25;;;;;;;;;;;;;;;:35;8699:8;8673:35;;;;;;;;;;;;;;;;;;;;;;;;;8666:42;;8528:186;;;;:::o;1899:192:10:-;1230:12;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2008:1:::1;1988:22;;:8;:22;;;;1980:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2064:19;2074:8;2064:9;:19::i;:::-;1899:192:::0;:::o;787:157:2:-;872:4;911:25;896:40;;;:11;:40;;;;889:47;;787:157;;;:::o;9748:105:3:-;9805:4;9835:12;;9825:7;:22;9818:29;;9748:105;;;:::o;601:98:1:-;654:7;681:10;674:17;;601:98;:::o;14339:172:3:-;14463:2;14436:15;:24;14452:7;14436:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;14497:7;14493:2;14477:28;;14486:5;14477:28;;;;;;;;;;;;14339:172;;;:::o;12703:1530::-;12800:35;12838:20;12850:7;12838:11;:20::i;:::-;12800:58;;12867:22;12909:13;:18;;;12893:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;12962:12;:10;:12::i;:::-;12938:36;;:20;12950:7;12938:11;:20::i;:::-;:36;;;12893:81;:142;;;;12985:50;13002:13;:18;;;13022:12;:10;:12::i;:::-;12985:16;:50::i;:::-;12893:142;12867:169;;13061:17;13045:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;13193:4;13171:26;;:13;:18;;;:26;;;13155:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;13338:43;13360:4;13366:2;13370:7;13379:1;13338:21;:43::i;:::-;13438:49;13455:1;13459:7;13468:13;:18;;;13438:8;:49::i;:::-;13524:1;13494:12;:18;13507:4;13494:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13560:1;13532:12;:16;13545:2;13532:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13591:43;;;;;;;;13606:2;13591:43;;;;;;13617:15;13591:43;;;;;13568:11;:20;13580:7;13568:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13862:19;13894:1;13884:7;:11;;;;:::i;:::-;13862:33;;13947:1;13906:43;;:11;:24;13918:11;13906:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;13902:236;;;13964:20;13972:11;13964:7;:20::i;:::-;13960:171;;;14024:97;;;;;;;;14051:13;:18;;;14024:97;;;;;;14082:13;:28;;;14024:97;;;;;13997:11;:24;14009:11;13997:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13960:171;13902:236;14170:7;14166:2;14151:27;;14160:4;14151:27;;;;;;;;;;;;14185:42;14206:4;14212:2;14216:7;14225:1;14185:20;:42::i;:::-;12793:1440;;;12703:1530;;;:::o;14665:846::-;14727:25;14755:24;;14727:52;;14805:1;14794:8;:12;14786:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;14842:16;14892:1;14881:8;14861:17;:28;;;;:::i;:::-;:32;;;;:::i;:::-;14842:51;;14932:1;14915:14;:18;;;;:::i;:::-;14904:8;:29;14900:81;;;14972:1;14955:14;:18;;;;:::i;:::-;14944:29;;14900:81;15096:17;15104:8;15096:7;:17::i;:::-;15088:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15168:9;15180:17;15168:29;;15163:297;15204:8;15199:1;:13;15163:297;;15263:1;15232:33;;:11;:14;15244:1;15232:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;15228:225;;;15278:31;15312:14;15324:1;15312:11;:14::i;:::-;15278:48;;15354:89;;;;;;;;15381:9;:14;;;15354:89;;;;;;15408:9;:24;;;15354:89;;;;;15337:11;:14;15349:1;15337:14;;;;;;;;;;;:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15267:186;15228:225;15214:3;;;;;:::i;:::-;;;;15163:297;;;;15504:1;15493:8;:12;;;;:::i;:::-;15466:24;:39;;;;14720:791;;14665:846;:::o;5390:606::-;5466:21;;:::i;:::-;5507:16;5515:7;5507;:16::i;:::-;5499:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5579:26;5627:12;5616:7;:23;5612:93;;5696:1;5681:12;5671:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;5650:47;;5612:93;5718:12;5733:7;5718:22;;5713:212;5750:18;5742:4;:26;5713:212;;5787:31;5821:11;:17;5833:4;5821:17;;;;;;;;;;;5787:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5877:1;5851:28;;:9;:14;;;:28;;;5847:71;;5899:9;5892:16;;;;;;;5847:71;5778:147;5770:6;;;;;:::i;:::-;;;;5713:212;;;;5933:57;;;;;;;;;;:::i;:::-;;;;;;;;5390:606;;;;:::o;9859:98::-;9924:27;9934:2;9938:8;9924:27;;;;;;;;;;;;:9;:27::i;:::-;9859:98;;:::o;2099:173:10:-;2155:16;2174:6;;;;;;;;;;;2155:25;;2200:8;2191:6;;:17;;;;;;;;;;;;;;;;;;2255:8;2224:40;;2245:8;2224:40;;;;;;;;;;;;2144:128;2099:173;:::o;17206:141:3:-;;;;;:::o;17733:140::-;;;;;:::o;16054:690::-;16191:4;16208:15;:2;:13;;;:15::i;:::-;16204:535;;;16263:2;16247:36;;;16284:12;:10;:12::i;:::-;16298:4;16304:7;16313:5;16247:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;16234:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16495:1;16478:6;:13;:18;16474:215;;;16511:61;;;;;;;;;;:::i;:::-;;;;;;;;16474:215;16657:6;16651:13;16642:6;16638:2;16634:15;16627:38;16234:464;16379:45;;;16369:55;;;:6;:55;;;;16362:62;;;;;16204:535;16727:4;16720:11;;16054:690;;;;;;;:::o;1935:108:9:-;1995:13;2024;2017:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1935:108;:::o;288:723:12:-;344:13;574:1;565:5;:10;561:53;;;592:10;;;;;;;;;;;;;;;;;;;;;561:53;624:12;639:5;624:20;;655:14;680:78;695:1;687:4;:9;680:78;;713:8;;;;;:::i;:::-;;;;744:2;736:10;;;;;:::i;:::-;;;680:78;;;768:19;800:6;790:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;768:39;;818:154;834:1;825:5;:10;818:154;;862:1;852:11;;;;;:::i;:::-;;;929:2;921:5;:10;;;;:::i;:::-;908:2;:24;;;;:::i;:::-;895:39;;878:6;885;878:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;958:2;949:11;;;;;:::i;:::-;;;818:154;;;996:6;982:21;;;;;288:723;;;;:::o;5144:240:3:-;5205:7;5254:1;5237:19;;:5;:19;;;;5221:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;5345:12;:19;5358:5;5345:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;5337:41;;5330:48;;5144:240;;;:::o;10296:1272::-;10401:20;10424:12;;10401:35;;10465:1;10451:16;;:2;:16;;;;10443:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;10642:21;10650:12;10642:7;:21::i;:::-;10641:22;10633:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;10724:12;10712:8;:24;;10704:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10784:61;10814:1;10818:2;10822:12;10836:8;10784:21;:61::i;:::-;10854:30;10887:12;:16;10900:2;10887:16;;;;;;;;;;;;;;;10854:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10929:119;;;;;;;;10979:8;10949:11;:19;;;:39;;;;:::i;:::-;10929:119;;;;;;11032:8;10997:11;:24;;;:44;;;;:::i;:::-;10929:119;;;;;10910:12;:16;10923:2;10910:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11083:43;;;;;;;;11098:2;11083:43;;;;;;11109:15;11083:43;;;;;11055:11;:25;11067:12;11055:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11135:20;11158:12;11135:35;;11184:9;11179:281;11203:8;11199:1;:12;11179:281;;;11257:12;11253:2;11232:38;;11249:1;11232:38;;;;;;;;;;;;11297:59;11328:1;11332:2;11336:12;11350:5;11297:22;:59::i;:::-;11279:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;11438:14;;;;;:::i;:::-;;;;11213:3;;;;;:::i;:::-;;;;11179:281;;;;11483:12;11468;:27;;;;11502:60;11531:1;11535:2;11539:12;11553:8;11502:20;:60::i;:::-;10394:1174;;;10296:1272;;;:::o;743:387:0:-;803:4;1011:12;1078:7;1066:20;1058:28;;1121:1;1114:4;:8;1107:15;;;743:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:13:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:143::-;625:5;656:6;650:13;641:22;;672:33;699:5;672:33;:::i;:::-;568:143;;;;:::o;717:133::-;760:5;798:6;785:20;776:29;;814:30;838:5;814:30;:::i;:::-;717:133;;;;:::o;856:137::-;901:5;939:6;926:20;917:29;;955:32;981:5;955:32;:::i;:::-;856:137;;;;:::o;999:141::-;1055:5;1086:6;1080:13;1071:22;;1102:32;1128:5;1102:32;:::i;:::-;999:141;;;;:::o;1159:338::-;1214:5;1263:3;1256:4;1248:6;1244:17;1240:27;1230:122;;1271:79;;:::i;:::-;1230:122;1388:6;1375:20;1413:78;1487:3;1479:6;1472:4;1464:6;1460:17;1413:78;:::i;:::-;1404:87;;1220:277;1159:338;;;;:::o;1517:553::-;1575:8;1585:6;1635:3;1628:4;1620:6;1616:17;1612:27;1602:122;;1643:79;;:::i;:::-;1602:122;1756:6;1743:20;1733:30;;1786:18;1778:6;1775:30;1772:117;;;1808:79;;:::i;:::-;1772:117;1922:4;1914:6;1910:17;1898:29;;1976:3;1968:4;1960:6;1956:17;1946:8;1942:32;1939:41;1936:128;;;1983:79;;:::i;:::-;1936:128;1517:553;;;;;:::o;2076:139::-;2122:5;2160:6;2147:20;2138:29;;2176:33;2203:5;2176:33;:::i;:::-;2076:139;;;;:::o;2221:329::-;2280:6;2329:2;2317:9;2308:7;2304:23;2300:32;2297:119;;;2335:79;;:::i;:::-;2297:119;2455:1;2480:53;2525:7;2516:6;2505:9;2501:22;2480:53;:::i;:::-;2470:63;;2426:117;2221:329;;;;:::o;2556:351::-;2626:6;2675:2;2663:9;2654:7;2650:23;2646:32;2643:119;;;2681:79;;:::i;:::-;2643:119;2801:1;2826:64;2882:7;2873:6;2862:9;2858:22;2826:64;:::i;:::-;2816:74;;2772:128;2556:351;;;;:::o;2913:474::-;2981:6;2989;3038:2;3026:9;3017:7;3013:23;3009:32;3006:119;;;3044:79;;:::i;:::-;3006:119;3164:1;3189:53;3234:7;3225:6;3214:9;3210:22;3189:53;:::i;:::-;3179:63;;3135:117;3291:2;3317:53;3362:7;3353:6;3342:9;3338:22;3317:53;:::i;:::-;3307:63;;3262:118;2913:474;;;;;:::o;3393:619::-;3470:6;3478;3486;3535:2;3523:9;3514:7;3510:23;3506:32;3503:119;;;3541:79;;:::i;:::-;3503:119;3661:1;3686:53;3731:7;3722:6;3711:9;3707:22;3686:53;:::i;:::-;3676:63;;3632:117;3788:2;3814:53;3859:7;3850:6;3839:9;3835:22;3814:53;:::i;:::-;3804:63;;3759:118;3916:2;3942:53;3987:7;3978:6;3967:9;3963:22;3942:53;:::i;:::-;3932:63;;3887:118;3393:619;;;;;:::o;4018:943::-;4113:6;4121;4129;4137;4186:3;4174:9;4165:7;4161:23;4157:33;4154:120;;;4193:79;;:::i;:::-;4154:120;4313:1;4338:53;4383:7;4374:6;4363:9;4359:22;4338:53;:::i;:::-;4328:63;;4284:117;4440:2;4466:53;4511:7;4502:6;4491:9;4487:22;4466:53;:::i;:::-;4456:63;;4411:118;4568:2;4594:53;4639:7;4630:6;4619:9;4615:22;4594:53;:::i;:::-;4584:63;;4539:118;4724:2;4713:9;4709:18;4696:32;4755:18;4747:6;4744:30;4741:117;;;4777:79;;:::i;:::-;4741:117;4882:62;4936:7;4927:6;4916:9;4912:22;4882:62;:::i;:::-;4872:72;;4667:287;4018:943;;;;;;;:::o;4967:468::-;5032:6;5040;5089:2;5077:9;5068:7;5064:23;5060:32;5057:119;;;5095:79;;:::i;:::-;5057:119;5215:1;5240:53;5285:7;5276:6;5265:9;5261:22;5240:53;:::i;:::-;5230:63;;5186:117;5342:2;5368:50;5410:7;5401:6;5390:9;5386:22;5368:50;:::i;:::-;5358:60;;5313:115;4967:468;;;;;:::o;5441:474::-;5509:6;5517;5566:2;5554:9;5545:7;5541:23;5537:32;5534:119;;;5572:79;;:::i;:::-;5534:119;5692:1;5717:53;5762:7;5753:6;5742:9;5738:22;5717:53;:::i;:::-;5707:63;;5663:117;5819:2;5845:53;5890:7;5881:6;5870:9;5866:22;5845:53;:::i;:::-;5835:63;;5790:118;5441:474;;;;;:::o;5921:327::-;5979:6;6028:2;6016:9;6007:7;6003:23;5999:32;5996:119;;;6034:79;;:::i;:::-;5996:119;6154:1;6179:52;6223:7;6214:6;6203:9;6199:22;6179:52;:::i;:::-;6169:62;;6125:116;5921:327;;;;:::o;6254:349::-;6323:6;6372:2;6360:9;6351:7;6347:23;6343:32;6340:119;;;6378:79;;:::i;:::-;6340:119;6498:1;6523:63;6578:7;6569:6;6558:9;6554:22;6523:63;:::i;:::-;6513:73;;6469:127;6254:349;;;;:::o;6609:529::-;6680:6;6688;6737:2;6725:9;6716:7;6712:23;6708:32;6705:119;;;6743:79;;:::i;:::-;6705:119;6891:1;6880:9;6876:17;6863:31;6921:18;6913:6;6910:30;6907:117;;;6943:79;;:::i;:::-;6907:117;7056:65;7113:7;7104:6;7093:9;7089:22;7056:65;:::i;:::-;7038:83;;;;6834:297;6609:529;;;;;:::o;7144:329::-;7203:6;7252:2;7240:9;7231:7;7227:23;7223:32;7220:119;;;7258:79;;:::i;:::-;7220:119;7378:1;7403:53;7448:7;7439:6;7428:9;7424:22;7403:53;:::i;:::-;7393:63;;7349:117;7144:329;;;;:::o;7479:474::-;7547:6;7555;7604:2;7592:9;7583:7;7579:23;7575:32;7572:119;;;7610:79;;:::i;:::-;7572:119;7730:1;7755:53;7800:7;7791:6;7780:9;7776:22;7755:53;:::i;:::-;7745:63;;7701:117;7857:2;7883:53;7928:7;7919:6;7908:9;7904:22;7883:53;:::i;:::-;7873:63;;7828:118;7479:474;;;;;:::o;7959:108::-;8036:24;8054:5;8036:24;:::i;:::-;8031:3;8024:37;7959:108;;:::o;8073:118::-;8160:24;8178:5;8160:24;:::i;:::-;8155:3;8148:37;8073:118;;:::o;8197:109::-;8278:21;8293:5;8278:21;:::i;:::-;8273:3;8266:34;8197:109;;:::o;8312:360::-;8398:3;8426:38;8458:5;8426:38;:::i;:::-;8480:70;8543:6;8538:3;8480:70;:::i;:::-;8473:77;;8559:52;8604:6;8599:3;8592:4;8585:5;8581:16;8559:52;:::i;:::-;8636:29;8658:6;8636:29;:::i;:::-;8631:3;8627:39;8620:46;;8402:270;8312:360;;;;:::o;8678:364::-;8766:3;8794:39;8827:5;8794:39;:::i;:::-;8849:71;8913:6;8908:3;8849:71;:::i;:::-;8842:78;;8929:52;8974:6;8969:3;8962:4;8955:5;8951:16;8929:52;:::i;:::-;9006:29;9028:6;9006:29;:::i;:::-;9001:3;8997:39;8990:46;;8770:272;8678:364;;;;:::o;9048:377::-;9154:3;9182:39;9215:5;9182:39;:::i;:::-;9237:89;9319:6;9314:3;9237:89;:::i;:::-;9230:96;;9335:52;9380:6;9375:3;9368:4;9361:5;9357:16;9335:52;:::i;:::-;9412:6;9407:3;9403:16;9396:23;;9158:267;9048:377;;;;:::o;9455:845::-;9558:3;9595:5;9589:12;9624:36;9650:9;9624:36;:::i;:::-;9676:89;9758:6;9753:3;9676:89;:::i;:::-;9669:96;;9796:1;9785:9;9781:17;9812:1;9807:137;;;;9958:1;9953:341;;;;9774:520;;9807:137;9891:4;9887:9;9876;9872:25;9867:3;9860:38;9927:6;9922:3;9918:16;9911:23;;9807:137;;9953:341;10020:38;10052:5;10020:38;:::i;:::-;10080:1;10094:154;10108:6;10105:1;10102:13;10094:154;;;10182:7;10176:14;10172:1;10167:3;10163:11;10156:35;10232:1;10223:7;10219:15;10208:26;;10130:4;10127:1;10123:12;10118:17;;10094:154;;;10277:6;10272:3;10268:16;10261:23;;9960:334;;9774:520;;9562:738;;9455:845;;;;:::o;10306:366::-;10448:3;10469:67;10533:2;10528:3;10469:67;:::i;:::-;10462:74;;10545:93;10634:3;10545:93;:::i;:::-;10663:2;10658:3;10654:12;10647:19;;10306:366;;;:::o;10678:365::-;10820:3;10841:66;10905:1;10900:3;10841:66;:::i;:::-;10834:73;;10916:93;11005:3;10916:93;:::i;:::-;11034:2;11029:3;11025:12;11018:19;;10678:365;;;:::o;11049:366::-;11191:3;11212:67;11276:2;11271:3;11212:67;:::i;:::-;11205:74;;11288:93;11377:3;11288:93;:::i;:::-;11406:2;11401:3;11397:12;11390:19;;11049:366;;;:::o;11421:::-;11563:3;11584:67;11648:2;11643:3;11584:67;:::i;:::-;11577:74;;11660:93;11749:3;11660:93;:::i;:::-;11778:2;11773:3;11769:12;11762:19;;11421:366;;;:::o;11793:::-;11935:3;11956:67;12020:2;12015:3;11956:67;:::i;:::-;11949:74;;12032:93;12121:3;12032:93;:::i;:::-;12150:2;12145:3;12141:12;12134:19;;11793:366;;;:::o;12165:::-;12307:3;12328:67;12392:2;12387:3;12328:67;:::i;:::-;12321:74;;12404:93;12493:3;12404:93;:::i;:::-;12522:2;12517:3;12513:12;12506:19;;12165:366;;;:::o;12537:::-;12679:3;12700:67;12764:2;12759:3;12700:67;:::i;:::-;12693:74;;12776:93;12865:3;12776:93;:::i;:::-;12894:2;12889:3;12885:12;12878:19;;12537:366;;;:::o;12909:::-;13051:3;13072:67;13136:2;13131:3;13072:67;:::i;:::-;13065:74;;13148:93;13237:3;13148:93;:::i;:::-;13266:2;13261:3;13257:12;13250:19;;12909:366;;;:::o;13281:::-;13423:3;13444:67;13508:2;13503:3;13444:67;:::i;:::-;13437:74;;13520:93;13609:3;13520:93;:::i;:::-;13638:2;13633:3;13629:12;13622:19;;13281:366;;;:::o;13653:::-;13795:3;13816:67;13880:2;13875:3;13816:67;:::i;:::-;13809:74;;13892:93;13981:3;13892:93;:::i;:::-;14010:2;14005:3;14001:12;13994:19;;13653:366;;;:::o;14025:::-;14167:3;14188:67;14252:2;14247:3;14188:67;:::i;:::-;14181:74;;14264:93;14353:3;14264:93;:::i;:::-;14382:2;14377:3;14373:12;14366:19;;14025:366;;;:::o;14397:::-;14539:3;14560:67;14624:2;14619:3;14560:67;:::i;:::-;14553:74;;14636:93;14725:3;14636:93;:::i;:::-;14754:2;14749:3;14745:12;14738:19;;14397:366;;;:::o;14769:::-;14911:3;14932:67;14996:2;14991:3;14932:67;:::i;:::-;14925:74;;15008:93;15097:3;15008:93;:::i;:::-;15126:2;15121:3;15117:12;15110:19;;14769:366;;;:::o;15141:::-;15283:3;15304:67;15368:2;15363:3;15304:67;:::i;:::-;15297:74;;15380:93;15469:3;15380:93;:::i;:::-;15498:2;15493:3;15489:12;15482:19;;15141:366;;;:::o;15513:::-;15655:3;15676:67;15740:2;15735:3;15676:67;:::i;:::-;15669:74;;15752:93;15841:3;15752:93;:::i;:::-;15870:2;15865:3;15861:12;15854:19;;15513:366;;;:::o;15885:::-;16027:3;16048:67;16112:2;16107:3;16048:67;:::i;:::-;16041:74;;16124:93;16213:3;16124:93;:::i;:::-;16242:2;16237:3;16233:12;16226:19;;15885:366;;;:::o;16257:398::-;16416:3;16437:83;16518:1;16513:3;16437:83;:::i;:::-;16430:90;;16529:93;16618:3;16529:93;:::i;:::-;16647:1;16642:3;16638:11;16631:18;;16257:398;;;:::o;16661:366::-;16803:3;16824:67;16888:2;16883:3;16824:67;:::i;:::-;16817:74;;16900:93;16989:3;16900:93;:::i;:::-;17018:2;17013:3;17009:12;17002:19;;16661:366;;;:::o;17033:::-;17175:3;17196:67;17260:2;17255:3;17196:67;:::i;:::-;17189:74;;17272:93;17361:3;17272:93;:::i;:::-;17390:2;17385:3;17381:12;17374:19;;17033:366;;;:::o;17405:::-;17547:3;17568:67;17632:2;17627:3;17568:67;:::i;:::-;17561:74;;17644:93;17733:3;17644:93;:::i;:::-;17762:2;17757:3;17753:12;17746:19;;17405:366;;;:::o;17777:::-;17919:3;17940:67;18004:2;17999:3;17940:67;:::i;:::-;17933:74;;18016:93;18105:3;18016:93;:::i;:::-;18134:2;18129:3;18125:12;18118:19;;17777:366;;;:::o;18149:::-;18291:3;18312:67;18376:2;18371:3;18312:67;:::i;:::-;18305:74;;18388:93;18477:3;18388:93;:::i;:::-;18506:2;18501:3;18497:12;18490:19;;18149:366;;;:::o;18521:::-;18663:3;18684:67;18748:2;18743:3;18684:67;:::i;:::-;18677:74;;18760:93;18849:3;18760:93;:::i;:::-;18878:2;18873:3;18869:12;18862:19;;18521:366;;;:::o;18893:::-;19035:3;19056:67;19120:2;19115:3;19056:67;:::i;:::-;19049:74;;19132:93;19221:3;19132:93;:::i;:::-;19250:2;19245:3;19241:12;19234:19;;18893:366;;;:::o;19265:::-;19407:3;19428:67;19492:2;19487:3;19428:67;:::i;:::-;19421:74;;19504:93;19593:3;19504:93;:::i;:::-;19622:2;19617:3;19613:12;19606:19;;19265:366;;;:::o;19637:::-;19779:3;19800:67;19864:2;19859:3;19800:67;:::i;:::-;19793:74;;19876:93;19965:3;19876:93;:::i;:::-;19994:2;19989:3;19985:12;19978:19;;19637:366;;;:::o;20009:365::-;20151:3;20172:66;20236:1;20231:3;20172:66;:::i;:::-;20165:73;;20247:93;20336:3;20247:93;:::i;:::-;20365:2;20360:3;20356:12;20349:19;;20009:365;;;:::o;20380:366::-;20522:3;20543:67;20607:2;20602:3;20543:67;:::i;:::-;20536:74;;20619:93;20708:3;20619:93;:::i;:::-;20737:2;20732:3;20728:12;20721:19;;20380:366;;;:::o;20752:::-;20894:3;20915:67;20979:2;20974:3;20915:67;:::i;:::-;20908:74;;20991:93;21080:3;20991:93;:::i;:::-;21109:2;21104:3;21100:12;21093:19;;20752:366;;;:::o;21194:527::-;21353:4;21348:3;21344:14;21440:4;21433:5;21429:16;21423:23;21459:63;21516:4;21511:3;21507:14;21493:12;21459:63;:::i;:::-;21368:164;21624:4;21617:5;21613:16;21607:23;21643:61;21698:4;21693:3;21689:14;21675:12;21643:61;:::i;:::-;21542:172;21322:399;21194:527;;:::o;21727:118::-;21814:24;21832:5;21814:24;:::i;:::-;21809:3;21802:37;21727:118;;:::o;21851:105::-;21926:23;21943:5;21926:23;:::i;:::-;21921:3;21914:36;21851:105;;:::o;21962:589::-;22187:3;22209:95;22300:3;22291:6;22209:95;:::i;:::-;22202:102;;22321:95;22412:3;22403:6;22321:95;:::i;:::-;22314:102;;22433:92;22521:3;22512:6;22433:92;:::i;:::-;22426:99;;22542:3;22535:10;;21962:589;;;;;;:::o;22557:379::-;22741:3;22763:147;22906:3;22763:147;:::i;:::-;22756:154;;22927:3;22920:10;;22557:379;;;:::o;22942:222::-;23035:4;23073:2;23062:9;23058:18;23050:26;;23086:71;23154:1;23143:9;23139:17;23130:6;23086:71;:::i;:::-;22942:222;;;;:::o;23170:640::-;23365:4;23403:3;23392:9;23388:19;23380:27;;23417:71;23485:1;23474:9;23470:17;23461:6;23417:71;:::i;:::-;23498:72;23566:2;23555:9;23551:18;23542:6;23498:72;:::i;:::-;23580;23648:2;23637:9;23633:18;23624:6;23580:72;:::i;:::-;23699:9;23693:4;23689:20;23684:2;23673:9;23669:18;23662:48;23727:76;23798:4;23789:6;23727:76;:::i;:::-;23719:84;;23170:640;;;;;;;:::o;23816:210::-;23903:4;23941:2;23930:9;23926:18;23918:26;;23954:65;24016:1;24005:9;24001:17;23992:6;23954:65;:::i;:::-;23816:210;;;;:::o;24032:313::-;24145:4;24183:2;24172:9;24168:18;24160:26;;24232:9;24226:4;24222:20;24218:1;24207:9;24203:17;24196:47;24260:78;24333:4;24324:6;24260:78;:::i;:::-;24252:86;;24032:313;;;;:::o;24351:419::-;24517:4;24555:2;24544:9;24540:18;24532:26;;24604:9;24598:4;24594:20;24590:1;24579:9;24575:17;24568:47;24632:131;24758:4;24632:131;:::i;:::-;24624:139;;24351:419;;;:::o;24776:::-;24942:4;24980:2;24969:9;24965:18;24957:26;;25029:9;25023:4;25019:20;25015:1;25004:9;25000:17;24993:47;25057:131;25183:4;25057:131;:::i;:::-;25049:139;;24776:419;;;:::o;25201:::-;25367:4;25405:2;25394:9;25390:18;25382:26;;25454:9;25448:4;25444:20;25440:1;25429:9;25425:17;25418:47;25482:131;25608:4;25482:131;:::i;:::-;25474:139;;25201:419;;;:::o;25626:::-;25792:4;25830:2;25819:9;25815:18;25807:26;;25879:9;25873:4;25869:20;25865:1;25854:9;25850:17;25843:47;25907:131;26033:4;25907:131;:::i;:::-;25899:139;;25626:419;;;:::o;26051:::-;26217:4;26255:2;26244:9;26240:18;26232:26;;26304:9;26298:4;26294:20;26290:1;26279:9;26275:17;26268:47;26332:131;26458:4;26332:131;:::i;:::-;26324:139;;26051:419;;;:::o;26476:::-;26642:4;26680:2;26669:9;26665:18;26657:26;;26729:9;26723:4;26719:20;26715:1;26704:9;26700:17;26693:47;26757:131;26883:4;26757:131;:::i;:::-;26749:139;;26476:419;;;:::o;26901:::-;27067:4;27105:2;27094:9;27090:18;27082:26;;27154:9;27148:4;27144:20;27140:1;27129:9;27125:17;27118:47;27182:131;27308:4;27182:131;:::i;:::-;27174:139;;26901:419;;;:::o;27326:::-;27492:4;27530:2;27519:9;27515:18;27507:26;;27579:9;27573:4;27569:20;27565:1;27554:9;27550:17;27543:47;27607:131;27733:4;27607:131;:::i;:::-;27599:139;;27326:419;;;:::o;27751:::-;27917:4;27955:2;27944:9;27940:18;27932:26;;28004:9;27998:4;27994:20;27990:1;27979:9;27975:17;27968:47;28032:131;28158:4;28032:131;:::i;:::-;28024:139;;27751:419;;;:::o;28176:::-;28342:4;28380:2;28369:9;28365:18;28357:26;;28429:9;28423:4;28419:20;28415:1;28404:9;28400:17;28393:47;28457:131;28583:4;28457:131;:::i;:::-;28449:139;;28176:419;;;:::o;28601:::-;28767:4;28805:2;28794:9;28790:18;28782:26;;28854:9;28848:4;28844:20;28840:1;28829:9;28825:17;28818:47;28882:131;29008:4;28882:131;:::i;:::-;28874:139;;28601:419;;;:::o;29026:::-;29192:4;29230:2;29219:9;29215:18;29207:26;;29279:9;29273:4;29269:20;29265:1;29254:9;29250:17;29243:47;29307:131;29433:4;29307:131;:::i;:::-;29299:139;;29026:419;;;:::o;29451:::-;29617:4;29655:2;29644:9;29640:18;29632:26;;29704:9;29698:4;29694:20;29690:1;29679:9;29675:17;29668:47;29732:131;29858:4;29732:131;:::i;:::-;29724:139;;29451:419;;;:::o;29876:::-;30042:4;30080:2;30069:9;30065:18;30057:26;;30129:9;30123:4;30119:20;30115:1;30104:9;30100:17;30093:47;30157:131;30283:4;30157:131;:::i;:::-;30149:139;;29876:419;;;:::o;30301:::-;30467:4;30505:2;30494:9;30490:18;30482:26;;30554:9;30548:4;30544:20;30540:1;30529:9;30525:17;30518:47;30582:131;30708:4;30582:131;:::i;:::-;30574:139;;30301:419;;;:::o;30726:::-;30892:4;30930:2;30919:9;30915:18;30907:26;;30979:9;30973:4;30969:20;30965:1;30954:9;30950:17;30943:47;31007:131;31133:4;31007:131;:::i;:::-;30999:139;;30726:419;;;:::o;31151:::-;31317:4;31355:2;31344:9;31340:18;31332:26;;31404:9;31398:4;31394:20;31390:1;31379:9;31375:17;31368:47;31432:131;31558:4;31432:131;:::i;:::-;31424:139;;31151:419;;;:::o;31576:::-;31742:4;31780:2;31769:9;31765:18;31757:26;;31829:9;31823:4;31819:20;31815:1;31804:9;31800:17;31793:47;31857:131;31983:4;31857:131;:::i;:::-;31849:139;;31576:419;;;:::o;32001:::-;32167:4;32205:2;32194:9;32190:18;32182:26;;32254:9;32248:4;32244:20;32240:1;32229:9;32225:17;32218:47;32282:131;32408:4;32282:131;:::i;:::-;32274:139;;32001:419;;;:::o;32426:::-;32592:4;32630:2;32619:9;32615:18;32607:26;;32679:9;32673:4;32669:20;32665:1;32654:9;32650:17;32643:47;32707:131;32833:4;32707:131;:::i;:::-;32699:139;;32426:419;;;:::o;32851:::-;33017:4;33055:2;33044:9;33040:18;33032:26;;33104:9;33098:4;33094:20;33090:1;33079:9;33075:17;33068:47;33132:131;33258:4;33132:131;:::i;:::-;33124:139;;32851:419;;;:::o;33276:::-;33442:4;33480:2;33469:9;33465:18;33457:26;;33529:9;33523:4;33519:20;33515:1;33504:9;33500:17;33493:47;33557:131;33683:4;33557:131;:::i;:::-;33549:139;;33276:419;;;:::o;33701:::-;33867:4;33905:2;33894:9;33890:18;33882:26;;33954:9;33948:4;33944:20;33940:1;33929:9;33925:17;33918:47;33982:131;34108:4;33982:131;:::i;:::-;33974:139;;33701:419;;;:::o;34126:::-;34292:4;34330:2;34319:9;34315:18;34307:26;;34379:9;34373:4;34369:20;34365:1;34354:9;34350:17;34343:47;34407:131;34533:4;34407:131;:::i;:::-;34399:139;;34126:419;;;:::o;34551:::-;34717:4;34755:2;34744:9;34740:18;34732:26;;34804:9;34798:4;34794:20;34790:1;34779:9;34775:17;34768:47;34832:131;34958:4;34832:131;:::i;:::-;34824:139;;34551:419;;;:::o;34976:::-;35142:4;35180:2;35169:9;35165:18;35157:26;;35229:9;35223:4;35219:20;35215:1;35204:9;35200:17;35193:47;35257:131;35383:4;35257:131;:::i;:::-;35249:139;;34976:419;;;:::o;35401:::-;35567:4;35605:2;35594:9;35590:18;35582:26;;35654:9;35648:4;35644:20;35640:1;35629:9;35625:17;35618:47;35682:131;35808:4;35682:131;:::i;:::-;35674:139;;35401:419;;;:::o;35826:::-;35992:4;36030:2;36019:9;36015:18;36007:26;;36079:9;36073:4;36069:20;36065:1;36054:9;36050:17;36043:47;36107:131;36233:4;36107:131;:::i;:::-;36099:139;;35826:419;;;:::o;36251:346::-;36406:4;36444:2;36433:9;36429:18;36421:26;;36457:133;36587:1;36576:9;36572:17;36563:6;36457:133;:::i;:::-;36251:346;;;;:::o;36603:222::-;36696:4;36734:2;36723:9;36719:18;36711:26;;36747:71;36815:1;36804:9;36800:17;36791:6;36747:71;:::i;:::-;36603:222;;;;:::o;36831:129::-;36865:6;36892:20;;:::i;:::-;36882:30;;36921:33;36949:4;36941:6;36921:33;:::i;:::-;36831:129;;;:::o;36966:75::-;36999:6;37032:2;37026:9;37016:19;;36966:75;:::o;37047:307::-;37108:4;37198:18;37190:6;37187:30;37184:56;;;37220:18;;:::i;:::-;37184:56;37258:29;37280:6;37258:29;:::i;:::-;37250:37;;37342:4;37336;37332:15;37324:23;;37047:307;;;:::o;37360:141::-;37409:4;37432:3;37424:11;;37455:3;37452:1;37445:14;37489:4;37486:1;37476:18;37468:26;;37360:141;;;:::o;37507:98::-;37558:6;37592:5;37586:12;37576:22;;37507:98;;;:::o;37611:99::-;37663:6;37697:5;37691:12;37681:22;;37611:99;;;:::o;37716:168::-;37799:11;37833:6;37828:3;37821:19;37873:4;37868:3;37864:14;37849:29;;37716:168;;;;:::o;37890:147::-;37991:11;38028:3;38013:18;;37890:147;;;;:::o;38043:169::-;38127:11;38161:6;38156:3;38149:19;38201:4;38196:3;38192:14;38177:29;;38043:169;;;;:::o;38218:148::-;38320:11;38357:3;38342:18;;38218:148;;;;:::o;38372:273::-;38412:3;38431:20;38449:1;38431:20;:::i;:::-;38426:25;;38465:20;38483:1;38465:20;:::i;:::-;38460:25;;38587:1;38551:34;38547:42;38544:1;38541:49;38538:75;;;38593:18;;:::i;:::-;38538:75;38637:1;38634;38630:9;38623:16;;38372:273;;;;:::o;38651:305::-;38691:3;38710:20;38728:1;38710:20;:::i;:::-;38705:25;;38744:20;38762:1;38744:20;:::i;:::-;38739:25;;38898:1;38830:66;38826:74;38823:1;38820:81;38817:107;;;38904:18;;:::i;:::-;38817:107;38948:1;38945;38941:9;38934:16;;38651:305;;;;:::o;38962:185::-;39002:1;39019:20;39037:1;39019:20;:::i;:::-;39014:25;;39053:20;39071:1;39053:20;:::i;:::-;39048:25;;39092:1;39082:35;;39097:18;;:::i;:::-;39082:35;39139:1;39136;39132:9;39127:14;;38962:185;;;;:::o;39153:191::-;39193:4;39213:20;39231:1;39213:20;:::i;:::-;39208:25;;39247:20;39265:1;39247:20;:::i;:::-;39242:25;;39286:1;39283;39280:8;39277:34;;;39291:18;;:::i;:::-;39277:34;39336:1;39333;39329:9;39321:17;;39153:191;;;;:::o;39350:::-;39390:4;39410:20;39428:1;39410:20;:::i;:::-;39405:25;;39444:20;39462:1;39444:20;:::i;:::-;39439:25;;39483:1;39480;39477:8;39474:34;;;39488:18;;:::i;:::-;39474:34;39533:1;39530;39526:9;39518:17;;39350:191;;;;:::o;39547:96::-;39584:7;39613:24;39631:5;39613:24;:::i;:::-;39602:35;;39547:96;;;:::o;39649:90::-;39683:7;39726:5;39719:13;39712:21;39701:32;;39649:90;;;:::o;39745:149::-;39781:7;39821:66;39814:5;39810:78;39799:89;;39745:149;;;:::o;39900:118::-;39937:7;39977:34;39970:5;39966:46;39955:57;;39900:118;;;:::o;40024:126::-;40061:7;40101:42;40094:5;40090:54;40079:65;;40024:126;;;:::o;40156:77::-;40193:7;40222:5;40211:16;;40156:77;;;:::o;40239:101::-;40275:7;40315:18;40308:5;40304:30;40293:41;;40239:101;;;:::o;40346:154::-;40430:6;40425:3;40420;40407:30;40492:1;40483:6;40478:3;40474:16;40467:27;40346:154;;;:::o;40506:307::-;40574:1;40584:113;40598:6;40595:1;40592:13;40584:113;;;40683:1;40678:3;40674:11;40668:18;40664:1;40659:3;40655:11;40648:39;40620:2;40617:1;40613:10;40608:15;;40584:113;;;40715:6;40712:1;40709:13;40706:101;;;40795:1;40786:6;40781:3;40777:16;40770:27;40706:101;40555:258;40506:307;;;:::o;40819:171::-;40858:3;40881:24;40899:5;40881:24;:::i;:::-;40872:33;;40927:4;40920:5;40917:15;40914:41;;;40935:18;;:::i;:::-;40914:41;40982:1;40975:5;40971:13;40964:20;;40819:171;;;:::o;40996:320::-;41040:6;41077:1;41071:4;41067:12;41057:22;;41124:1;41118:4;41114:12;41145:18;41135:81;;41201:4;41193:6;41189:17;41179:27;;41135:81;41263:2;41255:6;41252:14;41232:18;41229:38;41226:84;;;41282:18;;:::i;:::-;41226:84;41047:269;40996:320;;;:::o;41322:281::-;41405:27;41427:4;41405:27;:::i;:::-;41397:6;41393:40;41535:6;41523:10;41520:22;41499:18;41487:10;41484:34;41481:62;41478:88;;;41546:18;;:::i;:::-;41478:88;41586:10;41582:2;41575:22;41365:238;41322:281;;:::o;41609:233::-;41648:3;41671:24;41689:5;41671:24;:::i;:::-;41662:33;;41717:66;41710:5;41707:77;41704:103;;;41787:18;;:::i;:::-;41704:103;41834:1;41827:5;41823:13;41816:20;;41609:233;;;:::o;41848:176::-;41880:1;41897:20;41915:1;41897:20;:::i;:::-;41892:25;;41931:20;41949:1;41931:20;:::i;:::-;41926:25;;41970:1;41960:35;;41975:18;;:::i;:::-;41960:35;42016:1;42013;42009:9;42004:14;;41848:176;;;;:::o;42030:180::-;42078:77;42075:1;42068:88;42175:4;42172:1;42165:15;42199:4;42196:1;42189:15;42216:180;42264:77;42261:1;42254:88;42361:4;42358:1;42351:15;42385:4;42382:1;42375:15;42402:180;42450:77;42447:1;42440:88;42547:4;42544:1;42537:15;42571:4;42568:1;42561:15;42588:180;42636:77;42633:1;42626:88;42733:4;42730:1;42723:15;42757:4;42754:1;42747:15;42774:180;42822:77;42819:1;42812:88;42919:4;42916:1;42909:15;42943:4;42940:1;42933:15;42960:117;43069:1;43066;43059:12;43083:117;43192:1;43189;43182:12;43206:117;43315:1;43312;43305:12;43329:117;43438:1;43435;43428:12;43452:117;43561:1;43558;43551:12;43575:117;43684:1;43681;43674:12;43698:102;43739:6;43790:2;43786:7;43781:2;43774:5;43770:14;43766:28;43756:38;;43698:102;;;:::o;43806:221::-;43946:34;43942:1;43934:6;43930:14;43923:58;44015:4;44010:2;44002:6;43998:15;43991:29;43806:221;:::o;44033:159::-;44173:11;44169:1;44161:6;44157:14;44150:35;44033:159;:::o;44198:225::-;44338:34;44334:1;44326:6;44322:14;44315:58;44407:8;44402:2;44394:6;44390:15;44383:33;44198:225;:::o;44429:229::-;44569:34;44565:1;44557:6;44553:14;44546:58;44638:12;44633:2;44625:6;44621:15;44614:37;44429:229;:::o;44664:222::-;44804:34;44800:1;44792:6;44788:14;44781:58;44873:5;44868:2;44860:6;44856:15;44849:30;44664:222;:::o;44892:236::-;45032:34;45028:1;45020:6;45016:14;45009:58;45101:19;45096:2;45088:6;45084:15;45077:44;44892:236;:::o;45134:244::-;45274:34;45270:1;45262:6;45258:14;45251:58;45343:27;45338:2;45330:6;45326:15;45319:52;45134:244;:::o;45384:174::-;45524:26;45520:1;45512:6;45508:14;45501:50;45384:174;:::o;45564:230::-;45704:34;45700:1;45692:6;45688:14;45681:58;45773:13;45768:2;45760:6;45756:15;45749:38;45564:230;:::o;45800:225::-;45940:34;45936:1;45928:6;45924:14;45917:58;46009:8;46004:2;45996:6;45992:15;45985:33;45800:225;:::o;46031:182::-;46171:34;46167:1;46159:6;46155:14;46148:58;46031:182;:::o;46219:234::-;46359:34;46355:1;46347:6;46343:14;46336:58;46428:17;46423:2;46415:6;46411:15;46404:42;46219:234;:::o;46459:176::-;46599:28;46595:1;46587:6;46583:14;46576:52;46459:176;:::o;46641:237::-;46781:34;46777:1;46769:6;46765:14;46758:58;46850:20;46845:2;46837:6;46833:15;46826:45;46641:237;:::o;46884:221::-;47024:34;47020:1;47012:6;47008:14;47001:58;47093:4;47088:2;47080:6;47076:15;47069:29;46884:221;:::o;47111:162::-;47251:14;47247:1;47239:6;47235:14;47228:38;47111:162;:::o;47279:114::-;;:::o;47399:166::-;47539:18;47535:1;47527:6;47523:14;47516:42;47399:166;:::o;47571:238::-;47711:34;47707:1;47699:6;47695:14;47688:58;47780:21;47775:2;47767:6;47763:15;47756:46;47571:238;:::o;47815:179::-;47955:31;47951:1;47943:6;47939:14;47932:55;47815:179;:::o;48000:167::-;48140:19;48136:1;48128:6;48124:14;48117:43;48000:167;:::o;48173:220::-;48313:34;48309:1;48301:6;48297:14;48290:58;48382:3;48377:2;48369:6;48365:15;48358:28;48173:220;:::o;48399:233::-;48539:34;48535:1;48527:6;48523:14;48516:58;48608:16;48603:2;48595:6;48591:15;48584:41;48399:233;:::o;48638:225::-;48778:34;48774:1;48766:6;48762:14;48755:58;48847:8;48842:2;48834:6;48830:15;48823:33;48638:225;:::o;48869:181::-;49009:33;49005:1;48997:6;48993:14;48986:57;48869:181;:::o;49056:234::-;49196:34;49192:1;49184:6;49180:14;49173:58;49265:17;49260:2;49252:6;49248:15;49241:42;49056:234;:::o;49296:159::-;49436:11;49432:1;49424:6;49420:14;49413:35;49296:159;:::o;49461:232::-;49601:34;49597:1;49589:6;49585:14;49578:58;49670:15;49665:2;49657:6;49653:15;49646:40;49461:232;:::o;49699:221::-;49839:34;49835:1;49827:6;49823:14;49816:58;49908:4;49903:2;49895:6;49891:15;49884:29;49699:221;:::o;49926:122::-;49999:24;50017:5;49999:24;:::i;:::-;49992:5;49989:35;49979:63;;50038:1;50035;50028:12;49979:63;49926:122;:::o;50054:116::-;50124:21;50139:5;50124:21;:::i;:::-;50117:5;50114:32;50104:60;;50160:1;50157;50150:12;50104:60;50054:116;:::o;50176:120::-;50248:23;50265:5;50248:23;:::i;:::-;50241:5;50238:34;50228:62;;50286:1;50283;50276:12;50228:62;50176:120;:::o;50302:122::-;50375:24;50393:5;50375:24;:::i;:::-;50368:5;50365:35;50355:63;;50414:1;50411;50404:12;50355:63;50302:122;:::o
Swarm Source
ipfs://d99f3260e85c0be86043f568e54ddbf1c2148488b80f8838a9893608577af7e9
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.