NFT
Overview
TokenID
1221
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Agent1
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT // Agent1 v1.1 pragma solidity ^0.8.2; import "./ERC721.sol"; import "./ERC721URIStorage.sol"; import "./Counters.sol"; import "./JoeRichardsNFT.sol"; contract OwnableDelegateProxy {} contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; } contract Agent1 is ERC721, ERC721URIStorage, JoeRichardsNFT { using Counters for Counters.Counter; Counters.Counter private _tokenIdCounter; constructor() ERC721("Agent1", "A10001") {} function _baseURI() internal view override returns (string memory) { return baseNFTURI; } /// @dev The following functions are overrides required by Solidity. function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) { super._burn(tokenId); } // @dev Save on gas fees for our dear minters function totalSupply() public view returns (uint256) { return _tokenIdCounter.current(); } function mintAgent1(uint numberOfTokens) public payable { require(saleIsActive, "Sale must be active to mint Agent1"); require(numberOfTokens <= maxAgent1Purchase, "Can only mint 20 tokens at a time"); require((totalSupply() + numberOfTokens) <= MAX_TOKENS_COUNT, "Purchase would exceed max supply of Agent1s"); require((tokenPrice * numberOfTokens) <= msg.value, "Ether value sent is not correct"); for(uint i = 0; i < numberOfTokens; i++) { // @dev normal mint uint mintIndex = totalSupply(); if (totalSupply() < MAX_TOKENS_COUNT) { _safeMint(msg.sender, mintIndex); _tokenIdCounter.increment(); } // @dev agent1 special mint if (twinMinting) { // @dev mint another token.. if there's still slots in the world // 2nd token is a morphing agent1.. and then, there's going to be an odd anomoly.. mintIndex++; if (mintIndex < MAX_TOKENS_COUNT) { _safeMint(msg.sender, mintIndex); _tokenIdCounter.increment(); } } } if (startingIndexBlock == 0) { startingIndexBlock = block.number; } } /// @dev reserved token minting. 1 mint = 1 token. function mintReservedAgent1(uint numberOfTokens, address _to) external onlyOwner { require(saleIsActive, "Sale must be active to mint Agent1"); require(numberOfTokens <= maxAgent1Purchase, "Can only mint 20 tokens at a time"); require((totalSupply() + numberOfTokens) <= MAX_TOKENS_COUNT, "Purchase would exceed max supply of Agent1s"); for(uint i = 0; i < numberOfTokens; i++) { uint mintIndex = totalSupply(); if (totalSupply() < MAX_TOKENS_COUNT) { _safeMint(_to, mintIndex); _tokenIdCounter.increment(); } } if (startingIndexBlock == 0) { startingIndexBlock = block.number; } } function zeroMintAgent1() public { require(zeroAgent1Count[msg.sender] < 1, "Each wallet can only zero mint once"); require(firstMintZero, "Zero mint must be active to zero mint Agent1"); require(saleIsActive, "Sale must be active to mint Agent1"); require((totalSupply() + 1) <= MAX_TOKENS_COUNT, "Mint would exceed max supply of Agent1s"); uint mintIndex = totalSupply(); if (totalSupply() < MAX_TOKENS_COUNT) { _safeMint(msg.sender, mintIndex); _tokenIdCounter.increment(); } if (startingIndexBlock == 0) { startingIndexBlock = block.number; } zeroAgent1Count[msg.sender]++; } function setTokenURI(uint256 tokenId, string memory _tokenURI) external onlyOwner { require(_exists(tokenId), "Agent1: URI set of nonexistent token"); _BJRtokenURIs[tokenId] = _tokenURI; } function freezeTokenURI(uint256 tokenId) external onlyOwner { emit PermanentURI(tokenURI(tokenId), tokenId); } function freezeAllTokenURI() external onlyOwner { for(uint i = 0; i < totalSupply(); i++) { emit PermanentURI(tokenURI(i), i); } } function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { string memory _tokenURI = _BJRtokenURIs[tokenId]; // @dev If a polymorphed Agent1 is found, reveal it if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(_tokenURI)); } return super.tokenURI(tokenId); } function isApprovedForAll(address owner, address operator) public view override(ERC721) returns (bool) { if (proxyRegistrySetting > 0) { address proxyRegistryAddress; if (proxyRegistrySetting == 1) { proxyRegistryAddress = 0xF57B2c51dED3A29e6891aba85459d600256Cf317; } else if (proxyRegistrySetting == 2) { proxyRegistryAddress = 0xa5409ec958C83C3f309868babACA7c86DCB077c1; } else { proxyRegistryAddress = customProxyRegistry; } ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress); if (address(proxyRegistry.proxies(owner)) == operator) { return true; } } return super.isApprovedForAll(owner, operator); } }
// 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); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly 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; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } }
// 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 "./Address.sol"; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.sol"; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC721.sol"; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } }
// 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 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 // JoeRichardsNFT v1.1 pragma solidity ^0.8.2; import "./Ownable.sol"; /// @title A preset for our branded releases /// @author BAD JOE RICHARDS /// @notice Used for branded releases and drops /// @dev Inherited by the main NFT contract JoeRichardsNFT is Ownable { bool public saleIsActive = false; bool public firstMintZero = true; bool internal constant twinMinting = true; uint256 public startingIndexBlock; uint256 public constant tokenPrice = 0.0303 ether; uint16 public constant MAX_TOKENS_COUNT = 10001; // 16 bit 0 to 65,535 uint8 public constant maxAgent1Purchase = 20; // 8bit 0-255 uint8 public proxyRegistrySetting = 2; address internal customProxyRegistry; // @dev when the time comes, everything will freeze to IPFS string public baseNFTURI = "https://agent1.xyz/"; mapping (uint256 => string) internal _BJRtokenURIs; mapping (address => uint) internal zeroAgent1Count; // @dev Emit to freeze metadata event PermanentURI(string _value, uint256 indexed _id); function flipSaleState() external onlyOwner { saleIsActive = !saleIsActive; } function flipFirstMintZero() external onlyOwner { firstMintZero = !firstMintZero; } function setProxySettingAll(uint8 newProxySetting, address newProxyAddress) external onlyOwner { proxyRegistrySetting = newProxySetting; customProxyRegistry = newProxyAddress; } function withdraw() public onlyOwner { payable(owner()).transfer(address(this).balance); } function setBaseURI(string calldata _uri) external onlyOwner { baseNFTURI = _uri; } }
// 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 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":[],"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":false,"internalType":"string","name":"_value","type":"string"},{"indexed":true,"internalType":"uint256","name":"_id","type":"uint256"}],"name":"PermanentURI","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_TOKENS_COUNT","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseNFTURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"firstMintZero","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipFirstMintZero","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freezeAllTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"freezeTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxAgent1Purchase","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintAgent1","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"mintReservedAgent1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyRegistrySetting","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newProxySetting","type":"uint8"},{"internalType":"address","name":"newProxyAddress","type":"address"}],"name":"setProxySettingAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startingIndexBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zeroMintAgent1","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600760146101000a81548160ff0219169083151502179055506001600760156101000a81548160ff0219169083151502179055506002600960006101000a81548160ff021916908360ff1602179055506040518060400160405280601381526020017f68747470733a2f2f6167656e74312e78797a2f00000000000000000000000000815250600a9080519060200190620000a392919062000246565b50348015620000b157600080fd5b506040518060400160405280600681526020017f4167656e743100000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f413130303031000000000000000000000000000000000000000000000000000081525081600090805190602001906200013692919062000246565b5080600190805190602001906200014f92919062000246565b50505062000172620001666200017860201b60201c565b6200018060201b60201c565b6200035b565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200025490620002f6565b90600052602060002090601f016020900481019282620002785760008555620002c4565b82601f106200029357805160ff1916838001178555620002c4565b82800160010185558215620002c4579182015b82811115620002c3578251825591602001919060010190620002a6565b5b509050620002d39190620002d7565b5090565b5b80821115620002f2576000816000905550600101620002d8565b5090565b600060028204905060018216806200030f57607f821691505b602082108114156200032657620003256200032c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614ab1806200036b6000396000f3fe60806040526004361061020f5760003560e01c80636770144911610118578063b88d4fde116100a0578063e36d64981161006f578063e36d64981461071c578063e985e9c514610747578063eb8d244414610784578063f0650c8a146107af578063f2fde38b146107c65761020f565b8063b88d4fde14610660578063b9a8a9f214610689578063c87b56dd146106b4578063db322395146106f15761020f565b80638c8fed8b116100e75780638c8fed8b1461059c5780638da5cb5b146105b857806395d89b41146105e3578063a22cb4651461060e578063b4d6c140146106375761020f565b806367701449146104f257806370a082311461051d578063715018a61461055a5780637ff9b596146105715761020f565b80632e0a21621161019b57806342842e0e1161016a57806342842e0e1461042157806355f804b31461044a57806356ab5959146104735780635e5b1b4c1461049e5780636352211e146104b55761020f565b80632e0a2162146103b357806334918dfd146103ca578063385c0eb0146103e15780633ccfd60b1461040a5761020f565b8063162094c4116101e2578063162094c4146102e257806318160ddd1461030b57806320f76e3d1461033657806323b872dd146103615780632501f0181461038a5761020f565b806301ffc9a71461021457806306fdde0314610251578063081812fc1461027c578063095ea7b3146102b9575b600080fd5b34801561022057600080fd5b5061023b600480360381019061023691906133b9565b6107ef565b6040516102489190613a91565b60405180910390f35b34801561025d57600080fd5b506102666108d1565b6040516102739190613aac565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e919061348d565b610963565b6040516102b09190613a2a565b60405180910390f35b3480156102c557600080fd5b506102e060048036038101906102db9190613379565b6109e8565b005b3480156102ee57600080fd5b50610309600480360381019061030491906134fa565b610b00565b005b34801561031757600080fd5b50610320610bf0565b60405161032d9190613e09565b60405180910390f35b34801561034257600080fd5b5061034b610c01565b6040516103589190613aac565b60405180910390f35b34801561036d57600080fd5b5061038860048036038101906103839190613263565b610c8f565b005b34801561039657600080fd5b506103b160048036038101906103ac91906134ba565b610cef565b005b3480156103bf57600080fd5b506103c8610ec9565b005b3480156103d657600080fd5b506103df610fad565b005b3480156103ed57600080fd5b506104086004803603810190610403919061348d565b611055565b005b34801561041657600080fd5b5061041f611114565b005b34801561042d57600080fd5b5061044860048036038101906104439190613263565b6111e0565b005b34801561045657600080fd5b50610471600480360381019061046c9190613440565b611200565b005b34801561047f57600080fd5b50610488611292565b6040516104959190613e24565b60405180910390f35b3480156104aa57600080fd5b506104b3611297565b005b3480156104c157600080fd5b506104dc60048036038101906104d7919061348d565b61133f565b6040516104e99190613a2a565b60405180910390f35b3480156104fe57600080fd5b506105076113f1565b6040516105149190613dee565b60405180910390f35b34801561052957600080fd5b50610544600480360381019061053f91906131f6565b6113f7565b6040516105519190613e09565b60405180910390f35b34801561056657600080fd5b5061056f6114af565b005b34801561057d57600080fd5b50610586611537565b6040516105939190613e09565b60405180910390f35b6105b660048036038101906105b1919061348d565b611542565b005b3480156105c457600080fd5b506105cd61172d565b6040516105da9190613a2a565b60405180910390f35b3480156105ef57600080fd5b506105f8611757565b6040516106059190613aac565b60405180910390f35b34801561061a57600080fd5b5061063560048036038101906106309190613339565b6117e9565b005b34801561064357600080fd5b5061065e60048036038101906106599190613556565b61196a565b005b34801561066c57600080fd5b50610687600480360381019061068291906132b6565b611a46565b005b34801561069557600080fd5b5061069e611aa8565b6040516106ab9190613a91565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d6919061348d565b611abb565b6040516106e89190613aac565b60405180910390f35b3480156106fd57600080fd5b50610706611ba1565b6040516107139190613e24565b60405180910390f35b34801561072857600080fd5b50610731611bb4565b60405161073e9190613e09565b60405180910390f35b34801561075357600080fd5b5061076e60048036038101906107699190613223565b611bba565b60405161077b9190613a91565b60405180910390f35b34801561079057600080fd5b50610799611d4f565b6040516107a69190613a91565b60405180910390f35b3480156107bb57600080fd5b506107c4611d62565b005b3480156107d257600080fd5b506107ed60048036038101906107e891906131f6565b611f7f565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108ba57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108ca57506108c982612077565b5b9050919050565b6060600080546108e090614101565b80601f016020809104026020016040519081016040528092919081815260200182805461090c90614101565b80156109595780601f1061092e57610100808354040283529160200191610959565b820191906000526020600020905b81548152906001019060200180831161093c57829003601f168201915b5050505050905090565b600061096e826120e1565b6109ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a490613cce565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109f38261133f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5b90613d6e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a8361214d565b73ffffffffffffffffffffffffffffffffffffffff161480610ab25750610ab181610aac61214d565b611bba565b5b610af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae890613c2e565b60405180910390fd5b610afb8383612155565b505050565b610b0861214d565b73ffffffffffffffffffffffffffffffffffffffff16610b2661172d565b73ffffffffffffffffffffffffffffffffffffffff1614610b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7390613cee565b60405180910390fd5b610b85826120e1565b610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb90613ace565b60405180910390fd5b80600b60008481526020019081526020016000209080519060200190610beb929190612f04565b505050565b6000610bfc600d61220e565b905090565b600a8054610c0e90614101565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3a90614101565b8015610c875780601f10610c5c57610100808354040283529160200191610c87565b820191906000526020600020905b815481529060010190602001808311610c6a57829003601f168201915b505050505081565b610ca0610c9a61214d565b8261221c565b610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd690613d8e565b60405180910390fd5b610cea8383836122fa565b505050565b610cf761214d565b73ffffffffffffffffffffffffffffffffffffffff16610d1561172d565b73ffffffffffffffffffffffffffffffffffffffff1614610d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6290613cee565b60405180910390fd5b600760149054906101000a900460ff16610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db190613dae565b60405180910390fd5b601460ff16821115610e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df890613bee565b60405180910390fd5b61271161ffff1682610e11610bf0565b610e1b9190613f09565b1115610e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5390613dce565b60405180910390fd5b60005b82811015610eb1576000610e71610bf0565b905061271161ffff16610e82610bf0565b1015610e9d57610e928382612556565b610e9c600d612574565b5b508080610ea990614164565b915050610e5f565b5060006008541415610ec557436008819055505b5050565b610ed161214d565b73ffffffffffffffffffffffffffffffffffffffff16610eef61172d565b73ffffffffffffffffffffffffffffffffffffffff1614610f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3c90613cee565b60405180910390fd5b60005b610f50610bf0565b811015610faa57807fa109ba539900bf1b633f956d63c96fc89b814c7287f7aa50a9216d0b55657207610f8283611abb565b604051610f8f9190613aac565b60405180910390a28080610fa290614164565b915050610f48565b50565b610fb561214d565b73ffffffffffffffffffffffffffffffffffffffff16610fd361172d565b73ffffffffffffffffffffffffffffffffffffffff1614611029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102090613cee565b60405180910390fd5b600760149054906101000a900460ff1615600760146101000a81548160ff021916908315150217905550565b61105d61214d565b73ffffffffffffffffffffffffffffffffffffffff1661107b61172d565b73ffffffffffffffffffffffffffffffffffffffff16146110d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c890613cee565b60405180910390fd5b807fa109ba539900bf1b633f956d63c96fc89b814c7287f7aa50a9216d0b556572076110fc83611abb565b6040516111099190613aac565b60405180910390a250565b61111c61214d565b73ffffffffffffffffffffffffffffffffffffffff1661113a61172d565b73ffffffffffffffffffffffffffffffffffffffff1614611190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118790613cee565b60405180910390fd5b61119861172d565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156111dd573d6000803e3d6000fd5b50565b6111fb83838360405180602001604052806000815250611a46565b505050565b61120861214d565b73ffffffffffffffffffffffffffffffffffffffff1661122661172d565b73ffffffffffffffffffffffffffffffffffffffff161461127c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127390613cee565b60405180910390fd5b8181600a919061128d929190612f8a565b505050565b601481565b61129f61214d565b73ffffffffffffffffffffffffffffffffffffffff166112bd61172d565b73ffffffffffffffffffffffffffffffffffffffff1614611313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130a90613cee565b60405180910390fd5b600760159054906101000a900460ff1615600760156101000a81548160ff021916908315150217905550565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113df90613c6e565b60405180910390fd5b80915050919050565b61271181565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145f90613c4e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114b761214d565b73ffffffffffffffffffffffffffffffffffffffff166114d561172d565b73ffffffffffffffffffffffffffffffffffffffff161461152b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152290613cee565b60405180910390fd5b611535600061258a565b565b666ba5b080b1c00081565b600760149054906101000a900460ff16611591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158890613dae565b60405180910390fd5b601460ff168111156115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf90613bee565b60405180910390fd5b61271161ffff16816115e8610bf0565b6115f29190613f09565b1115611633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162a90613dce565b60405180910390fd5b3481666ba5b080b1c0006116479190613f90565b1115611688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167f90613bae565b60405180910390fd5b60005b8181101561171657600061169d610bf0565b905061271161ffff166116ae610bf0565b10156116c9576116be3382612556565b6116c8600d612574565b5b6001156117025780806116db90614164565b91505061271161ffff16811015611701576116f63382612556565b611700600d612574565b5b5b50808061170e90614164565b91505061168b565b506000600854141561172a57436008819055505b50565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461176690614101565b80601f016020809104026020016040519081016040528092919081815260200182805461179290614101565b80156117df5780601f106117b4576101008083540402835291602001916117df565b820191906000526020600020905b8154815290600101906020018083116117c257829003601f168201915b5050505050905090565b6117f161214d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561185f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185690613b8e565b60405180910390fd5b806005600061186c61214d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661191961214d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161195e9190613a91565b60405180910390a35050565b61197261214d565b73ffffffffffffffffffffffffffffffffffffffff1661199061172d565b73ffffffffffffffffffffffffffffffffffffffff16146119e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dd90613cee565b60405180910390fd5b81600960006101000a81548160ff021916908360ff16021790555080600960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b611a57611a5161214d565b8361221c565b611a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8d90613d8e565b60405180910390fd5b611aa284848484612650565b50505050565b600760159054906101000a900460ff1681565b60606000600b60008481526020019081526020016000208054611add90614101565b80601f0160208091040260200160405190810160405280929190818152602001828054611b0990614101565b8015611b565780601f10611b2b57610100808354040283529160200191611b56565b820191906000526020600020905b815481529060010190602001808311611b3957829003601f168201915b50505050509050600081511115611b8f5780604051602001611b7891906139ef565b604051602081830303815290604052915050611b9c565b611b98836126ac565b9150505b919050565b600960009054906101000a900460ff1681565b60085481565b600080600960009054906101000a900460ff1660ff161115611d3c5760006001600960009054906101000a900460ff1660ff161415611c0f5773f57b2c51ded3a29e6891aba85459d600256cf3179050611c6d565b6002600960009054906101000a900460ff1660ff161415611c465773a5409ec958c83c3f309868babaca7c86dcb077c19050611c6c565b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b5b60008190508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791876040518263ffffffff1660e01b8152600401611cc29190613a2a565b60206040518083038186803b158015611cda57600080fd5b505afa158015611cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d129190613413565b73ffffffffffffffffffffffffffffffffffffffff161415611d3957600192505050611d49565b50505b611d4683836127fe565b90505b92915050565b600760149054906101000a900460ff1681565b6001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddb90613c0e565b60405180910390fd5b600760159054906101000a900460ff16611e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2a90613b4e565b60405180910390fd5b600760149054906101000a900460ff16611e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7990613dae565b60405180910390fd5b61271161ffff166001611e93610bf0565b611e9d9190613f09565b1115611ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed590613d0e565b60405180910390fd5b6000611ee8610bf0565b905061271161ffff16611ef9610bf0565b1015611f1457611f093382612556565b611f13600d612574565b5b60006008541415611f2757436008819055505b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611f7790614164565b919050555050565b611f8761214d565b73ffffffffffffffffffffffffffffffffffffffff16611fa561172d565b73ffffffffffffffffffffffffffffffffffffffff1614611ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff290613cee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561206b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206290613b0e565b60405180910390fd5b6120748161258a565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121c88361133f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000612227826120e1565b612266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225d90613bce565b60405180910390fd5b60006122718361133f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122e057508373ffffffffffffffffffffffffffffffffffffffff166122c884610963565b73ffffffffffffffffffffffffffffffffffffffff16145b806122f157506122f08185611bba565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661231a8261133f565b73ffffffffffffffffffffffffffffffffffffffff1614612370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236790613d2e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d790613b6e565b60405180910390fd5b6123eb838383612892565b6123f6600082612155565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124469190613fea565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461249d9190613f09565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612570828260405180602001604052806000815250612897565b5050565b6001816000016000828254019250508190555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61265b8484846122fa565b612667848484846128f2565b6126a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269d90613aee565b60405180910390fd5b50505050565b60606126b7826120e1565b6126f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ed90613cae565b60405180910390fd5b600060066000848152602001908152602001600020805461271690614101565b80601f016020809104026020016040519081016040528092919081815260200182805461274290614101565b801561278f5780601f106127645761010080835404028352916020019161278f565b820191906000526020600020905b81548152906001019060200180831161277257829003601f168201915b5050505050905060006127a0612a89565b90506000815114156127b65781925050506127f9565b6000825111156127eb5780826040516020016127d3929190613a06565b604051602081830303815290604052925050506127f9565b6127f484612b1b565b925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b505050565b6128a18383612bc2565b6128ae60008484846128f2565b6128ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e490613aee565b60405180910390fd5b505050565b60006129138473ffffffffffffffffffffffffffffffffffffffff16612d90565b15612a7c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261293c61214d565b8786866040518563ffffffff1660e01b815260040161295e9493929190613a45565b602060405180830381600087803b15801561297857600080fd5b505af19250505080156129a957506040513d601f19601f820116820180604052508101906129a691906133e6565b60015b612a2c573d80600081146129d9576040519150601f19603f3d011682016040523d82523d6000602084013e6129de565b606091505b50600081511415612a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1b90613aee565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a81565b600190505b949350505050565b6060600a8054612a9890614101565b80601f0160208091040260200160405190810160405280929190818152602001828054612ac490614101565b8015612b115780601f10612ae657610100808354040283529160200191612b11565b820191906000526020600020905b815481529060010190602001808311612af457829003601f168201915b5050505050905090565b6060612b26826120e1565b612b65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5c90613d4e565b60405180910390fd5b6000612b6f612a89565b90506000815111612b8f5760405180602001604052806000815250612bba565b80612b9984612da3565b604051602001612baa929190613a06565b6040516020818303038152906040525b915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2990613c8e565b60405180910390fd5b612c3b816120e1565b15612c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7290613b2e565b60405180910390fd5b612c8760008383612892565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cd79190613f09565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b60606000821415612deb576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612eff565b600082905060005b60008214612e1d578080612e0690614164565b915050600a82612e169190613f5f565b9150612df3565b60008167ffffffffffffffff811115612e3957612e3861429a565b5b6040519080825280601f01601f191660200182016040528015612e6b5781602001600182028036833780820191505090505b5090505b60008514612ef857600182612e849190613fea565b9150600a85612e9391906141ad565b6030612e9f9190613f09565b60f81b818381518110612eb557612eb461426b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ef19190613f5f565b9450612e6f565b8093505050505b919050565b828054612f1090614101565b90600052602060002090601f016020900481019282612f325760008555612f79565b82601f10612f4b57805160ff1916838001178555612f79565b82800160010185558215612f79579182015b82811115612f78578251825591602001919060010190612f5d565b5b509050612f869190613010565b5090565b828054612f9690614101565b90600052602060002090601f016020900481019282612fb85760008555612fff565b82601f10612fd157803560ff1916838001178555612fff565b82800160010185558215612fff579182015b82811115612ffe578235825591602001919060010190612fe3565b5b50905061300c9190613010565b5090565b5b80821115613029576000816000905550600101613011565b5090565b600061304061303b84613e64565b613e3f565b90508281526020810184848401111561305c5761305b6142d8565b5b6130678482856140bf565b509392505050565b600061308261307d84613e95565b613e3f565b90508281526020810184848401111561309e5761309d6142d8565b5b6130a98482856140bf565b509392505050565b6000813590506130c0816149f1565b92915050565b6000813590506130d581614a08565b92915050565b6000813590506130ea81614a1f565b92915050565b6000815190506130ff81614a1f565b92915050565b600082601f83011261311a576131196142ce565b5b813561312a84826020860161302d565b91505092915050565b60008151905061314281614a36565b92915050565b60008083601f84011261315e5761315d6142ce565b5b8235905067ffffffffffffffff81111561317b5761317a6142c9565b5b602083019150836001820283011115613197576131966142d3565b5b9250929050565b600082601f8301126131b3576131b26142ce565b5b81356131c384826020860161306f565b91505092915050565b6000813590506131db81614a4d565b92915050565b6000813590506131f081614a64565b92915050565b60006020828403121561320c5761320b6142e2565b5b600061321a848285016130b1565b91505092915050565b6000806040838503121561323a576132396142e2565b5b6000613248858286016130b1565b9250506020613259858286016130b1565b9150509250929050565b60008060006060848603121561327c5761327b6142e2565b5b600061328a868287016130b1565b935050602061329b868287016130b1565b92505060406132ac868287016131cc565b9150509250925092565b600080600080608085870312156132d0576132cf6142e2565b5b60006132de878288016130b1565b94505060206132ef878288016130b1565b9350506040613300878288016131cc565b925050606085013567ffffffffffffffff811115613321576133206142dd565b5b61332d87828801613105565b91505092959194509250565b600080604083850312156133505761334f6142e2565b5b600061335e858286016130b1565b925050602061336f858286016130c6565b9150509250929050565b600080604083850312156133905761338f6142e2565b5b600061339e858286016130b1565b92505060206133af858286016131cc565b9150509250929050565b6000602082840312156133cf576133ce6142e2565b5b60006133dd848285016130db565b91505092915050565b6000602082840312156133fc576133fb6142e2565b5b600061340a848285016130f0565b91505092915050565b600060208284031215613429576134286142e2565b5b600061343784828501613133565b91505092915050565b60008060208385031215613457576134566142e2565b5b600083013567ffffffffffffffff811115613475576134746142dd565b5b61348185828601613148565b92509250509250929050565b6000602082840312156134a3576134a26142e2565b5b60006134b1848285016131cc565b91505092915050565b600080604083850312156134d1576134d06142e2565b5b60006134df858286016131cc565b92505060206134f0858286016130b1565b9150509250929050565b60008060408385031215613511576135106142e2565b5b600061351f858286016131cc565b925050602083013567ffffffffffffffff8111156135405761353f6142dd565b5b61354c8582860161319e565b9150509250929050565b6000806040838503121561356d5761356c6142e2565b5b600061357b858286016131e1565b925050602061358c858286016130b1565b9150509250929050565b61359f8161401e565b82525050565b6135ae81614030565b82525050565b60006135bf82613ec6565b6135c98185613edc565b93506135d98185602086016140ce565b6135e2816142e7565b840191505092915050565b60006135f882613ed1565b6136028185613eed565b93506136128185602086016140ce565b61361b816142e7565b840191505092915050565b600061363182613ed1565b61363b8185613efe565b935061364b8185602086016140ce565b80840191505092915050565b6000613664602483613eed565b915061366f826142f8565b604082019050919050565b6000613687603283613eed565b915061369282614347565b604082019050919050565b60006136aa602683613eed565b91506136b582614396565b604082019050919050565b60006136cd601c83613eed565b91506136d8826143e5565b602082019050919050565b60006136f0602c83613eed565b91506136fb8261440e565b604082019050919050565b6000613713602483613eed565b915061371e8261445d565b604082019050919050565b6000613736601983613eed565b9150613741826144ac565b602082019050919050565b6000613759601f83613eed565b9150613764826144d5565b602082019050919050565b600061377c602c83613eed565b9150613787826144fe565b604082019050919050565b600061379f602183613eed565b91506137aa8261454d565b604082019050919050565b60006137c2602383613eed565b91506137cd8261459c565b604082019050919050565b60006137e5603883613eed565b91506137f0826145eb565b604082019050919050565b6000613808602a83613eed565b91506138138261463a565b604082019050919050565b600061382b602983613eed565b915061383682614689565b604082019050919050565b600061384e602083613eed565b9150613859826146d8565b602082019050919050565b6000613871603183613eed565b915061387c82614701565b604082019050919050565b6000613894602c83613eed565b915061389f82614750565b604082019050919050565b60006138b7602083613eed565b91506138c28261479f565b602082019050919050565b60006138da602783613eed565b91506138e5826147c8565b604082019050919050565b60006138fd602983613eed565b915061390882614817565b604082019050919050565b6000613920602f83613eed565b915061392b82614866565b604082019050919050565b6000613943602183613eed565b915061394e826148b5565b604082019050919050565b6000613966603183613eed565b915061397182614904565b604082019050919050565b6000613989602283613eed565b915061399482614953565b604082019050919050565b60006139ac602b83613eed565b91506139b7826149a2565b604082019050919050565b6139cb8161407a565b82525050565b6139da816140a8565b82525050565b6139e9816140b2565b82525050565b60006139fb8284613626565b915081905092915050565b6000613a128285613626565b9150613a1e8284613626565b91508190509392505050565b6000602082019050613a3f6000830184613596565b92915050565b6000608082019050613a5a6000830187613596565b613a676020830186613596565b613a7460408301856139d1565b8181036060830152613a8681846135b4565b905095945050505050565b6000602082019050613aa660008301846135a5565b92915050565b60006020820190508181036000830152613ac681846135ed565b905092915050565b60006020820190508181036000830152613ae781613657565b9050919050565b60006020820190508181036000830152613b078161367a565b9050919050565b60006020820190508181036000830152613b278161369d565b9050919050565b60006020820190508181036000830152613b47816136c0565b9050919050565b60006020820190508181036000830152613b67816136e3565b9050919050565b60006020820190508181036000830152613b8781613706565b9050919050565b60006020820190508181036000830152613ba781613729565b9050919050565b60006020820190508181036000830152613bc78161374c565b9050919050565b60006020820190508181036000830152613be78161376f565b9050919050565b60006020820190508181036000830152613c0781613792565b9050919050565b60006020820190508181036000830152613c27816137b5565b9050919050565b60006020820190508181036000830152613c47816137d8565b9050919050565b60006020820190508181036000830152613c67816137fb565b9050919050565b60006020820190508181036000830152613c878161381e565b9050919050565b60006020820190508181036000830152613ca781613841565b9050919050565b60006020820190508181036000830152613cc781613864565b9050919050565b60006020820190508181036000830152613ce781613887565b9050919050565b60006020820190508181036000830152613d07816138aa565b9050919050565b60006020820190508181036000830152613d27816138cd565b9050919050565b60006020820190508181036000830152613d47816138f0565b9050919050565b60006020820190508181036000830152613d6781613913565b9050919050565b60006020820190508181036000830152613d8781613936565b9050919050565b60006020820190508181036000830152613da781613959565b9050919050565b60006020820190508181036000830152613dc78161397c565b9050919050565b60006020820190508181036000830152613de78161399f565b9050919050565b6000602082019050613e0360008301846139c2565b92915050565b6000602082019050613e1e60008301846139d1565b92915050565b6000602082019050613e3960008301846139e0565b92915050565b6000613e49613e5a565b9050613e558282614133565b919050565b6000604051905090565b600067ffffffffffffffff821115613e7f57613e7e61429a565b5b613e88826142e7565b9050602081019050919050565b600067ffffffffffffffff821115613eb057613eaf61429a565b5b613eb9826142e7565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f14826140a8565b9150613f1f836140a8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f5457613f536141de565b5b828201905092915050565b6000613f6a826140a8565b9150613f75836140a8565b925082613f8557613f8461420d565b5b828204905092915050565b6000613f9b826140a8565b9150613fa6836140a8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613fdf57613fde6141de565b5b828202905092915050565b6000613ff5826140a8565b9150614000836140a8565b925082821015614013576140126141de565b5b828203905092915050565b600061402982614088565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006140738261401e565b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156140ec5780820151818401526020810190506140d1565b838111156140fb576000848401525b50505050565b6000600282049050600182168061411957607f821691505b6020821081141561412d5761412c61423c565b5b50919050565b61413c826142e7565b810181811067ffffffffffffffff8211171561415b5761415a61429a565b5b80604052505050565b600061416f826140a8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141a2576141a16141de565b5b600182019050919050565b60006141b8826140a8565b91506141c3836140a8565b9250826141d3576141d261420d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4167656e74313a2055524920736574206f66206e6f6e6578697374656e74207460008201527f6f6b656e00000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5a65726f206d696e74206d7573742062652061637469766520746f207a65726f60008201527f206d696e74204167656e74310000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f43616e206f6e6c79206d696e7420323020746f6b656e7320617420612074696d60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f456163682077616c6c65742063616e206f6e6c79207a65726f206d696e74206f60008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e7420776f756c6420657863656564206d617820737570706c79206f662060008201527f4167656e74317300000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f53616c65206d7573742062652061637469766520746f206d696e74204167656e60008201527f7431000000000000000000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f66204167656e743173000000000000000000000000000000000000000000602082015250565b6149fa8161401e565b8114614a0557600080fd5b50565b614a1181614030565b8114614a1c57600080fd5b50565b614a288161403c565b8114614a3357600080fd5b50565b614a3f81614068565b8114614a4a57600080fd5b50565b614a56816140a8565b8114614a6157600080fd5b50565b614a6d816140b2565b8114614a7857600080fd5b5056fea264697066735822122097430dc7beca1468d2388c2ed67c6ee273bd57aaefe89e3787c1ea4bfb4c397064736f6c63430008070033
Deployed Bytecode
0x60806040526004361061020f5760003560e01c80636770144911610118578063b88d4fde116100a0578063e36d64981161006f578063e36d64981461071c578063e985e9c514610747578063eb8d244414610784578063f0650c8a146107af578063f2fde38b146107c65761020f565b8063b88d4fde14610660578063b9a8a9f214610689578063c87b56dd146106b4578063db322395146106f15761020f565b80638c8fed8b116100e75780638c8fed8b1461059c5780638da5cb5b146105b857806395d89b41146105e3578063a22cb4651461060e578063b4d6c140146106375761020f565b806367701449146104f257806370a082311461051d578063715018a61461055a5780637ff9b596146105715761020f565b80632e0a21621161019b57806342842e0e1161016a57806342842e0e1461042157806355f804b31461044a57806356ab5959146104735780635e5b1b4c1461049e5780636352211e146104b55761020f565b80632e0a2162146103b357806334918dfd146103ca578063385c0eb0146103e15780633ccfd60b1461040a5761020f565b8063162094c4116101e2578063162094c4146102e257806318160ddd1461030b57806320f76e3d1461033657806323b872dd146103615780632501f0181461038a5761020f565b806301ffc9a71461021457806306fdde0314610251578063081812fc1461027c578063095ea7b3146102b9575b600080fd5b34801561022057600080fd5b5061023b600480360381019061023691906133b9565b6107ef565b6040516102489190613a91565b60405180910390f35b34801561025d57600080fd5b506102666108d1565b6040516102739190613aac565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e919061348d565b610963565b6040516102b09190613a2a565b60405180910390f35b3480156102c557600080fd5b506102e060048036038101906102db9190613379565b6109e8565b005b3480156102ee57600080fd5b50610309600480360381019061030491906134fa565b610b00565b005b34801561031757600080fd5b50610320610bf0565b60405161032d9190613e09565b60405180910390f35b34801561034257600080fd5b5061034b610c01565b6040516103589190613aac565b60405180910390f35b34801561036d57600080fd5b5061038860048036038101906103839190613263565b610c8f565b005b34801561039657600080fd5b506103b160048036038101906103ac91906134ba565b610cef565b005b3480156103bf57600080fd5b506103c8610ec9565b005b3480156103d657600080fd5b506103df610fad565b005b3480156103ed57600080fd5b506104086004803603810190610403919061348d565b611055565b005b34801561041657600080fd5b5061041f611114565b005b34801561042d57600080fd5b5061044860048036038101906104439190613263565b6111e0565b005b34801561045657600080fd5b50610471600480360381019061046c9190613440565b611200565b005b34801561047f57600080fd5b50610488611292565b6040516104959190613e24565b60405180910390f35b3480156104aa57600080fd5b506104b3611297565b005b3480156104c157600080fd5b506104dc60048036038101906104d7919061348d565b61133f565b6040516104e99190613a2a565b60405180910390f35b3480156104fe57600080fd5b506105076113f1565b6040516105149190613dee565b60405180910390f35b34801561052957600080fd5b50610544600480360381019061053f91906131f6565b6113f7565b6040516105519190613e09565b60405180910390f35b34801561056657600080fd5b5061056f6114af565b005b34801561057d57600080fd5b50610586611537565b6040516105939190613e09565b60405180910390f35b6105b660048036038101906105b1919061348d565b611542565b005b3480156105c457600080fd5b506105cd61172d565b6040516105da9190613a2a565b60405180910390f35b3480156105ef57600080fd5b506105f8611757565b6040516106059190613aac565b60405180910390f35b34801561061a57600080fd5b5061063560048036038101906106309190613339565b6117e9565b005b34801561064357600080fd5b5061065e60048036038101906106599190613556565b61196a565b005b34801561066c57600080fd5b50610687600480360381019061068291906132b6565b611a46565b005b34801561069557600080fd5b5061069e611aa8565b6040516106ab9190613a91565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d6919061348d565b611abb565b6040516106e89190613aac565b60405180910390f35b3480156106fd57600080fd5b50610706611ba1565b6040516107139190613e24565b60405180910390f35b34801561072857600080fd5b50610731611bb4565b60405161073e9190613e09565b60405180910390f35b34801561075357600080fd5b5061076e60048036038101906107699190613223565b611bba565b60405161077b9190613a91565b60405180910390f35b34801561079057600080fd5b50610799611d4f565b6040516107a69190613a91565b60405180910390f35b3480156107bb57600080fd5b506107c4611d62565b005b3480156107d257600080fd5b506107ed60048036038101906107e891906131f6565b611f7f565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108ba57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108ca57506108c982612077565b5b9050919050565b6060600080546108e090614101565b80601f016020809104026020016040519081016040528092919081815260200182805461090c90614101565b80156109595780601f1061092e57610100808354040283529160200191610959565b820191906000526020600020905b81548152906001019060200180831161093c57829003601f168201915b5050505050905090565b600061096e826120e1565b6109ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a490613cce565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109f38261133f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5b90613d6e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a8361214d565b73ffffffffffffffffffffffffffffffffffffffff161480610ab25750610ab181610aac61214d565b611bba565b5b610af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae890613c2e565b60405180910390fd5b610afb8383612155565b505050565b610b0861214d565b73ffffffffffffffffffffffffffffffffffffffff16610b2661172d565b73ffffffffffffffffffffffffffffffffffffffff1614610b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7390613cee565b60405180910390fd5b610b85826120e1565b610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb90613ace565b60405180910390fd5b80600b60008481526020019081526020016000209080519060200190610beb929190612f04565b505050565b6000610bfc600d61220e565b905090565b600a8054610c0e90614101565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3a90614101565b8015610c875780601f10610c5c57610100808354040283529160200191610c87565b820191906000526020600020905b815481529060010190602001808311610c6a57829003601f168201915b505050505081565b610ca0610c9a61214d565b8261221c565b610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd690613d8e565b60405180910390fd5b610cea8383836122fa565b505050565b610cf761214d565b73ffffffffffffffffffffffffffffffffffffffff16610d1561172d565b73ffffffffffffffffffffffffffffffffffffffff1614610d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6290613cee565b60405180910390fd5b600760149054906101000a900460ff16610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db190613dae565b60405180910390fd5b601460ff16821115610e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df890613bee565b60405180910390fd5b61271161ffff1682610e11610bf0565b610e1b9190613f09565b1115610e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5390613dce565b60405180910390fd5b60005b82811015610eb1576000610e71610bf0565b905061271161ffff16610e82610bf0565b1015610e9d57610e928382612556565b610e9c600d612574565b5b508080610ea990614164565b915050610e5f565b5060006008541415610ec557436008819055505b5050565b610ed161214d565b73ffffffffffffffffffffffffffffffffffffffff16610eef61172d565b73ffffffffffffffffffffffffffffffffffffffff1614610f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3c90613cee565b60405180910390fd5b60005b610f50610bf0565b811015610faa57807fa109ba539900bf1b633f956d63c96fc89b814c7287f7aa50a9216d0b55657207610f8283611abb565b604051610f8f9190613aac565b60405180910390a28080610fa290614164565b915050610f48565b50565b610fb561214d565b73ffffffffffffffffffffffffffffffffffffffff16610fd361172d565b73ffffffffffffffffffffffffffffffffffffffff1614611029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102090613cee565b60405180910390fd5b600760149054906101000a900460ff1615600760146101000a81548160ff021916908315150217905550565b61105d61214d565b73ffffffffffffffffffffffffffffffffffffffff1661107b61172d565b73ffffffffffffffffffffffffffffffffffffffff16146110d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c890613cee565b60405180910390fd5b807fa109ba539900bf1b633f956d63c96fc89b814c7287f7aa50a9216d0b556572076110fc83611abb565b6040516111099190613aac565b60405180910390a250565b61111c61214d565b73ffffffffffffffffffffffffffffffffffffffff1661113a61172d565b73ffffffffffffffffffffffffffffffffffffffff1614611190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118790613cee565b60405180910390fd5b61119861172d565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156111dd573d6000803e3d6000fd5b50565b6111fb83838360405180602001604052806000815250611a46565b505050565b61120861214d565b73ffffffffffffffffffffffffffffffffffffffff1661122661172d565b73ffffffffffffffffffffffffffffffffffffffff161461127c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127390613cee565b60405180910390fd5b8181600a919061128d929190612f8a565b505050565b601481565b61129f61214d565b73ffffffffffffffffffffffffffffffffffffffff166112bd61172d565b73ffffffffffffffffffffffffffffffffffffffff1614611313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130a90613cee565b60405180910390fd5b600760159054906101000a900460ff1615600760156101000a81548160ff021916908315150217905550565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113df90613c6e565b60405180910390fd5b80915050919050565b61271181565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145f90613c4e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114b761214d565b73ffffffffffffffffffffffffffffffffffffffff166114d561172d565b73ffffffffffffffffffffffffffffffffffffffff161461152b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152290613cee565b60405180910390fd5b611535600061258a565b565b666ba5b080b1c00081565b600760149054906101000a900460ff16611591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158890613dae565b60405180910390fd5b601460ff168111156115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf90613bee565b60405180910390fd5b61271161ffff16816115e8610bf0565b6115f29190613f09565b1115611633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162a90613dce565b60405180910390fd5b3481666ba5b080b1c0006116479190613f90565b1115611688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167f90613bae565b60405180910390fd5b60005b8181101561171657600061169d610bf0565b905061271161ffff166116ae610bf0565b10156116c9576116be3382612556565b6116c8600d612574565b5b6001156117025780806116db90614164565b91505061271161ffff16811015611701576116f63382612556565b611700600d612574565b5b5b50808061170e90614164565b91505061168b565b506000600854141561172a57436008819055505b50565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461176690614101565b80601f016020809104026020016040519081016040528092919081815260200182805461179290614101565b80156117df5780601f106117b4576101008083540402835291602001916117df565b820191906000526020600020905b8154815290600101906020018083116117c257829003601f168201915b5050505050905090565b6117f161214d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561185f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185690613b8e565b60405180910390fd5b806005600061186c61214d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661191961214d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161195e9190613a91565b60405180910390a35050565b61197261214d565b73ffffffffffffffffffffffffffffffffffffffff1661199061172d565b73ffffffffffffffffffffffffffffffffffffffff16146119e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dd90613cee565b60405180910390fd5b81600960006101000a81548160ff021916908360ff16021790555080600960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b611a57611a5161214d565b8361221c565b611a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8d90613d8e565b60405180910390fd5b611aa284848484612650565b50505050565b600760159054906101000a900460ff1681565b60606000600b60008481526020019081526020016000208054611add90614101565b80601f0160208091040260200160405190810160405280929190818152602001828054611b0990614101565b8015611b565780601f10611b2b57610100808354040283529160200191611b56565b820191906000526020600020905b815481529060010190602001808311611b3957829003601f168201915b50505050509050600081511115611b8f5780604051602001611b7891906139ef565b604051602081830303815290604052915050611b9c565b611b98836126ac565b9150505b919050565b600960009054906101000a900460ff1681565b60085481565b600080600960009054906101000a900460ff1660ff161115611d3c5760006001600960009054906101000a900460ff1660ff161415611c0f5773f57b2c51ded3a29e6891aba85459d600256cf3179050611c6d565b6002600960009054906101000a900460ff1660ff161415611c465773a5409ec958c83c3f309868babaca7c86dcb077c19050611c6c565b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b5b60008190508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791876040518263ffffffff1660e01b8152600401611cc29190613a2a565b60206040518083038186803b158015611cda57600080fd5b505afa158015611cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d129190613413565b73ffffffffffffffffffffffffffffffffffffffff161415611d3957600192505050611d49565b50505b611d4683836127fe565b90505b92915050565b600760149054906101000a900460ff1681565b6001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddb90613c0e565b60405180910390fd5b600760159054906101000a900460ff16611e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2a90613b4e565b60405180910390fd5b600760149054906101000a900460ff16611e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7990613dae565b60405180910390fd5b61271161ffff166001611e93610bf0565b611e9d9190613f09565b1115611ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed590613d0e565b60405180910390fd5b6000611ee8610bf0565b905061271161ffff16611ef9610bf0565b1015611f1457611f093382612556565b611f13600d612574565b5b60006008541415611f2757436008819055505b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611f7790614164565b919050555050565b611f8761214d565b73ffffffffffffffffffffffffffffffffffffffff16611fa561172d565b73ffffffffffffffffffffffffffffffffffffffff1614611ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff290613cee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561206b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206290613b0e565b60405180910390fd5b6120748161258a565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121c88361133f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000612227826120e1565b612266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225d90613bce565b60405180910390fd5b60006122718361133f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122e057508373ffffffffffffffffffffffffffffffffffffffff166122c884610963565b73ffffffffffffffffffffffffffffffffffffffff16145b806122f157506122f08185611bba565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661231a8261133f565b73ffffffffffffffffffffffffffffffffffffffff1614612370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236790613d2e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d790613b6e565b60405180910390fd5b6123eb838383612892565b6123f6600082612155565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124469190613fea565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461249d9190613f09565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612570828260405180602001604052806000815250612897565b5050565b6001816000016000828254019250508190555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61265b8484846122fa565b612667848484846128f2565b6126a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269d90613aee565b60405180910390fd5b50505050565b60606126b7826120e1565b6126f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ed90613cae565b60405180910390fd5b600060066000848152602001908152602001600020805461271690614101565b80601f016020809104026020016040519081016040528092919081815260200182805461274290614101565b801561278f5780601f106127645761010080835404028352916020019161278f565b820191906000526020600020905b81548152906001019060200180831161277257829003601f168201915b5050505050905060006127a0612a89565b90506000815114156127b65781925050506127f9565b6000825111156127eb5780826040516020016127d3929190613a06565b604051602081830303815290604052925050506127f9565b6127f484612b1b565b925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b505050565b6128a18383612bc2565b6128ae60008484846128f2565b6128ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e490613aee565b60405180910390fd5b505050565b60006129138473ffffffffffffffffffffffffffffffffffffffff16612d90565b15612a7c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261293c61214d565b8786866040518563ffffffff1660e01b815260040161295e9493929190613a45565b602060405180830381600087803b15801561297857600080fd5b505af19250505080156129a957506040513d601f19601f820116820180604052508101906129a691906133e6565b60015b612a2c573d80600081146129d9576040519150601f19603f3d011682016040523d82523d6000602084013e6129de565b606091505b50600081511415612a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1b90613aee565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a81565b600190505b949350505050565b6060600a8054612a9890614101565b80601f0160208091040260200160405190810160405280929190818152602001828054612ac490614101565b8015612b115780601f10612ae657610100808354040283529160200191612b11565b820191906000526020600020905b815481529060010190602001808311612af457829003601f168201915b5050505050905090565b6060612b26826120e1565b612b65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5c90613d4e565b60405180910390fd5b6000612b6f612a89565b90506000815111612b8f5760405180602001604052806000815250612bba565b80612b9984612da3565b604051602001612baa929190613a06565b6040516020818303038152906040525b915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2990613c8e565b60405180910390fd5b612c3b816120e1565b15612c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7290613b2e565b60405180910390fd5b612c8760008383612892565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cd79190613f09565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b60606000821415612deb576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612eff565b600082905060005b60008214612e1d578080612e0690614164565b915050600a82612e169190613f5f565b9150612df3565b60008167ffffffffffffffff811115612e3957612e3861429a565b5b6040519080825280601f01601f191660200182016040528015612e6b5781602001600182028036833780820191505090505b5090505b60008514612ef857600182612e849190613fea565b9150600a85612e9391906141ad565b6030612e9f9190613f09565b60f81b818381518110612eb557612eb461426b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ef19190613f5f565b9450612e6f565b8093505050505b919050565b828054612f1090614101565b90600052602060002090601f016020900481019282612f325760008555612f79565b82601f10612f4b57805160ff1916838001178555612f79565b82800160010185558215612f79579182015b82811115612f78578251825591602001919060010190612f5d565b5b509050612f869190613010565b5090565b828054612f9690614101565b90600052602060002090601f016020900481019282612fb85760008555612fff565b82601f10612fd157803560ff1916838001178555612fff565b82800160010185558215612fff579182015b82811115612ffe578235825591602001919060010190612fe3565b5b50905061300c9190613010565b5090565b5b80821115613029576000816000905550600101613011565b5090565b600061304061303b84613e64565b613e3f565b90508281526020810184848401111561305c5761305b6142d8565b5b6130678482856140bf565b509392505050565b600061308261307d84613e95565b613e3f565b90508281526020810184848401111561309e5761309d6142d8565b5b6130a98482856140bf565b509392505050565b6000813590506130c0816149f1565b92915050565b6000813590506130d581614a08565b92915050565b6000813590506130ea81614a1f565b92915050565b6000815190506130ff81614a1f565b92915050565b600082601f83011261311a576131196142ce565b5b813561312a84826020860161302d565b91505092915050565b60008151905061314281614a36565b92915050565b60008083601f84011261315e5761315d6142ce565b5b8235905067ffffffffffffffff81111561317b5761317a6142c9565b5b602083019150836001820283011115613197576131966142d3565b5b9250929050565b600082601f8301126131b3576131b26142ce565b5b81356131c384826020860161306f565b91505092915050565b6000813590506131db81614a4d565b92915050565b6000813590506131f081614a64565b92915050565b60006020828403121561320c5761320b6142e2565b5b600061321a848285016130b1565b91505092915050565b6000806040838503121561323a576132396142e2565b5b6000613248858286016130b1565b9250506020613259858286016130b1565b9150509250929050565b60008060006060848603121561327c5761327b6142e2565b5b600061328a868287016130b1565b935050602061329b868287016130b1565b92505060406132ac868287016131cc565b9150509250925092565b600080600080608085870312156132d0576132cf6142e2565b5b60006132de878288016130b1565b94505060206132ef878288016130b1565b9350506040613300878288016131cc565b925050606085013567ffffffffffffffff811115613321576133206142dd565b5b61332d87828801613105565b91505092959194509250565b600080604083850312156133505761334f6142e2565b5b600061335e858286016130b1565b925050602061336f858286016130c6565b9150509250929050565b600080604083850312156133905761338f6142e2565b5b600061339e858286016130b1565b92505060206133af858286016131cc565b9150509250929050565b6000602082840312156133cf576133ce6142e2565b5b60006133dd848285016130db565b91505092915050565b6000602082840312156133fc576133fb6142e2565b5b600061340a848285016130f0565b91505092915050565b600060208284031215613429576134286142e2565b5b600061343784828501613133565b91505092915050565b60008060208385031215613457576134566142e2565b5b600083013567ffffffffffffffff811115613475576134746142dd565b5b61348185828601613148565b92509250509250929050565b6000602082840312156134a3576134a26142e2565b5b60006134b1848285016131cc565b91505092915050565b600080604083850312156134d1576134d06142e2565b5b60006134df858286016131cc565b92505060206134f0858286016130b1565b9150509250929050565b60008060408385031215613511576135106142e2565b5b600061351f858286016131cc565b925050602083013567ffffffffffffffff8111156135405761353f6142dd565b5b61354c8582860161319e565b9150509250929050565b6000806040838503121561356d5761356c6142e2565b5b600061357b858286016131e1565b925050602061358c858286016130b1565b9150509250929050565b61359f8161401e565b82525050565b6135ae81614030565b82525050565b60006135bf82613ec6565b6135c98185613edc565b93506135d98185602086016140ce565b6135e2816142e7565b840191505092915050565b60006135f882613ed1565b6136028185613eed565b93506136128185602086016140ce565b61361b816142e7565b840191505092915050565b600061363182613ed1565b61363b8185613efe565b935061364b8185602086016140ce565b80840191505092915050565b6000613664602483613eed565b915061366f826142f8565b604082019050919050565b6000613687603283613eed565b915061369282614347565b604082019050919050565b60006136aa602683613eed565b91506136b582614396565b604082019050919050565b60006136cd601c83613eed565b91506136d8826143e5565b602082019050919050565b60006136f0602c83613eed565b91506136fb8261440e565b604082019050919050565b6000613713602483613eed565b915061371e8261445d565b604082019050919050565b6000613736601983613eed565b9150613741826144ac565b602082019050919050565b6000613759601f83613eed565b9150613764826144d5565b602082019050919050565b600061377c602c83613eed565b9150613787826144fe565b604082019050919050565b600061379f602183613eed565b91506137aa8261454d565b604082019050919050565b60006137c2602383613eed565b91506137cd8261459c565b604082019050919050565b60006137e5603883613eed565b91506137f0826145eb565b604082019050919050565b6000613808602a83613eed565b91506138138261463a565b604082019050919050565b600061382b602983613eed565b915061383682614689565b604082019050919050565b600061384e602083613eed565b9150613859826146d8565b602082019050919050565b6000613871603183613eed565b915061387c82614701565b604082019050919050565b6000613894602c83613eed565b915061389f82614750565b604082019050919050565b60006138b7602083613eed565b91506138c28261479f565b602082019050919050565b60006138da602783613eed565b91506138e5826147c8565b604082019050919050565b60006138fd602983613eed565b915061390882614817565b604082019050919050565b6000613920602f83613eed565b915061392b82614866565b604082019050919050565b6000613943602183613eed565b915061394e826148b5565b604082019050919050565b6000613966603183613eed565b915061397182614904565b604082019050919050565b6000613989602283613eed565b915061399482614953565b604082019050919050565b60006139ac602b83613eed565b91506139b7826149a2565b604082019050919050565b6139cb8161407a565b82525050565b6139da816140a8565b82525050565b6139e9816140b2565b82525050565b60006139fb8284613626565b915081905092915050565b6000613a128285613626565b9150613a1e8284613626565b91508190509392505050565b6000602082019050613a3f6000830184613596565b92915050565b6000608082019050613a5a6000830187613596565b613a676020830186613596565b613a7460408301856139d1565b8181036060830152613a8681846135b4565b905095945050505050565b6000602082019050613aa660008301846135a5565b92915050565b60006020820190508181036000830152613ac681846135ed565b905092915050565b60006020820190508181036000830152613ae781613657565b9050919050565b60006020820190508181036000830152613b078161367a565b9050919050565b60006020820190508181036000830152613b278161369d565b9050919050565b60006020820190508181036000830152613b47816136c0565b9050919050565b60006020820190508181036000830152613b67816136e3565b9050919050565b60006020820190508181036000830152613b8781613706565b9050919050565b60006020820190508181036000830152613ba781613729565b9050919050565b60006020820190508181036000830152613bc78161374c565b9050919050565b60006020820190508181036000830152613be78161376f565b9050919050565b60006020820190508181036000830152613c0781613792565b9050919050565b60006020820190508181036000830152613c27816137b5565b9050919050565b60006020820190508181036000830152613c47816137d8565b9050919050565b60006020820190508181036000830152613c67816137fb565b9050919050565b60006020820190508181036000830152613c878161381e565b9050919050565b60006020820190508181036000830152613ca781613841565b9050919050565b60006020820190508181036000830152613cc781613864565b9050919050565b60006020820190508181036000830152613ce781613887565b9050919050565b60006020820190508181036000830152613d07816138aa565b9050919050565b60006020820190508181036000830152613d27816138cd565b9050919050565b60006020820190508181036000830152613d47816138f0565b9050919050565b60006020820190508181036000830152613d6781613913565b9050919050565b60006020820190508181036000830152613d8781613936565b9050919050565b60006020820190508181036000830152613da781613959565b9050919050565b60006020820190508181036000830152613dc78161397c565b9050919050565b60006020820190508181036000830152613de78161399f565b9050919050565b6000602082019050613e0360008301846139c2565b92915050565b6000602082019050613e1e60008301846139d1565b92915050565b6000602082019050613e3960008301846139e0565b92915050565b6000613e49613e5a565b9050613e558282614133565b919050565b6000604051905090565b600067ffffffffffffffff821115613e7f57613e7e61429a565b5b613e88826142e7565b9050602081019050919050565b600067ffffffffffffffff821115613eb057613eaf61429a565b5b613eb9826142e7565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f14826140a8565b9150613f1f836140a8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f5457613f536141de565b5b828201905092915050565b6000613f6a826140a8565b9150613f75836140a8565b925082613f8557613f8461420d565b5b828204905092915050565b6000613f9b826140a8565b9150613fa6836140a8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613fdf57613fde6141de565b5b828202905092915050565b6000613ff5826140a8565b9150614000836140a8565b925082821015614013576140126141de565b5b828203905092915050565b600061402982614088565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006140738261401e565b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156140ec5780820151818401526020810190506140d1565b838111156140fb576000848401525b50505050565b6000600282049050600182168061411957607f821691505b6020821081141561412d5761412c61423c565b5b50919050565b61413c826142e7565b810181811067ffffffffffffffff8211171561415b5761415a61429a565b5b80604052505050565b600061416f826140a8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141a2576141a16141de565b5b600182019050919050565b60006141b8826140a8565b91506141c3836140a8565b9250826141d3576141d261420d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4167656e74313a2055524920736574206f66206e6f6e6578697374656e74207460008201527f6f6b656e00000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5a65726f206d696e74206d7573742062652061637469766520746f207a65726f60008201527f206d696e74204167656e74310000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f43616e206f6e6c79206d696e7420323020746f6b656e7320617420612074696d60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f456163682077616c6c65742063616e206f6e6c79207a65726f206d696e74206f60008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e7420776f756c6420657863656564206d617820737570706c79206f662060008201527f4167656e74317300000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f53616c65206d7573742062652061637469766520746f206d696e74204167656e60008201527f7431000000000000000000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f66204167656e743173000000000000000000000000000000000000000000602082015250565b6149fa8161401e565b8114614a0557600080fd5b50565b614a1181614030565b8114614a1c57600080fd5b50565b614a288161403c565b8114614a3357600080fd5b50565b614a3f81614068565b8114614a4a57600080fd5b50565b614a56816140a8565b8114614a6157600080fd5b50565b614a6d816140b2565b8114614a7857600080fd5b5056fea264697066735822122097430dc7beca1468d2388c2ed67c6ee273bd57aaefe89e3787c1ea4bfb4c397064736f6c63430008070033
Deployed Bytecode Sourcemap
323:5578:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1431:300:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2349:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3860:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3398:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4005:211:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;907:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;849:48:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4724:330:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2462:758:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4360:166;;;;;;;;;;;;;:::i;:::-;;1150:91:11;;;;;;;;;;;;;:::i;:::-;;4228:124:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1576:104:11;;;;;;;;;;;;;:::i;:::-;;5120:179:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1688:97:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;626:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1254:97;;;;;;;;;;;;;:::i;:::-;;2052:235:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;550:47:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1790:205:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1598:92:12;;;;;;;;;;;;;:::i;:::-;;494:49:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1019:1369:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;966:85:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2511:102:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4144:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1364:200:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5365:320:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;359:32:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4538:442:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;691:37:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;452:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4992:892:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;320:32:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3236:747:1;;;;;;;;;;;;;:::i;:::-;;1839:189:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1431:300:5;1533:4;1583:25;1568:40;;;:11;:40;;;;:104;;;;1639:33;1624:48;;;:11;:48;;;;1568:104;:156;;;;1688:36;1712:11;1688:23;:36::i;:::-;1568:156;1549:175;;1431:300;;;:::o;2349:98::-;2403:13;2435:5;2428:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:98;:::o;3860:217::-;3936:7;3963:16;3971:7;3963;:16::i;:::-;3955:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4046:15;:24;4062:7;4046:24;;;;;;;;;;;;;;;;;;;;;4039:31;;3860:217;;;:::o;3398:401::-;3478:13;3494:23;3509:7;3494:14;:23::i;:::-;3478:39;;3541:5;3535:11;;:2;:11;;;;3527:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3632:5;3616:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3641:37;3658:5;3665:12;:10;:12::i;:::-;3641:16;:37::i;:::-;3616:62;3595:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3771:21;3780:2;3784:7;3771:8;:21::i;:::-;3468:331;3398:401;;:::o;4005:211:1:-;1189:12:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4106:16:1::1;4114:7;4106;:16::i;:::-;4098:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;4199:9;4174:13;:22;4188:7;4174:22;;;;;;;;;;;:34;;;;;;;;;;;;:::i;:::-;;4005:211:::0;;:::o;907:104::-;951:7;978:25;:15;:23;:25::i;:::-;971:32;;907:104;:::o;849:48:11:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4724:330:5:-;4913:41;4932:12;:10;:12::i;:::-;4946:7;4913:18;:41::i;:::-;4905:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5019:28;5029:4;5035:2;5039:7;5019:9;:28::i;:::-;4724:330;;;:::o;2462:758:1:-;1189:12:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2562:12:1::1;;;;;;;;;;;2554:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;668:2:11;2632:35:1;;:14;:35;;2624:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;592:5:11;2724:52:1;;2741:14;2725:13;:11;:13::i;:::-;:30;;;;:::i;:::-;2724:52;;2716:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;2841:6;2837:256;2857:14;2853:1;:18;2837:256;;;2893:14;2910:13;:11;:13::i;:::-;2893:30;;592:5:11;2942:32:1;;:13;:11;:13::i;:::-;:32;2938:144;;;2995:25;3005:3;3010:9;2995;:25::i;:::-;3039:27;:15;:25;:27::i;:::-;2938:144;2878:215;2873:3;;;;;:::i;:::-;;;;2837:256;;;;3139:1;3117:18;;:23;3113:89;;;3178:12;3157:18;:33;;;;3113:89;2462:758:::0;;:::o;4360:166::-;1189:12:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4423:6:1::1;4419:100;4439:13;:11;:13::i;:::-;4435:1;:17;4419:100;;;4505:1;4479:28;4492:11;4501:1;4492:8;:11::i;:::-;4479:28;;;;;;:::i;:::-;;;;;;;;4454:3;;;;;:::i;:::-;;;;4419:100;;;;4360:166::o:0;1150:91:11:-;1189:12:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1221:12:11::1;;;;;;;;;;;1220:13;1205:12;;:28;;;;;;;;;;;;;;;;;;1150:91::o:0;4228:124:1:-;1189:12:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4336:7:1::1;4304:40;4317:17;4326:7;4317:8;:17::i;:::-;4304:40;;;;;;:::i;:::-;;;;;;;;4228:124:::0;:::o;1576:104:11:-;1189:12:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1632:7:11::1;:5;:7::i;:::-;1624:25;;:48;1650:21;1624:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;1576:104::o:0;5120:179:5:-;5253:39;5270:4;5276:2;5280:7;5253:39;;;;;;;;;;;;:16;:39::i;:::-;5120:179;;;:::o;1688:97:11:-;1189:12:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1773:4:11::1;;1760:10;:17;;;;;;;:::i;:::-;;1688:97:::0;;:::o;626:44::-;668:2;626:44;:::o;1254:97::-;1189:12:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1330:13:11::1;;;;;;;;;;;1329:14;1313:13;;:30;;;;;;;;;;;;;;;;;;1254:97::o:0;2052:235:5:-;2124:7;2143:13;2159:7;:16;2167:7;2159:16;;;;;;;;;;;;;;;;;;;;;2143:32;;2210:1;2193:19;;:5;:19;;;;2185:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2275:5;2268:12;;;2052:235;;;:::o;550:47:11:-;592:5;550:47;:::o;1790:205:5:-;1862:7;1906:1;1889:19;;:5;:19;;;;1881:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;1972:9;:16;1982:5;1972:16;;;;;;;;;;;;;;;;1965:23;;1790:205;;;:::o;1598:92:12:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;494:49:11:-;531:12;494:49;:::o;1019:1369:1:-;1094:12;;;;;;;;;;;1086:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;668:2:11;1164:35:1;;:14;:35;;1156:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;592:5:11;1256:52:1;;1273:14;1257:13;:11;:13::i;:::-;:30;;;;:::i;:::-;1256:52;;1248:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;1408:9;1389:14;531:12:11;1376:27:1;;;;:::i;:::-;1375:42;;1367:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;1478:6;1474:787;1494:14;1490:1;:18;1474:787;;;1563:14;1580:13;:11;:13::i;:::-;1563:30;;592:5:11;1612:32:1;;:13;:11;:13::i;:::-;:32;1608:151;;;1665:32;1675:10;1687:9;1665;:32::i;:::-;1716:27;:15;:25;:27::i;:::-;1608:151;435:4:11;1828:422:1;;;2046:11;;;;;:::i;:::-;;;;592:5:11;2080:28:1;;:9;:28;2076:159;;;2133:32;2143:10;2155:9;2133;:32::i;:::-;2188:27;:15;:25;:27::i;:::-;2076:159;1828:422;1515:746;1510:3;;;;;:::i;:::-;;;;1474:787;;;;2307:1;2285:18;;:23;2281:89;;;2346:12;2325:18;:33;;;;2281:89;1019:1369;:::o;966:85:12:-;1012:7;1038:6;;;;;;;;;;;1031:13;;966:85;:::o;2511:102:5:-;2567:13;2599:7;2592:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2511:102;:::o;4144:290::-;4258:12;:10;:12::i;:::-;4246:24;;:8;:24;;;;4238:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4356:8;4311:18;:32;4330:12;:10;:12::i;:::-;4311:32;;;;;;;;;;;;;;;:42;4344:8;4311:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;4408:8;4379:48;;4394:12;:10;:12::i;:::-;4379:48;;;4418:8;4379:48;;;;;;:::i;:::-;;;;;;;;4144:290;;:::o;1364:200:11:-;1189:12:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1493:15:11::1;1470:20;;:38;;;;;;;;;;;;;;;;;;1541:15;1519:19;;:37;;;;;;;;;;;;;;;;;;1364:200:::0;;:::o;5365:320:5:-;5534:41;5553:12;:10;:12::i;:::-;5567:7;5534:18;:41::i;:::-;5526:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5639:39;5653:4;5659:2;5663:7;5672:5;5639:13;:39::i;:::-;5365:320;;;;:::o;359:32:11:-;;;;;;;;;;;;;:::o;4538:442:1:-;4665:13;4706:23;4732:13;:22;4746:7;4732:22;;;;;;;;;;;4706:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4858:1;4838:9;4832:23;:27;4828:102;;;4907:9;4890:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;4876:42;;;;;4828:102;4949:23;4964:7;4949:14;:23::i;:::-;4942:30;;;4538:442;;;;:::o;691:37:11:-;;;;;;;;;;;;;:::o;452:33::-;;;;:::o;4992:892:1:-;5125:4;5174:1;5151:20;;;;;;;;;;;:24;;;5147:671;;;5192:28;5263:1;5239:20;;;;;;;;;;;:25;;;5235:377;;;5308:42;5285:65;;5235:377;;;5413:1;5389:20;;;;;;;;;;;:25;;;5385:227;;;5458:42;5435:65;;5385:227;;;5577:19;;;;;;;;;;;5554:42;;5385:227;5235:377;5626:27;5670:20;5626:65;;5751:8;5710:49;;5718:13;:21;;;5740:5;5718:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5710:49;;;5706:101;;;5787:4;5780:11;;;;;;5706:101;5177:641;;5147:671;5837:39;5860:5;5867:8;5837:22;:39::i;:::-;5830:46;;4992:892;;;;;:::o;320:32:11:-;;;;;;;;;;;;;:::o;3236:747:1:-;3318:1;3288:15;:27;3304:10;3288:27;;;;;;;;;;;;;;;;:31;3280:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;3378:13;;;;;;;;;;;3370:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;3459:12;;;;;;;;;;;3451:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;592:5:11;3529:39:1;;3546:1;3530:13;:11;:13::i;:::-;:17;;;;:::i;:::-;3529:39;;3521:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;3625:14;3642:13;:11;:13::i;:::-;3625:30;;592:5:11;3670:32:1;;:13;:11;:13::i;:::-;:32;3666:139;;;3719:32;3729:10;3741:9;3719;:32::i;:::-;3766:27;:15;:25;:27::i;:::-;3666:139;3843:1;3821:18;;:23;3817:89;;;3882:12;3861:18;:33;;;;3817:89;3936:15;:27;3952:10;3936:27;;;;;;;;;;;;;;;;:29;;;;;;;;;:::i;:::-;;;;;;3269:714;3236:747::o;1839:189:12:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1947:1:::1;1927:22;;:8;:22;;;;1919:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2002:19;2012:8;2002:9;:19::i;:::-;1839:189:::0;:::o;763:155:4:-;848:4;886:25;871:40;;;:11;:40;;;;864:47;;763:155;;;:::o;7157:125:5:-;7222:4;7273:1;7245:30;;:7;:16;7253:7;7245:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7238:37;;7157:125;;;:::o;587:96:2:-;640:7;666:10;659:17;;587:96;:::o;11008:171:5:-;11109:2;11082:15;:24;11098:7;11082:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11164:7;11160:2;11126:46;;11135:23;11150:7;11135:14;:23::i;:::-;11126:46;;;;;;;;;;;;11008:171;;:::o;773:112:3:-;838:7;864;:14;;;857:21;;773:112;;;:::o;7440:344:5:-;7533:4;7557:16;7565:7;7557;:16::i;:::-;7549:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7632:13;7648:23;7663:7;7648:14;:23::i;:::-;7632:39;;7700:5;7689:16;;:7;:16;;;:51;;;;7733:7;7709:31;;:20;7721:7;7709:11;:20::i;:::-;:31;;;7689:51;:87;;;;7744:32;7761:5;7768:7;7744:16;:32::i;:::-;7689:87;7681:96;;;7440:344;;;;:::o;10337:560::-;10491:4;10464:31;;:23;10479:7;10464:14;:23::i;:::-;:31;;;10456:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10573:1;10559:16;;:2;:16;;;;10551:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10627:39;10648:4;10654:2;10658:7;10627:20;:39::i;:::-;10728:29;10745:1;10749:7;10728:8;:29::i;:::-;10787:1;10768:9;:15;10778:4;10768:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10815:1;10798:9;:13;10808:2;10798:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10845:2;10826:7;:16;10834:7;10826:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10882:7;10878:2;10863:27;;10872:4;10863:27;;;;;;;;;;;;10337:560;;;:::o;8114:108::-;8189:26;8199:2;8203:7;8189:26;;;;;;;;;;;;:9;:26::i;:::-;8114:108;;:::o;891:123:3:-;996:1;978:7;:14;;;:19;;;;;;;;;;;891:123;:::o;2034:169:12:-;2089:16;2108:6;;;;;;;;;;;2089:25;;2133:8;2124:6;;:17;;;;;;;;;;;;;;;;;;2187:8;2156:40;;2177:8;2156:40;;;;;;;;;;;;2079:124;2034:169;:::o;6547:307:5:-;6698:28;6708:4;6714:2;6718:7;6698:9;:28::i;:::-;6744:48;6767:4;6773:2;6777:7;6786:5;6744:22;:48::i;:::-;6736:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6547:307;;;;:::o;386:663:6:-;459:13;492:16;500:7;492;:16::i;:::-;484:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;573:23;599:10;:19;610:7;599:19;;;;;;;;;;;573:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;628:18;649:10;:8;:10::i;:::-;628:31;;754:1;738:4;732:18;:23;728:70;;;778:9;771:16;;;;;;728:70;926:1;906:9;900:23;:27;896:106;;;974:4;980:9;957:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;943:48;;;;;;896:106;1019:23;1034:7;1019:14;:23::i;:::-;1012:30;;;;386:663;;;;:::o;4500:162:5:-;4597:4;4620:18;:25;4639:5;4620:25;;;;;;;;;;;;;;;:35;4646:8;4620:35;;;;;;;;;;;;;;;;;;;;;;;;;4613:42;;4500:162;;;;:::o;13066:122::-;;;;:::o;8443:311::-;8568:18;8574:2;8578:7;8568:5;:18::i;:::-;8617:54;8648:1;8652:2;8656:7;8665:5;8617:22;:54::i;:::-;8596:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;8443:311;;;:::o;11732:778::-;11882:4;11902:15;:2;:13;;;:15::i;:::-;11898:606;;;11953:2;11937:36;;;11974:12;:10;:12::i;:::-;11988:4;11994:7;12003:5;11937:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11933:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12193:1;12176:6;:13;:18;12172:266;;;12218:60;;;;;;;;;;:::i;:::-;;;;;;;;12172:266;12390:6;12384:13;12375:6;12371:2;12367:15;12360:38;11933:519;12069:41;;;12059:51;;;:6;:51;;;;12052:58;;;;;11898:606;12489:4;12482:11;;11732:778;;;;;;;:::o;546:103:1:-;598:13;631:10;624:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;546:103;:::o;2679:329:5:-;2752:13;2785:16;2793:7;2785;:16::i;:::-;2777:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;2864:21;2888:10;:8;:10::i;:::-;2864:34;;2939:1;2921:7;2915:21;:25;:86;;;;;;;;;;;;;;;;;2967:7;2976:18;:7;:16;:18::i;:::-;2950:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2915:86;2908:93;;;2679:329;;;:::o;9076:372::-;9169:1;9155:16;;:2;:16;;;;9147:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9227:16;9235:7;9227;:16::i;:::-;9226:17;9218:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9287:45;9316:1;9320:2;9324:7;9287:20;:45::i;:::-;9360:1;9343:9;:13;9353:2;9343:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9390:2;9371:7;:16;9379:7;9371:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9433:7;9429:2;9408:33;;9425:1;9408:33;;;;;;;;;;;;9076:372;;:::o;718:377:0:-;778:4;981:12;1046:7;1034:20;1026:28;;1087:1;1080:4;:8;1073:15;;;718:377;;;:::o;275:703:13:-;331:13;557:1;548:5;:10;544:51;;;574:10;;;;;;;;;;;;;;;;;;;;;544:51;604:12;619:5;604:20;;634:14;658:75;673:1;665:4;:9;658:75;;690:8;;;;;:::i;:::-;;;;720:2;712:10;;;;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;742:39;;791:150;807:1;798:5;:10;791:150;;834:1;824:11;;;;;:::i;:::-;;;900:2;892:5;:10;;;;:::i;:::-;879:2;:24;;;;:::i;:::-;866:39;;849:6;856;849:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;928:2;919:11;;;;;:::i;:::-;;;791:150;;;964:6;950:21;;;;;275:703;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:14:-;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:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1772:199::-;1857:5;1888:6;1882:13;1873:22;;1904:61;1959:5;1904:61;:::i;:::-;1772:199;;;;:::o;1991:553::-;2049:8;2059:6;2109:3;2102:4;2094:6;2090:17;2086:27;2076:122;;2117:79;;:::i;:::-;2076:122;2230:6;2217:20;2207:30;;2260:18;2252:6;2249:30;2246:117;;;2282:79;;:::i;:::-;2246:117;2396:4;2388:6;2384:17;2372:29;;2450:3;2442:4;2434:6;2430:17;2420:8;2416:32;2413:41;2410:128;;;2457:79;;:::i;:::-;2410:128;1991:553;;;;;:::o;2564:340::-;2620:5;2669:3;2662:4;2654:6;2650:17;2646:27;2636:122;;2677:79;;:::i;:::-;2636:122;2794:6;2781:20;2819:79;2894:3;2886:6;2879:4;2871:6;2867:17;2819:79;:::i;:::-;2810:88;;2626:278;2564:340;;;;:::o;2910:139::-;2956:5;2994:6;2981:20;2972:29;;3010:33;3037:5;3010:33;:::i;:::-;2910:139;;;;:::o;3055:135::-;3099:5;3137:6;3124:20;3115:29;;3153:31;3178:5;3153:31;:::i;:::-;3055:135;;;;:::o;3196:329::-;3255:6;3304:2;3292:9;3283:7;3279:23;3275:32;3272:119;;;3310:79;;:::i;:::-;3272:119;3430:1;3455:53;3500:7;3491:6;3480:9;3476:22;3455:53;:::i;:::-;3445:63;;3401:117;3196:329;;;;:::o;3531:474::-;3599:6;3607;3656:2;3644:9;3635:7;3631:23;3627:32;3624:119;;;3662:79;;:::i;:::-;3624:119;3782:1;3807:53;3852:7;3843:6;3832:9;3828:22;3807:53;:::i;:::-;3797:63;;3753:117;3909:2;3935:53;3980:7;3971:6;3960:9;3956:22;3935:53;:::i;:::-;3925:63;;3880:118;3531:474;;;;;:::o;4011:619::-;4088:6;4096;4104;4153:2;4141:9;4132:7;4128:23;4124:32;4121:119;;;4159:79;;:::i;:::-;4121:119;4279:1;4304:53;4349:7;4340:6;4329:9;4325:22;4304:53;:::i;:::-;4294:63;;4250:117;4406:2;4432:53;4477:7;4468:6;4457:9;4453:22;4432:53;:::i;:::-;4422:63;;4377:118;4534:2;4560:53;4605:7;4596:6;4585:9;4581:22;4560:53;:::i;:::-;4550:63;;4505:118;4011:619;;;;;:::o;4636:943::-;4731:6;4739;4747;4755;4804:3;4792:9;4783:7;4779:23;4775:33;4772:120;;;4811:79;;:::i;:::-;4772:120;4931:1;4956:53;5001:7;4992:6;4981:9;4977:22;4956:53;:::i;:::-;4946:63;;4902:117;5058:2;5084:53;5129:7;5120:6;5109:9;5105:22;5084:53;:::i;:::-;5074:63;;5029:118;5186:2;5212:53;5257:7;5248:6;5237:9;5233:22;5212:53;:::i;:::-;5202:63;;5157:118;5342:2;5331:9;5327:18;5314:32;5373:18;5365:6;5362:30;5359:117;;;5395:79;;:::i;:::-;5359:117;5500:62;5554:7;5545:6;5534:9;5530:22;5500:62;:::i;:::-;5490:72;;5285:287;4636:943;;;;;;;:::o;5585:468::-;5650:6;5658;5707:2;5695:9;5686:7;5682:23;5678:32;5675:119;;;5713:79;;:::i;:::-;5675:119;5833:1;5858:53;5903:7;5894:6;5883:9;5879:22;5858:53;:::i;:::-;5848:63;;5804:117;5960:2;5986:50;6028:7;6019:6;6008:9;6004:22;5986:50;:::i;:::-;5976:60;;5931:115;5585:468;;;;;:::o;6059:474::-;6127:6;6135;6184:2;6172:9;6163:7;6159:23;6155:32;6152:119;;;6190:79;;:::i;:::-;6152:119;6310:1;6335:53;6380:7;6371:6;6360:9;6356:22;6335:53;:::i;:::-;6325:63;;6281:117;6437:2;6463:53;6508:7;6499:6;6488:9;6484:22;6463:53;:::i;:::-;6453:63;;6408:118;6059:474;;;;;:::o;6539:327::-;6597:6;6646:2;6634:9;6625:7;6621:23;6617:32;6614:119;;;6652:79;;:::i;:::-;6614:119;6772:1;6797:52;6841:7;6832:6;6821:9;6817:22;6797:52;:::i;:::-;6787:62;;6743:116;6539:327;;;;:::o;6872:349::-;6941:6;6990:2;6978:9;6969:7;6965:23;6961:32;6958:119;;;6996:79;;:::i;:::-;6958:119;7116:1;7141:63;7196:7;7187:6;7176:9;7172:22;7141:63;:::i;:::-;7131:73;;7087:127;6872:349;;;;:::o;7227:407::-;7325:6;7374:2;7362:9;7353:7;7349:23;7345:32;7342:119;;;7380:79;;:::i;:::-;7342:119;7500:1;7525:92;7609:7;7600:6;7589:9;7585:22;7525:92;:::i;:::-;7515:102;;7471:156;7227:407;;;;:::o;7640:529::-;7711:6;7719;7768:2;7756:9;7747:7;7743:23;7739:32;7736:119;;;7774:79;;:::i;:::-;7736:119;7922:1;7911:9;7907:17;7894:31;7952:18;7944:6;7941:30;7938:117;;;7974:79;;:::i;:::-;7938:117;8087:65;8144:7;8135:6;8124:9;8120:22;8087:65;:::i;:::-;8069:83;;;;7865:297;7640:529;;;;;:::o;8175:329::-;8234:6;8283:2;8271:9;8262:7;8258:23;8254:32;8251:119;;;8289:79;;:::i;:::-;8251:119;8409:1;8434:53;8479:7;8470:6;8459:9;8455:22;8434:53;:::i;:::-;8424:63;;8380:117;8175:329;;;;:::o;8510:474::-;8578:6;8586;8635:2;8623:9;8614:7;8610:23;8606:32;8603:119;;;8641:79;;:::i;:::-;8603:119;8761:1;8786:53;8831:7;8822:6;8811:9;8807:22;8786:53;:::i;:::-;8776:63;;8732:117;8888:2;8914:53;8959:7;8950:6;8939:9;8935:22;8914:53;:::i;:::-;8904:63;;8859:118;8510:474;;;;;:::o;8990:654::-;9068:6;9076;9125:2;9113:9;9104:7;9100:23;9096:32;9093:119;;;9131:79;;:::i;:::-;9093:119;9251:1;9276:53;9321:7;9312:6;9301:9;9297:22;9276:53;:::i;:::-;9266:63;;9222:117;9406:2;9395:9;9391:18;9378:32;9437:18;9429:6;9426:30;9423:117;;;9459:79;;:::i;:::-;9423:117;9564:63;9619:7;9610:6;9599:9;9595:22;9564:63;:::i;:::-;9554:73;;9349:288;8990:654;;;;;:::o;9650:470::-;9716:6;9724;9773:2;9761:9;9752:7;9748:23;9744:32;9741:119;;;9779:79;;:::i;:::-;9741:119;9899:1;9924:51;9967:7;9958:6;9947:9;9943:22;9924:51;:::i;:::-;9914:61;;9870:115;10024:2;10050:53;10095:7;10086:6;10075:9;10071:22;10050:53;:::i;:::-;10040:63;;9995:118;9650:470;;;;;:::o;10126:118::-;10213:24;10231:5;10213:24;:::i;:::-;10208:3;10201:37;10126:118;;:::o;10250:109::-;10331:21;10346:5;10331:21;:::i;:::-;10326:3;10319:34;10250:109;;:::o;10365:360::-;10451:3;10479:38;10511:5;10479:38;:::i;:::-;10533:70;10596:6;10591:3;10533:70;:::i;:::-;10526:77;;10612:52;10657:6;10652:3;10645:4;10638:5;10634:16;10612:52;:::i;:::-;10689:29;10711:6;10689:29;:::i;:::-;10684:3;10680:39;10673:46;;10455:270;10365:360;;;;:::o;10731:364::-;10819:3;10847:39;10880:5;10847:39;:::i;:::-;10902:71;10966:6;10961:3;10902:71;:::i;:::-;10895:78;;10982:52;11027:6;11022:3;11015:4;11008:5;11004:16;10982:52;:::i;:::-;11059:29;11081:6;11059:29;:::i;:::-;11054:3;11050:39;11043:46;;10823:272;10731:364;;;;:::o;11101:377::-;11207:3;11235:39;11268:5;11235:39;:::i;:::-;11290:89;11372:6;11367:3;11290:89;:::i;:::-;11283:96;;11388:52;11433:6;11428:3;11421:4;11414:5;11410:16;11388:52;:::i;:::-;11465:6;11460:3;11456:16;11449:23;;11211:267;11101:377;;;;:::o;11484:366::-;11626:3;11647:67;11711:2;11706:3;11647:67;:::i;:::-;11640:74;;11723:93;11812:3;11723:93;:::i;:::-;11841:2;11836:3;11832:12;11825:19;;11484:366;;;:::o;11856:::-;11998:3;12019:67;12083:2;12078:3;12019:67;:::i;:::-;12012:74;;12095:93;12184:3;12095:93;:::i;:::-;12213:2;12208:3;12204:12;12197:19;;11856:366;;;:::o;12228:::-;12370:3;12391:67;12455:2;12450:3;12391:67;:::i;:::-;12384:74;;12467:93;12556:3;12467:93;:::i;:::-;12585:2;12580:3;12576:12;12569:19;;12228:366;;;:::o;12600:::-;12742:3;12763:67;12827:2;12822:3;12763:67;:::i;:::-;12756:74;;12839:93;12928:3;12839:93;:::i;:::-;12957:2;12952:3;12948:12;12941:19;;12600:366;;;:::o;12972:::-;13114:3;13135:67;13199:2;13194:3;13135:67;:::i;:::-;13128:74;;13211:93;13300:3;13211:93;:::i;:::-;13329:2;13324:3;13320:12;13313:19;;12972:366;;;:::o;13344:::-;13486:3;13507:67;13571:2;13566:3;13507:67;:::i;:::-;13500:74;;13583:93;13672:3;13583:93;:::i;:::-;13701:2;13696:3;13692:12;13685:19;;13344:366;;;:::o;13716:::-;13858:3;13879:67;13943:2;13938:3;13879:67;:::i;:::-;13872:74;;13955:93;14044:3;13955:93;:::i;:::-;14073:2;14068:3;14064:12;14057:19;;13716:366;;;:::o;14088:::-;14230:3;14251:67;14315:2;14310:3;14251:67;:::i;:::-;14244:74;;14327:93;14416:3;14327:93;:::i;:::-;14445:2;14440:3;14436:12;14429:19;;14088:366;;;:::o;14460:::-;14602:3;14623:67;14687:2;14682:3;14623:67;:::i;:::-;14616:74;;14699:93;14788:3;14699:93;:::i;:::-;14817:2;14812:3;14808:12;14801:19;;14460:366;;;:::o;14832:::-;14974:3;14995:67;15059:2;15054:3;14995:67;:::i;:::-;14988:74;;15071:93;15160:3;15071:93;:::i;:::-;15189:2;15184:3;15180:12;15173:19;;14832:366;;;:::o;15204:::-;15346:3;15367:67;15431:2;15426:3;15367:67;:::i;:::-;15360:74;;15443:93;15532:3;15443:93;:::i;:::-;15561:2;15556:3;15552:12;15545:19;;15204:366;;;:::o;15576:::-;15718:3;15739:67;15803:2;15798:3;15739:67;:::i;:::-;15732:74;;15815:93;15904:3;15815:93;:::i;:::-;15933:2;15928:3;15924:12;15917:19;;15576:366;;;:::o;15948:::-;16090:3;16111:67;16175:2;16170:3;16111:67;:::i;:::-;16104:74;;16187:93;16276:3;16187:93;:::i;:::-;16305:2;16300:3;16296:12;16289:19;;15948:366;;;:::o;16320:::-;16462:3;16483:67;16547:2;16542:3;16483:67;:::i;:::-;16476:74;;16559:93;16648:3;16559:93;:::i;:::-;16677:2;16672:3;16668:12;16661:19;;16320:366;;;:::o;16692:::-;16834:3;16855:67;16919:2;16914:3;16855:67;:::i;:::-;16848:74;;16931:93;17020:3;16931:93;:::i;:::-;17049:2;17044:3;17040:12;17033:19;;16692:366;;;:::o;17064:::-;17206:3;17227:67;17291:2;17286:3;17227:67;:::i;:::-;17220:74;;17303:93;17392:3;17303:93;:::i;:::-;17421:2;17416:3;17412:12;17405:19;;17064:366;;;:::o;17436:::-;17578:3;17599:67;17663:2;17658:3;17599:67;:::i;:::-;17592:74;;17675:93;17764:3;17675:93;:::i;:::-;17793:2;17788:3;17784:12;17777:19;;17436:366;;;:::o;17808:::-;17950:3;17971:67;18035:2;18030:3;17971:67;:::i;:::-;17964:74;;18047:93;18136:3;18047:93;:::i;:::-;18165:2;18160:3;18156:12;18149:19;;17808:366;;;:::o;18180:::-;18322:3;18343:67;18407:2;18402:3;18343:67;:::i;:::-;18336:74;;18419:93;18508:3;18419:93;:::i;:::-;18537:2;18532:3;18528:12;18521:19;;18180:366;;;:::o;18552:::-;18694:3;18715:67;18779:2;18774:3;18715:67;:::i;:::-;18708:74;;18791:93;18880:3;18791:93;:::i;:::-;18909:2;18904:3;18900:12;18893:19;;18552:366;;;:::o;18924:::-;19066:3;19087:67;19151:2;19146:3;19087:67;:::i;:::-;19080:74;;19163:93;19252:3;19163:93;:::i;:::-;19281:2;19276:3;19272:12;19265:19;;18924:366;;;:::o;19296:::-;19438:3;19459:67;19523:2;19518:3;19459:67;:::i;:::-;19452:74;;19535:93;19624:3;19535:93;:::i;:::-;19653:2;19648:3;19644:12;19637:19;;19296:366;;;:::o;19668:::-;19810:3;19831:67;19895:2;19890:3;19831:67;:::i;:::-;19824:74;;19907:93;19996:3;19907:93;:::i;:::-;20025:2;20020:3;20016:12;20009:19;;19668:366;;;:::o;20040:::-;20182:3;20203:67;20267:2;20262:3;20203:67;:::i;:::-;20196:74;;20279:93;20368:3;20279:93;:::i;:::-;20397:2;20392:3;20388:12;20381:19;;20040:366;;;:::o;20412:::-;20554:3;20575:67;20639:2;20634:3;20575:67;:::i;:::-;20568:74;;20651:93;20740:3;20651:93;:::i;:::-;20769:2;20764:3;20760:12;20753:19;;20412:366;;;:::o;20784:115::-;20869:23;20886:5;20869:23;:::i;:::-;20864:3;20857:36;20784:115;;:::o;20905:118::-;20992:24;21010:5;20992:24;:::i;:::-;20987:3;20980:37;20905:118;;:::o;21029:112::-;21112:22;21128:5;21112:22;:::i;:::-;21107:3;21100:35;21029:112;;:::o;21147:275::-;21279:3;21301:95;21392:3;21383:6;21301:95;:::i;:::-;21294:102;;21413:3;21406:10;;21147:275;;;;:::o;21428:435::-;21608:3;21630:95;21721:3;21712:6;21630:95;:::i;:::-;21623:102;;21742:95;21833:3;21824:6;21742:95;:::i;:::-;21735:102;;21854:3;21847:10;;21428:435;;;;;:::o;21869:222::-;21962:4;22000:2;21989:9;21985:18;21977:26;;22013:71;22081:1;22070:9;22066:17;22057:6;22013:71;:::i;:::-;21869:222;;;;:::o;22097:640::-;22292:4;22330:3;22319:9;22315:19;22307:27;;22344:71;22412:1;22401:9;22397:17;22388:6;22344:71;:::i;:::-;22425:72;22493:2;22482:9;22478:18;22469:6;22425:72;:::i;:::-;22507;22575:2;22564:9;22560:18;22551:6;22507:72;:::i;:::-;22626:9;22620:4;22616:20;22611:2;22600:9;22596:18;22589:48;22654:76;22725:4;22716:6;22654:76;:::i;:::-;22646:84;;22097:640;;;;;;;:::o;22743:210::-;22830:4;22868:2;22857:9;22853:18;22845:26;;22881:65;22943:1;22932:9;22928:17;22919:6;22881:65;:::i;:::-;22743:210;;;;:::o;22959:313::-;23072:4;23110:2;23099:9;23095:18;23087:26;;23159:9;23153:4;23149:20;23145:1;23134:9;23130:17;23123:47;23187:78;23260:4;23251:6;23187:78;:::i;:::-;23179:86;;22959:313;;;;:::o;23278:419::-;23444:4;23482:2;23471:9;23467:18;23459:26;;23531:9;23525:4;23521:20;23517:1;23506:9;23502:17;23495:47;23559:131;23685:4;23559:131;:::i;:::-;23551:139;;23278:419;;;:::o;23703:::-;23869:4;23907:2;23896:9;23892:18;23884:26;;23956:9;23950:4;23946:20;23942:1;23931:9;23927:17;23920:47;23984:131;24110:4;23984:131;:::i;:::-;23976:139;;23703:419;;;:::o;24128:::-;24294:4;24332:2;24321:9;24317:18;24309:26;;24381:9;24375:4;24371:20;24367:1;24356:9;24352:17;24345:47;24409:131;24535:4;24409:131;:::i;:::-;24401:139;;24128:419;;;:::o;24553:::-;24719:4;24757:2;24746:9;24742:18;24734:26;;24806:9;24800:4;24796:20;24792:1;24781:9;24777:17;24770:47;24834:131;24960:4;24834:131;:::i;:::-;24826:139;;24553:419;;;:::o;24978:::-;25144:4;25182:2;25171:9;25167:18;25159:26;;25231:9;25225:4;25221:20;25217:1;25206:9;25202:17;25195:47;25259:131;25385:4;25259:131;:::i;:::-;25251:139;;24978:419;;;:::o;25403:::-;25569:4;25607:2;25596:9;25592:18;25584:26;;25656:9;25650:4;25646:20;25642:1;25631:9;25627:17;25620:47;25684:131;25810:4;25684:131;:::i;:::-;25676:139;;25403:419;;;:::o;25828:::-;25994:4;26032:2;26021:9;26017:18;26009:26;;26081:9;26075:4;26071:20;26067:1;26056:9;26052:17;26045:47;26109:131;26235:4;26109:131;:::i;:::-;26101:139;;25828:419;;;:::o;26253:::-;26419:4;26457:2;26446:9;26442:18;26434:26;;26506:9;26500:4;26496:20;26492:1;26481:9;26477:17;26470:47;26534:131;26660:4;26534:131;:::i;:::-;26526:139;;26253:419;;;:::o;26678:::-;26844:4;26882:2;26871:9;26867:18;26859:26;;26931:9;26925:4;26921:20;26917:1;26906:9;26902:17;26895:47;26959:131;27085:4;26959:131;:::i;:::-;26951:139;;26678:419;;;:::o;27103:::-;27269:4;27307:2;27296:9;27292:18;27284:26;;27356:9;27350:4;27346:20;27342:1;27331:9;27327:17;27320:47;27384:131;27510:4;27384:131;:::i;:::-;27376:139;;27103:419;;;:::o;27528:::-;27694:4;27732:2;27721:9;27717:18;27709:26;;27781:9;27775:4;27771:20;27767:1;27756:9;27752:17;27745:47;27809:131;27935:4;27809:131;:::i;:::-;27801:139;;27528:419;;;:::o;27953:::-;28119:4;28157:2;28146:9;28142:18;28134:26;;28206:9;28200:4;28196:20;28192:1;28181:9;28177:17;28170:47;28234:131;28360:4;28234:131;:::i;:::-;28226:139;;27953:419;;;:::o;28378:::-;28544:4;28582:2;28571:9;28567:18;28559:26;;28631:9;28625:4;28621:20;28617:1;28606:9;28602:17;28595:47;28659:131;28785:4;28659:131;:::i;:::-;28651:139;;28378:419;;;:::o;28803:::-;28969:4;29007:2;28996:9;28992:18;28984:26;;29056:9;29050:4;29046:20;29042:1;29031:9;29027:17;29020:47;29084:131;29210:4;29084:131;:::i;:::-;29076:139;;28803:419;;;:::o;29228:::-;29394:4;29432:2;29421:9;29417:18;29409:26;;29481:9;29475:4;29471:20;29467:1;29456:9;29452:17;29445:47;29509:131;29635:4;29509:131;:::i;:::-;29501:139;;29228:419;;;:::o;29653:::-;29819:4;29857:2;29846:9;29842:18;29834:26;;29906:9;29900:4;29896:20;29892:1;29881:9;29877:17;29870:47;29934:131;30060:4;29934:131;:::i;:::-;29926:139;;29653:419;;;:::o;30078:::-;30244:4;30282:2;30271:9;30267:18;30259:26;;30331:9;30325:4;30321:20;30317:1;30306:9;30302:17;30295:47;30359:131;30485:4;30359:131;:::i;:::-;30351:139;;30078:419;;;:::o;30503:::-;30669:4;30707:2;30696:9;30692:18;30684:26;;30756:9;30750:4;30746:20;30742:1;30731:9;30727:17;30720:47;30784:131;30910:4;30784:131;:::i;:::-;30776:139;;30503:419;;;:::o;30928:::-;31094:4;31132:2;31121:9;31117:18;31109:26;;31181:9;31175:4;31171:20;31167:1;31156:9;31152:17;31145:47;31209:131;31335:4;31209:131;:::i;:::-;31201:139;;30928:419;;;:::o;31353:::-;31519:4;31557:2;31546:9;31542:18;31534:26;;31606:9;31600:4;31596:20;31592:1;31581:9;31577:17;31570:47;31634:131;31760:4;31634:131;:::i;:::-;31626:139;;31353:419;;;:::o;31778:::-;31944:4;31982:2;31971:9;31967:18;31959:26;;32031:9;32025:4;32021:20;32017:1;32006:9;32002:17;31995:47;32059:131;32185:4;32059:131;:::i;:::-;32051:139;;31778:419;;;:::o;32203:::-;32369:4;32407:2;32396:9;32392:18;32384:26;;32456:9;32450:4;32446:20;32442:1;32431:9;32427:17;32420:47;32484:131;32610:4;32484:131;:::i;:::-;32476:139;;32203:419;;;:::o;32628:::-;32794:4;32832:2;32821:9;32817:18;32809:26;;32881:9;32875:4;32871:20;32867:1;32856:9;32852:17;32845:47;32909:131;33035:4;32909:131;:::i;:::-;32901:139;;32628:419;;;:::o;33053:::-;33219:4;33257:2;33246:9;33242:18;33234:26;;33306:9;33300:4;33296:20;33292:1;33281:9;33277:17;33270:47;33334:131;33460:4;33334:131;:::i;:::-;33326:139;;33053:419;;;:::o;33478:::-;33644:4;33682:2;33671:9;33667:18;33659:26;;33731:9;33725:4;33721:20;33717:1;33706:9;33702:17;33695:47;33759:131;33885:4;33759:131;:::i;:::-;33751:139;;33478:419;;;:::o;33903:218::-;33994:4;34032:2;34021:9;34017:18;34009:26;;34045:69;34111:1;34100:9;34096:17;34087:6;34045:69;:::i;:::-;33903:218;;;;:::o;34127:222::-;34220:4;34258:2;34247:9;34243:18;34235:26;;34271:71;34339:1;34328:9;34324:17;34315:6;34271:71;:::i;:::-;34127:222;;;;:::o;34355:214::-;34444:4;34482:2;34471:9;34467:18;34459:26;;34495:67;34559:1;34548:9;34544:17;34535:6;34495:67;:::i;:::-;34355:214;;;;:::o;34575:129::-;34609:6;34636:20;;:::i;:::-;34626:30;;34665:33;34693:4;34685:6;34665:33;:::i;:::-;34575:129;;;:::o;34710:75::-;34743:6;34776:2;34770:9;34760:19;;34710:75;:::o;34791:307::-;34852:4;34942:18;34934:6;34931:30;34928:56;;;34964:18;;:::i;:::-;34928:56;35002:29;35024:6;35002:29;:::i;:::-;34994:37;;35086:4;35080;35076:15;35068:23;;34791:307;;;:::o;35104:308::-;35166:4;35256:18;35248:6;35245:30;35242:56;;;35278:18;;:::i;:::-;35242:56;35316:29;35338:6;35316:29;:::i;:::-;35308:37;;35400:4;35394;35390:15;35382:23;;35104:308;;;:::o;35418:98::-;35469:6;35503:5;35497:12;35487:22;;35418:98;;;:::o;35522:99::-;35574:6;35608:5;35602:12;35592:22;;35522:99;;;:::o;35627:168::-;35710:11;35744:6;35739:3;35732:19;35784:4;35779:3;35775:14;35760:29;;35627:168;;;;:::o;35801:169::-;35885:11;35919:6;35914:3;35907:19;35959:4;35954:3;35950:14;35935:29;;35801:169;;;;:::o;35976:148::-;36078:11;36115:3;36100:18;;35976:148;;;;:::o;36130:305::-;36170:3;36189:20;36207:1;36189:20;:::i;:::-;36184:25;;36223:20;36241:1;36223:20;:::i;:::-;36218:25;;36377:1;36309:66;36305:74;36302:1;36299:81;36296:107;;;36383:18;;:::i;:::-;36296:107;36427:1;36424;36420:9;36413:16;;36130:305;;;;:::o;36441:185::-;36481:1;36498:20;36516:1;36498:20;:::i;:::-;36493:25;;36532:20;36550:1;36532:20;:::i;:::-;36527:25;;36571:1;36561:35;;36576:18;;:::i;:::-;36561:35;36618:1;36615;36611:9;36606:14;;36441:185;;;;:::o;36632:348::-;36672:7;36695:20;36713:1;36695:20;:::i;:::-;36690:25;;36729:20;36747:1;36729:20;:::i;:::-;36724:25;;36917:1;36849:66;36845:74;36842:1;36839:81;36834:1;36827:9;36820:17;36816:105;36813:131;;;36924:18;;:::i;:::-;36813:131;36972:1;36969;36965:9;36954:20;;36632:348;;;;:::o;36986:191::-;37026:4;37046:20;37064:1;37046:20;:::i;:::-;37041:25;;37080:20;37098:1;37080:20;:::i;:::-;37075:25;;37119:1;37116;37113:8;37110:34;;;37124:18;;:::i;:::-;37110:34;37169:1;37166;37162:9;37154:17;;36986:191;;;;:::o;37183:96::-;37220:7;37249:24;37267:5;37249:24;:::i;:::-;37238:35;;37183:96;;;:::o;37285:90::-;37319:7;37362:5;37355:13;37348:21;37337:32;;37285:90;;;:::o;37381:149::-;37417:7;37457:66;37450:5;37446:78;37435:89;;37381:149;;;:::o;37536:124::-;37601:7;37630:24;37648:5;37630:24;:::i;:::-;37619:35;;37536:124;;;:::o;37666:89::-;37702:7;37742:6;37735:5;37731:18;37720:29;;37666:89;;;:::o;37761:126::-;37798:7;37838:42;37831:5;37827:54;37816:65;;37761:126;;;:::o;37893:77::-;37930:7;37959:5;37948:16;;37893:77;;;:::o;37976:86::-;38011:7;38051:4;38044:5;38040:16;38029:27;;37976:86;;;:::o;38068:154::-;38152:6;38147:3;38142;38129:30;38214:1;38205:6;38200:3;38196:16;38189:27;38068:154;;;:::o;38228:307::-;38296:1;38306:113;38320:6;38317:1;38314:13;38306:113;;;38405:1;38400:3;38396:11;38390:18;38386:1;38381:3;38377:11;38370:39;38342:2;38339:1;38335:10;38330:15;;38306:113;;;38437:6;38434:1;38431:13;38428:101;;;38517:1;38508:6;38503:3;38499:16;38492:27;38428:101;38277:258;38228:307;;;:::o;38541:320::-;38585:6;38622:1;38616:4;38612:12;38602:22;;38669:1;38663:4;38659:12;38690:18;38680:81;;38746:4;38738:6;38734:17;38724:27;;38680:81;38808:2;38800:6;38797:14;38777:18;38774:38;38771:84;;;38827:18;;:::i;:::-;38771:84;38592:269;38541:320;;;:::o;38867:281::-;38950:27;38972:4;38950:27;:::i;:::-;38942:6;38938:40;39080:6;39068:10;39065:22;39044:18;39032:10;39029:34;39026:62;39023:88;;;39091:18;;:::i;:::-;39023:88;39131:10;39127:2;39120:22;38910:238;38867:281;;:::o;39154:233::-;39193:3;39216:24;39234:5;39216:24;:::i;:::-;39207:33;;39262:66;39255:5;39252:77;39249:103;;;39332:18;;:::i;:::-;39249:103;39379:1;39372:5;39368:13;39361:20;;39154:233;;;:::o;39393:176::-;39425:1;39442:20;39460:1;39442:20;:::i;:::-;39437:25;;39476:20;39494:1;39476:20;:::i;:::-;39471:25;;39515:1;39505:35;;39520:18;;:::i;:::-;39505:35;39561:1;39558;39554:9;39549:14;;39393:176;;;;:::o;39575:180::-;39623:77;39620:1;39613:88;39720:4;39717:1;39710:15;39744:4;39741:1;39734:15;39761:180;39809:77;39806:1;39799:88;39906:4;39903:1;39896:15;39930:4;39927:1;39920:15;39947:180;39995:77;39992:1;39985:88;40092:4;40089:1;40082:15;40116:4;40113:1;40106:15;40133:180;40181:77;40178:1;40171:88;40278:4;40275:1;40268:15;40302:4;40299:1;40292:15;40319:180;40367:77;40364:1;40357:88;40464:4;40461:1;40454:15;40488:4;40485:1;40478:15;40505:117;40614:1;40611;40604:12;40628:117;40737:1;40734;40727:12;40751:117;40860:1;40857;40850:12;40874:117;40983:1;40980;40973:12;40997:117;41106:1;41103;41096:12;41120:117;41229:1;41226;41219:12;41243:102;41284:6;41335:2;41331:7;41326:2;41319:5;41315:14;41311:28;41301:38;;41243:102;;;:::o;41351:223::-;41491:34;41487:1;41479:6;41475:14;41468:58;41560:6;41555:2;41547:6;41543:15;41536:31;41351:223;:::o;41580:237::-;41720:34;41716:1;41708:6;41704:14;41697:58;41789:20;41784:2;41776:6;41772:15;41765:45;41580:237;:::o;41823:225::-;41963:34;41959:1;41951:6;41947:14;41940:58;42032:8;42027:2;42019:6;42015:15;42008:33;41823:225;:::o;42054:178::-;42194:30;42190:1;42182:6;42178:14;42171:54;42054:178;:::o;42238:231::-;42378:34;42374:1;42366:6;42362:14;42355:58;42447:14;42442:2;42434:6;42430:15;42423:39;42238:231;:::o;42475:223::-;42615:34;42611:1;42603:6;42599:14;42592:58;42684:6;42679:2;42671:6;42667:15;42660:31;42475:223;:::o;42704:175::-;42844:27;42840:1;42832:6;42828:14;42821:51;42704:175;:::o;42885:181::-;43025:33;43021:1;43013:6;43009:14;43002:57;42885:181;:::o;43072:231::-;43212:34;43208:1;43200:6;43196:14;43189:58;43281:14;43276:2;43268:6;43264:15;43257:39;43072:231;:::o;43309:220::-;43449:34;43445:1;43437:6;43433:14;43426:58;43518:3;43513:2;43505:6;43501:15;43494:28;43309:220;:::o;43535:222::-;43675:34;43671:1;43663:6;43659:14;43652:58;43744:5;43739:2;43731:6;43727:15;43720:30;43535:222;:::o;43763:243::-;43903:34;43899:1;43891:6;43887:14;43880:58;43972:26;43967:2;43959:6;43955:15;43948:51;43763:243;:::o;44012:229::-;44152:34;44148:1;44140:6;44136:14;44129:58;44221:12;44216:2;44208:6;44204:15;44197:37;44012:229;:::o;44247:228::-;44387:34;44383:1;44375:6;44371:14;44364:58;44456:11;44451:2;44443:6;44439:15;44432:36;44247:228;:::o;44481:182::-;44621:34;44617:1;44609:6;44605:14;44598:58;44481:182;:::o;44669:236::-;44809:34;44805:1;44797:6;44793:14;44786:58;44878:19;44873:2;44865:6;44861:15;44854:44;44669:236;:::o;44911:231::-;45051:34;45047:1;45039:6;45035:14;45028:58;45120:14;45115:2;45107:6;45103:15;45096:39;44911:231;:::o;45148:182::-;45288:34;45284:1;45276:6;45272:14;45265:58;45148:182;:::o;45336:226::-;45476:34;45472:1;45464:6;45460:14;45453:58;45545:9;45540:2;45532:6;45528:15;45521:34;45336:226;:::o;45568:228::-;45708:34;45704:1;45696:6;45692:14;45685:58;45777:11;45772:2;45764:6;45760:15;45753:36;45568:228;:::o;45802:234::-;45942:34;45938:1;45930:6;45926:14;45919:58;46011:17;46006:2;45998:6;45994:15;45987:42;45802:234;:::o;46042:220::-;46182:34;46178:1;46170:6;46166:14;46159:58;46251:3;46246:2;46238:6;46234:15;46227:28;46042:220;:::o;46268:236::-;46408:34;46404:1;46396:6;46392:14;46385:58;46477:19;46472:2;46464:6;46460:15;46453:44;46268:236;:::o;46510:221::-;46650:34;46646:1;46638:6;46634:14;46627:58;46719:4;46714:2;46706:6;46702:15;46695:29;46510:221;:::o;46737:230::-;46877:34;46873:1;46865:6;46861:14;46854:58;46946:13;46941:2;46933:6;46929:15;46922:38;46737:230;:::o;46973:122::-;47046:24;47064:5;47046:24;:::i;:::-;47039:5;47036:35;47026:63;;47085:1;47082;47075:12;47026:63;46973:122;:::o;47101:116::-;47171:21;47186:5;47171:21;:::i;:::-;47164:5;47161:32;47151:60;;47207:1;47204;47197:12;47151:60;47101:116;:::o;47223:120::-;47295:23;47312:5;47295:23;:::i;:::-;47288:5;47285:34;47275:62;;47333:1;47330;47323:12;47275:62;47223:120;:::o;47349:178::-;47450:52;47496:5;47450:52;:::i;:::-;47443:5;47440:63;47430:91;;47517:1;47514;47507:12;47430:91;47349:178;:::o;47533:122::-;47606:24;47624:5;47606:24;:::i;:::-;47599:5;47596:35;47586:63;;47645:1;47642;47635:12;47586:63;47533:122;:::o;47661:118::-;47732:22;47748:5;47732:22;:::i;:::-;47725:5;47722:33;47712:61;;47769:1;47766;47759:12;47712:61;47661:118;:::o
Swarm Source
ipfs://97430dc7beca1468d2388c2ed67c6ee273bd57aaefe89e3787c1ea4bfb4c3970
Loading...
Loading
Loading...
Loading
[ 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.