ERC-721
Overview
Max Total Supply
1,500 CRTL
Holders
79
Total Transfers
-
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
TheCartelGenesisCollection
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-27 */ // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on isContract to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's transfer: sends amount wei to * recipient, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by transfer, making them unable to receive funds via * transfer. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to recipient, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level call. A * plain call is an unsafe replacement for a function call: use this * function instead. * * If target reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[abi.decode]. * * Requirements: * * - target must be a contract. * - calling target with data must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[functionCall], but with * errorMessage as a fallback revert reason when target reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[functionCall], * but also transferring value wei to target. * * Requirements: * * - the calling contract must have an ETH balance of at least value. * - the called Solidity function must be payable. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[functionCallWithValue], but * with errorMessage as a fallback revert reason when target reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[functionCall], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[functionCall], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[functionCall], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[functionCall], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) 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); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) 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); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @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; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when tokenId token is transferred from from to to. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when owner enables approved to manage the tokenId token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when owner enables or disables (approved) operator to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in owner's account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the tokenId token. * * Requirements: * * - tokenId must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers tokenId token from from to to, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - from cannot be the zero address. * - to cannot be the zero address. * - tokenId token must exist and be owned by from. * - If the caller is not from, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If to refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers tokenId token from from to to. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - from cannot be the zero address. * - to cannot be the zero address. * - tokenId token must be owned by from. * - If the caller is not from, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to to to transfer tokenId token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - tokenId must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for tokenId token. * * Requirements: * * - tokenId must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove operator as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The operator cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the operator is allowed to manage all of the assets of owner. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers tokenId token from from to to. * * Requirements: * * - from cannot be the zero address. * - to cannot be the zero address. * - tokenId token must exist and be owned by from. * - If the caller is not from, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If to refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by owner at a given index of its token list. * Use along with {balanceOf} to enumerate all of owner's tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given index of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for tokenId token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) 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); } } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from ReentrancyGuard will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single nonReentrant guard, functions marked as * nonReentrant may not call one another. This can be worked around by making * those functions private, and then adding external nonReentrant entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a nonReentrant function from another nonReentrant * function is not supported. It is possible to prevent this from happening * by making the nonReentrant function external, and making it call a * private function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) 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; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * onlyOwner, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_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 { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (newOwner). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (newOwner). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } //-------------END DEPENDENCIES------------------------// /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128. * * Does not support burning tokens to address(0). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex; uint256 public collectionSize; uint256 public maxBatchSize; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) private _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev * maxBatchSize refers to how much a minter can mint at a time. * collectionSize_ refers to how many tokens are in the collection. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 collectionSize_ ) { require( collectionSize_ > 0, "ERC721A: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; collectionSize = collectionSize_; currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 1; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalMinted(); } function currentTokenId() public view returns (uint256) { return _totalMinted(); } function getNextTokenId() public view returns (uint256) { return _totalMinted() + 1; } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { unchecked { return currentIndex - _startTokenId(); } } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("ERC721A: unable to get token of owner by index"); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "ERC721A: balance query for the zero address"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr && curr < currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { 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 override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721A: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether tokenId exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (_mint), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < currentIndex; } function _safeMint(address to, uint256 quantity, bool isAdminMint) internal { _safeMint(to, quantity, isAdminMint, ""); } /** * @dev Mints quantity tokens and transfers them to to. * * Requirements: * * - there must be quantity tokens remaining unminted in the total collection. * - to cannot be the zero address. * - quantity cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bool isAdminMint, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); // For admin mints we do not want to enforce the maxBatchSize limit if (isAdminMint == false) { require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); } _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + (isAdminMint ? 0 : uint128(quantity)) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers tokenId from from to to. * * Requirements: * * - to cannot be the zero address. * - tokenId token must be owned by from. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve to to operate on tokenId * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set owners to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); if (currentIndex == _startTokenId()) revert('No Tokens Minted Yet'); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > collectionSize - 1) { endIndex = collectionSize - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721A: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When from and to are both non-zero, from's tokenId will be * transferred to to. * - When from is zero, tokenId will be minted for to. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when from and to are both non-zero. * - from and to are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } interface IERC20 { function transfer(address _to, uint256 _amount) external returns (bool); function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } abstract contract CartelERC721A is Ownable, ERC721A, ReentrancyGuard { constructor( string memory tokenName, string memory tokenSymbol ) ERC721A(tokenName, tokenSymbol, 3, 1500) { } uint8 public CONTRACT_VERSION = 1; string public _baseTokenURI = "https://thecartelgenesiscollection.com/metadata/"; /////////////// Admin Mint Functions /** * @dev Mints a token to an address with a tokenURI. * This is owner only and allows a fee-free drop * @param _to address of the future owner of the token * @param _qty amount of tokens to drop the owner */ function mintToAdminV2(address _to, uint256 _qty) public onlyOwner{ require(_qty > 0, "Must mint at least 1 token."); require(currentTokenId() + _qty <= collectionSize, "Cannot mint over supply cap"); _safeMint(_to, _qty, true); } /////////////// GENERIC MINT FUNCTIONS /** * @dev Mints a single token to an address. * fee may or may not be required* * @param _to address of the future owner of the token */ function mintTo(address _to) internal { require(getNextTokenId() <= collectionSize, "Cannot mint over supply cap"); _safeMint(_to, 1, false); } /** * @dev Mints a token to an address with a tokenURI. * fee may or may not be required* * @param _to address of the future owner of the token * @param _amount number of tokens to mint */ function mintToMultiple(address _to, uint256 _amount) internal { require(_amount >= 1, "Must mint at least 1 token"); require(_amount <= maxBatchSize, "Cannot mint more than max mint per transaction"); require(currentTokenId() + _amount <= collectionSize, "Cannot mint over supply cap of 10000"); _safeMint(_to, _amount, false); } /** * @dev Allows owner to set Max mints per tx * @param _newMaxMint maximum amount of tokens allowed to mint per tx. Must be >= 1 */ function setMaxMint(uint256 _newMaxMint) public onlyOwner { require(_newMaxMint >= 1, "Max mint must be at least 1"); maxBatchSize = _newMaxMint; } function setcollectionSize(uint256 _collectionSize) public onlyOwner { // require(_collectionSize > collectionSize, "Max mint must be at least 1"); collectionSize = _collectionSize; } function _baseURI() internal view virtual override returns(string memory) { return _baseTokenURI; } function baseTokenURI() public view returns(string memory) { return _baseTokenURI; } function setBaseURI(string calldata baseURI) external onlyOwner { _baseTokenURI = baseURI; } function getOwnershipData(uint256 tokenId) external view returns(TokenOwnership memory) { return ownershipOf(tokenId); } } //SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract TheCartelGenesisCollection is CartelERC721A { using Strings for uint256; bool public _paused = true; mapping(address=>bool) public whiteList; uint256 public SALE_PRICE ; uint256 public WHITELIST_USER_PRICE ; constructor() CartelERC721A("CARTEL", "CRTL"){} function presale(uint256 qty) public payable { require( !_paused, "Sale paused" ); if(whiteList[msg.sender]){ require(msg.value==(WHITELIST_USER_PRICE*qty),"Invalid amount"); }else{ require(msg.value==(SALE_PRICE*qty),"Invalid amount"); } mintToMultiple(msg.sender,qty); } function walletOfOwner(address _owner) public view returns(uint256[] memory) { uint256 tokenCount = balanceOf(_owner); uint256[] memory tokensId = new uint256[](tokenCount); for(uint256 i; i < tokenCount; i++){ tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function whitelistUser(address userAddress) public onlyOwner { whiteList[userAddress]=true; } function removeWhitelistUser(address userAddress) public onlyOwner { whiteList[userAddress]=false; } function pause(bool val) public onlyOwner { _paused = val; } function setPrice(uint256 _salePrice,uint256 _whitelistUserPrice) public onlyOwner{ SALE_PRICE = _salePrice; WHITELIST_USER_PRICE = _whitelistUserPrice; } function withdrawAll() public onlyOwner { uint256 balance = address(this).balance; payable(msg.sender).transfer(balance); } }
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":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":"CONTRACT_VERSION","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELIST_USER_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectionSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBatchSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_qty","type":"uint256"}],"name":"mintToAdminV2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"presale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"removeWhitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxMint","type":"uint256"}],"name":"setMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_salePrice","type":"uint256"},{"internalType":"uint256","name":"_whitelistUserPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_collectionSize","type":"uint256"}],"name":"setcollectionSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"whitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600a556001600c60006101000a81548160ff021916908360ff1602179055506040518060600160405280603081526020016200550760309139600d908051906020019062000056929190620002de565b506001600e60006101000a81548160ff0219169083151502179055503480156200007f57600080fd5b506040518060400160405280600681526020017f43415254454c00000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4352544c00000000000000000000000000000000000000000000000000000000815250818160036105dc62000113620001076200020960201b60201c565b6200021160201b60201c565b6000811162000159576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200015090620003fe565b60405180910390fd5b600082116200019f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200019690620003dc565b60405180910390fd5b8360049080519060200190620001b7929190620002de565b508260059080519060200190620001d0929190620002de565b508160038190555080600281905550620001ef620002d560201b60201c565b600181905550505050506001600b81905550505062000534565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006001905090565b828054620002ec9062000431565b90600052602060002090601f0160209004810192826200031057600085556200035c565b82601f106200032b57805160ff19168380011785556200035c565b828001600101855582156200035c579182015b828111156200035b5782518255916020019190600101906200033e565b5b5090506200036b91906200036f565b5090565b5b808211156200038a57600081600090555060010162000370565b5090565b60006200039d60278362000420565b9150620003aa8262000496565b604082019050919050565b6000620003c4602e8362000420565b9150620003d182620004e5565b604082019050919050565b60006020820190508181036000830152620003f7816200038e565b9050919050565b600060208201905081810360008301526200041981620003b5565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200044a57607f821691505b6020821081141562000461576200046062000467565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b614fc380620005446000396000f3fe60806040526004361061025b5760003560e01c806355f804b311610144578063a22cb465116100b6578063d547cfb71161007a578063d547cfb71461090b578063d7224ba014610936578063e6ab143414610961578063e985e9c51461097d578063f2fde38b146109ba578063f7d97577146109e35761025b565b8063a22cb46514610826578063b88d4fde1461084f578063c87b56dd14610878578063caa0f92a146108b5578063cfc86f7b146108e05761025b565b8063853828b611610108578063853828b6146107285780638da5cb5b1461073f5780639231ab2a1461076a57806395d89b41146107a7578063976550b4146107d25780639f8afbcc146107fd5761025b565b806355f804b3146106435780636352211e1461066c57806370a08231146106a9578063715018a6146106e65780637f205a74146106fd5761025b565b80632f745c59116101dd57806342842e0e116101a157806342842e0e14610523578063438b63001461054c57806345c0f533146105895780634a4c560d146105b45780634f6ccce7146105dd578063547520fe1461061a5761025b565b80632f745c591461042c57806330cc7ae014610469578063372c12b11461049257806338b90333146104cf57806340ccc082146104fa5761025b565b8063095ea7b311610224578063095ea7b31461035957806316c61ccc1461038257806318160ddd146103ad57806323b872dd146103d85780632913daa0146104015761025b565b80629a9b7b1461026057806301ffc9a71461028b57806302329a29146102c857806306fdde03146102f1578063081812fc1461031c575b600080fd5b34801561026c57600080fd5b50610275610a0c565b6040516102829190614300565b60405180910390f35b34801561029757600080fd5b506102b260048036038101906102ad9190613868565b610a1b565b6040516102bf9190613f68565b60405180910390f35b3480156102d457600080fd5b506102ef60048036038101906102ea919061383b565b610b65565b005b3480156102fd57600080fd5b50610306610bfe565b6040516103139190613f83565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e919061390f565b610c90565b6040516103509190613edf565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b91906137fb565b610d15565b005b34801561038e57600080fd5b50610397610e2e565b6040516103a49190613f68565b60405180910390f35b3480156103b957600080fd5b506103c2610e41565b6040516103cf9190614300565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa91906136e5565b610e50565b005b34801561040d57600080fd5b50610416610e60565b6040516104239190614300565b60405180910390f35b34801561043857600080fd5b50610453600480360381019061044e91906137fb565b610e66565b6040516104609190614300565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b9190613678565b611064565b005b34801561049e57600080fd5b506104b960048036038101906104b49190613678565b61113b565b6040516104c69190613f68565b60405180910390f35b3480156104db57600080fd5b506104e461115b565b6040516104f1919061431b565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c91906137fb565b61116e565b005b34801561052f57600080fd5b5061054a600480360381019061054591906136e5565b611294565b005b34801561055857600080fd5b50610573600480360381019061056e9190613678565b6112b4565b6040516105809190613f46565b60405180910390f35b34801561059557600080fd5b5061059e611362565b6040516105ab9190614300565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d69190613678565b611368565b005b3480156105e957600080fd5b5061060460048036038101906105ff919061390f565b61143f565b6040516106119190614300565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c919061390f565b611492565b005b34801561064f57600080fd5b5061066a600480360381019061066591906138c2565b61155c565b005b34801561067857600080fd5b50610693600480360381019061068e919061390f565b6115ee565b6040516106a09190613edf565b60405180910390f35b3480156106b557600080fd5b506106d060048036038101906106cb9190613678565b611604565b6040516106dd9190614300565b60405180910390f35b3480156106f257600080fd5b506106fb6116ed565b005b34801561070957600080fd5b50610712611775565b60405161071f9190614300565b60405180910390f35b34801561073457600080fd5b5061073d61177b565b005b34801561074b57600080fd5b50610754611846565b6040516107619190613edf565b60405180910390f35b34801561077657600080fd5b50610791600480360381019061078c919061390f565b61186f565b60405161079e91906142e5565b60405180910390f35b3480156107b357600080fd5b506107bc611887565b6040516107c99190613f83565b60405180910390f35b3480156107de57600080fd5b506107e7611919565b6040516107f49190614300565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f919061390f565b61191f565b005b34801561083257600080fd5b5061084d600480360381019061084891906137bb565b6119a5565b005b34801561085b57600080fd5b5061087660048036038101906108719190613738565b611b26565b005b34801561088457600080fd5b5061089f600480360381019061089a919061390f565b611b82565b6040516108ac9190613f83565b60405180910390f35b3480156108c157600080fd5b506108ca611be1565b6040516108d79190614300565b60405180910390f35b3480156108ec57600080fd5b506108f5611bfc565b6040516109029190613f83565b60405180910390f35b34801561091757600080fd5b50610920611c8a565b60405161092d9190613f83565b60405180910390f35b34801561094257600080fd5b5061094b611d1c565b6040516109589190614300565b60405180910390f35b61097b6004803603810190610976919061390f565b611d22565b005b34801561098957600080fd5b506109a4600480360381019061099f91906136a5565b611e75565b6040516109b19190613f68565b60405180910390f35b3480156109c657600080fd5b506109e160048036038101906109dc9190613678565b611f09565b005b3480156109ef57600080fd5b50610a0a6004803603810190610a05919061393c565b612001565b005b6000610a1661208f565b905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ae657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b4e57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b5e5750610b5d826120a2565b5b9050919050565b610b6d61210c565b73ffffffffffffffffffffffffffffffffffffffff16610b8b611846565b73ffffffffffffffffffffffffffffffffffffffff1614610be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd890614145565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b606060048054610c0d9061468a565b80601f0160208091040260200160405190810160405280929190818152602001828054610c399061468a565b8015610c865780601f10610c5b57610100808354040283529160200191610c86565b820191906000526020600020905b815481529060010190602001808311610c6957829003601f168201915b5050505050905090565b6000610c9b82612114565b610cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd1906142a5565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d20826115ee565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d88906141c5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610db061210c565b73ffffffffffffffffffffffffffffffffffffffff161480610ddf5750610dde81610dd961210c565b611e75565b5b610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e15906140e5565b60405180910390fd5b610e29838383612135565b505050565b600e60009054906101000a900460ff1681565b6000610e4b61208f565b905090565b610e5b8383836121e7565b505050565b60035481565b6000610e7183611604565b8210610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea990613fa5565b60405180910390fd5b6000610ebc610e41565b905060008060005b83811015611022576000600660008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610fb657806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561100e5786841415610fff57819550505050505061105e565b838061100a906146ed565b9450505b50808061101a906146ed565b915050610ec4565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105590614265565b60405180910390fd5b92915050565b61106c61210c565b73ffffffffffffffffffffffffffffffffffffffff1661108a611846565b73ffffffffffffffffffffffffffffffffffffffff16146110e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d790614145565b60405180910390fd5b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600f6020528060005260406000206000915054906101000a900460ff1681565b600c60009054906101000a900460ff1681565b61117661210c565b73ffffffffffffffffffffffffffffffffffffffff16611194611846565b73ffffffffffffffffffffffffffffffffffffffff16146111ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e190614145565b60405180910390fd5b6000811161122d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611224906140a5565b60405180910390fd5b60025481611239610a0c565b611243919061444e565b1115611284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127b90614025565b60405180910390fd5b611290828260016127a0565b5050565b6112af83838360405180602001604052806000815250611b26565b505050565b606060006112c183611604565b905060008167ffffffffffffffff8111156112df576112de614823565b5b60405190808252806020026020018201604052801561130d5781602001602082028036833780820191505090505b50905060005b82811015611357576113258582610e66565b828281518110611338576113376147f4565b5b602002602001018181525050808061134f906146ed565b915050611313565b508092505050919050565b60025481565b61137061210c565b73ffffffffffffffffffffffffffffffffffffffff1661138e611846565b73ffffffffffffffffffffffffffffffffffffffff16146113e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113db90614145565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611449610e41565b821061148a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148190614085565b60405180910390fd5b819050919050565b61149a61210c565b73ffffffffffffffffffffffffffffffffffffffff166114b8611846565b73ffffffffffffffffffffffffffffffffffffffff161461150e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150590614145565b60405180910390fd5b6001811015611552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154990613fc5565b60405180910390fd5b8060038190555050565b61156461210c565b73ffffffffffffffffffffffffffffffffffffffff16611582611846565b73ffffffffffffffffffffffffffffffffffffffff16146115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf90614145565b60405180910390fd5b8181600d91906115e992919061346c565b505050565b60006115f9826127c0565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166c90614105565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6116f561210c565b73ffffffffffffffffffffffffffffffffffffffff16611713611846565b73ffffffffffffffffffffffffffffffffffffffff1614611769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176090614145565b60405180910390fd5b6117736000612a18565b565b60105481565b61178361210c565b73ffffffffffffffffffffffffffffffffffffffff166117a1611846565b73ffffffffffffffffffffffffffffffffffffffff16146117f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ee90614145565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611842573d6000803e3d6000fd5b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118776134f2565b611880826127c0565b9050919050565b6060600580546118969061468a565b80601f01602080910402602001604051908101604052809291908181526020018280546118c29061468a565b801561190f5780601f106118e45761010080835404028352916020019161190f565b820191906000526020600020905b8154815290600101906020018083116118f257829003601f168201915b5050505050905090565b60115481565b61192761210c565b73ffffffffffffffffffffffffffffffffffffffff16611945611846565b73ffffffffffffffffffffffffffffffffffffffff161461199b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199290614145565b60405180910390fd5b8060028190555050565b6119ad61210c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1290614185565b60405180910390fd5b8060096000611a2861210c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ad561210c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b1a9190613f68565b60405180910390a35050565b611b318484846121e7565b611b3d84848484612adc565b611b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b73906141e5565b60405180910390fd5b50505050565b60606000611b8e612c73565b90506000815111611bae5760405180602001604052806000815250611bd9565b80611bb884612d05565b604051602001611bc9929190613ebb565b6040516020818303038152906040525b915050919050565b60006001611bed61208f565b611bf7919061444e565b905090565b600d8054611c099061468a565b80601f0160208091040260200160405190810160405280929190818152602001828054611c359061468a565b8015611c825780601f10611c5757610100808354040283529160200191611c82565b820191906000526020600020905b815481529060010190602001808311611c6557829003601f168201915b505050505081565b6060600d8054611c999061468a565b80601f0160208091040260200160405190810160405280929190818152602001828054611cc59061468a565b8015611d125780601f10611ce757610100808354040283529160200191611d12565b820191906000526020600020905b815481529060010190602001808311611cf557829003601f168201915b5050505050905090565b600a5481565b600e60009054906101000a900460ff1615611d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6990613fe5565b60405180910390fd5b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e185780601154611dd291906144d5565b3414611e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0a90614065565b60405180910390fd5b611e68565b80601054611e2691906144d5565b3414611e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5e90614065565b60405180910390fd5b5b611e723382612e66565b50565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f1161210c565b73ffffffffffffffffffffffffffffffffffffffff16611f2f611846565b73ffffffffffffffffffffffffffffffffffffffff1614611f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7c90614145565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec90614005565b60405180910390fd5b611ffe81612a18565b50565b61200961210c565b73ffffffffffffffffffffffffffffffffffffffff16612027611846565b73ffffffffffffffffffffffffffffffffffffffff161461207d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207490614145565b60405180910390fd5b81601081905550806011819055505050565b6000612099612f56565b60015403905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008161211f612f56565b1115801561212e575060015482105b9050919050565b826008600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006121f2826127c0565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661221961210c565b73ffffffffffffffffffffffffffffffffffffffff161480612275575061223e61210c565b73ffffffffffffffffffffffffffffffffffffffff1661225d84610c90565b73ffffffffffffffffffffffffffffffffffffffff16145b806122915750612290826000015161228b61210c565b611e75565b5b9050806122d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ca906141a5565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233c90614125565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156123b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ac906140c5565b60405180910390fd5b6123c28585856001612f5f565b6123d26000848460000151612135565b6001600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612440919061452f565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166124e49190614408565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506006600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846125ea919061444e565b9050600073ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156127305761266081612114565b1561272f576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506006600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127988686866001612f65565b505050505050565b6127bb83838360405180602001604052806000815250612f6b565b505050565b6127c86134f2565b6000829050806127d6612f56565b111580156127e5575060015481105b156129d8576000600660008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146128d6578092505050612a13565b5b6001156129d657818060019003925050600660008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146129d1578092505050612a13565b6128d7565b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0a90614285565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612afd8473ffffffffffffffffffffffffffffffffffffffff16613449565b15612c66578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b2661210c565b8786866040518563ffffffff1660e01b8152600401612b489493929190613efa565b602060405180830381600087803b158015612b6257600080fd5b505af1925050508015612b9357506040513d601f19601f82011682018060405250810190612b909190613895565b60015b612c16573d8060008114612bc3576040519150601f19603f3d011682016040523d82523d6000602084013e612bc8565b606091505b50600081511415612c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c05906141e5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c6b565b600190505b949350505050565b6060600d8054612c829061468a565b80601f0160208091040260200160405190810160405280929190818152602001828054612cae9061468a565b8015612cfb5780601f10612cd057610100808354040283529160200191612cfb565b820191906000526020600020905b815481529060010190602001808311612cde57829003601f168201915b5050505050905090565b60606000821415612d4d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e61565b600082905060005b60008214612d7f578080612d68906146ed565b915050600a82612d7891906144a4565b9150612d55565b60008167ffffffffffffffff811115612d9b57612d9a614823565b5b6040519080825280601f01601f191660200182016040528015612dcd5781602001600182028036833780820191505090505b5090505b60008514612e5a57600182612de69190614563565b9150600a85612df59190614736565b6030612e01919061444e565b60f81b818381518110612e1757612e166147f4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e5391906144a4565b9450612dd1565b8093505050505b919050565b6001811015612eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea190614045565b60405180910390fd5b600354811115612eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee690614245565b60405180910390fd5b60025481612efb610a0c565b612f05919061444e565b1115612f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3d90614165565b60405180910390fd5b612f52828260006127a0565b5050565b60006001905090565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd990614225565b60405180910390fd5b612feb81612114565b1561302b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302290614205565b60405180910390fd5b60001515831515141561307e5760035484111561307d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613074906142c5565b60405180910390fd5b5b61308b6000868387612f5f565b6000600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808683600001516131889190614408565b6fffffffffffffffffffffffffffffffff168152602001856131aa57866131ad565b60005b83602001516131bc9190614408565b6fffffffffffffffffffffffffffffffff16815250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808773ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506006600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8681101561342b57818873ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133cb6000898488612adc565b61340a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613401906141e5565b60405180910390fd5b8180613415906146ed565b9250508080613423906146ed565b91505061335a565b50806001819055506134406000888589612f65565b50505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546134789061468a565b90600052602060002090601f01602090048101928261349a57600085556134e1565b82601f106134b357803560ff19168380011785556134e1565b828001600101855582156134e1579182015b828111156134e05782358255916020019190600101906134c5565b5b5090506134ee919061352c565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561354557600081600090555060010161352d565b5090565b600061355c6135578461435b565b614336565b90508281526020810184848401111561357857613577614861565b5b613583848285614648565b509392505050565b60008135905061359a81614f31565b92915050565b6000813590506135af81614f48565b92915050565b6000813590506135c481614f5f565b92915050565b6000815190506135d981614f5f565b92915050565b600082601f8301126135f4576135f3614857565b5b8135613604848260208601613549565b91505092915050565b60008083601f84011261362357613622614857565b5b8235905067ffffffffffffffff8111156136405761363f614852565b5b60208301915083600182028301111561365c5761365b61485c565b5b9250929050565b60008135905061367281614f76565b92915050565b60006020828403121561368e5761368d61486b565b5b600061369c8482850161358b565b91505092915050565b600080604083850312156136bc576136bb61486b565b5b60006136ca8582860161358b565b92505060206136db8582860161358b565b9150509250929050565b6000806000606084860312156136fe576136fd61486b565b5b600061370c8682870161358b565b935050602061371d8682870161358b565b925050604061372e86828701613663565b9150509250925092565b600080600080608085870312156137525761375161486b565b5b60006137608782880161358b565b94505060206137718782880161358b565b935050604061378287828801613663565b925050606085013567ffffffffffffffff8111156137a3576137a2614866565b5b6137af878288016135df565b91505092959194509250565b600080604083850312156137d2576137d161486b565b5b60006137e08582860161358b565b92505060206137f1858286016135a0565b9150509250929050565b600080604083850312156138125761381161486b565b5b60006138208582860161358b565b925050602061383185828601613663565b9150509250929050565b6000602082840312156138515761385061486b565b5b600061385f848285016135a0565b91505092915050565b60006020828403121561387e5761387d61486b565b5b600061388c848285016135b5565b91505092915050565b6000602082840312156138ab576138aa61486b565b5b60006138b9848285016135ca565b91505092915050565b600080602083850312156138d9576138d861486b565b5b600083013567ffffffffffffffff8111156138f7576138f6614866565b5b6139038582860161360d565b92509250509250929050565b6000602082840312156139255761392461486b565b5b600061393384828501613663565b91505092915050565b600080604083850312156139535761395261486b565b5b600061396185828601613663565b925050602061397285828601613663565b9150509250929050565b60006139888383613e7f565b60208301905092915050565b61399d81614597565b82525050565b6139ac81614597565b82525050565b60006139bd8261439c565b6139c781856143ca565b93506139d28361438c565b8060005b83811015613a035781516139ea888261397c565b97506139f5836143bd565b9250506001810190506139d6565b5085935050505092915050565b613a19816145a9565b82525050565b6000613a2a826143a7565b613a3481856143db565b9350613a44818560208601614657565b613a4d81614870565b840191505092915050565b6000613a63826143b2565b613a6d81856143ec565b9350613a7d818560208601614657565b613a8681614870565b840191505092915050565b6000613a9c826143b2565b613aa681856143fd565b9350613ab6818560208601614657565b80840191505092915050565b6000613acf6022836143ec565b9150613ada82614881565b604082019050919050565b6000613af2601b836143ec565b9150613afd826148d0565b602082019050919050565b6000613b15600b836143ec565b9150613b20826148f9565b602082019050919050565b6000613b386026836143ec565b9150613b4382614922565b604082019050919050565b6000613b5b601b836143ec565b9150613b6682614971565b602082019050919050565b6000613b7e601a836143ec565b9150613b898261499a565b602082019050919050565b6000613ba1600e836143ec565b9150613bac826149c3565b602082019050919050565b6000613bc46023836143ec565b9150613bcf826149ec565b604082019050919050565b6000613be7601b836143ec565b9150613bf282614a3b565b602082019050919050565b6000613c0a6025836143ec565b9150613c1582614a64565b604082019050919050565b6000613c2d6039836143ec565b9150613c3882614ab3565b604082019050919050565b6000613c50602b836143ec565b9150613c5b82614b02565b604082019050919050565b6000613c736026836143ec565b9150613c7e82614b51565b604082019050919050565b6000613c966020836143ec565b9150613ca182614ba0565b602082019050919050565b6000613cb96024836143ec565b9150613cc482614bc9565b604082019050919050565b6000613cdc601a836143ec565b9150613ce782614c18565b602082019050919050565b6000613cff6032836143ec565b9150613d0a82614c41565b604082019050919050565b6000613d226022836143ec565b9150613d2d82614c90565b604082019050919050565b6000613d456033836143ec565b9150613d5082614cdf565b604082019050919050565b6000613d68601d836143ec565b9150613d7382614d2e565b602082019050919050565b6000613d8b6021836143ec565b9150613d9682614d57565b604082019050919050565b6000613dae602e836143ec565b9150613db982614da6565b604082019050919050565b6000613dd1602e836143ec565b9150613ddc82614df5565b604082019050919050565b6000613df4602f836143ec565b9150613dff82614e44565b604082019050919050565b6000613e17602d836143ec565b9150613e2282614e93565b604082019050919050565b6000613e3a6022836143ec565b9150613e4582614ee2565b604082019050919050565b604082016000820151613e666000850182613994565b506020820151613e796020850182613e9d565b50505050565b613e888161461d565b82525050565b613e978161461d565b82525050565b613ea681614627565b82525050565b613eb58161463b565b82525050565b6000613ec78285613a91565b9150613ed38284613a91565b91508190509392505050565b6000602082019050613ef460008301846139a3565b92915050565b6000608082019050613f0f60008301876139a3565b613f1c60208301866139a3565b613f296040830185613e8e565b8181036060830152613f3b8184613a1f565b905095945050505050565b60006020820190508181036000830152613f6081846139b2565b905092915050565b6000602082019050613f7d6000830184613a10565b92915050565b60006020820190508181036000830152613f9d8184613a58565b905092915050565b60006020820190508181036000830152613fbe81613ac2565b9050919050565b60006020820190508181036000830152613fde81613ae5565b9050919050565b60006020820190508181036000830152613ffe81613b08565b9050919050565b6000602082019050818103600083015261401e81613b2b565b9050919050565b6000602082019050818103600083015261403e81613b4e565b9050919050565b6000602082019050818103600083015261405e81613b71565b9050919050565b6000602082019050818103600083015261407e81613b94565b9050919050565b6000602082019050818103600083015261409e81613bb7565b9050919050565b600060208201905081810360008301526140be81613bda565b9050919050565b600060208201905081810360008301526140de81613bfd565b9050919050565b600060208201905081810360008301526140fe81613c20565b9050919050565b6000602082019050818103600083015261411e81613c43565b9050919050565b6000602082019050818103600083015261413e81613c66565b9050919050565b6000602082019050818103600083015261415e81613c89565b9050919050565b6000602082019050818103600083015261417e81613cac565b9050919050565b6000602082019050818103600083015261419e81613ccf565b9050919050565b600060208201905081810360008301526141be81613cf2565b9050919050565b600060208201905081810360008301526141de81613d15565b9050919050565b600060208201905081810360008301526141fe81613d38565b9050919050565b6000602082019050818103600083015261421e81613d5b565b9050919050565b6000602082019050818103600083015261423e81613d7e565b9050919050565b6000602082019050818103600083015261425e81613da1565b9050919050565b6000602082019050818103600083015261427e81613dc4565b9050919050565b6000602082019050818103600083015261429e81613de7565b9050919050565b600060208201905081810360008301526142be81613e0a565b9050919050565b600060208201905081810360008301526142de81613e2d565b9050919050565b60006040820190506142fa6000830184613e50565b92915050565b60006020820190506143156000830184613e8e565b92915050565b60006020820190506143306000830184613eac565b92915050565b6000614340614351565b905061434c82826146bc565b919050565b6000604051905090565b600067ffffffffffffffff82111561437657614375614823565b5b61437f82614870565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614413826145e1565b915061441e836145e1565b9250826fffffffffffffffffffffffffffffffff0382111561444357614442614767565b5b828201905092915050565b60006144598261461d565b91506144648361461d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561449957614498614767565b5b828201905092915050565b60006144af8261461d565b91506144ba8361461d565b9250826144ca576144c9614796565b5b828204905092915050565b60006144e08261461d565b91506144eb8361461d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561452457614523614767565b5b828202905092915050565b600061453a826145e1565b9150614545836145e1565b92508282101561455857614557614767565b5b828203905092915050565b600061456e8261461d565b91506145798361461d565b92508282101561458c5761458b614767565b5b828203905092915050565b60006145a2826145fd565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561467557808201518184015260208101905061465a565b83811115614684576000848401525b50505050565b600060028204905060018216806146a257607f821691505b602082108114156146b6576146b56147c5565b5b50919050565b6146c582614870565b810181811067ffffffffffffffff821117156146e4576146e3614823565b5b80604052505050565b60006146f88261461d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561472b5761472a614767565b5b600182019050919050565b60006147418261461d565b915061474c8361461d565b92508261475c5761475b614796565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d6178206d696e74206d757374206265206174206c6561737420310000000000600082015250565b7f53616c6520706175736564000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f74206d696e74206f76657220737570706c79206361700000000000600082015250565b7f4d757374206d696e74206174206c65617374203120746f6b656e000000000000600082015250565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f4d757374206d696e74206174206c65617374203120746f6b656e2e0000000000600082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f43616e6e6f74206d696e74206f76657220737570706c7920636170206f66203160008201527f3030303000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f74206d696e74206d6f7265207468616e206d6178206d696e74207060008201527f6572207472616e73616374696f6e000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b614f3a81614597565b8114614f4557600080fd5b50565b614f51816145a9565b8114614f5c57600080fd5b50565b614f68816145b5565b8114614f7357600080fd5b50565b614f7f8161461d565b8114614f8a57600080fd5b5056fea2646970667358221220c41da0c84a14f83c8a093877c6fb0feb848fb77895c22ab209f8c14a6414cd1964736f6c6343000807003368747470733a2f2f74686563617274656c67656e65736973636f6c6c656374696f6e2e636f6d2f6d657461646174612f
Deployed Bytecode
0x60806040526004361061025b5760003560e01c806355f804b311610144578063a22cb465116100b6578063d547cfb71161007a578063d547cfb71461090b578063d7224ba014610936578063e6ab143414610961578063e985e9c51461097d578063f2fde38b146109ba578063f7d97577146109e35761025b565b8063a22cb46514610826578063b88d4fde1461084f578063c87b56dd14610878578063caa0f92a146108b5578063cfc86f7b146108e05761025b565b8063853828b611610108578063853828b6146107285780638da5cb5b1461073f5780639231ab2a1461076a57806395d89b41146107a7578063976550b4146107d25780639f8afbcc146107fd5761025b565b806355f804b3146106435780636352211e1461066c57806370a08231146106a9578063715018a6146106e65780637f205a74146106fd5761025b565b80632f745c59116101dd57806342842e0e116101a157806342842e0e14610523578063438b63001461054c57806345c0f533146105895780634a4c560d146105b45780634f6ccce7146105dd578063547520fe1461061a5761025b565b80632f745c591461042c57806330cc7ae014610469578063372c12b11461049257806338b90333146104cf57806340ccc082146104fa5761025b565b8063095ea7b311610224578063095ea7b31461035957806316c61ccc1461038257806318160ddd146103ad57806323b872dd146103d85780632913daa0146104015761025b565b80629a9b7b1461026057806301ffc9a71461028b57806302329a29146102c857806306fdde03146102f1578063081812fc1461031c575b600080fd5b34801561026c57600080fd5b50610275610a0c565b6040516102829190614300565b60405180910390f35b34801561029757600080fd5b506102b260048036038101906102ad9190613868565b610a1b565b6040516102bf9190613f68565b60405180910390f35b3480156102d457600080fd5b506102ef60048036038101906102ea919061383b565b610b65565b005b3480156102fd57600080fd5b50610306610bfe565b6040516103139190613f83565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e919061390f565b610c90565b6040516103509190613edf565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b91906137fb565b610d15565b005b34801561038e57600080fd5b50610397610e2e565b6040516103a49190613f68565b60405180910390f35b3480156103b957600080fd5b506103c2610e41565b6040516103cf9190614300565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa91906136e5565b610e50565b005b34801561040d57600080fd5b50610416610e60565b6040516104239190614300565b60405180910390f35b34801561043857600080fd5b50610453600480360381019061044e91906137fb565b610e66565b6040516104609190614300565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b9190613678565b611064565b005b34801561049e57600080fd5b506104b960048036038101906104b49190613678565b61113b565b6040516104c69190613f68565b60405180910390f35b3480156104db57600080fd5b506104e461115b565b6040516104f1919061431b565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c91906137fb565b61116e565b005b34801561052f57600080fd5b5061054a600480360381019061054591906136e5565b611294565b005b34801561055857600080fd5b50610573600480360381019061056e9190613678565b6112b4565b6040516105809190613f46565b60405180910390f35b34801561059557600080fd5b5061059e611362565b6040516105ab9190614300565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d69190613678565b611368565b005b3480156105e957600080fd5b5061060460048036038101906105ff919061390f565b61143f565b6040516106119190614300565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c919061390f565b611492565b005b34801561064f57600080fd5b5061066a600480360381019061066591906138c2565b61155c565b005b34801561067857600080fd5b50610693600480360381019061068e919061390f565b6115ee565b6040516106a09190613edf565b60405180910390f35b3480156106b557600080fd5b506106d060048036038101906106cb9190613678565b611604565b6040516106dd9190614300565b60405180910390f35b3480156106f257600080fd5b506106fb6116ed565b005b34801561070957600080fd5b50610712611775565b60405161071f9190614300565b60405180910390f35b34801561073457600080fd5b5061073d61177b565b005b34801561074b57600080fd5b50610754611846565b6040516107619190613edf565b60405180910390f35b34801561077657600080fd5b50610791600480360381019061078c919061390f565b61186f565b60405161079e91906142e5565b60405180910390f35b3480156107b357600080fd5b506107bc611887565b6040516107c99190613f83565b60405180910390f35b3480156107de57600080fd5b506107e7611919565b6040516107f49190614300565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f919061390f565b61191f565b005b34801561083257600080fd5b5061084d600480360381019061084891906137bb565b6119a5565b005b34801561085b57600080fd5b5061087660048036038101906108719190613738565b611b26565b005b34801561088457600080fd5b5061089f600480360381019061089a919061390f565b611b82565b6040516108ac9190613f83565b60405180910390f35b3480156108c157600080fd5b506108ca611be1565b6040516108d79190614300565b60405180910390f35b3480156108ec57600080fd5b506108f5611bfc565b6040516109029190613f83565b60405180910390f35b34801561091757600080fd5b50610920611c8a565b60405161092d9190613f83565b60405180910390f35b34801561094257600080fd5b5061094b611d1c565b6040516109589190614300565b60405180910390f35b61097b6004803603810190610976919061390f565b611d22565b005b34801561098957600080fd5b506109a4600480360381019061099f91906136a5565b611e75565b6040516109b19190613f68565b60405180910390f35b3480156109c657600080fd5b506109e160048036038101906109dc9190613678565b611f09565b005b3480156109ef57600080fd5b50610a0a6004803603810190610a05919061393c565b612001565b005b6000610a1661208f565b905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ae657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b4e57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b5e5750610b5d826120a2565b5b9050919050565b610b6d61210c565b73ffffffffffffffffffffffffffffffffffffffff16610b8b611846565b73ffffffffffffffffffffffffffffffffffffffff1614610be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd890614145565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b606060048054610c0d9061468a565b80601f0160208091040260200160405190810160405280929190818152602001828054610c399061468a565b8015610c865780601f10610c5b57610100808354040283529160200191610c86565b820191906000526020600020905b815481529060010190602001808311610c6957829003601f168201915b5050505050905090565b6000610c9b82612114565b610cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd1906142a5565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d20826115ee565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d88906141c5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610db061210c565b73ffffffffffffffffffffffffffffffffffffffff161480610ddf5750610dde81610dd961210c565b611e75565b5b610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e15906140e5565b60405180910390fd5b610e29838383612135565b505050565b600e60009054906101000a900460ff1681565b6000610e4b61208f565b905090565b610e5b8383836121e7565b505050565b60035481565b6000610e7183611604565b8210610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea990613fa5565b60405180910390fd5b6000610ebc610e41565b905060008060005b83811015611022576000600660008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610fb657806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561100e5786841415610fff57819550505050505061105e565b838061100a906146ed565b9450505b50808061101a906146ed565b915050610ec4565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105590614265565b60405180910390fd5b92915050565b61106c61210c565b73ffffffffffffffffffffffffffffffffffffffff1661108a611846565b73ffffffffffffffffffffffffffffffffffffffff16146110e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d790614145565b60405180910390fd5b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600f6020528060005260406000206000915054906101000a900460ff1681565b600c60009054906101000a900460ff1681565b61117661210c565b73ffffffffffffffffffffffffffffffffffffffff16611194611846565b73ffffffffffffffffffffffffffffffffffffffff16146111ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e190614145565b60405180910390fd5b6000811161122d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611224906140a5565b60405180910390fd5b60025481611239610a0c565b611243919061444e565b1115611284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127b90614025565b60405180910390fd5b611290828260016127a0565b5050565b6112af83838360405180602001604052806000815250611b26565b505050565b606060006112c183611604565b905060008167ffffffffffffffff8111156112df576112de614823565b5b60405190808252806020026020018201604052801561130d5781602001602082028036833780820191505090505b50905060005b82811015611357576113258582610e66565b828281518110611338576113376147f4565b5b602002602001018181525050808061134f906146ed565b915050611313565b508092505050919050565b60025481565b61137061210c565b73ffffffffffffffffffffffffffffffffffffffff1661138e611846565b73ffffffffffffffffffffffffffffffffffffffff16146113e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113db90614145565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611449610e41565b821061148a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148190614085565b60405180910390fd5b819050919050565b61149a61210c565b73ffffffffffffffffffffffffffffffffffffffff166114b8611846565b73ffffffffffffffffffffffffffffffffffffffff161461150e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150590614145565b60405180910390fd5b6001811015611552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154990613fc5565b60405180910390fd5b8060038190555050565b61156461210c565b73ffffffffffffffffffffffffffffffffffffffff16611582611846565b73ffffffffffffffffffffffffffffffffffffffff16146115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf90614145565b60405180910390fd5b8181600d91906115e992919061346c565b505050565b60006115f9826127c0565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166c90614105565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6116f561210c565b73ffffffffffffffffffffffffffffffffffffffff16611713611846565b73ffffffffffffffffffffffffffffffffffffffff1614611769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176090614145565b60405180910390fd5b6117736000612a18565b565b60105481565b61178361210c565b73ffffffffffffffffffffffffffffffffffffffff166117a1611846565b73ffffffffffffffffffffffffffffffffffffffff16146117f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ee90614145565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611842573d6000803e3d6000fd5b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118776134f2565b611880826127c0565b9050919050565b6060600580546118969061468a565b80601f01602080910402602001604051908101604052809291908181526020018280546118c29061468a565b801561190f5780601f106118e45761010080835404028352916020019161190f565b820191906000526020600020905b8154815290600101906020018083116118f257829003601f168201915b5050505050905090565b60115481565b61192761210c565b73ffffffffffffffffffffffffffffffffffffffff16611945611846565b73ffffffffffffffffffffffffffffffffffffffff161461199b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199290614145565b60405180910390fd5b8060028190555050565b6119ad61210c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1290614185565b60405180910390fd5b8060096000611a2861210c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ad561210c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b1a9190613f68565b60405180910390a35050565b611b318484846121e7565b611b3d84848484612adc565b611b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b73906141e5565b60405180910390fd5b50505050565b60606000611b8e612c73565b90506000815111611bae5760405180602001604052806000815250611bd9565b80611bb884612d05565b604051602001611bc9929190613ebb565b6040516020818303038152906040525b915050919050565b60006001611bed61208f565b611bf7919061444e565b905090565b600d8054611c099061468a565b80601f0160208091040260200160405190810160405280929190818152602001828054611c359061468a565b8015611c825780601f10611c5757610100808354040283529160200191611c82565b820191906000526020600020905b815481529060010190602001808311611c6557829003601f168201915b505050505081565b6060600d8054611c999061468a565b80601f0160208091040260200160405190810160405280929190818152602001828054611cc59061468a565b8015611d125780601f10611ce757610100808354040283529160200191611d12565b820191906000526020600020905b815481529060010190602001808311611cf557829003601f168201915b5050505050905090565b600a5481565b600e60009054906101000a900460ff1615611d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6990613fe5565b60405180910390fd5b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e185780601154611dd291906144d5565b3414611e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0a90614065565b60405180910390fd5b611e68565b80601054611e2691906144d5565b3414611e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5e90614065565b60405180910390fd5b5b611e723382612e66565b50565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f1161210c565b73ffffffffffffffffffffffffffffffffffffffff16611f2f611846565b73ffffffffffffffffffffffffffffffffffffffff1614611f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7c90614145565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec90614005565b60405180910390fd5b611ffe81612a18565b50565b61200961210c565b73ffffffffffffffffffffffffffffffffffffffff16612027611846565b73ffffffffffffffffffffffffffffffffffffffff161461207d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207490614145565b60405180910390fd5b81601081905550806011819055505050565b6000612099612f56565b60015403905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008161211f612f56565b1115801561212e575060015482105b9050919050565b826008600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006121f2826127c0565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661221961210c565b73ffffffffffffffffffffffffffffffffffffffff161480612275575061223e61210c565b73ffffffffffffffffffffffffffffffffffffffff1661225d84610c90565b73ffffffffffffffffffffffffffffffffffffffff16145b806122915750612290826000015161228b61210c565b611e75565b5b9050806122d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ca906141a5565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233c90614125565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156123b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ac906140c5565b60405180910390fd5b6123c28585856001612f5f565b6123d26000848460000151612135565b6001600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612440919061452f565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166124e49190614408565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506006600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846125ea919061444e565b9050600073ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156127305761266081612114565b1561272f576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506006600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127988686866001612f65565b505050505050565b6127bb83838360405180602001604052806000815250612f6b565b505050565b6127c86134f2565b6000829050806127d6612f56565b111580156127e5575060015481105b156129d8576000600660008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146128d6578092505050612a13565b5b6001156129d657818060019003925050600660008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146129d1578092505050612a13565b6128d7565b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0a90614285565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612afd8473ffffffffffffffffffffffffffffffffffffffff16613449565b15612c66578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b2661210c565b8786866040518563ffffffff1660e01b8152600401612b489493929190613efa565b602060405180830381600087803b158015612b6257600080fd5b505af1925050508015612b9357506040513d601f19601f82011682018060405250810190612b909190613895565b60015b612c16573d8060008114612bc3576040519150601f19603f3d011682016040523d82523d6000602084013e612bc8565b606091505b50600081511415612c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c05906141e5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c6b565b600190505b949350505050565b6060600d8054612c829061468a565b80601f0160208091040260200160405190810160405280929190818152602001828054612cae9061468a565b8015612cfb5780601f10612cd057610100808354040283529160200191612cfb565b820191906000526020600020905b815481529060010190602001808311612cde57829003601f168201915b5050505050905090565b60606000821415612d4d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e61565b600082905060005b60008214612d7f578080612d68906146ed565b915050600a82612d7891906144a4565b9150612d55565b60008167ffffffffffffffff811115612d9b57612d9a614823565b5b6040519080825280601f01601f191660200182016040528015612dcd5781602001600182028036833780820191505090505b5090505b60008514612e5a57600182612de69190614563565b9150600a85612df59190614736565b6030612e01919061444e565b60f81b818381518110612e1757612e166147f4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e5391906144a4565b9450612dd1565b8093505050505b919050565b6001811015612eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea190614045565b60405180910390fd5b600354811115612eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee690614245565b60405180910390fd5b60025481612efb610a0c565b612f05919061444e565b1115612f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3d90614165565b60405180910390fd5b612f52828260006127a0565b5050565b60006001905090565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd990614225565b60405180910390fd5b612feb81612114565b1561302b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302290614205565b60405180910390fd5b60001515831515141561307e5760035484111561307d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613074906142c5565b60405180910390fd5b5b61308b6000868387612f5f565b6000600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808683600001516131889190614408565b6fffffffffffffffffffffffffffffffff168152602001856131aa57866131ad565b60005b83602001516131bc9190614408565b6fffffffffffffffffffffffffffffffff16815250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808773ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506006600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8681101561342b57818873ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133cb6000898488612adc565b61340a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613401906141e5565b60405180910390fd5b8180613415906146ed565b9250508080613423906146ed565b91505061335a565b50806001819055506134406000888589612f65565b50505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546134789061468a565b90600052602060002090601f01602090048101928261349a57600085556134e1565b82601f106134b357803560ff19168380011785556134e1565b828001600101855582156134e1579182015b828111156134e05782358255916020019190600101906134c5565b5b5090506134ee919061352c565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561354557600081600090555060010161352d565b5090565b600061355c6135578461435b565b614336565b90508281526020810184848401111561357857613577614861565b5b613583848285614648565b509392505050565b60008135905061359a81614f31565b92915050565b6000813590506135af81614f48565b92915050565b6000813590506135c481614f5f565b92915050565b6000815190506135d981614f5f565b92915050565b600082601f8301126135f4576135f3614857565b5b8135613604848260208601613549565b91505092915050565b60008083601f84011261362357613622614857565b5b8235905067ffffffffffffffff8111156136405761363f614852565b5b60208301915083600182028301111561365c5761365b61485c565b5b9250929050565b60008135905061367281614f76565b92915050565b60006020828403121561368e5761368d61486b565b5b600061369c8482850161358b565b91505092915050565b600080604083850312156136bc576136bb61486b565b5b60006136ca8582860161358b565b92505060206136db8582860161358b565b9150509250929050565b6000806000606084860312156136fe576136fd61486b565b5b600061370c8682870161358b565b935050602061371d8682870161358b565b925050604061372e86828701613663565b9150509250925092565b600080600080608085870312156137525761375161486b565b5b60006137608782880161358b565b94505060206137718782880161358b565b935050604061378287828801613663565b925050606085013567ffffffffffffffff8111156137a3576137a2614866565b5b6137af878288016135df565b91505092959194509250565b600080604083850312156137d2576137d161486b565b5b60006137e08582860161358b565b92505060206137f1858286016135a0565b9150509250929050565b600080604083850312156138125761381161486b565b5b60006138208582860161358b565b925050602061383185828601613663565b9150509250929050565b6000602082840312156138515761385061486b565b5b600061385f848285016135a0565b91505092915050565b60006020828403121561387e5761387d61486b565b5b600061388c848285016135b5565b91505092915050565b6000602082840312156138ab576138aa61486b565b5b60006138b9848285016135ca565b91505092915050565b600080602083850312156138d9576138d861486b565b5b600083013567ffffffffffffffff8111156138f7576138f6614866565b5b6139038582860161360d565b92509250509250929050565b6000602082840312156139255761392461486b565b5b600061393384828501613663565b91505092915050565b600080604083850312156139535761395261486b565b5b600061396185828601613663565b925050602061397285828601613663565b9150509250929050565b60006139888383613e7f565b60208301905092915050565b61399d81614597565b82525050565b6139ac81614597565b82525050565b60006139bd8261439c565b6139c781856143ca565b93506139d28361438c565b8060005b83811015613a035781516139ea888261397c565b97506139f5836143bd565b9250506001810190506139d6565b5085935050505092915050565b613a19816145a9565b82525050565b6000613a2a826143a7565b613a3481856143db565b9350613a44818560208601614657565b613a4d81614870565b840191505092915050565b6000613a63826143b2565b613a6d81856143ec565b9350613a7d818560208601614657565b613a8681614870565b840191505092915050565b6000613a9c826143b2565b613aa681856143fd565b9350613ab6818560208601614657565b80840191505092915050565b6000613acf6022836143ec565b9150613ada82614881565b604082019050919050565b6000613af2601b836143ec565b9150613afd826148d0565b602082019050919050565b6000613b15600b836143ec565b9150613b20826148f9565b602082019050919050565b6000613b386026836143ec565b9150613b4382614922565b604082019050919050565b6000613b5b601b836143ec565b9150613b6682614971565b602082019050919050565b6000613b7e601a836143ec565b9150613b898261499a565b602082019050919050565b6000613ba1600e836143ec565b9150613bac826149c3565b602082019050919050565b6000613bc46023836143ec565b9150613bcf826149ec565b604082019050919050565b6000613be7601b836143ec565b9150613bf282614a3b565b602082019050919050565b6000613c0a6025836143ec565b9150613c1582614a64565b604082019050919050565b6000613c2d6039836143ec565b9150613c3882614ab3565b604082019050919050565b6000613c50602b836143ec565b9150613c5b82614b02565b604082019050919050565b6000613c736026836143ec565b9150613c7e82614b51565b604082019050919050565b6000613c966020836143ec565b9150613ca182614ba0565b602082019050919050565b6000613cb96024836143ec565b9150613cc482614bc9565b604082019050919050565b6000613cdc601a836143ec565b9150613ce782614c18565b602082019050919050565b6000613cff6032836143ec565b9150613d0a82614c41565b604082019050919050565b6000613d226022836143ec565b9150613d2d82614c90565b604082019050919050565b6000613d456033836143ec565b9150613d5082614cdf565b604082019050919050565b6000613d68601d836143ec565b9150613d7382614d2e565b602082019050919050565b6000613d8b6021836143ec565b9150613d9682614d57565b604082019050919050565b6000613dae602e836143ec565b9150613db982614da6565b604082019050919050565b6000613dd1602e836143ec565b9150613ddc82614df5565b604082019050919050565b6000613df4602f836143ec565b9150613dff82614e44565b604082019050919050565b6000613e17602d836143ec565b9150613e2282614e93565b604082019050919050565b6000613e3a6022836143ec565b9150613e4582614ee2565b604082019050919050565b604082016000820151613e666000850182613994565b506020820151613e796020850182613e9d565b50505050565b613e888161461d565b82525050565b613e978161461d565b82525050565b613ea681614627565b82525050565b613eb58161463b565b82525050565b6000613ec78285613a91565b9150613ed38284613a91565b91508190509392505050565b6000602082019050613ef460008301846139a3565b92915050565b6000608082019050613f0f60008301876139a3565b613f1c60208301866139a3565b613f296040830185613e8e565b8181036060830152613f3b8184613a1f565b905095945050505050565b60006020820190508181036000830152613f6081846139b2565b905092915050565b6000602082019050613f7d6000830184613a10565b92915050565b60006020820190508181036000830152613f9d8184613a58565b905092915050565b60006020820190508181036000830152613fbe81613ac2565b9050919050565b60006020820190508181036000830152613fde81613ae5565b9050919050565b60006020820190508181036000830152613ffe81613b08565b9050919050565b6000602082019050818103600083015261401e81613b2b565b9050919050565b6000602082019050818103600083015261403e81613b4e565b9050919050565b6000602082019050818103600083015261405e81613b71565b9050919050565b6000602082019050818103600083015261407e81613b94565b9050919050565b6000602082019050818103600083015261409e81613bb7565b9050919050565b600060208201905081810360008301526140be81613bda565b9050919050565b600060208201905081810360008301526140de81613bfd565b9050919050565b600060208201905081810360008301526140fe81613c20565b9050919050565b6000602082019050818103600083015261411e81613c43565b9050919050565b6000602082019050818103600083015261413e81613c66565b9050919050565b6000602082019050818103600083015261415e81613c89565b9050919050565b6000602082019050818103600083015261417e81613cac565b9050919050565b6000602082019050818103600083015261419e81613ccf565b9050919050565b600060208201905081810360008301526141be81613cf2565b9050919050565b600060208201905081810360008301526141de81613d15565b9050919050565b600060208201905081810360008301526141fe81613d38565b9050919050565b6000602082019050818103600083015261421e81613d5b565b9050919050565b6000602082019050818103600083015261423e81613d7e565b9050919050565b6000602082019050818103600083015261425e81613da1565b9050919050565b6000602082019050818103600083015261427e81613dc4565b9050919050565b6000602082019050818103600083015261429e81613de7565b9050919050565b600060208201905081810360008301526142be81613e0a565b9050919050565b600060208201905081810360008301526142de81613e2d565b9050919050565b60006040820190506142fa6000830184613e50565b92915050565b60006020820190506143156000830184613e8e565b92915050565b60006020820190506143306000830184613eac565b92915050565b6000614340614351565b905061434c82826146bc565b919050565b6000604051905090565b600067ffffffffffffffff82111561437657614375614823565b5b61437f82614870565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614413826145e1565b915061441e836145e1565b9250826fffffffffffffffffffffffffffffffff0382111561444357614442614767565b5b828201905092915050565b60006144598261461d565b91506144648361461d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561449957614498614767565b5b828201905092915050565b60006144af8261461d565b91506144ba8361461d565b9250826144ca576144c9614796565b5b828204905092915050565b60006144e08261461d565b91506144eb8361461d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561452457614523614767565b5b828202905092915050565b600061453a826145e1565b9150614545836145e1565b92508282101561455857614557614767565b5b828203905092915050565b600061456e8261461d565b91506145798361461d565b92508282101561458c5761458b614767565b5b828203905092915050565b60006145a2826145fd565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561467557808201518184015260208101905061465a565b83811115614684576000848401525b50505050565b600060028204905060018216806146a257607f821691505b602082108114156146b6576146b56147c5565b5b50919050565b6146c582614870565b810181811067ffffffffffffffff821117156146e4576146e3614823565b5b80604052505050565b60006146f88261461d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561472b5761472a614767565b5b600182019050919050565b60006147418261461d565b915061474c8361461d565b92508261475c5761475b614796565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d6178206d696e74206d757374206265206174206c6561737420310000000000600082015250565b7f53616c6520706175736564000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f74206d696e74206f76657220737570706c79206361700000000000600082015250565b7f4d757374206d696e74206174206c65617374203120746f6b656e000000000000600082015250565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f4d757374206d696e74206174206c65617374203120746f6b656e2e0000000000600082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f43616e6e6f74206d696e74206f76657220737570706c7920636170206f66203160008201527f3030303000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f74206d696e74206d6f7265207468616e206d6178206d696e74207060008201527f6572207472616e73616374696f6e000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b614f3a81614597565b8114614f4557600080fd5b50565b614f51816145a9565b8114614f5c57600080fd5b50565b614f68816145b5565b8114614f7357600080fd5b50565b614f7f8161461d565b8114614f8a57600080fd5b5056fea2646970667358221220c41da0c84a14f83c8a093877c6fb0feb848fb77895c22ab209f8c14a6414cd1964736f6c63430008070033
Deployed Bytecode Sourcemap
47088:1820:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28929:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30681:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48487:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32746:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34161:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33724:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47184:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28827:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35011:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27261:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29873:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48360:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47222:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44307:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44727:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35216:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47760:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27227:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48240:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29405:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46158:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46778:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32569:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31107:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25502:103;;;;;;;;;;;;;:::i;:::-;;47269:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48754:146;;;;;;;;;;;;;:::i;:::-;;24853:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46884:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32901:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47302:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46340:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34429:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35436:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33062:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29025:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44347:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46680:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40044:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47408:344;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34766:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25758:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48569:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28929:90;28976:7;28999:14;:12;:14::i;:::-;28992:21;;28929:90;:::o;30681:370::-;30808:4;30853:25;30838:40;;;:11;:40;;;;:99;;;;30904:33;30889:48;;;:11;:48;;;;30838:99;:160;;;;30963:35;30948:50;;;:11;:50;;;;30838:160;:207;;;;31009:36;31033:11;31009:23;:36::i;:::-;30838:207;30824:221;;30681:370;;;:::o;48487:74::-;25084:12;:10;:12::i;:::-;25073:23;;:7;:5;:7::i;:::-;:23;;;25065:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48550:3:::1;48540:7;;:13;;;;;;;;;;;;;;;;;;48487:74:::0;:::o;32746:94::-;32800:13;32829:5;32822:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32746:94;:::o;34161:204::-;34229:7;34253:16;34261:7;34253;:16::i;:::-;34245:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;34335:15;:24;34351:7;34335:24;;;;;;;;;;;;;;;;;;;;;34328:31;;34161:204;;;:::o;33724:379::-;33793:13;33809:24;33825:7;33809:15;:24::i;:::-;33793:40;;33854:5;33848:11;;:2;:11;;;;33840:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33939:5;33923:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;33948:37;33965:5;33972:12;:10;:12::i;:::-;33948:16;:37::i;:::-;33923:62;33907:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;34069:28;34078:2;34082:7;34091:5;34069:8;:28::i;:::-;33786:317;33724:379;;:::o;47184:26::-;;;;;;;;;;;;;:::o;28827:96::-;28880:7;28903:14;:12;:14::i;:::-;28896:21;;28827:96;:::o;35011:142::-;35119:28;35129:4;35135:2;35139:7;35119:9;:28::i;:::-;35011:142;;;:::o;27261:27::-;;;;:::o;29873:744::-;29982:7;30017:16;30027:5;30017:9;:16::i;:::-;30009:5;:24;30001:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;30079:22;30104:13;:11;:13::i;:::-;30079:38;;30124:19;30154:25;30204:9;30199:350;30223:14;30219:1;:18;30199:350;;;30253:31;30287:11;:14;30299:1;30287:14;;;;;;;;;;;30253:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30340:1;30314:28;;:9;:14;;;:28;;;30310:89;;30375:9;:14;;;30355:34;;30310:89;30432:5;30411:26;;:17;:26;;;30407:135;;;30469:5;30454:11;:20;30450:59;;;30496:1;30489:8;;;;;;;;;30450:59;30519:13;;;;;:::i;:::-;;;;30407:135;30244:305;30239:3;;;;;:::i;:::-;;;;30199:350;;;;30555:56;;;;;;;;;;:::i;:::-;;;;;;;;29873:744;;;;;:::o;48360:119::-;25084:12;:10;:12::i;:::-;25073:23;;:7;:5;:7::i;:::-;:23;;;25065:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48466:5:::1;48443:9;:22;48453:11;48443:22;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;48360:119:::0;:::o;47222:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;44307:33::-;;;;;;;;;;;;;:::o;44727:266::-;25084:12;:10;:12::i;:::-;25073:23;;:7;:5;:7::i;:::-;:23;;;25065:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44820:1:::1;44813:4;:8;44805:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;44900:14;;44892:4;44873:16;:14;:16::i;:::-;:23;;;;:::i;:::-;:41;;44865:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;44958:26;44968:3;44973:4;44979;44958:9;:26::i;:::-;44727:266:::0;;:::o;35216:157::-;35328:39;35345:4;35351:2;35355:7;35328:39;;;;;;;;;;;;:16;:39::i;:::-;35216:157;;;:::o;47760:342::-;47819:16;47848:18;47869:17;47879:6;47869:9;:17::i;:::-;47848:38;;47899:25;47941:10;47927:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47899:53;;47967:9;47963:106;47982:10;47978:1;:14;47963:106;;;48027:30;48047:6;48055:1;48027:19;:30::i;:::-;48013:8;48022:1;48013:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;47994:3;;;;;:::i;:::-;;;;47963:106;;;;48086:8;48079:15;;;;47760:342;;;:::o;27227:29::-;;;;:::o;48240:112::-;25084:12;:10;:12::i;:::-;25073:23;;:7;:5;:7::i;:::-;:23;;;25065:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48340:4:::1;48317:9;:22;48327:11;48317:22;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;48240:112:::0;:::o;29405:177::-;29472:7;29504:13;:11;:13::i;:::-;29496:5;:21;29488:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;29571:5;29564:12;;29405:177;;;:::o;46158:173::-;25084:12;:10;:12::i;:::-;25073:23;;:7;:5;:7::i;:::-;:23;;;25065:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46251:1:::1;46236:11;:16;;46228:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;46311:11;46296:12;:26;;;;46158:173:::0;:::o;46778:100::-;25084:12;:10;:12::i;:::-;25073:23;;:7;:5;:7::i;:::-;:23;;;25065:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46865:7:::1;;46849:13;:23;;;;;;;:::i;:::-;;46778:100:::0;;:::o;32569:118::-;32633:7;32656:20;32668:7;32656:11;:20::i;:::-;:25;;;32649:32;;32569:118;;;:::o;31107:211::-;31171:7;31212:1;31195:19;;:5;:19;;;;31187:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;31284:12;:19;31297:5;31284:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;31276:36;;31269:43;;31107:211;;;:::o;25502:103::-;25084:12;:10;:12::i;:::-;25073:23;;:7;:5;:7::i;:::-;:23;;;25065:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25567:30:::1;25594:1;25567:18;:30::i;:::-;25502:103::o:0;47269:25::-;;;;:::o;48754:146::-;25084:12;:10;:12::i;:::-;25073:23;;:7;:5;:7::i;:::-;:23;;;25065:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48805:15:::1;48823:21;48805:39;;48863:10;48855:28;;:37;48884:7;48855:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;48794:106;48754:146::o:0;24853:87::-;24899:7;24926:6;;;;;;;;;;;24919:13;;24853:87;:::o;46884:128::-;46949:21;;:::i;:::-;46986:20;46998:7;46986:11;:20::i;:::-;46979:27;;46884:128;;;:::o;32901:98::-;32957:13;32986:7;32979:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32901:98;:::o;47302:35::-;;;;:::o;46340:209::-;25084:12;:10;:12::i;:::-;25073:23;;:7;:5;:7::i;:::-;:23;;;25065:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46525:15:::1;46508:14;:32;;;;46340:209:::0;:::o;34429:274::-;34532:12;:10;:12::i;:::-;34520:24;;:8;:24;;;;34512:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;34629:8;34584:18;:32;34603:12;:10;:12::i;:::-;34584:32;;;;;;;;;;;;;;;:42;34617:8;34584:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34678:8;34649:48;;34664:12;:10;:12::i;:::-;34649:48;;;34688:8;34649:48;;;;;;:::i;:::-;;;;;;;;34429:274;;:::o;35436:311::-;35573:28;35583:4;35589:2;35593:7;35573:9;:28::i;:::-;35624:48;35647:4;35653:2;35657:7;35666:5;35624:22;:48::i;:::-;35608:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;35436:311;;;;:::o;33062:288::-;33160:13;33185:21;33209:10;:8;:10::i;:::-;33185:34;;33264:1;33246:7;33240:21;:25;:104;;;;;;;;;;;;;;;;;33301:7;33310:18;:7;:16;:18::i;:::-;33284:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33240:104;33226:118;;;33062:288;;;:::o;29025:96::-;29072:7;29114:1;29097:14;:12;:14::i;:::-;:18;;;;:::i;:::-;29090:25;;29025:96;:::o;44347:80::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46680:92::-;46724:13;46753;46746:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46680:92;:::o;40044:43::-;;;;:::o;47408:344::-;47474:7;;;;;;;;;;;47473:8;47464:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;47512:9;:21;47522:10;47512:21;;;;;;;;;;;;;;;;;;;;;;;;;47509:195;;;47590:3;47569:20;;:24;;;;:::i;:::-;47557:9;:37;47549:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;47509:195;;;47670:3;47659:10;;:14;;;;:::i;:::-;47647:9;:27;47639:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;47509:195;47714:30;47729:10;47740:3;47714:14;:30::i;:::-;47408:344;:::o;34766:186::-;34888:4;34911:18;:25;34930:5;34911:25;;;;;;;;;;;;;;;:35;34937:8;34911:35;;;;;;;;;;;;;;;;;;;;;;;;;34904:42;;34766:186;;;;:::o;25758:201::-;25084:12;:10;:12::i;:::-;25073:23;;:7;:5;:7::i;:::-;:23;;;25065:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25867:1:::1;25847:22;;:8;:22;;;;25839:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25923:28;25942:8;25923:18;:28::i;:::-;25758:201:::0;:::o;48569:177::-;25084:12;:10;:12::i;:::-;25073:23;;:7;:5;:7::i;:::-;:23;;;25065:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48675:10:::1;48662;:23;;;;48719:19;48696:20;:42;;;;48569:177:::0;;:::o;29204:132::-;29251:7;29308:15;:13;:15::i;:::-;29293:12;;:30;29286:37;;29204:132;:::o;11238:157::-;11323:4;11362:25;11347:40;;;:11;:40;;;;11340:47;;11238:157;;;:::o;23579:98::-;23632:7;23659:10;23652:17;;23579:98;:::o;35982:135::-;36039:4;36078:7;36059:15;:13;:15::i;:::-;:26;;:52;;;;;36099:12;;36089:7;:22;36059:52;36052:59;;35982:135;;;:::o;39866:172::-;39990:2;39963:15;:24;39979:7;39963:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40024:7;40020:2;40004:28;;40013:5;40004:28;;;;;;;;;;;;39866:172;;;:::o;38235:1529::-;38332:35;38370:20;38382:7;38370:11;:20::i;:::-;38332:58;;38399:22;38441:13;:18;;;38425:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;38494:12;:10;:12::i;:::-;38470:36;;:20;38482:7;38470:11;:20::i;:::-;:36;;;38425:81;:142;;;;38517:50;38534:13;:18;;;38554:12;:10;:12::i;:::-;38517:16;:50::i;:::-;38425:142;38399:169;;38593:17;38577:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;38725:4;38703:26;;:13;:18;;;:26;;;38687:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;38814:1;38800:16;;:2;:16;;;;38792:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38867:43;38889:4;38895:2;38899:7;38908:1;38867:21;:43::i;:::-;38967:49;38984:1;38988:7;38997:13;:18;;;38967:8;:49::i;:::-;39055:1;39025:12;:18;39038:4;39025:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;39091:1;39063:12;:16;39076:2;39063:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;39122:43;;;;;;;;39137:2;39122:43;;;;;;39148:15;39122:43;;;;;39099:11;:20;39111:7;39099:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39393:19;39425:1;39415:7;:11;;;;:::i;:::-;39393:33;;39478:1;39437:43;;:11;:24;39449:11;39437:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;39433:236;;;39495:20;39503:11;39495:7;:20::i;:::-;39491:171;;;39555:97;;;;;;;;39582:13;:18;;;39555:97;;;;;;39613:13;:28;;;39555:97;;;;;39528:11;:24;39540:11;39528:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39491:171;39433:236;39701:7;39697:2;39682:27;;39691:4;39682:27;;;;;;;;;;;;39716:42;39737:4;39743:2;39747:7;39756:1;39716:20;:42::i;:::-;38325:1439;;;38235:1529;;;:::o;36123:129::-;36206:40;36216:2;36220:8;36230:11;36206:40;;;;;;;;;;;;:9;:40::i;:::-;36123:129;;;:::o;31570:945::-;31646:21;;:::i;:::-;31679:12;31694:7;31679:22;;31754:4;31735:15;:13;:15::i;:::-;:23;;:46;;;;;31769:12;;31762:4;:19;31735:46;31731:706;;;31798:31;31832:11;:17;31844:4;31832:17;;;;;;;;;;;31798:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31894:1;31868:28;;:9;:14;;;:28;;;31864:85;;31924:9;31917:16;;;;;;31864:85;32213:213;32220:4;32213:213;;;32245:6;;;;;;;;32282:11;:17;32294:4;32282:17;;;;;;;;;;;32270:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32348:1;32322:28;;:9;:14;;;:28;;;32318:93;;32382:9;32375:16;;;;;;32318:93;32213:213;;;31783:654;31731:706;32452:57;;;;;;;;;;:::i;:::-;;;;;;;;31570:945;;;;:::o;26117:191::-;26191:16;26210:6;;;;;;;;;;;26191:25;;26236:8;26227:6;;:17;;;;;;;;;;;;;;;;;;26291:8;26260:40;;26281:8;26260:40;;;;;;;;;;;;26180:128;26117:191;:::o;41655:690::-;41792:4;41809:15;:2;:13;;;:15::i;:::-;41805:535;;;41864:2;41848:36;;;41885:12;:10;:12::i;:::-;41899:4;41905:7;41914:5;41848:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41835:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42096:1;42079:6;:13;:18;42075:215;;;42112:61;;;;;;;;;;:::i;:::-;;;;;;;;42075:215;42258:6;42252:13;42243:6;42239:2;42235:15;42228:38;41835:464;41980:45;;;41970:55;;;:6;:55;;;;41963:62;;;;;41805:535;42328:4;42321:11;;41655:690;;;;;;;:::o;48118:114::-;48178:13;48211;48204:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48118:114;:::o;18410:723::-;18466:13;18696:1;18687:5;:10;18683:53;;;18714:10;;;;;;;;;;;;;;;;;;;;;18683:53;18746:12;18761:5;18746:20;;18777:14;18802:78;18817:1;18809:4;:9;18802:78;;18835:8;;;;;:::i;:::-;;;;18866:2;18858:10;;;;;:::i;:::-;;;18802:78;;;18890:19;18922:6;18912:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18890:39;;18940:154;18956:1;18947:5;:10;18940:154;;18984:1;18974:11;;;;;:::i;:::-;;;19051:2;19043:5;:10;;;;:::i;:::-;19030:2;:24;;;;:::i;:::-;19017:39;;19000:6;19007;19000:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;19080:2;19071:11;;;;;:::i;:::-;;;18940:154;;;19118:6;19104:21;;;;;18410:723;;;;:::o;45615:371::-;45708:1;45697:7;:12;;45689:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;45770:12;;45759:7;:23;;45751:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;45882:14;;45871:7;45852:16;:14;:16::i;:::-;:26;;;;:::i;:::-;:44;;45844:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;45948:30;45958:3;45963:7;45972:5;45948:9;:30::i;:::-;45615:371;;:::o;28673:86::-;28729:7;28752:1;28745:8;;28673:86;:::o;42789:141::-;;;;;:::o;43308:140::-;;;;;:::o;36581:1434::-;36709:20;36732:12;;36709:35;;36773:1;36759:16;;:2;:16;;;;36751:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;36950:21;36958:12;36950:7;:21::i;:::-;36949:22;36941:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37106:5;37091:20;;:11;:20;;;37087:116;;;37144:12;;37132:8;:24;;37124:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;37087:116;37211:61;37241:1;37245:2;37249:12;37263:8;37211:21;:61::i;:::-;37281:30;37314:12;:16;37327:2;37314:16;;;;;;;;;;;;;;;37281:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37356:139;;;;;;;;37406:8;37376:11;:19;;;:39;;;;:::i;:::-;37356:139;;;;;;37452:11;:35;;37478:8;37452:35;;;37466:1;37452:35;37424:11;:24;;;:64;;;;:::i;:::-;37356:139;;;;;37337:12;:16;37350:2;37337:16;;;;;;;;;;;;;;;:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37530:43;;;;;;;;37545:2;37530:43;;;;;;37556:15;37530:43;;;;;37502:11;:25;37514:12;37502:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37582:20;37605:12;37582:35;;37631:9;37626:281;37650:8;37646:1;:12;37626:281;;;37704:12;37700:2;37679:38;;37696:1;37679:38;;;;;;;;;;;;37744:59;37775:1;37779:2;37783:12;37797:5;37744:22;:59::i;:::-;37726:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;37885:14;;;;;:::i;:::-;;;;37660:3;;;;;:::i;:::-;;;;37626:281;;;;37930:12;37915;:27;;;;37949:60;37978:1;37982:2;37986:12;38000:8;37949:20;:60::i;:::-;36702:1313;;;36581:1434;;;;:::o;1227:326::-;1287:4;1544:1;1522:7;:19;;;:23;1515:30;;1227:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1368:553::-;1426:8;1436:6;1486:3;1479:4;1471:6;1467:17;1463:27;1453:122;;1494:79;;:::i;:::-;1453:122;1607:6;1594:20;1584:30;;1637:18;1629:6;1626:30;1623:117;;;1659:79;;:::i;:::-;1623:117;1773:4;1765:6;1761:17;1749:29;;1827:3;1819:4;1811:6;1807:17;1797:8;1793:32;1790:41;1787:128;;;1834:79;;:::i;:::-;1787:128;1368:553;;;;;:::o;1927:139::-;1973:5;2011:6;1998:20;1989:29;;2027:33;2054:5;2027:33;:::i;:::-;1927:139;;;;:::o;2072:329::-;2131:6;2180:2;2168:9;2159:7;2155:23;2151:32;2148:119;;;2186:79;;:::i;:::-;2148:119;2306:1;2331:53;2376:7;2367:6;2356:9;2352:22;2331:53;:::i;:::-;2321:63;;2277:117;2072:329;;;;:::o;2407:474::-;2475:6;2483;2532:2;2520:9;2511:7;2507:23;2503:32;2500:119;;;2538:79;;:::i;:::-;2500:119;2658:1;2683:53;2728:7;2719:6;2708:9;2704:22;2683:53;:::i;:::-;2673:63;;2629:117;2785:2;2811:53;2856:7;2847:6;2836:9;2832:22;2811:53;:::i;:::-;2801:63;;2756:118;2407:474;;;;;:::o;2887:619::-;2964:6;2972;2980;3029:2;3017:9;3008:7;3004:23;3000:32;2997:119;;;3035:79;;:::i;:::-;2997:119;3155:1;3180:53;3225:7;3216:6;3205:9;3201:22;3180:53;:::i;:::-;3170:63;;3126:117;3282:2;3308:53;3353:7;3344:6;3333:9;3329:22;3308:53;:::i;:::-;3298:63;;3253:118;3410:2;3436:53;3481:7;3472:6;3461:9;3457:22;3436:53;:::i;:::-;3426:63;;3381:118;2887:619;;;;;:::o;3512:943::-;3607:6;3615;3623;3631;3680:3;3668:9;3659:7;3655:23;3651:33;3648:120;;;3687:79;;:::i;:::-;3648:120;3807:1;3832:53;3877:7;3868:6;3857:9;3853:22;3832:53;:::i;:::-;3822:63;;3778:117;3934:2;3960:53;4005:7;3996:6;3985:9;3981:22;3960:53;:::i;:::-;3950:63;;3905:118;4062:2;4088:53;4133:7;4124:6;4113:9;4109:22;4088:53;:::i;:::-;4078:63;;4033:118;4218:2;4207:9;4203:18;4190:32;4249:18;4241:6;4238:30;4235:117;;;4271:79;;:::i;:::-;4235:117;4376:62;4430:7;4421:6;4410:9;4406:22;4376:62;:::i;:::-;4366:72;;4161:287;3512:943;;;;;;;:::o;4461:468::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:50;4904:7;4895:6;4884:9;4880:22;4862:50;:::i;:::-;4852:60;;4807:115;4461:468;;;;;:::o;4935:474::-;5003:6;5011;5060:2;5048:9;5039:7;5035:23;5031:32;5028:119;;;5066:79;;:::i;:::-;5028:119;5186:1;5211:53;5256:7;5247:6;5236:9;5232:22;5211:53;:::i;:::-;5201:63;;5157:117;5313:2;5339:53;5384:7;5375:6;5364:9;5360:22;5339:53;:::i;:::-;5329:63;;5284:118;4935:474;;;;;:::o;5415:323::-;5471:6;5520:2;5508:9;5499:7;5495:23;5491:32;5488:119;;;5526:79;;:::i;:::-;5488:119;5646:1;5671:50;5713:7;5704:6;5693:9;5689:22;5671:50;:::i;:::-;5661:60;;5617:114;5415:323;;;;:::o;5744:327::-;5802:6;5851:2;5839:9;5830:7;5826:23;5822:32;5819:119;;;5857:79;;:::i;:::-;5819:119;5977:1;6002:52;6046:7;6037:6;6026:9;6022:22;6002:52;:::i;:::-;5992:62;;5948:116;5744:327;;;;:::o;6077:349::-;6146:6;6195:2;6183:9;6174:7;6170:23;6166:32;6163:119;;;6201:79;;:::i;:::-;6163:119;6321:1;6346:63;6401:7;6392:6;6381:9;6377:22;6346:63;:::i;:::-;6336:73;;6292:127;6077:349;;;;:::o;6432:529::-;6503:6;6511;6560:2;6548:9;6539:7;6535:23;6531:32;6528:119;;;6566:79;;:::i;:::-;6528:119;6714:1;6703:9;6699:17;6686:31;6744:18;6736:6;6733:30;6730:117;;;6766:79;;:::i;:::-;6730:117;6879:65;6936:7;6927:6;6916:9;6912:22;6879:65;:::i;:::-;6861:83;;;;6657:297;6432:529;;;;;:::o;6967:329::-;7026:6;7075:2;7063:9;7054:7;7050:23;7046:32;7043:119;;;7081:79;;:::i;:::-;7043:119;7201:1;7226:53;7271:7;7262:6;7251:9;7247:22;7226:53;:::i;:::-;7216:63;;7172:117;6967:329;;;;:::o;7302:474::-;7370:6;7378;7427:2;7415:9;7406:7;7402:23;7398:32;7395:119;;;7433:79;;:::i;:::-;7395:119;7553:1;7578:53;7623:7;7614:6;7603:9;7599:22;7578:53;:::i;:::-;7568:63;;7524:117;7680:2;7706:53;7751:7;7742:6;7731:9;7727:22;7706:53;:::i;:::-;7696:63;;7651:118;7302:474;;;;;:::o;7782:179::-;7851:10;7872:46;7914:3;7906:6;7872:46;:::i;:::-;7950:4;7945:3;7941:14;7927:28;;7782:179;;;;:::o;7967:108::-;8044:24;8062:5;8044:24;:::i;:::-;8039:3;8032:37;7967:108;;:::o;8081:118::-;8168:24;8186:5;8168:24;:::i;:::-;8163:3;8156:37;8081:118;;:::o;8235:732::-;8354:3;8383:54;8431:5;8383:54;:::i;:::-;8453:86;8532:6;8527:3;8453:86;:::i;:::-;8446:93;;8563:56;8613:5;8563:56;:::i;:::-;8642:7;8673:1;8658:284;8683:6;8680:1;8677:13;8658:284;;;8759:6;8753:13;8786:63;8845:3;8830:13;8786:63;:::i;:::-;8779:70;;8872:60;8925:6;8872:60;:::i;:::-;8862:70;;8718:224;8705:1;8702;8698:9;8693:14;;8658:284;;;8662:14;8958:3;8951:10;;8359:608;;;8235:732;;;;:::o;8973:109::-;9054:21;9069:5;9054:21;:::i;:::-;9049:3;9042:34;8973:109;;:::o;9088:360::-;9174:3;9202:38;9234:5;9202:38;:::i;:::-;9256:70;9319:6;9314:3;9256:70;:::i;:::-;9249:77;;9335:52;9380:6;9375:3;9368:4;9361:5;9357:16;9335:52;:::i;:::-;9412:29;9434:6;9412:29;:::i;:::-;9407:3;9403:39;9396:46;;9178:270;9088:360;;;;:::o;9454:364::-;9542:3;9570:39;9603:5;9570:39;:::i;:::-;9625:71;9689:6;9684:3;9625:71;:::i;:::-;9618:78;;9705:52;9750:6;9745:3;9738:4;9731:5;9727:16;9705:52;:::i;:::-;9782:29;9804:6;9782:29;:::i;:::-;9777:3;9773:39;9766:46;;9546:272;9454:364;;;;:::o;9824:377::-;9930:3;9958:39;9991:5;9958:39;:::i;:::-;10013:89;10095:6;10090:3;10013:89;:::i;:::-;10006:96;;10111:52;10156:6;10151:3;10144:4;10137:5;10133:16;10111:52;:::i;:::-;10188:6;10183:3;10179:16;10172:23;;9934:267;9824:377;;;;:::o;10207:366::-;10349:3;10370:67;10434:2;10429:3;10370:67;:::i;:::-;10363:74;;10446:93;10535:3;10446:93;:::i;:::-;10564:2;10559:3;10555:12;10548:19;;10207:366;;;:::o;10579:::-;10721:3;10742:67;10806:2;10801:3;10742:67;:::i;:::-;10735:74;;10818:93;10907:3;10818:93;:::i;:::-;10936:2;10931:3;10927:12;10920:19;;10579:366;;;:::o;10951:::-;11093:3;11114:67;11178:2;11173:3;11114:67;:::i;:::-;11107:74;;11190:93;11279:3;11190:93;:::i;:::-;11308:2;11303:3;11299:12;11292:19;;10951:366;;;:::o;11323:::-;11465:3;11486:67;11550:2;11545:3;11486:67;:::i;:::-;11479:74;;11562:93;11651:3;11562:93;:::i;:::-;11680:2;11675:3;11671:12;11664:19;;11323:366;;;:::o;11695:::-;11837:3;11858:67;11922:2;11917:3;11858:67;:::i;:::-;11851:74;;11934:93;12023:3;11934:93;:::i;:::-;12052:2;12047:3;12043:12;12036:19;;11695:366;;;:::o;12067:::-;12209:3;12230:67;12294:2;12289:3;12230:67;:::i;:::-;12223:74;;12306:93;12395:3;12306:93;:::i;:::-;12424:2;12419:3;12415:12;12408:19;;12067:366;;;:::o;12439:::-;12581:3;12602:67;12666:2;12661:3;12602:67;:::i;:::-;12595:74;;12678:93;12767:3;12678:93;:::i;:::-;12796:2;12791:3;12787:12;12780:19;;12439:366;;;:::o;12811:::-;12953:3;12974:67;13038:2;13033:3;12974:67;:::i;:::-;12967:74;;13050:93;13139:3;13050:93;:::i;:::-;13168:2;13163:3;13159:12;13152:19;;12811:366;;;:::o;13183:::-;13325:3;13346:67;13410:2;13405:3;13346:67;:::i;:::-;13339:74;;13422:93;13511:3;13422:93;:::i;:::-;13540:2;13535:3;13531:12;13524:19;;13183:366;;;:::o;13555:::-;13697:3;13718:67;13782:2;13777:3;13718:67;:::i;:::-;13711:74;;13794:93;13883:3;13794:93;:::i;:::-;13912:2;13907:3;13903:12;13896:19;;13555:366;;;:::o;13927:::-;14069:3;14090:67;14154:2;14149:3;14090:67;:::i;:::-;14083:74;;14166:93;14255:3;14166:93;:::i;:::-;14284:2;14279:3;14275:12;14268:19;;13927:366;;;:::o;14299:::-;14441:3;14462:67;14526:2;14521:3;14462:67;:::i;:::-;14455:74;;14538:93;14627:3;14538:93;:::i;:::-;14656:2;14651:3;14647:12;14640:19;;14299:366;;;:::o;14671:::-;14813:3;14834:67;14898:2;14893:3;14834:67;:::i;:::-;14827:74;;14910:93;14999:3;14910:93;:::i;:::-;15028:2;15023:3;15019:12;15012:19;;14671:366;;;:::o;15043:::-;15185:3;15206:67;15270:2;15265:3;15206:67;:::i;:::-;15199:74;;15282:93;15371:3;15282:93;:::i;:::-;15400:2;15395:3;15391:12;15384:19;;15043:366;;;:::o;15415:::-;15557:3;15578:67;15642:2;15637:3;15578:67;:::i;:::-;15571:74;;15654:93;15743:3;15654:93;:::i;:::-;15772:2;15767:3;15763:12;15756:19;;15415:366;;;:::o;15787:::-;15929:3;15950:67;16014:2;16009:3;15950:67;:::i;:::-;15943:74;;16026:93;16115:3;16026:93;:::i;:::-;16144:2;16139:3;16135:12;16128:19;;15787:366;;;:::o;16159:::-;16301:3;16322:67;16386:2;16381:3;16322:67;:::i;:::-;16315:74;;16398:93;16487:3;16398:93;:::i;:::-;16516:2;16511:3;16507:12;16500:19;;16159:366;;;:::o;16531:::-;16673:3;16694:67;16758:2;16753:3;16694:67;:::i;:::-;16687:74;;16770:93;16859:3;16770:93;:::i;:::-;16888:2;16883:3;16879:12;16872:19;;16531:366;;;:::o;16903:::-;17045:3;17066:67;17130:2;17125:3;17066:67;:::i;:::-;17059:74;;17142:93;17231:3;17142:93;:::i;:::-;17260:2;17255:3;17251:12;17244:19;;16903:366;;;:::o;17275:::-;17417:3;17438:67;17502:2;17497:3;17438:67;:::i;:::-;17431:74;;17514:93;17603:3;17514:93;:::i;:::-;17632:2;17627:3;17623:12;17616:19;;17275:366;;;:::o;17647:::-;17789:3;17810:67;17874:2;17869:3;17810:67;:::i;:::-;17803:74;;17886:93;17975:3;17886:93;:::i;:::-;18004:2;17999:3;17995:12;17988:19;;17647:366;;;:::o;18019:::-;18161:3;18182:67;18246:2;18241:3;18182:67;:::i;:::-;18175:74;;18258:93;18347:3;18258:93;:::i;:::-;18376:2;18371:3;18367:12;18360:19;;18019:366;;;:::o;18391:::-;18533:3;18554:67;18618:2;18613:3;18554:67;:::i;:::-;18547:74;;18630:93;18719:3;18630:93;:::i;:::-;18748:2;18743:3;18739:12;18732:19;;18391:366;;;:::o;18763:::-;18905:3;18926:67;18990:2;18985:3;18926:67;:::i;:::-;18919:74;;19002:93;19091:3;19002:93;:::i;:::-;19120:2;19115:3;19111:12;19104:19;;18763:366;;;:::o;19135:::-;19277:3;19298:67;19362:2;19357:3;19298:67;:::i;:::-;19291:74;;19374:93;19463:3;19374:93;:::i;:::-;19492:2;19487:3;19483:12;19476:19;;19135:366;;;:::o;19507:::-;19649:3;19670:67;19734:2;19729:3;19670:67;:::i;:::-;19663:74;;19746:93;19835:3;19746:93;:::i;:::-;19864:2;19859:3;19855:12;19848:19;;19507:366;;;:::o;19949:527::-;20108:4;20103:3;20099:14;20195:4;20188:5;20184:16;20178:23;20214:63;20271:4;20266:3;20262:14;20248:12;20214:63;:::i;:::-;20123:164;20379:4;20372:5;20368:16;20362:23;20398:61;20453:4;20448:3;20444:14;20430:12;20398:61;:::i;:::-;20297:172;20077:399;19949:527;;:::o;20482:108::-;20559:24;20577:5;20559:24;:::i;:::-;20554:3;20547:37;20482:108;;:::o;20596:118::-;20683:24;20701:5;20683:24;:::i;:::-;20678:3;20671:37;20596:118;;:::o;20720:105::-;20795:23;20812:5;20795:23;:::i;:::-;20790:3;20783:36;20720:105;;:::o;20831:112::-;20914:22;20930:5;20914:22;:::i;:::-;20909:3;20902:35;20831:112;;:::o;20949:435::-;21129:3;21151:95;21242:3;21233:6;21151:95;:::i;:::-;21144:102;;21263:95;21354:3;21345:6;21263:95;:::i;:::-;21256:102;;21375:3;21368:10;;20949:435;;;;;:::o;21390:222::-;21483:4;21521:2;21510:9;21506:18;21498:26;;21534:71;21602:1;21591:9;21587:17;21578:6;21534:71;:::i;:::-;21390:222;;;;:::o;21618:640::-;21813:4;21851:3;21840:9;21836:19;21828:27;;21865:71;21933:1;21922:9;21918:17;21909:6;21865:71;:::i;:::-;21946:72;22014:2;22003:9;21999:18;21990:6;21946:72;:::i;:::-;22028;22096:2;22085:9;22081:18;22072:6;22028:72;:::i;:::-;22147:9;22141:4;22137:20;22132:2;22121:9;22117:18;22110:48;22175:76;22246:4;22237:6;22175:76;:::i;:::-;22167:84;;21618:640;;;;;;;:::o;22264:373::-;22407:4;22445:2;22434:9;22430:18;22422:26;;22494:9;22488:4;22484:20;22480:1;22469:9;22465:17;22458:47;22522:108;22625:4;22616:6;22522:108;:::i;:::-;22514:116;;22264:373;;;;:::o;22643:210::-;22730:4;22768:2;22757:9;22753:18;22745:26;;22781:65;22843:1;22832:9;22828:17;22819:6;22781:65;:::i;:::-;22643:210;;;;:::o;22859:313::-;22972:4;23010:2;22999:9;22995:18;22987:26;;23059:9;23053:4;23049:20;23045:1;23034:9;23030:17;23023:47;23087:78;23160:4;23151:6;23087:78;:::i;:::-;23079:86;;22859:313;;;;:::o;23178:419::-;23344:4;23382:2;23371:9;23367:18;23359:26;;23431:9;23425:4;23421:20;23417:1;23406:9;23402:17;23395:47;23459:131;23585:4;23459:131;:::i;:::-;23451:139;;23178:419;;;:::o;23603:::-;23769:4;23807:2;23796:9;23792:18;23784:26;;23856:9;23850:4;23846:20;23842:1;23831:9;23827:17;23820:47;23884:131;24010:4;23884:131;:::i;:::-;23876:139;;23603:419;;;:::o;24028:::-;24194:4;24232:2;24221:9;24217:18;24209:26;;24281:9;24275:4;24271:20;24267:1;24256:9;24252:17;24245:47;24309:131;24435:4;24309:131;:::i;:::-;24301:139;;24028:419;;;:::o;24453:::-;24619:4;24657:2;24646:9;24642:18;24634:26;;24706:9;24700:4;24696:20;24692:1;24681:9;24677:17;24670:47;24734:131;24860:4;24734:131;:::i;:::-;24726:139;;24453:419;;;:::o;24878:::-;25044:4;25082:2;25071:9;25067:18;25059:26;;25131:9;25125:4;25121:20;25117:1;25106:9;25102:17;25095:47;25159:131;25285:4;25159:131;:::i;:::-;25151:139;;24878:419;;;:::o;25303:::-;25469:4;25507:2;25496:9;25492:18;25484:26;;25556:9;25550:4;25546:20;25542:1;25531:9;25527:17;25520:47;25584:131;25710:4;25584:131;:::i;:::-;25576:139;;25303:419;;;:::o;25728:::-;25894:4;25932:2;25921:9;25917:18;25909:26;;25981:9;25975:4;25971:20;25967:1;25956:9;25952:17;25945:47;26009:131;26135:4;26009:131;:::i;:::-;26001:139;;25728:419;;;:::o;26153:::-;26319:4;26357:2;26346:9;26342:18;26334:26;;26406:9;26400:4;26396:20;26392:1;26381:9;26377:17;26370:47;26434:131;26560:4;26434:131;:::i;:::-;26426:139;;26153:419;;;:::o;26578:::-;26744:4;26782:2;26771:9;26767:18;26759:26;;26831:9;26825:4;26821:20;26817:1;26806:9;26802:17;26795:47;26859:131;26985:4;26859:131;:::i;:::-;26851:139;;26578:419;;;:::o;27003:::-;27169:4;27207:2;27196:9;27192:18;27184:26;;27256:9;27250:4;27246:20;27242:1;27231:9;27227:17;27220:47;27284:131;27410:4;27284:131;:::i;:::-;27276:139;;27003:419;;;:::o;27428:::-;27594:4;27632:2;27621:9;27617:18;27609:26;;27681:9;27675:4;27671:20;27667:1;27656:9;27652:17;27645:47;27709:131;27835:4;27709:131;:::i;:::-;27701:139;;27428:419;;;:::o;27853:::-;28019:4;28057:2;28046:9;28042:18;28034:26;;28106:9;28100:4;28096:20;28092:1;28081:9;28077:17;28070:47;28134:131;28260:4;28134:131;:::i;:::-;28126:139;;27853:419;;;:::o;28278:::-;28444:4;28482:2;28471:9;28467:18;28459:26;;28531:9;28525:4;28521:20;28517:1;28506:9;28502:17;28495:47;28559:131;28685:4;28559:131;:::i;:::-;28551:139;;28278:419;;;:::o;28703:::-;28869:4;28907:2;28896:9;28892:18;28884:26;;28956:9;28950:4;28946:20;28942:1;28931:9;28927:17;28920:47;28984:131;29110:4;28984:131;:::i;:::-;28976:139;;28703:419;;;:::o;29128:::-;29294:4;29332:2;29321:9;29317:18;29309:26;;29381:9;29375:4;29371:20;29367:1;29356:9;29352:17;29345:47;29409:131;29535:4;29409:131;:::i;:::-;29401:139;;29128:419;;;:::o;29553:::-;29719:4;29757:2;29746:9;29742:18;29734:26;;29806:9;29800:4;29796:20;29792:1;29781:9;29777:17;29770:47;29834:131;29960:4;29834:131;:::i;:::-;29826:139;;29553:419;;;:::o;29978:::-;30144:4;30182:2;30171:9;30167:18;30159:26;;30231:9;30225:4;30221:20;30217:1;30206:9;30202:17;30195:47;30259:131;30385:4;30259:131;:::i;:::-;30251:139;;29978:419;;;:::o;30403:::-;30569:4;30607:2;30596:9;30592:18;30584:26;;30656:9;30650:4;30646:20;30642:1;30631:9;30627:17;30620:47;30684:131;30810:4;30684:131;:::i;:::-;30676:139;;30403:419;;;:::o;30828:::-;30994:4;31032:2;31021:9;31017:18;31009:26;;31081:9;31075:4;31071:20;31067:1;31056:9;31052:17;31045:47;31109:131;31235:4;31109:131;:::i;:::-;31101:139;;30828:419;;;:::o;31253:::-;31419:4;31457:2;31446:9;31442:18;31434:26;;31506:9;31500:4;31496:20;31492:1;31481:9;31477:17;31470:47;31534:131;31660:4;31534:131;:::i;:::-;31526:139;;31253:419;;;:::o;31678:::-;31844:4;31882:2;31871:9;31867:18;31859:26;;31931:9;31925:4;31921:20;31917:1;31906:9;31902:17;31895:47;31959:131;32085:4;31959:131;:::i;:::-;31951:139;;31678:419;;;:::o;32103:::-;32269:4;32307:2;32296:9;32292:18;32284:26;;32356:9;32350:4;32346:20;32342:1;32331:9;32327:17;32320:47;32384:131;32510:4;32384:131;:::i;:::-;32376:139;;32103:419;;;:::o;32528:::-;32694:4;32732:2;32721:9;32717:18;32709:26;;32781:9;32775:4;32771:20;32767:1;32756:9;32752:17;32745:47;32809:131;32935:4;32809:131;:::i;:::-;32801:139;;32528:419;;;:::o;32953:::-;33119:4;33157:2;33146:9;33142:18;33134:26;;33206:9;33200:4;33196:20;33192:1;33181:9;33177:17;33170:47;33234:131;33360:4;33234:131;:::i;:::-;33226:139;;32953:419;;;:::o;33378:::-;33544:4;33582:2;33571:9;33567:18;33559:26;;33631:9;33625:4;33621:20;33617:1;33606:9;33602:17;33595:47;33659:131;33785:4;33659:131;:::i;:::-;33651:139;;33378:419;;;:::o;33803:::-;33969:4;34007:2;33996:9;33992:18;33984:26;;34056:9;34050:4;34046:20;34042:1;34031:9;34027:17;34020:47;34084:131;34210:4;34084:131;:::i;:::-;34076:139;;33803:419;;;:::o;34228:346::-;34383:4;34421:2;34410:9;34406:18;34398:26;;34434:133;34564:1;34553:9;34549:17;34540:6;34434:133;:::i;:::-;34228:346;;;;:::o;34580:222::-;34673:4;34711:2;34700:9;34696:18;34688:26;;34724:71;34792:1;34781:9;34777:17;34768:6;34724:71;:::i;:::-;34580:222;;;;:::o;34808:214::-;34897:4;34935:2;34924:9;34920:18;34912:26;;34948:67;35012:1;35001:9;34997:17;34988:6;34948:67;:::i;:::-;34808:214;;;;:::o;35028:129::-;35062:6;35089:20;;:::i;:::-;35079:30;;35118:33;35146:4;35138:6;35118:33;:::i;:::-;35028:129;;;:::o;35163:75::-;35196:6;35229:2;35223:9;35213:19;;35163:75;:::o;35244:307::-;35305:4;35395:18;35387:6;35384:30;35381:56;;;35417:18;;:::i;:::-;35381:56;35455:29;35477:6;35455:29;:::i;:::-;35447:37;;35539:4;35533;35529:15;35521:23;;35244:307;;;:::o;35557:132::-;35624:4;35647:3;35639:11;;35677:4;35672:3;35668:14;35660:22;;35557:132;;;:::o;35695:114::-;35762:6;35796:5;35790:12;35780:22;;35695:114;;;:::o;35815:98::-;35866:6;35900:5;35894:12;35884:22;;35815:98;;;:::o;35919:99::-;35971:6;36005:5;35999:12;35989:22;;35919:99;;;:::o;36024:113::-;36094:4;36126;36121:3;36117:14;36109:22;;36024:113;;;:::o;36143:184::-;36242:11;36276:6;36271:3;36264:19;36316:4;36311:3;36307:14;36292:29;;36143:184;;;;:::o;36333:168::-;36416:11;36450:6;36445:3;36438:19;36490:4;36485:3;36481:14;36466:29;;36333:168;;;;:::o;36507:169::-;36591:11;36625:6;36620:3;36613:19;36665:4;36660:3;36656:14;36641:29;;36507:169;;;;:::o;36682:148::-;36784:11;36821:3;36806:18;;36682:148;;;;:::o;36836:273::-;36876:3;36895:20;36913:1;36895:20;:::i;:::-;36890:25;;36929:20;36947:1;36929:20;:::i;:::-;36924:25;;37051:1;37015:34;37011:42;37008:1;37005:49;37002:75;;;37057:18;;:::i;:::-;37002:75;37101:1;37098;37094:9;37087:16;;36836:273;;;;:::o;37115:305::-;37155:3;37174:20;37192:1;37174:20;:::i;:::-;37169:25;;37208:20;37226:1;37208:20;:::i;:::-;37203:25;;37362:1;37294:66;37290:74;37287:1;37284:81;37281:107;;;37368:18;;:::i;:::-;37281:107;37412:1;37409;37405:9;37398:16;;37115:305;;;;:::o;37426:185::-;37466:1;37483:20;37501:1;37483:20;:::i;:::-;37478:25;;37517:20;37535:1;37517:20;:::i;:::-;37512:25;;37556:1;37546:35;;37561:18;;:::i;:::-;37546:35;37603:1;37600;37596:9;37591:14;;37426:185;;;;:::o;37617:348::-;37657:7;37680:20;37698:1;37680:20;:::i;:::-;37675:25;;37714:20;37732:1;37714:20;:::i;:::-;37709:25;;37902:1;37834:66;37830:74;37827:1;37824:81;37819:1;37812:9;37805:17;37801:105;37798:131;;;37909:18;;:::i;:::-;37798:131;37957:1;37954;37950:9;37939:20;;37617:348;;;;:::o;37971:191::-;38011:4;38031:20;38049:1;38031:20;:::i;:::-;38026:25;;38065:20;38083:1;38065:20;:::i;:::-;38060:25;;38104:1;38101;38098:8;38095:34;;;38109:18;;:::i;:::-;38095:34;38154:1;38151;38147:9;38139:17;;37971:191;;;;:::o;38168:::-;38208:4;38228:20;38246:1;38228:20;:::i;:::-;38223:25;;38262:20;38280:1;38262:20;:::i;:::-;38257:25;;38301:1;38298;38295:8;38292:34;;;38306:18;;:::i;:::-;38292:34;38351:1;38348;38344:9;38336:17;;38168:191;;;;:::o;38365:96::-;38402:7;38431:24;38449:5;38431:24;:::i;:::-;38420:35;;38365:96;;;:::o;38467:90::-;38501:7;38544:5;38537:13;38530:21;38519:32;;38467:90;;;:::o;38563:149::-;38599:7;38639:66;38632:5;38628:78;38617:89;;38563:149;;;:::o;38718:118::-;38755:7;38795:34;38788:5;38784:46;38773:57;;38718:118;;;:::o;38842:126::-;38879:7;38919:42;38912:5;38908:54;38897:65;;38842:126;;;:::o;38974:77::-;39011:7;39040:5;39029:16;;38974:77;;;:::o;39057:101::-;39093:7;39133:18;39126:5;39122:30;39111:41;;39057:101;;;:::o;39164:86::-;39199:7;39239:4;39232:5;39228:16;39217:27;;39164:86;;;:::o;39256:154::-;39340:6;39335:3;39330;39317:30;39402:1;39393:6;39388:3;39384:16;39377:27;39256:154;;;:::o;39416:307::-;39484:1;39494:113;39508:6;39505:1;39502:13;39494:113;;;39593:1;39588:3;39584:11;39578:18;39574:1;39569:3;39565:11;39558:39;39530:2;39527:1;39523:10;39518:15;;39494:113;;;39625:6;39622:1;39619:13;39616:101;;;39705:1;39696:6;39691:3;39687:16;39680:27;39616:101;39465:258;39416:307;;;:::o;39729:320::-;39773:6;39810:1;39804:4;39800:12;39790:22;;39857:1;39851:4;39847:12;39878:18;39868:81;;39934:4;39926:6;39922:17;39912:27;;39868:81;39996:2;39988:6;39985:14;39965:18;39962:38;39959:84;;;40015:18;;:::i;:::-;39959:84;39780:269;39729:320;;;:::o;40055:281::-;40138:27;40160:4;40138:27;:::i;:::-;40130:6;40126:40;40268:6;40256:10;40253:22;40232:18;40220:10;40217:34;40214:62;40211:88;;;40279:18;;:::i;:::-;40211:88;40319:10;40315:2;40308:22;40098:238;40055:281;;:::o;40342:233::-;40381:3;40404:24;40422:5;40404:24;:::i;:::-;40395:33;;40450:66;40443:5;40440:77;40437:103;;;40520:18;;:::i;:::-;40437:103;40567:1;40560:5;40556:13;40549:20;;40342:233;;;:::o;40581:176::-;40613:1;40630:20;40648:1;40630:20;:::i;:::-;40625:25;;40664:20;40682:1;40664:20;:::i;:::-;40659:25;;40703:1;40693:35;;40708:18;;:::i;:::-;40693:35;40749:1;40746;40742:9;40737:14;;40581:176;;;;:::o;40763:180::-;40811:77;40808:1;40801:88;40908:4;40905:1;40898:15;40932:4;40929:1;40922:15;40949:180;40997:77;40994:1;40987:88;41094:4;41091:1;41084:15;41118:4;41115:1;41108:15;41135:180;41183:77;41180:1;41173:88;41280:4;41277:1;41270:15;41304:4;41301:1;41294:15;41321:180;41369:77;41366:1;41359:88;41466:4;41463:1;41456:15;41490:4;41487:1;41480:15;41507:180;41555:77;41552:1;41545:88;41652:4;41649:1;41642:15;41676:4;41673:1;41666:15;41693:117;41802:1;41799;41792:12;41816:117;41925:1;41922;41915:12;41939:117;42048:1;42045;42038:12;42062:117;42171:1;42168;42161:12;42185:117;42294:1;42291;42284:12;42308:117;42417:1;42414;42407:12;42431:102;42472:6;42523:2;42519:7;42514:2;42507:5;42503:14;42499:28;42489:38;;42431:102;;;:::o;42539:221::-;42679:34;42675:1;42667:6;42663:14;42656:58;42748:4;42743:2;42735:6;42731:15;42724:29;42539:221;:::o;42766:177::-;42906:29;42902:1;42894:6;42890:14;42883:53;42766:177;:::o;42949:161::-;43089:13;43085:1;43077:6;43073:14;43066:37;42949:161;:::o;43116:225::-;43256:34;43252:1;43244:6;43240:14;43233:58;43325:8;43320:2;43312:6;43308:15;43301:33;43116:225;:::o;43347:177::-;43487:29;43483:1;43475:6;43471:14;43464:53;43347:177;:::o;43530:176::-;43670:28;43666:1;43658:6;43654:14;43647:52;43530:176;:::o;43712:164::-;43852:16;43848:1;43840:6;43836:14;43829:40;43712:164;:::o;43882:222::-;44022:34;44018:1;44010:6;44006:14;43999:58;44091:5;44086:2;44078:6;44074:15;44067:30;43882:222;:::o;44110:177::-;44250:29;44246:1;44238:6;44234:14;44227:53;44110:177;:::o;44293:224::-;44433:34;44429:1;44421:6;44417:14;44410:58;44502:7;44497:2;44489:6;44485:15;44478:32;44293:224;:::o;44523:244::-;44663:34;44659:1;44651:6;44647:14;44640:58;44732:27;44727:2;44719:6;44715:15;44708:52;44523:244;:::o;44773:230::-;44913:34;44909:1;44901:6;44897:14;44890:58;44982:13;44977:2;44969:6;44965:15;44958:38;44773:230;:::o;45009:225::-;45149:34;45145:1;45137:6;45133:14;45126:58;45218:8;45213:2;45205:6;45201:15;45194:33;45009:225;:::o;45240:182::-;45380:34;45376:1;45368:6;45364:14;45357:58;45240:182;:::o;45428:223::-;45568:34;45564:1;45556:6;45552:14;45545:58;45637:6;45632:2;45624:6;45620:15;45613:31;45428:223;:::o;45657:176::-;45797:28;45793:1;45785:6;45781:14;45774:52;45657:176;:::o;45839:237::-;45979:34;45975:1;45967:6;45963:14;45956:58;46048:20;46043:2;46035:6;46031:15;46024:45;45839:237;:::o;46082:221::-;46222:34;46218:1;46210:6;46206:14;46199:58;46291:4;46286:2;46278:6;46274:15;46267:29;46082:221;:::o;46309:238::-;46449:34;46445:1;46437:6;46433:14;46426:58;46518:21;46513:2;46505:6;46501:15;46494:46;46309:238;:::o;46553:179::-;46693:31;46689:1;46681:6;46677:14;46670:55;46553:179;:::o;46738:220::-;46878:34;46874:1;46866:6;46862:14;46855:58;46947:3;46942:2;46934:6;46930:15;46923:28;46738:220;:::o;46964:233::-;47104:34;47100:1;47092:6;47088:14;47081:58;47173:16;47168:2;47160:6;47156:15;47149:41;46964:233;:::o;47203:::-;47343:34;47339:1;47331:6;47327:14;47320:58;47412:16;47407:2;47399:6;47395:15;47388:41;47203:233;:::o;47442:234::-;47582:34;47578:1;47570:6;47566:14;47559:58;47651:17;47646:2;47638:6;47634:15;47627:42;47442:234;:::o;47682:232::-;47822:34;47818:1;47810:6;47806:14;47799:58;47891:15;47886:2;47878:6;47874:15;47867:40;47682:232;:::o;47920:221::-;48060:34;48056:1;48048:6;48044:14;48037:58;48129:4;48124:2;48116:6;48112:15;48105:29;47920:221;:::o;48147:122::-;48220:24;48238:5;48220:24;:::i;:::-;48213:5;48210:35;48200:63;;48259:1;48256;48249:12;48200:63;48147:122;:::o;48275:116::-;48345:21;48360:5;48345:21;:::i;:::-;48338:5;48335:32;48325:60;;48381:1;48378;48371:12;48325:60;48275:116;:::o;48397:120::-;48469:23;48486:5;48469:23;:::i;:::-;48462:5;48459:34;48449:62;;48507:1;48504;48497:12;48449:62;48397:120;:::o;48523:122::-;48596:24;48614:5;48596:24;:::i;:::-;48589:5;48586:35;48576:63;;48635:1;48632;48625:12;48576:63;48523:122;:::o
Swarm Source
ipfs://c41da0c84a14f83c8a093877c6fb0feb848fb77895c22ab209f8c14a6414cd19
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.