ERC-721
Overview
Max Total Supply
3,251 DD
Holders
1,442
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 DDLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DegenDisease
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-11 */ // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @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); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // 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 (last updated v4.7.0) (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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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); } } // File: contracts/WhitelistMint.sol pragma solidity ^0.8.0; abstract contract WhitelistMint is Ownable { address[] public minterAddresses; modifier onlyMinter() { bool isAllowed; for (uint256 i; i < minterAddresses.length; i++) { if (minterAddresses[i] == msg.sender) { isAllowed = true; break; } } require(isAllowed, "Minter: caller is not an allowed minter"); _; } /** * @dev Adds an address that is allowed to mint */ function addWLMinterAddress(address _minterAddress) external onlyOwner { minterAddresses.push(_minterAddress); } function addWLMinterAddressBulk(address[] memory _minterAddress) external onlyOwner { for (uint256 i; i < _minterAddress.length; i++) { minterAddresses.push(_minterAddress[i]); } } function checkWL(address _minterAddress) public view virtual returns (bool){ bool available=false; for (uint256 i; i < minterAddresses.length; i++) { if (minterAddresses[i] == _minterAddress) { available=true; } } return available; } /** * @dev Removes */ function removeWLMinterAddress(address _minterAddress) external onlyOwner { for (uint256 i; i < minterAddresses.length; i++) { if (minterAddresses[i] != _minterAddress) { continue; } minterAddresses[i] = minterAddresses[minterAddresses.length - 1]; minterAddresses.pop(); } } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.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 /// @solidity memory-safe-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 (last updated v4.6.0) (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 `IERC721Receiver.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 (last updated v4.7.0) (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`. * * 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; /** * @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 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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); } // 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: contracts/ERC721A.sol pragma solidity ^0.8.0; contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 0; uint256 internal immutable collectionSize; uint256 internal immutable maxBatchSize; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) private _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev * `maxBatchSize` refers to how much a minter can mint at a time. * `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_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(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) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721A: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - there must be `quantity` tokens remaining unminted in the total collection. * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > collectionSize - 1) { endIndex = collectionSize - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721A: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: contracts/DegenDisease.sol pragma solidity ^0.8.2; contract DegenDisease is ERC721A,Ownable,WhitelistMint{ using Counters for Counters.Counter; Counters.Counter private _tokenIdCounter; uint256 public _diseasePrice = 0.01 ether; uint256 public diseaseSupply; uint public freesupply; bool unveil = false; uint public limitmint=1; bool openForMint=false; bool openForMintPublic=false; bool openForFree=false; bool openForFreePublic=false; mapping(address => uint) private mintfree; string private _BaseURI = ''; string private _tokenRevealedBaseURI = ''; mapping(address => uint256) private _claimed; constructor(uint supply,uint fsupply, uint256 maxBatchSize_, uint256 collectionSize_) ERC721A("DegenDisease","DD", maxBatchSize_, collectionSize_) { _BaseURI = ''; diseaseSupply=supply; freesupply=fsupply; } function mintdiseaseWL(uint amount) external payable onlyMinter { require(msg.value >= _diseasePrice * amount , "Ether value sent is not enough"); require(openForMint,"Mint Function is not Active yet"); require(totalSupply()+amount<=diseaseSupply,"All minted"); require(amount>0,"Cannot mint 0 or below 0"); require(amount<=limitmint,"Cannot mint over 15"); _safeMint(msg.sender,amount); } function freeMintWL(uint amount) external payable onlyMinter { require(openForFree, "Free minting is not active"); require(totalSupply()+amount <= freesupply,"Free token is all claimed"); require(amount<=2,"Cannot mint over 2"); require(mintfree[msg.sender]+amount <= 2,"Free Token is claimed"); mintfree[msg.sender]+=amount; _safeMint(msg.sender, amount); } function pubmintdisease(uint amount) external payable { require(msg.value >= _diseasePrice * amount , "Ether value sent is not enough"); require(openForMintPublic,"Mint Function is not Active yet"); require(totalSupply()+amount<=diseaseSupply,"All minted"); require(amount>0,"Cannot mint 0 or below 0"); require(amount<=limitmint,"Cannot mint over 2"); _safeMint(msg.sender,amount); } function pubfreeMint(uint amount) external payable { require(openForFreePublic, "Free minting is not active"); require(totalSupply()+amount <= freesupply,"Free token is all claimed"); require(amount<=2,"Cannot mint over 2"); _safeMint(msg.sender, amount); } function setlimit(uint amount) external onlyOwner{ limitmint=amount; } function devMint(uint256 amount) external onlyOwner{ _safeMint(msg.sender, amount); } function withdraw() external onlyOwner { uint256 balance = address(this).balance; payable(msg.sender).transfer(balance); } function withdrawPart(uint256 amount) external onlyOwner { payable(msg.sender).transfer(amount); } function reveal(string memory baseURI) external onlyOwner { unveil=true; _BaseURI = baseURI; } function setFreeSupply(uint amount) external onlyOwner{ freesupply=amount; } function cutSupply(uint amount) external onlyOwner{ require(amount < totalSupply(),"Amount cannot be larger then current amount"); diseaseSupply=amount; } function setWLFreeActive() external onlyOwner{ openForFree=true; } function setWLFreeNonActive() external onlyOwner{ openForFree=false; } function setWLPaidActive() external onlyOwner{ openForMint=true; } function setWLPaidNonActive() external onlyOwner{ openForMint=false; } function setActivePublic() external onlyOwner{ openForMintPublic=true; } function setNonActivePublicFree() external onlyOwner{ openForFreePublic=false; } function setNonActivePublic() external onlyOwner{ openForMintPublic=false; } function setActivePublicFree() external onlyOwner{ openForFreePublic=true; } function max_supply() public view virtual returns (uint256) { return diseaseSupply; } function price() public view virtual returns (uint256){ return _diseasePrice; } function _baseURI() internal view override returns (string memory) { return _BaseURI; } function setBaseURI(string calldata URI) public onlyOwner { _BaseURI = URI; } function setPrice(uint256 _price) public onlyOwner{ _diseasePrice=_price; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"fsupply","type":"uint256"},{"internalType":"uint256","name":"maxBatchSize_","type":"uint256"},{"internalType":"uint256","name":"collectionSize_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_diseasePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minterAddress","type":"address"}],"name":"addWLMinterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_minterAddress","type":"address[]"}],"name":"addWLMinterAddressBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minterAddress","type":"address"}],"name":"checkWL","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"cutSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"diseaseSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"freeMintWL","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"freesupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"limitmint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"max_supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintdiseaseWL","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"minterAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"pubfreeMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"pubmintdisease","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_minterAddress","type":"address"}],"name":"removeWLMinterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setActivePublic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setActivePublicFree","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":"URI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setFreeSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setNonActivePublic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setNonActivePublicFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setWLFreeActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setWLFreeNonActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setWLPaidActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setWLPaidNonActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setlimit","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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawPart","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c0604052600080556000600755662386f26fc10000600b556000600e60006101000a81548160ff0219169083151502179055506001600f556000601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff0219169083151502179055506000601060026101000a81548160ff0219169083151502179055506000601060036101000a81548160ff0219169083151502179055506040518060200160405280600081525060129080519060200190620000cb92919062000395565b506040518060200160405280600081525060139080519060200190620000f392919062000395565b503480156200010157600080fd5b5060405162005d5438038062005d5483398181016040528101906200012791906200045c565b6040518060400160405280600c81526020017f446567656e4469736561736500000000000000000000000000000000000000008152506040518060400160405280600281526020017f4444000000000000000000000000000000000000000000000000000000000000815250838360008111620001db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001d2906200053e565b60405180910390fd5b6000821162000221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000218906200051c565b60405180910390fd5b83600190805190602001906200023992919062000395565b5082600290805190602001906200025292919062000395565b508160a08181525050806080818152505050505050620002876200027b620002c760201b60201c565b620002cf60201b60201c565b6040518060200160405280600081525060129080519060200190620002ae92919062000395565b5083600c8190555082600d81905550505050506200069d565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620003a3906200057b565b90600052602060002090601f016020900481019282620003c7576000855562000413565b82601f10620003e257805160ff191683800117855562000413565b8280016001018555821562000413579182015b8281111562000412578251825591602001919060010190620003f5565b5b50905062000422919062000426565b5090565b5b808211156200044157600081600090555060010162000427565b5090565b600081519050620004568162000683565b92915050565b60008060008060808587031215620004795762000478620005e0565b5b6000620004898782880162000445565b94505060206200049c8782880162000445565b9350506040620004af8782880162000445565b9250506060620004c28782880162000445565b91505092959194509250565b6000620004dd60278362000560565b9150620004ea82620005e5565b604082019050919050565b600062000504602e8362000560565b9150620005118262000634565b604082019050919050565b600060208201905081810360008301526200053781620004ce565b9050919050565b600060208201905081810360008301526200055981620004f5565b9050919050565b600082825260208201905092915050565b6000819050919050565b600060028204905060018216806200059457607f821691505b60208210811415620005ab57620005aa620005b1565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b6200068e8162000571565b81146200069a57600080fd5b50565b60805160a051615686620006ce60003960008181612cde01528181612d0701526133aa0152600050506156866000f3fe6080604052600436106102ff5760003560e01c8063715018a611610190578063a22cb465116100dc578063d7224ba011610095578063ef9341721161006f578063ef93417214610aaa578063f2fde38b14610ad3578063f4c4456914610afc578063f676308a14610b25576102ff565b8063d7224ba014610a2b578063e8c33fd714610a56578063e985e9c514610a6d576102ff565b8063a22cb4651461093e578063aa66898514610967578063b88d4fde14610992578063be3495c4146109bb578063c1750e56146109d7578063c87b56dd146109ee576102ff565b80638a333b501161014957806395d89b411161012357806395d89b41146108a15780639aa1ce24146108cc5780639b6b923a146108e8578063a035b1fe14610913576102ff565b80638a333b50146108225780638da5cb5b1461084d57806391b7f5ed14610878576102ff565b8063715018a61461077257806379112a79146107895780637daf06fd146107a05780637e8c98e0146107c9578063878f02f5146107e0578063892ec1061461080b576102ff565b80633895ef101161024f5780634a99e1381161020857806355f804b3116101e257806355f804b3146106b85780636352211e146106e15780636b9e26e21461071e57806370a0823114610735576102ff565b80634a99e1381461063b5780634c261247146106525780634f6ccce71461067b576102ff565b80633895ef10146105625780633ccfd60b1461058d57806342842e0e146105a457806345bc64e4146105cd57806347e7405f146105f6578063480de09314610612576102ff565b8063174235dd116102bc57806323b872dd1161029657806323b872dd146104b75780632f745c59146104e057806335ded5b91461051d578063375a069a14610539576102ff565b8063174235dd1461043857806318160ddd1461044f57806318c63f241461047a576102ff565b806301ffc9a714610304578063028850971461034157806306fdde031461037e578063081812fc146103a9578063095ea7b3146103e65780630a342d8e1461040f575b600080fd5b34801561031057600080fd5b5061032b60048036038101906103269190613d97565b610b4e565b604051610338919061444c565b60405180910390f35b34801561034d57600080fd5b5061036860048036038101906103639190613e87565b610c98565b60405161037591906143e5565b60405180910390f35b34801561038a57600080fd5b50610393610cd7565b6040516103a09190614467565b60405180910390f35b3480156103b557600080fd5b506103d060048036038101906103cb9190613e87565b610d69565b6040516103dd91906143e5565b60405180910390f35b3480156103f257600080fd5b5061040d60048036038101906104089190613d0e565b610dee565b005b34801561041b57600080fd5b5061043660048036038101906104319190613e87565b610f07565b005b34801561044457600080fd5b5061044d610f19565b005b34801561045b57600080fd5b50610464610f3e565b6040516104719190614869565b60405180910390f35b34801561048657600080fd5b506104a1600480360381019061049c9190613b8b565b610f47565b6040516104ae919061444c565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d99190613bf8565b610ff2565b005b3480156104ec57600080fd5b5061050760048036038101906105029190613d0e565b611002565b6040516105149190614869565b60405180910390f35b61053760048036038101906105329190613e87565b611200565b005b34801561054557600080fd5b50610560600480360381019061055b9190613e87565b6114bc565b005b34801561056e57600080fd5b506105776114d1565b6040516105849190614869565b60405180910390f35b34801561059957600080fd5b506105a26114d7565b005b3480156105b057600080fd5b506105cb60048036038101906105c69190613bf8565b61152e565b005b3480156105d957600080fd5b506105f460048036038101906105ef9190613b8b565b61154e565b005b610610600480360381019061060b9190613e87565b6116e7565b005b34801561061e57600080fd5b5061063960048036038101906106349190613d4e565b611872565b005b34801561064757600080fd5b5061065061191a565b005b34801561065e57600080fd5b5061067960048036038101906106749190613e3e565b61193f565b005b34801561068757600080fd5b506106a2600480360381019061069d9190613e87565b61197c565b6040516106af9190614869565b60405180910390f35b3480156106c457600080fd5b506106df60048036038101906106da9190613df1565b6119cf565b005b3480156106ed57600080fd5b5061070860048036038101906107039190613e87565b6119ed565b60405161071591906143e5565b60405180910390f35b34801561072a57600080fd5b50610733611a03565b005b34801561074157600080fd5b5061075c60048036038101906107579190613b8b565b611a28565b6040516107699190614869565b60405180910390f35b34801561077e57600080fd5b50610787611b11565b005b34801561079557600080fd5b5061079e611b25565b005b3480156107ac57600080fd5b506107c760048036038101906107c29190613e87565b611b4a565b005b3480156107d557600080fd5b506107de611b9c565b005b3480156107ec57600080fd5b506107f5611bc1565b6040516108029190614869565b60405180910390f35b34801561081757600080fd5b50610820611bc7565b005b34801561082e57600080fd5b50610837611bec565b6040516108449190614869565b60405180910390f35b34801561085957600080fd5b50610862611bf6565b60405161086f91906143e5565b60405180910390f35b34801561088457600080fd5b5061089f600480360381019061089a9190613e87565b611c20565b005b3480156108ad57600080fd5b506108b6611c32565b6040516108c39190614467565b60405180910390f35b6108e660048036038101906108e19190613e87565b611cc4565b005b3480156108f457600080fd5b506108fd611dbb565b60405161090a9190614869565b60405180910390f35b34801561091f57600080fd5b50610928611dc1565b6040516109359190614869565b60405180910390f35b34801561094a57600080fd5b5061096560048036038101906109609190613cce565b611dcb565b005b34801561097357600080fd5b5061097c611f4c565b6040516109899190614869565b60405180910390f35b34801561099e57600080fd5b506109b960048036038101906109b49190613c4b565b611f52565b005b6109d560048036038101906109d09190613e87565b611fae565b005b3480156109e357600080fd5b506109ec61221a565b005b3480156109fa57600080fd5b50610a156004803603810190610a109190613e87565b61223f565b604051610a229190614467565b60405180910390f35b348015610a3757600080fd5b50610a406122e6565b604051610a4d9190614869565b60405180910390f35b348015610a6257600080fd5b50610a6b6122ec565b005b348015610a7957600080fd5b50610a946004803603810190610a8f9190613bb8565b612311565b604051610aa1919061444c565b60405180910390f35b348015610ab657600080fd5b50610ad16004803603810190610acc9190613b8b565b6123a5565b005b348015610adf57600080fd5b50610afa6004803603810190610af59190613b8b565b612413565b005b348015610b0857600080fd5b50610b236004803603810190610b1e9190613e87565b612497565b005b348015610b3157600080fd5b50610b4c6004803603810190610b479190613e87565b6124f2565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c1957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c8157507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c915750610c9082612504565b5b9050919050565b60098181548110610ca857600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054610ce690614c05565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1290614c05565b8015610d5f5780601f10610d3457610100808354040283529160200191610d5f565b820191906000526020600020905b815481529060010190602001808311610d4257829003601f168201915b5050505050905090565b6000610d748261256e565b610db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daa90614829565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610df9826119ed565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6190614709565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e8961257b565b73ffffffffffffffffffffffffffffffffffffffff161480610eb85750610eb781610eb261257b565b612311565b5b610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee906145c9565b60405180910390fd5b610f02838383612583565b505050565b610f0f612635565b80600f8190555050565b610f21612635565b6001601060016101000a81548160ff021916908315150217905550565b60008054905090565b6000806000905060005b600980549050811015610fe8578373ffffffffffffffffffffffffffffffffffffffff1660098281548110610f8957610f88614d9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610fd557600191505b8080610fe090614c68565b915050610f51565b5080915050919050565b610ffd8383836126b3565b505050565b600061100d83611a28565b821061104e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104590614489565b60405180910390fd5b6000611058610f3e565b905060008060005b838110156111be576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461115257806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111aa578684141561119b5781955050505050506111fa565b83806111a690614c68565b9450505b5080806111b690614c68565b915050611060565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f190614789565b60405180910390fd5b92915050565b6000805b60098054905081101561129f573373ffffffffffffffffffffffffffffffffffffffff166009828154811061123c5761123b614d9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561128c576001915061129f565b808061129790614c68565b915050611204565b50806112e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d7906145a9565b60405180910390fd5b601060029054906101000a900460ff1661132f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611326906146a9565b60405180910390fd5b600d548261133b610f3e565b61134591906149c0565b1115611386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137d90614589565b60405180910390fd5b60028211156113ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c1906144e9565b60405180910390fd5b600282601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461141791906149c0565b1115611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144f906147a9565b60405180910390fd5b81601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114a791906149c0565b925050819055506114b83383612c6c565b5050565b6114c4612635565b6114ce3382612c6c565b50565b600d5481565b6114df612635565b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561152a573d6000803e3d6000fd5b5050565b61154983838360405180602001604052806000815250611f52565b505050565b611556612635565b60005b6009805490508110156116e3578173ffffffffffffffffffffffffffffffffffffffff166009828154811061159157611590614d9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115dc576116d0565b600960016009805490506115f09190614ad5565b8154811061160157611600614d9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600982815481106116405761163f614d9e565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600980548061169a57611699614d6f565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555b80806116db90614c68565b915050611559565b5050565b80600b546116f59190614a47565b341015611737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172e90614809565b60405180910390fd5b601060019054906101000a900460ff16611786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177d906146c9565b60405180910390fd5b600c5481611792610f3e565b61179c91906149c0565b11156117dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d4906144a9565b60405180910390fd5b60008111611820576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611817906147c9565b60405180910390fd5b600f54811115611865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185c906144e9565b60405180910390fd5b61186f3382612c6c565b50565b61187a612635565b60005b815181101561191657600982828151811061189b5761189a614d9e565b5b60200260200101519080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808061190e90614c68565b91505061187d565b5050565b611922612635565b6001601060026101000a81548160ff021916908315150217905550565b611947612635565b6001600e60006101000a81548160ff02191690831515021790555080601290805190602001906119789291906137eb565b5050565b6000611986610f3e565b82106119c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119be90614549565b60405180910390fd5b819050919050565b6119d7612635565b8181601291906119e8929190613871565b505050565b60006119f882612c8a565b600001519050919050565b611a0b612635565b6000601060026101000a81548160ff021916908315150217905550565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a90906145e9565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611b19612635565b611b236000612e8d565b565b611b2d612635565b6000601060036101000a81548160ff021916908315150217905550565b611b52612635565b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611b98573d6000803e3d6000fd5b5050565b611ba4612635565b6001601060036101000a81548160ff021916908315150217905550565b600b5481565b611bcf612635565b6001601060006101000a81548160ff021916908315150217905550565b6000600c54905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c28612635565b80600b8190555050565b606060028054611c4190614c05565b80601f0160208091040260200160405190810160405280929190818152602001828054611c6d90614c05565b8015611cba5780601f10611c8f57610100808354040283529160200191611cba565b820191906000526020600020905b815481529060010190602001808311611c9d57829003601f168201915b5050505050905090565b601060039054906101000a900460ff16611d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0a906146a9565b60405180910390fd5b600d5481611d1f610f3e565b611d2991906149c0565b1115611d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6190614589565b60405180910390fd5b6002811115611dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da5906144e9565b60405180910390fd5b611db83382612c6c565b50565b600f5481565b6000600b54905090565b611dd361257b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3890614669565b60405180910390fd5b8060066000611e4e61257b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611efb61257b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f40919061444c565b60405180910390a35050565b600c5481565b611f5d8484846126b3565b611f6984848484612f53565b611fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9f90614729565b60405180910390fd5b50505050565b6000805b60098054905081101561204d573373ffffffffffffffffffffffffffffffffffffffff1660098281548110611fea57611fe9614d9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561203a576001915061204d565b808061204590614c68565b915050611fb2565b508061208e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612085906145a9565b60405180910390fd5b81600b5461209c9190614a47565b3410156120de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d590614809565b60405180910390fd5b601060009054906101000a900460ff1661212d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612124906146c9565b60405180910390fd5b600c5482612139610f3e565b61214391906149c0565b1115612184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217b906144a9565b60405180910390fd5b600082116121c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121be906147c9565b60405180910390fd5b600f5482111561220c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612203906146e9565b60405180910390fd5b6122163383612c6c565b5050565b612222612635565b6000601060016101000a81548160ff021916908315150217905550565b606061224a8261256e565b612289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228090614649565b60405180910390fd5b60006122936130ea565b905060008151116122b357604051806020016040528060008152506122de565b806122bd8461317c565b6040516020016122ce9291906143c1565b6040516020818303038152906040525b915050919050565b60075481565b6122f4612635565b6000601060006101000a81548160ff021916908315150217905550565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6123ad612635565b6009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61241b612635565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561248b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612482906144c9565b60405180910390fd5b61249481612e8d565b50565b61249f612635565b6124a7610f3e565b81106124e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124df90614529565b60405180910390fd5b80600c8190555050565b6124fa612635565b80600d8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b61263d61257b565b73ffffffffffffffffffffffffffffffffffffffff1661265b611bf6565b73ffffffffffffffffffffffffffffffffffffffff16146126b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a890614629565b60405180910390fd5b565b60006126be82612c8a565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166126e561257b565b73ffffffffffffffffffffffffffffffffffffffff161480612741575061270a61257b565b73ffffffffffffffffffffffffffffffffffffffff1661272984610d69565b73ffffffffffffffffffffffffffffffffffffffff16145b8061275d575061275c826000015161275761257b565b612311565b5b90508061279f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279690614689565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280890614609565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612881576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287890614569565b60405180910390fd5b61288e85858560016132dd565b61289e6000848460000151612583565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661290c9190614aa1565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166129b0919061497a565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612ab691906149c0565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612bfc57612b2c8161256e565b15612bfb576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c6486868660016132e3565b505050505050565b612c868282604051806020016040528060008152506132e9565b5050565b612c926138f7565b612c9b8261256e565b612cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd190614509565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612d3e5760017f000000000000000000000000000000000000000000000000000000000000000084612d319190614ad5565b612d3b91906149c0565b90505b60008390505b818110612e4c576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e3857809350505050612e88565b508080612e4490614bdb565b915050612d44565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7f906147e9565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612f748473ffffffffffffffffffffffffffffffffffffffff166137c8565b156130dd578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f9d61257b565b8786866040518563ffffffff1660e01b8152600401612fbf9493929190614400565b602060405180830381600087803b158015612fd957600080fd5b505af192505050801561300a57506040513d601f19601f820116820180604052508101906130079190613dc4565b60015b61308d573d806000811461303a576040519150601f19603f3d011682016040523d82523d6000602084013e61303f565b606091505b50600081511415613085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307c90614729565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130e2565b600190505b949350505050565b6060601280546130f990614c05565b80601f016020809104026020016040519081016040528092919081815260200182805461312590614c05565b80156131725780601f1061314757610100808354040283529160200191613172565b820191906000526020600020905b81548152906001019060200180831161315557829003601f168201915b5050505050905090565b606060008214156131c4576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132d8565b600082905060005b600082146131f65780806131df90614c68565b915050600a826131ef9190614a16565b91506131cc565b60008167ffffffffffffffff81111561321257613211614dcd565b5b6040519080825280601f01601f1916602001820160405280156132445781602001600182028036833780820191505090505b5090505b600085146132d15760018261325d9190614ad5565b9150600a8561326c9190614cb1565b603061327891906149c0565b60f81b81838151811061328e5761328d614d9e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132ca9190614a16565b9450613248565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561335f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335690614769565b60405180910390fd5b6133688161256e565b156133a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339f90614749565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000083111561340b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340290614849565b60405180910390fd5b61341860008583866132dd565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151613515919061497a565b6fffffffffffffffffffffffffffffffff16815260200185836020015161353c919061497a565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156137ab57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461374b6000888488612f53565b61378a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378190614729565b60405180910390fd5b818061379590614c68565b92505080806137a390614c68565b9150506136da565b50806000819055506137c060008785886132e3565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546137f790614c05565b90600052602060002090601f0160209004810192826138195760008555613860565b82601f1061383257805160ff1916838001178555613860565b82800160010185558215613860579182015b8281111561385f578251825591602001919060010190613844565b5b50905061386d9190613931565b5090565b82805461387d90614c05565b90600052602060002090601f01602090048101928261389f57600085556138e6565b82601f106138b857803560ff19168380011785556138e6565b828001600101855582156138e6579182015b828111156138e55782358255916020019190600101906138ca565b5b5090506138f39190613931565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561394a576000816000905550600101613932565b5090565b600061396161395c846148a9565b614884565b9050808382526020820190508285602086028201111561398457613983614e06565b5b60005b858110156139b4578161399a8882613a42565b845260208401935060208301925050600181019050613987565b5050509392505050565b60006139d16139cc846148d5565b614884565b9050828152602081018484840111156139ed576139ec614e0b565b5b6139f8848285614b99565b509392505050565b6000613a13613a0e84614906565b614884565b905082815260208101848484011115613a2f57613a2e614e0b565b5b613a3a848285614b99565b509392505050565b600081359050613a51816155f4565b92915050565b600082601f830112613a6c57613a6b614e01565b5b8135613a7c84826020860161394e565b91505092915050565b600081359050613a948161560b565b92915050565b600081359050613aa981615622565b92915050565b600081519050613abe81615622565b92915050565b600082601f830112613ad957613ad8614e01565b5b8135613ae98482602086016139be565b91505092915050565b60008083601f840112613b0857613b07614e01565b5b8235905067ffffffffffffffff811115613b2557613b24614dfc565b5b602083019150836001820283011115613b4157613b40614e06565b5b9250929050565b600082601f830112613b5d57613b5c614e01565b5b8135613b6d848260208601613a00565b91505092915050565b600081359050613b8581615639565b92915050565b600060208284031215613ba157613ba0614e15565b5b6000613baf84828501613a42565b91505092915050565b60008060408385031215613bcf57613bce614e15565b5b6000613bdd85828601613a42565b9250506020613bee85828601613a42565b9150509250929050565b600080600060608486031215613c1157613c10614e15565b5b6000613c1f86828701613a42565b9350506020613c3086828701613a42565b9250506040613c4186828701613b76565b9150509250925092565b60008060008060808587031215613c6557613c64614e15565b5b6000613c7387828801613a42565b9450506020613c8487828801613a42565b9350506040613c9587828801613b76565b925050606085013567ffffffffffffffff811115613cb657613cb5614e10565b5b613cc287828801613ac4565b91505092959194509250565b60008060408385031215613ce557613ce4614e15565b5b6000613cf385828601613a42565b9250506020613d0485828601613a85565b9150509250929050565b60008060408385031215613d2557613d24614e15565b5b6000613d3385828601613a42565b9250506020613d4485828601613b76565b9150509250929050565b600060208284031215613d6457613d63614e15565b5b600082013567ffffffffffffffff811115613d8257613d81614e10565b5b613d8e84828501613a57565b91505092915050565b600060208284031215613dad57613dac614e15565b5b6000613dbb84828501613a9a565b91505092915050565b600060208284031215613dda57613dd9614e15565b5b6000613de884828501613aaf565b91505092915050565b60008060208385031215613e0857613e07614e15565b5b600083013567ffffffffffffffff811115613e2657613e25614e10565b5b613e3285828601613af2565b92509250509250929050565b600060208284031215613e5457613e53614e15565b5b600082013567ffffffffffffffff811115613e7257613e71614e10565b5b613e7e84828501613b48565b91505092915050565b600060208284031215613e9d57613e9c614e15565b5b6000613eab84828501613b76565b91505092915050565b613ebd81614b09565b82525050565b613ecc81614b1b565b82525050565b6000613edd82614937565b613ee7818561494d565b9350613ef7818560208601614ba8565b613f0081614e1a565b840191505092915050565b6000613f1682614942565b613f20818561495e565b9350613f30818560208601614ba8565b613f3981614e1a565b840191505092915050565b6000613f4f82614942565b613f59818561496f565b9350613f69818560208601614ba8565b80840191505092915050565b6000613f8260228361495e565b9150613f8d82614e2b565b604082019050919050565b6000613fa5600a8361495e565b9150613fb082614e7a565b602082019050919050565b6000613fc860268361495e565b9150613fd382614ea3565b604082019050919050565b6000613feb60128361495e565b9150613ff682614ef2565b602082019050919050565b600061400e602a8361495e565b915061401982614f1b565b604082019050919050565b6000614031602b8361495e565b915061403c82614f6a565b604082019050919050565b600061405460238361495e565b915061405f82614fb9565b604082019050919050565b600061407760258361495e565b915061408282615008565b604082019050919050565b600061409a60198361495e565b91506140a582615057565b602082019050919050565b60006140bd60278361495e565b91506140c882615080565b604082019050919050565b60006140e060398361495e565b91506140eb826150cf565b604082019050919050565b6000614103602b8361495e565b915061410e8261511e565b604082019050919050565b600061412660268361495e565b91506141318261516d565b604082019050919050565b600061414960208361495e565b9150614154826151bc565b602082019050919050565b600061416c602f8361495e565b9150614177826151e5565b604082019050919050565b600061418f601a8361495e565b915061419a82615234565b602082019050919050565b60006141b260328361495e565b91506141bd8261525d565b604082019050919050565b60006141d5601a8361495e565b91506141e0826152ac565b602082019050919050565b60006141f8601f8361495e565b9150614203826152d5565b602082019050919050565b600061421b60138361495e565b9150614226826152fe565b602082019050919050565b600061423e60228361495e565b915061424982615327565b604082019050919050565b600061426160338361495e565b915061426c82615376565b604082019050919050565b6000614284601d8361495e565b915061428f826153c5565b602082019050919050565b60006142a760218361495e565b91506142b2826153ee565b604082019050919050565b60006142ca602e8361495e565b91506142d58261543d565b604082019050919050565b60006142ed60158361495e565b91506142f88261548c565b602082019050919050565b600061431060188361495e565b915061431b826154b5565b602082019050919050565b6000614333602f8361495e565b915061433e826154de565b604082019050919050565b6000614356601e8361495e565b91506143618261552d565b602082019050919050565b6000614379602d8361495e565b915061438482615556565b604082019050919050565b600061439c60228361495e565b91506143a7826155a5565b604082019050919050565b6143bb81614b8f565b82525050565b60006143cd8285613f44565b91506143d98284613f44565b91508190509392505050565b60006020820190506143fa6000830184613eb4565b92915050565b60006080820190506144156000830187613eb4565b6144226020830186613eb4565b61442f60408301856143b2565b81810360608301526144418184613ed2565b905095945050505050565b60006020820190506144616000830184613ec3565b92915050565b600060208201905081810360008301526144818184613f0b565b905092915050565b600060208201905081810360008301526144a281613f75565b9050919050565b600060208201905081810360008301526144c281613f98565b9050919050565b600060208201905081810360008301526144e281613fbb565b9050919050565b6000602082019050818103600083015261450281613fde565b9050919050565b6000602082019050818103600083015261452281614001565b9050919050565b6000602082019050818103600083015261454281614024565b9050919050565b6000602082019050818103600083015261456281614047565b9050919050565b600060208201905081810360008301526145828161406a565b9050919050565b600060208201905081810360008301526145a28161408d565b9050919050565b600060208201905081810360008301526145c2816140b0565b9050919050565b600060208201905081810360008301526145e2816140d3565b9050919050565b60006020820190508181036000830152614602816140f6565b9050919050565b6000602082019050818103600083015261462281614119565b9050919050565b600060208201905081810360008301526146428161413c565b9050919050565b600060208201905081810360008301526146628161415f565b9050919050565b6000602082019050818103600083015261468281614182565b9050919050565b600060208201905081810360008301526146a2816141a5565b9050919050565b600060208201905081810360008301526146c2816141c8565b9050919050565b600060208201905081810360008301526146e2816141eb565b9050919050565b600060208201905081810360008301526147028161420e565b9050919050565b6000602082019050818103600083015261472281614231565b9050919050565b6000602082019050818103600083015261474281614254565b9050919050565b6000602082019050818103600083015261476281614277565b9050919050565b600060208201905081810360008301526147828161429a565b9050919050565b600060208201905081810360008301526147a2816142bd565b9050919050565b600060208201905081810360008301526147c2816142e0565b9050919050565b600060208201905081810360008301526147e281614303565b9050919050565b6000602082019050818103600083015261480281614326565b9050919050565b6000602082019050818103600083015261482281614349565b9050919050565b600060208201905081810360008301526148428161436c565b9050919050565b600060208201905081810360008301526148628161438f565b9050919050565b600060208201905061487e60008301846143b2565b92915050565b600061488e61489f565b905061489a8282614c37565b919050565b6000604051905090565b600067ffffffffffffffff8211156148c4576148c3614dcd565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156148f0576148ef614dcd565b5b6148f982614e1a565b9050602081019050919050565b600067ffffffffffffffff82111561492157614920614dcd565b5b61492a82614e1a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061498582614b53565b915061499083614b53565b9250826fffffffffffffffffffffffffffffffff038211156149b5576149b4614ce2565b5b828201905092915050565b60006149cb82614b8f565b91506149d683614b8f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a0b57614a0a614ce2565b5b828201905092915050565b6000614a2182614b8f565b9150614a2c83614b8f565b925082614a3c57614a3b614d11565b5b828204905092915050565b6000614a5282614b8f565b9150614a5d83614b8f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a9657614a95614ce2565b5b828202905092915050565b6000614aac82614b53565b9150614ab783614b53565b925082821015614aca57614ac9614ce2565b5b828203905092915050565b6000614ae082614b8f565b9150614aeb83614b8f565b925082821015614afe57614afd614ce2565b5b828203905092915050565b6000614b1482614b6f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614bc6578082015181840152602081019050614bab565b83811115614bd5576000848401525b50505050565b6000614be682614b8f565b91506000821415614bfa57614bf9614ce2565b5b600182039050919050565b60006002820490506001821680614c1d57607f821691505b60208210811415614c3157614c30614d40565b5b50919050565b614c4082614e1a565b810181811067ffffffffffffffff82111715614c5f57614c5e614dcd565b5b80604052505050565b6000614c7382614b8f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ca657614ca5614ce2565b5b600182019050919050565b6000614cbc82614b8f565b9150614cc783614b8f565b925082614cd757614cd6614d11565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f416c6c206d696e74656400000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f74206d696e74206f76657220320000000000000000000000000000600082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f416d6f756e742063616e6e6f74206265206c6172676572207468656e2063757260008201527f72656e7420616d6f756e74000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4672656520746f6b656e20697320616c6c20636c61696d656400000000000000600082015250565b7f4d696e7465723a2063616c6c6572206973206e6f7420616e20616c6c6f77656460008201527f206d696e74657200000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f46726565206d696e74696e67206973206e6f7420616374697665000000000000600082015250565b7f4d696e742046756e6374696f6e206973206e6f74204163746976652079657400600082015250565b7f43616e6e6f74206d696e74206f76657220313500000000000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f4672656520546f6b656e20697320636c61696d65640000000000000000000000600082015250565b7f43616e6e6f74206d696e742030206f722062656c6f7720300000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f45746865722076616c75652073656e74206973206e6f7420656e6f7567680000600082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6155fd81614b09565b811461560857600080fd5b50565b61561481614b1b565b811461561f57600080fd5b50565b61562b81614b27565b811461563657600080fd5b50565b61564281614b8f565b811461564d57600080fd5b5056fea2646970667358221220d9fd76a6d70507efb4558eb95eb370654630e4f5ebbe53ad2de419a9a6e66a2864736f6c634300080700330000000000000000000000000000000000000000000000000000000000000d800000000000000000000000000000000000000000000000000000000000000d8000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000d80
Deployed Bytecode
0x6080604052600436106102ff5760003560e01c8063715018a611610190578063a22cb465116100dc578063d7224ba011610095578063ef9341721161006f578063ef93417214610aaa578063f2fde38b14610ad3578063f4c4456914610afc578063f676308a14610b25576102ff565b8063d7224ba014610a2b578063e8c33fd714610a56578063e985e9c514610a6d576102ff565b8063a22cb4651461093e578063aa66898514610967578063b88d4fde14610992578063be3495c4146109bb578063c1750e56146109d7578063c87b56dd146109ee576102ff565b80638a333b501161014957806395d89b411161012357806395d89b41146108a15780639aa1ce24146108cc5780639b6b923a146108e8578063a035b1fe14610913576102ff565b80638a333b50146108225780638da5cb5b1461084d57806391b7f5ed14610878576102ff565b8063715018a61461077257806379112a79146107895780637daf06fd146107a05780637e8c98e0146107c9578063878f02f5146107e0578063892ec1061461080b576102ff565b80633895ef101161024f5780634a99e1381161020857806355f804b3116101e257806355f804b3146106b85780636352211e146106e15780636b9e26e21461071e57806370a0823114610735576102ff565b80634a99e1381461063b5780634c261247146106525780634f6ccce71461067b576102ff565b80633895ef10146105625780633ccfd60b1461058d57806342842e0e146105a457806345bc64e4146105cd57806347e7405f146105f6578063480de09314610612576102ff565b8063174235dd116102bc57806323b872dd1161029657806323b872dd146104b75780632f745c59146104e057806335ded5b91461051d578063375a069a14610539576102ff565b8063174235dd1461043857806318160ddd1461044f57806318c63f241461047a576102ff565b806301ffc9a714610304578063028850971461034157806306fdde031461037e578063081812fc146103a9578063095ea7b3146103e65780630a342d8e1461040f575b600080fd5b34801561031057600080fd5b5061032b60048036038101906103269190613d97565b610b4e565b604051610338919061444c565b60405180910390f35b34801561034d57600080fd5b5061036860048036038101906103639190613e87565b610c98565b60405161037591906143e5565b60405180910390f35b34801561038a57600080fd5b50610393610cd7565b6040516103a09190614467565b60405180910390f35b3480156103b557600080fd5b506103d060048036038101906103cb9190613e87565b610d69565b6040516103dd91906143e5565b60405180910390f35b3480156103f257600080fd5b5061040d60048036038101906104089190613d0e565b610dee565b005b34801561041b57600080fd5b5061043660048036038101906104319190613e87565b610f07565b005b34801561044457600080fd5b5061044d610f19565b005b34801561045b57600080fd5b50610464610f3e565b6040516104719190614869565b60405180910390f35b34801561048657600080fd5b506104a1600480360381019061049c9190613b8b565b610f47565b6040516104ae919061444c565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d99190613bf8565b610ff2565b005b3480156104ec57600080fd5b5061050760048036038101906105029190613d0e565b611002565b6040516105149190614869565b60405180910390f35b61053760048036038101906105329190613e87565b611200565b005b34801561054557600080fd5b50610560600480360381019061055b9190613e87565b6114bc565b005b34801561056e57600080fd5b506105776114d1565b6040516105849190614869565b60405180910390f35b34801561059957600080fd5b506105a26114d7565b005b3480156105b057600080fd5b506105cb60048036038101906105c69190613bf8565b61152e565b005b3480156105d957600080fd5b506105f460048036038101906105ef9190613b8b565b61154e565b005b610610600480360381019061060b9190613e87565b6116e7565b005b34801561061e57600080fd5b5061063960048036038101906106349190613d4e565b611872565b005b34801561064757600080fd5b5061065061191a565b005b34801561065e57600080fd5b5061067960048036038101906106749190613e3e565b61193f565b005b34801561068757600080fd5b506106a2600480360381019061069d9190613e87565b61197c565b6040516106af9190614869565b60405180910390f35b3480156106c457600080fd5b506106df60048036038101906106da9190613df1565b6119cf565b005b3480156106ed57600080fd5b5061070860048036038101906107039190613e87565b6119ed565b60405161071591906143e5565b60405180910390f35b34801561072a57600080fd5b50610733611a03565b005b34801561074157600080fd5b5061075c60048036038101906107579190613b8b565b611a28565b6040516107699190614869565b60405180910390f35b34801561077e57600080fd5b50610787611b11565b005b34801561079557600080fd5b5061079e611b25565b005b3480156107ac57600080fd5b506107c760048036038101906107c29190613e87565b611b4a565b005b3480156107d557600080fd5b506107de611b9c565b005b3480156107ec57600080fd5b506107f5611bc1565b6040516108029190614869565b60405180910390f35b34801561081757600080fd5b50610820611bc7565b005b34801561082e57600080fd5b50610837611bec565b6040516108449190614869565b60405180910390f35b34801561085957600080fd5b50610862611bf6565b60405161086f91906143e5565b60405180910390f35b34801561088457600080fd5b5061089f600480360381019061089a9190613e87565b611c20565b005b3480156108ad57600080fd5b506108b6611c32565b6040516108c39190614467565b60405180910390f35b6108e660048036038101906108e19190613e87565b611cc4565b005b3480156108f457600080fd5b506108fd611dbb565b60405161090a9190614869565b60405180910390f35b34801561091f57600080fd5b50610928611dc1565b6040516109359190614869565b60405180910390f35b34801561094a57600080fd5b5061096560048036038101906109609190613cce565b611dcb565b005b34801561097357600080fd5b5061097c611f4c565b6040516109899190614869565b60405180910390f35b34801561099e57600080fd5b506109b960048036038101906109b49190613c4b565b611f52565b005b6109d560048036038101906109d09190613e87565b611fae565b005b3480156109e357600080fd5b506109ec61221a565b005b3480156109fa57600080fd5b50610a156004803603810190610a109190613e87565b61223f565b604051610a229190614467565b60405180910390f35b348015610a3757600080fd5b50610a406122e6565b604051610a4d9190614869565b60405180910390f35b348015610a6257600080fd5b50610a6b6122ec565b005b348015610a7957600080fd5b50610a946004803603810190610a8f9190613bb8565b612311565b604051610aa1919061444c565b60405180910390f35b348015610ab657600080fd5b50610ad16004803603810190610acc9190613b8b565b6123a5565b005b348015610adf57600080fd5b50610afa6004803603810190610af59190613b8b565b612413565b005b348015610b0857600080fd5b50610b236004803603810190610b1e9190613e87565b612497565b005b348015610b3157600080fd5b50610b4c6004803603810190610b479190613e87565b6124f2565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c1957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c8157507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c915750610c9082612504565b5b9050919050565b60098181548110610ca857600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054610ce690614c05565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1290614c05565b8015610d5f5780601f10610d3457610100808354040283529160200191610d5f565b820191906000526020600020905b815481529060010190602001808311610d4257829003601f168201915b5050505050905090565b6000610d748261256e565b610db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daa90614829565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610df9826119ed565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6190614709565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e8961257b565b73ffffffffffffffffffffffffffffffffffffffff161480610eb85750610eb781610eb261257b565b612311565b5b610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee906145c9565b60405180910390fd5b610f02838383612583565b505050565b610f0f612635565b80600f8190555050565b610f21612635565b6001601060016101000a81548160ff021916908315150217905550565b60008054905090565b6000806000905060005b600980549050811015610fe8578373ffffffffffffffffffffffffffffffffffffffff1660098281548110610f8957610f88614d9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610fd557600191505b8080610fe090614c68565b915050610f51565b5080915050919050565b610ffd8383836126b3565b505050565b600061100d83611a28565b821061104e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104590614489565b60405180910390fd5b6000611058610f3e565b905060008060005b838110156111be576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461115257806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111aa578684141561119b5781955050505050506111fa565b83806111a690614c68565b9450505b5080806111b690614c68565b915050611060565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f190614789565b60405180910390fd5b92915050565b6000805b60098054905081101561129f573373ffffffffffffffffffffffffffffffffffffffff166009828154811061123c5761123b614d9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561128c576001915061129f565b808061129790614c68565b915050611204565b50806112e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d7906145a9565b60405180910390fd5b601060029054906101000a900460ff1661132f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611326906146a9565b60405180910390fd5b600d548261133b610f3e565b61134591906149c0565b1115611386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137d90614589565b60405180910390fd5b60028211156113ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c1906144e9565b60405180910390fd5b600282601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461141791906149c0565b1115611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144f906147a9565b60405180910390fd5b81601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114a791906149c0565b925050819055506114b83383612c6c565b5050565b6114c4612635565b6114ce3382612c6c565b50565b600d5481565b6114df612635565b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561152a573d6000803e3d6000fd5b5050565b61154983838360405180602001604052806000815250611f52565b505050565b611556612635565b60005b6009805490508110156116e3578173ffffffffffffffffffffffffffffffffffffffff166009828154811061159157611590614d9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115dc576116d0565b600960016009805490506115f09190614ad5565b8154811061160157611600614d9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600982815481106116405761163f614d9e565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600980548061169a57611699614d6f565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555b80806116db90614c68565b915050611559565b5050565b80600b546116f59190614a47565b341015611737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172e90614809565b60405180910390fd5b601060019054906101000a900460ff16611786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177d906146c9565b60405180910390fd5b600c5481611792610f3e565b61179c91906149c0565b11156117dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d4906144a9565b60405180910390fd5b60008111611820576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611817906147c9565b60405180910390fd5b600f54811115611865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185c906144e9565b60405180910390fd5b61186f3382612c6c565b50565b61187a612635565b60005b815181101561191657600982828151811061189b5761189a614d9e565b5b60200260200101519080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808061190e90614c68565b91505061187d565b5050565b611922612635565b6001601060026101000a81548160ff021916908315150217905550565b611947612635565b6001600e60006101000a81548160ff02191690831515021790555080601290805190602001906119789291906137eb565b5050565b6000611986610f3e565b82106119c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119be90614549565b60405180910390fd5b819050919050565b6119d7612635565b8181601291906119e8929190613871565b505050565b60006119f882612c8a565b600001519050919050565b611a0b612635565b6000601060026101000a81548160ff021916908315150217905550565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a90906145e9565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611b19612635565b611b236000612e8d565b565b611b2d612635565b6000601060036101000a81548160ff021916908315150217905550565b611b52612635565b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611b98573d6000803e3d6000fd5b5050565b611ba4612635565b6001601060036101000a81548160ff021916908315150217905550565b600b5481565b611bcf612635565b6001601060006101000a81548160ff021916908315150217905550565b6000600c54905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c28612635565b80600b8190555050565b606060028054611c4190614c05565b80601f0160208091040260200160405190810160405280929190818152602001828054611c6d90614c05565b8015611cba5780601f10611c8f57610100808354040283529160200191611cba565b820191906000526020600020905b815481529060010190602001808311611c9d57829003601f168201915b5050505050905090565b601060039054906101000a900460ff16611d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0a906146a9565b60405180910390fd5b600d5481611d1f610f3e565b611d2991906149c0565b1115611d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6190614589565b60405180910390fd5b6002811115611dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da5906144e9565b60405180910390fd5b611db83382612c6c565b50565b600f5481565b6000600b54905090565b611dd361257b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3890614669565b60405180910390fd5b8060066000611e4e61257b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611efb61257b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f40919061444c565b60405180910390a35050565b600c5481565b611f5d8484846126b3565b611f6984848484612f53565b611fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9f90614729565b60405180910390fd5b50505050565b6000805b60098054905081101561204d573373ffffffffffffffffffffffffffffffffffffffff1660098281548110611fea57611fe9614d9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561203a576001915061204d565b808061204590614c68565b915050611fb2565b508061208e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612085906145a9565b60405180910390fd5b81600b5461209c9190614a47565b3410156120de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d590614809565b60405180910390fd5b601060009054906101000a900460ff1661212d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612124906146c9565b60405180910390fd5b600c5482612139610f3e565b61214391906149c0565b1115612184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217b906144a9565b60405180910390fd5b600082116121c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121be906147c9565b60405180910390fd5b600f5482111561220c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612203906146e9565b60405180910390fd5b6122163383612c6c565b5050565b612222612635565b6000601060016101000a81548160ff021916908315150217905550565b606061224a8261256e565b612289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228090614649565b60405180910390fd5b60006122936130ea565b905060008151116122b357604051806020016040528060008152506122de565b806122bd8461317c565b6040516020016122ce9291906143c1565b6040516020818303038152906040525b915050919050565b60075481565b6122f4612635565b6000601060006101000a81548160ff021916908315150217905550565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6123ad612635565b6009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61241b612635565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561248b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612482906144c9565b60405180910390fd5b61249481612e8d565b50565b61249f612635565b6124a7610f3e565b81106124e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124df90614529565b60405180910390fd5b80600c8190555050565b6124fa612635565b80600d8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b61263d61257b565b73ffffffffffffffffffffffffffffffffffffffff1661265b611bf6565b73ffffffffffffffffffffffffffffffffffffffff16146126b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a890614629565b60405180910390fd5b565b60006126be82612c8a565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166126e561257b565b73ffffffffffffffffffffffffffffffffffffffff161480612741575061270a61257b565b73ffffffffffffffffffffffffffffffffffffffff1661272984610d69565b73ffffffffffffffffffffffffffffffffffffffff16145b8061275d575061275c826000015161275761257b565b612311565b5b90508061279f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279690614689565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280890614609565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612881576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287890614569565b60405180910390fd5b61288e85858560016132dd565b61289e6000848460000151612583565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661290c9190614aa1565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166129b0919061497a565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612ab691906149c0565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612bfc57612b2c8161256e565b15612bfb576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c6486868660016132e3565b505050505050565b612c868282604051806020016040528060008152506132e9565b5050565b612c926138f7565b612c9b8261256e565b612cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd190614509565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000648310612d3e5760017f000000000000000000000000000000000000000000000000000000000000006484612d319190614ad5565b612d3b91906149c0565b90505b60008390505b818110612e4c576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e3857809350505050612e88565b508080612e4490614bdb565b915050612d44565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7f906147e9565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612f748473ffffffffffffffffffffffffffffffffffffffff166137c8565b156130dd578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f9d61257b565b8786866040518563ffffffff1660e01b8152600401612fbf9493929190614400565b602060405180830381600087803b158015612fd957600080fd5b505af192505050801561300a57506040513d601f19601f820116820180604052508101906130079190613dc4565b60015b61308d573d806000811461303a576040519150601f19603f3d011682016040523d82523d6000602084013e61303f565b606091505b50600081511415613085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307c90614729565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130e2565b600190505b949350505050565b6060601280546130f990614c05565b80601f016020809104026020016040519081016040528092919081815260200182805461312590614c05565b80156131725780601f1061314757610100808354040283529160200191613172565b820191906000526020600020905b81548152906001019060200180831161315557829003601f168201915b5050505050905090565b606060008214156131c4576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132d8565b600082905060005b600082146131f65780806131df90614c68565b915050600a826131ef9190614a16565b91506131cc565b60008167ffffffffffffffff81111561321257613211614dcd565b5b6040519080825280601f01601f1916602001820160405280156132445781602001600182028036833780820191505090505b5090505b600085146132d15760018261325d9190614ad5565b9150600a8561326c9190614cb1565b603061327891906149c0565b60f81b81838151811061328e5761328d614d9e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132ca9190614a16565b9450613248565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561335f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335690614769565b60405180910390fd5b6133688161256e565b156133a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339f90614749565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000006483111561340b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340290614849565b60405180910390fd5b61341860008583866132dd565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151613515919061497a565b6fffffffffffffffffffffffffffffffff16815260200185836020015161353c919061497a565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156137ab57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461374b6000888488612f53565b61378a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378190614729565b60405180910390fd5b818061379590614c68565b92505080806137a390614c68565b9150506136da565b50806000819055506137c060008785886132e3565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546137f790614c05565b90600052602060002090601f0160209004810192826138195760008555613860565b82601f1061383257805160ff1916838001178555613860565b82800160010185558215613860579182015b8281111561385f578251825591602001919060010190613844565b5b50905061386d9190613931565b5090565b82805461387d90614c05565b90600052602060002090601f01602090048101928261389f57600085556138e6565b82601f106138b857803560ff19168380011785556138e6565b828001600101855582156138e6579182015b828111156138e55782358255916020019190600101906138ca565b5b5090506138f39190613931565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561394a576000816000905550600101613932565b5090565b600061396161395c846148a9565b614884565b9050808382526020820190508285602086028201111561398457613983614e06565b5b60005b858110156139b4578161399a8882613a42565b845260208401935060208301925050600181019050613987565b5050509392505050565b60006139d16139cc846148d5565b614884565b9050828152602081018484840111156139ed576139ec614e0b565b5b6139f8848285614b99565b509392505050565b6000613a13613a0e84614906565b614884565b905082815260208101848484011115613a2f57613a2e614e0b565b5b613a3a848285614b99565b509392505050565b600081359050613a51816155f4565b92915050565b600082601f830112613a6c57613a6b614e01565b5b8135613a7c84826020860161394e565b91505092915050565b600081359050613a948161560b565b92915050565b600081359050613aa981615622565b92915050565b600081519050613abe81615622565b92915050565b600082601f830112613ad957613ad8614e01565b5b8135613ae98482602086016139be565b91505092915050565b60008083601f840112613b0857613b07614e01565b5b8235905067ffffffffffffffff811115613b2557613b24614dfc565b5b602083019150836001820283011115613b4157613b40614e06565b5b9250929050565b600082601f830112613b5d57613b5c614e01565b5b8135613b6d848260208601613a00565b91505092915050565b600081359050613b8581615639565b92915050565b600060208284031215613ba157613ba0614e15565b5b6000613baf84828501613a42565b91505092915050565b60008060408385031215613bcf57613bce614e15565b5b6000613bdd85828601613a42565b9250506020613bee85828601613a42565b9150509250929050565b600080600060608486031215613c1157613c10614e15565b5b6000613c1f86828701613a42565b9350506020613c3086828701613a42565b9250506040613c4186828701613b76565b9150509250925092565b60008060008060808587031215613c6557613c64614e15565b5b6000613c7387828801613a42565b9450506020613c8487828801613a42565b9350506040613c9587828801613b76565b925050606085013567ffffffffffffffff811115613cb657613cb5614e10565b5b613cc287828801613ac4565b91505092959194509250565b60008060408385031215613ce557613ce4614e15565b5b6000613cf385828601613a42565b9250506020613d0485828601613a85565b9150509250929050565b60008060408385031215613d2557613d24614e15565b5b6000613d3385828601613a42565b9250506020613d4485828601613b76565b9150509250929050565b600060208284031215613d6457613d63614e15565b5b600082013567ffffffffffffffff811115613d8257613d81614e10565b5b613d8e84828501613a57565b91505092915050565b600060208284031215613dad57613dac614e15565b5b6000613dbb84828501613a9a565b91505092915050565b600060208284031215613dda57613dd9614e15565b5b6000613de884828501613aaf565b91505092915050565b60008060208385031215613e0857613e07614e15565b5b600083013567ffffffffffffffff811115613e2657613e25614e10565b5b613e3285828601613af2565b92509250509250929050565b600060208284031215613e5457613e53614e15565b5b600082013567ffffffffffffffff811115613e7257613e71614e10565b5b613e7e84828501613b48565b91505092915050565b600060208284031215613e9d57613e9c614e15565b5b6000613eab84828501613b76565b91505092915050565b613ebd81614b09565b82525050565b613ecc81614b1b565b82525050565b6000613edd82614937565b613ee7818561494d565b9350613ef7818560208601614ba8565b613f0081614e1a565b840191505092915050565b6000613f1682614942565b613f20818561495e565b9350613f30818560208601614ba8565b613f3981614e1a565b840191505092915050565b6000613f4f82614942565b613f59818561496f565b9350613f69818560208601614ba8565b80840191505092915050565b6000613f8260228361495e565b9150613f8d82614e2b565b604082019050919050565b6000613fa5600a8361495e565b9150613fb082614e7a565b602082019050919050565b6000613fc860268361495e565b9150613fd382614ea3565b604082019050919050565b6000613feb60128361495e565b9150613ff682614ef2565b602082019050919050565b600061400e602a8361495e565b915061401982614f1b565b604082019050919050565b6000614031602b8361495e565b915061403c82614f6a565b604082019050919050565b600061405460238361495e565b915061405f82614fb9565b604082019050919050565b600061407760258361495e565b915061408282615008565b604082019050919050565b600061409a60198361495e565b91506140a582615057565b602082019050919050565b60006140bd60278361495e565b91506140c882615080565b604082019050919050565b60006140e060398361495e565b91506140eb826150cf565b604082019050919050565b6000614103602b8361495e565b915061410e8261511e565b604082019050919050565b600061412660268361495e565b91506141318261516d565b604082019050919050565b600061414960208361495e565b9150614154826151bc565b602082019050919050565b600061416c602f8361495e565b9150614177826151e5565b604082019050919050565b600061418f601a8361495e565b915061419a82615234565b602082019050919050565b60006141b260328361495e565b91506141bd8261525d565b604082019050919050565b60006141d5601a8361495e565b91506141e0826152ac565b602082019050919050565b60006141f8601f8361495e565b9150614203826152d5565b602082019050919050565b600061421b60138361495e565b9150614226826152fe565b602082019050919050565b600061423e60228361495e565b915061424982615327565b604082019050919050565b600061426160338361495e565b915061426c82615376565b604082019050919050565b6000614284601d8361495e565b915061428f826153c5565b602082019050919050565b60006142a760218361495e565b91506142b2826153ee565b604082019050919050565b60006142ca602e8361495e565b91506142d58261543d565b604082019050919050565b60006142ed60158361495e565b91506142f88261548c565b602082019050919050565b600061431060188361495e565b915061431b826154b5565b602082019050919050565b6000614333602f8361495e565b915061433e826154de565b604082019050919050565b6000614356601e8361495e565b91506143618261552d565b602082019050919050565b6000614379602d8361495e565b915061438482615556565b604082019050919050565b600061439c60228361495e565b91506143a7826155a5565b604082019050919050565b6143bb81614b8f565b82525050565b60006143cd8285613f44565b91506143d98284613f44565b91508190509392505050565b60006020820190506143fa6000830184613eb4565b92915050565b60006080820190506144156000830187613eb4565b6144226020830186613eb4565b61442f60408301856143b2565b81810360608301526144418184613ed2565b905095945050505050565b60006020820190506144616000830184613ec3565b92915050565b600060208201905081810360008301526144818184613f0b565b905092915050565b600060208201905081810360008301526144a281613f75565b9050919050565b600060208201905081810360008301526144c281613f98565b9050919050565b600060208201905081810360008301526144e281613fbb565b9050919050565b6000602082019050818103600083015261450281613fde565b9050919050565b6000602082019050818103600083015261452281614001565b9050919050565b6000602082019050818103600083015261454281614024565b9050919050565b6000602082019050818103600083015261456281614047565b9050919050565b600060208201905081810360008301526145828161406a565b9050919050565b600060208201905081810360008301526145a28161408d565b9050919050565b600060208201905081810360008301526145c2816140b0565b9050919050565b600060208201905081810360008301526145e2816140d3565b9050919050565b60006020820190508181036000830152614602816140f6565b9050919050565b6000602082019050818103600083015261462281614119565b9050919050565b600060208201905081810360008301526146428161413c565b9050919050565b600060208201905081810360008301526146628161415f565b9050919050565b6000602082019050818103600083015261468281614182565b9050919050565b600060208201905081810360008301526146a2816141a5565b9050919050565b600060208201905081810360008301526146c2816141c8565b9050919050565b600060208201905081810360008301526146e2816141eb565b9050919050565b600060208201905081810360008301526147028161420e565b9050919050565b6000602082019050818103600083015261472281614231565b9050919050565b6000602082019050818103600083015261474281614254565b9050919050565b6000602082019050818103600083015261476281614277565b9050919050565b600060208201905081810360008301526147828161429a565b9050919050565b600060208201905081810360008301526147a2816142bd565b9050919050565b600060208201905081810360008301526147c2816142e0565b9050919050565b600060208201905081810360008301526147e281614303565b9050919050565b6000602082019050818103600083015261480281614326565b9050919050565b6000602082019050818103600083015261482281614349565b9050919050565b600060208201905081810360008301526148428161436c565b9050919050565b600060208201905081810360008301526148628161438f565b9050919050565b600060208201905061487e60008301846143b2565b92915050565b600061488e61489f565b905061489a8282614c37565b919050565b6000604051905090565b600067ffffffffffffffff8211156148c4576148c3614dcd565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156148f0576148ef614dcd565b5b6148f982614e1a565b9050602081019050919050565b600067ffffffffffffffff82111561492157614920614dcd565b5b61492a82614e1a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061498582614b53565b915061499083614b53565b9250826fffffffffffffffffffffffffffffffff038211156149b5576149b4614ce2565b5b828201905092915050565b60006149cb82614b8f565b91506149d683614b8f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a0b57614a0a614ce2565b5b828201905092915050565b6000614a2182614b8f565b9150614a2c83614b8f565b925082614a3c57614a3b614d11565b5b828204905092915050565b6000614a5282614b8f565b9150614a5d83614b8f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a9657614a95614ce2565b5b828202905092915050565b6000614aac82614b53565b9150614ab783614b53565b925082821015614aca57614ac9614ce2565b5b828203905092915050565b6000614ae082614b8f565b9150614aeb83614b8f565b925082821015614afe57614afd614ce2565b5b828203905092915050565b6000614b1482614b6f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614bc6578082015181840152602081019050614bab565b83811115614bd5576000848401525b50505050565b6000614be682614b8f565b91506000821415614bfa57614bf9614ce2565b5b600182039050919050565b60006002820490506001821680614c1d57607f821691505b60208210811415614c3157614c30614d40565b5b50919050565b614c4082614e1a565b810181811067ffffffffffffffff82111715614c5f57614c5e614dcd565b5b80604052505050565b6000614c7382614b8f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ca657614ca5614ce2565b5b600182019050919050565b6000614cbc82614b8f565b9150614cc783614b8f565b925082614cd757614cd6614d11565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f416c6c206d696e74656400000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f74206d696e74206f76657220320000000000000000000000000000600082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f416d6f756e742063616e6e6f74206265206c6172676572207468656e2063757260008201527f72656e7420616d6f756e74000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4672656520746f6b656e20697320616c6c20636c61696d656400000000000000600082015250565b7f4d696e7465723a2063616c6c6572206973206e6f7420616e20616c6c6f77656460008201527f206d696e74657200000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f46726565206d696e74696e67206973206e6f7420616374697665000000000000600082015250565b7f4d696e742046756e6374696f6e206973206e6f74204163746976652079657400600082015250565b7f43616e6e6f74206d696e74206f76657220313500000000000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f4672656520546f6b656e20697320636c61696d65640000000000000000000000600082015250565b7f43616e6e6f74206d696e742030206f722062656c6f7720300000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f45746865722076616c75652073656e74206973206e6f7420656e6f7567680000600082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6155fd81614b09565b811461560857600080fd5b50565b61561481614b1b565b811461561f57600080fd5b50565b61562b81614b27565b811461563657600080fd5b50565b61564281614b8f565b811461564d57600080fd5b5056fea2646970667358221220d9fd76a6d70507efb4558eb95eb370654630e4f5ebbe53ad2de419a9a6e66a2864736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000d800000000000000000000000000000000000000000000000000000000000000d8000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000d80
-----Decoded View---------------
Arg [0] : supply (uint256): 3456
Arg [1] : fsupply (uint256): 3456
Arg [2] : maxBatchSize_ (uint256): 100
Arg [3] : collectionSize_ (uint256): 3456
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000d80
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000d80
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000d80
Deployed Bytecode Sourcemap
43235:4704:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30859:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7674:32;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32585:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34110:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33673:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45768:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47019:86;;;;;;;;;;;;;:::i;:::-;;29420:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8492:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34960:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30051:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44585:418;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45860:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43470:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45971:145;;;;;;;;;;;;;:::i;:::-;;35165:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8859:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45011:443;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8274:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46656:80;;;;;;;;;;;;;:::i;:::-;;46248:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29583:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47732:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32408:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46747:84;;;;;;;;;;;;;:::i;:::-;;31285:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6738:103;;;;;;;;;;;;;:::i;:::-;;47113:94;;;;;;;;;;;;;:::i;:::-;;46128:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47313:90;;;;;;;;;;;;;:::i;:::-;;43386:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46839:80;;;;;;;;;;;;;:::i;:::-;;47412:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6090:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47834:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32740:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45462:298;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43522:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47519:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34378:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43435:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35385:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44124:449;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47215:90;;;;;;;;;;;;;:::i;:::-;;32901:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39800:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46927:84;;;;;;;;;;;;;:::i;:::-;;34715:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8139:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6996:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46471:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46373:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30859:370;30986:4;31031:25;31016:40;;;:11;:40;;;;:99;;;;31082:33;31067:48;;;:11;:48;;;;31016:99;:160;;;;31141:35;31126:50;;;:11;:50;;;;31016:160;:207;;;;31187:36;31211:11;31187:23;:36::i;:::-;31016:207;31002:221;;30859:370;;;:::o;7674:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32585:94::-;32639:13;32668:5;32661:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32585:94;:::o;34110:204::-;34178:7;34202:16;34210:7;34202;:16::i;:::-;34194:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;34284:15;:24;34300:7;34284:24;;;;;;;;;;;;;;;;;;;;;34277:31;;34110:204;;;:::o;33673:379::-;33742:13;33758:24;33774:7;33758:15;:24::i;:::-;33742:40;;33803:5;33797:11;;:2;:11;;;;33789:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33888:5;33872:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;33897:37;33914:5;33921:12;:10;:12::i;:::-;33897:16;:37::i;:::-;33872:62;33856:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;34018:28;34027:2;34031:7;34040:5;34018:8;:28::i;:::-;33735:317;33673:379;;:::o;45768:84::-;5976:13;:11;:13::i;:::-;45838:6:::1;45828:9;:16;;;;45768:84:::0;:::o;47019:86::-;5976:13;:11;:13::i;:::-;47093:4:::1;47075:17;;:22;;;;;;;;;;;;;;;;;;47019:86::o:0;29420:94::-;29473:7;29496:12;;29489:19;;29420:94;:::o;8492:322::-;8562:4;8578:14;8593:5;8578:20;;8615:9;8610:170;8630:15;:22;;;;8626:1;:26;8610:170;;;8700:14;8678:36;;:15;8694:1;8678:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:36;;;8674:95;;;8749:4;8739:14;;8674:95;8654:3;;;;;:::i;:::-;;;;8610:170;;;;8797:9;8790:16;;;8492:322;;;:::o;34960:142::-;35068:28;35078:4;35084:2;35088:7;35068:9;:28::i;:::-;34960:142;;;:::o;30051:744::-;30160:7;30195:16;30205:5;30195:9;:16::i;:::-;30187:5;:24;30179:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;30257:22;30282:13;:11;:13::i;:::-;30257:38;;30302:19;30332:25;30382:9;30377:350;30401:14;30397:1;:18;30377:350;;;30431:31;30465:11;:14;30477:1;30465:14;;;;;;;;;;;30431:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30518:1;30492:28;;:9;:14;;;:28;;;30488:89;;30553:9;:14;;;30533:34;;30488:89;30610:5;30589:26;;:17;:26;;;30585:135;;;30647:5;30632:11;:20;30628:59;;;30674:1;30667:8;;;;;;;;;30628:59;30697:13;;;;;:::i;:::-;;;;30585:135;30422:305;30417:3;;;;;:::i;:::-;;;;30377:350;;;;30733:56;;;;;;;;;;:::i;:::-;;;;;;;;30051:744;;;;;:::o;44585:418::-;7748:14;7780:9;7775:190;7795:15;:22;;;;7791:1;:26;7775:190;;;7865:10;7843:32;;:15;7859:1;7843:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:32;;;7839:115;;;7908:4;7896:16;;7933:5;;7839:115;7819:3;;;;;:::i;:::-;;;;7775:190;;;;7985:9;7977:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;44666:11:::1;;;;;;;;;;;44658:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;44751:10;;44741:6;44727:13;:11;:13::i;:::-;:20;;;;:::i;:::-;:34;;44719:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;44817:1;44809:6;:9;;44801:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;44890:1;44880:6;44859:8;:20;44868:10;44859:20;;;;;;;;;;;;;;;;:27;;;;:::i;:::-;:32;;44851:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;44949:6;44927:8;:20;44936:10;44927:20;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;44966:29;44976:10;44988:6;44966:9;:29::i;:::-;7737:323:::0;44585:418;:::o;45860:99::-;5976:13;:11;:13::i;:::-;45922:29:::1;45932:10;45944:6;45922:9;:29::i;:::-;45860:99:::0;:::o;43470:22::-;;;;:::o;45971:145::-;5976:13;:11;:13::i;:::-;46021:15:::1;46039:21;46021:39;;46079:10;46071:28;;:37;46100:7;46071:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;46010:106;45971:145::o:0;35165:157::-;35277:39;35294:4;35300:2;35304:7;35277:39;;;;;;;;;;;;:16;:39::i;:::-;35165:157;;;:::o;8859:371::-;5976:13;:11;:13::i;:::-;8949:9:::1;8944:279;8964:15;:22;;;;8960:1;:26;8944:279;;;9034:14;9012:36;;:15;9028:1;9012:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:36;;;9008:85;;9069:8;;9008:85;9130:15;9171:1;9146:15;:22;;;;:26;;;;:::i;:::-;9130:43;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9109:15;9125:1;9109:18;;;;;;;;:::i;:::-;;;;;;;;;;:64;;;;;;;;;;;;;;;;;;9190:15;:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;8944:279;8988:3;;;;;:::i;:::-;;;;8944:279;;;;8859:371:::0;:::o;45011:443::-;45113:6;45097:13;;:22;;;;:::i;:::-;45084:9;:35;;45076:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;45174:17;;;;;;;;;;;45166:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;45267:13;;45259:6;45245:13;:11;:13::i;:::-;:20;;;;:::i;:::-;:35;;45237:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;45320:1;45313:6;:8;45305:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;45376:9;;45368:6;:17;;45360:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;45418:28;45428:10;45439:6;45418:9;:28::i;:::-;45011:443;:::o;8274:210::-;5976:13;:11;:13::i;:::-;8372:9:::1;8367:110;8387:14;:21;8383:1;:25;8367:110;;;8426:15;8447:14;8462:1;8447:17;;;;;;;;:::i;:::-;;;;;;;;8426:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8410:3;;;;;:::i;:::-;;;;8367:110;;;;8274:210:::0;:::o;46656:80::-;5976:13;:11;:13::i;:::-;46724:4:::1;46712:11;;:16;;;;;;;;;;;;;;;;;;46656:80::o:0;46248:117::-;5976:13;:11;:13::i;:::-;46324:4:::1;46317:6;;:11;;;;;;;;;;;;;;;;;;46350:7;46339:8;:18;;;;;;;;;;;;:::i;:::-;;46248:117:::0;:::o;29583:177::-;29650:7;29682:13;:11;:13::i;:::-;29674:5;:21;29666:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;29749:5;29742:12;;29583:177;;;:::o;47732:91::-;5976:13;:11;:13::i;:::-;47812:3:::1;;47801:8;:14;;;;;;;:::i;:::-;;47732:91:::0;;:::o;32408:118::-;32472:7;32495:20;32507:7;32495:11;:20::i;:::-;:25;;;32488:32;;32408:118;;;:::o;46747:84::-;5976:13;:11;:13::i;:::-;46818:5:::1;46806:11;;:17;;;;;;;;;;;;;;;;;;46747:84::o:0;31285:211::-;31349:7;31390:1;31373:19;;:5;:19;;;;31365:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;31462:12;:19;31475:5;31462:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;31454:36;;31447:43;;31285:211;;;:::o;6738:103::-;5976:13;:11;:13::i;:::-;6803:30:::1;6830:1;6803:18;:30::i;:::-;6738:103::o:0;47113:94::-;5976:13;:11;:13::i;:::-;47194:5:::1;47176:17;;:23;;;;;;;;;;;;;;;;;;47113:94::o:0;46128:112::-;5976:13;:11;:13::i;:::-;46204:10:::1;46196:28;;:36;46225:6;46196:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;46128:112:::0;:::o;47313:90::-;5976:13;:11;:13::i;:::-;47391:4:::1;47373:17;;:22;;;;;;;;;;;;;;;;;;47313:90::o:0;43386:41::-;;;;:::o;46839:80::-;5976:13;:11;:13::i;:::-;46907:4:::1;46895:11;;:16;;;;;;;;;;;;;;;;;;46839:80::o:0;47412:99::-;47463:7;47490:13;;47483:20;;47412:99;:::o;6090:87::-;6136:7;6163:6;;;;;;;;;;;6156:13;;6090:87;:::o;47834:89::-;5976:13;:11;:13::i;:::-;47909:6:::1;47895:13;:20;;;;47834:89:::0;:::o;32740:98::-;32796:13;32825:7;32818:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32740:98;:::o;45462:298::-;45532:17;;;;;;;;;;;45524:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;45623:10;;45613:6;45599:13;:11;:13::i;:::-;:20;;;;:::i;:::-;:34;;45591:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;45689:1;45681:6;:9;;45673:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;45723:29;45733:10;45745:6;45723:9;:29::i;:::-;45462:298;:::o;43522:23::-;;;;:::o;47519:92::-;47565:7;47590:13;;47583:20;;47519:92;:::o;34378:274::-;34481:12;:10;:12::i;:::-;34469:24;;:8;:24;;;;34461:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;34578:8;34533:18;:32;34552:12;:10;:12::i;:::-;34533:32;;;;;;;;;;;;;;;:42;34566:8;34533:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34627:8;34598:48;;34613:12;:10;:12::i;:::-;34598:48;;;34637:8;34598:48;;;;;;:::i;:::-;;;;;;;;34378:274;;:::o;43435:28::-;;;;:::o;35385:311::-;35522:28;35532:4;35538:2;35542:7;35522:9;:28::i;:::-;35573:48;35596:4;35602:2;35606:7;35615:5;35573:22;:48::i;:::-;35557:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;35385:311;;;;:::o;44124:449::-;7748:14;7780:9;7775:190;7795:15;:22;;;;7791:1;:26;7775:190;;;7865:10;7843:32;;:15;7859:1;7843:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:32;;;7839:115;;;7908:4;7896:16;;7933:5;;7839:115;7819:3;;;;;:::i;:::-;;;;7775:190;;;;7985:9;7977:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;44236:6:::1;44220:13;;:22;;;;:::i;:::-;44207:9;:35;;44199:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;44297:11;;;;;;;;;;;44289:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;44384:13;;44376:6;44362:13;:11;:13::i;:::-;:20;;;;:::i;:::-;:35;;44354:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;44437:1;44430:6;:8;44422:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;44494:9;;44486:6;:17;;44478:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;44537:28;44547:10;44558:6;44537:9;:28::i;:::-;7737:323:::0;44124:449;:::o;47215:90::-;5976:13;:11;:13::i;:::-;47292:5:::1;47274:17;;:23;;;;;;;;;;;;;;;;;;47215:90::o:0;32901:394::-;32999:13;33040:16;33048:7;33040;:16::i;:::-;33024:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;33130:21;33154:10;:8;:10::i;:::-;33130:34;;33209:1;33191:7;33185:21;:25;:104;;;;;;;;;;;;;;;;;33246:7;33255:18;:7;:16;:18::i;:::-;33229:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33185:104;33171:118;;;32901:394;;;:::o;39800:43::-;;;;:::o;46927:84::-;5976:13;:11;:13::i;:::-;46998:5:::1;46986:11;;:17;;;;;;;;;;;;;;;;;;46927:84::o:0;34715:186::-;34837:4;34860:18;:25;34879:5;34860:25;;;;;;;;;;;;;;;:35;34886:8;34860:35;;;;;;;;;;;;;;;;;;;;;;;;;34853:42;;34715:186;;;;:::o;8139:126::-;5976:13;:11;:13::i;:::-;8221:15:::1;8242:14;8221:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8139:126:::0;:::o;6996:201::-;5976:13;:11;:13::i;:::-;7105:1:::1;7085:22;;:8;:22;;;;7077:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7161:28;7180:8;7161:18;:28::i;:::-;6996:201:::0;:::o;46471:177::-;5976:13;:11;:13::i;:::-;46549::::1;:11;:13::i;:::-;46540:6;:22;46532:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;46634:6;46620:13;:20;;;;46471:177:::0;:::o;46373:90::-;5976:13;:11;:13::i;:::-;46449:6:::1;46438:10;:17;;;;46373:90:::0;:::o;20626:157::-;20711:4;20750:25;20735:40;;;:11;:40;;;;20728:47;;20626:157;;;:::o;35935:105::-;35992:4;36022:12;;36012:7;:22;36005:29;;35935:105;;;:::o;4641:98::-;4694:7;4721:10;4714:17;;4641:98;:::o;39622:172::-;39746:2;39719:15;:24;39735:7;39719:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;39780:7;39776:2;39760:28;;39769:5;39760:28;;;;;;;;;;;;39622:172;;;:::o;6255:132::-;6330:12;:10;:12::i;:::-;6319:23;;:7;:5;:7::i;:::-;:23;;;6311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6255:132::o;37987:1529::-;38084:35;38122:20;38134:7;38122:11;:20::i;:::-;38084:58;;38151:22;38193:13;:18;;;38177:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;38246:12;:10;:12::i;:::-;38222:36;;:20;38234:7;38222:11;:20::i;:::-;:36;;;38177:81;:142;;;;38269:50;38286:13;:18;;;38306:12;:10;:12::i;:::-;38269:16;:50::i;:::-;38177:142;38151:169;;38345:17;38329:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;38477:4;38455:26;;:13;:18;;;:26;;;38439:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;38566:1;38552:16;;:2;:16;;;;38544:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38619:43;38641:4;38647:2;38651:7;38660:1;38619:21;:43::i;:::-;38719:49;38736:1;38740:7;38749:13;:18;;;38719:8;:49::i;:::-;38807:1;38777:12;:18;38790:4;38777:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;38843:1;38815:12;:16;38828:2;38815:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;38874:43;;;;;;;;38889:2;38874:43;;;;;;38900:15;38874:43;;;;;38851:11;:20;38863:7;38851:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39145:19;39177:1;39167:7;:11;;;;:::i;:::-;39145:33;;39230:1;39189:43;;:11;:24;39201:11;39189:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;39185:236;;;39247:20;39255:11;39247:7;:20::i;:::-;39243:171;;;39307:97;;;;;;;;39334:13;:18;;;39307:97;;;;;;39365:13;:28;;;39307:97;;;;;39280:11;:24;39292:11;39280:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39243:171;39185:236;39453:7;39449:2;39434:27;;39443:4;39434:27;;;;;;;;;;;;39468:42;39489:4;39495:2;39499:7;39508:1;39468:20;:42::i;:::-;38077:1439;;;37987:1529;;;:::o;36046:98::-;36111:27;36121:2;36125:8;36111:27;;;;;;;;;;;;:9;:27::i;:::-;36046:98;;:::o;31748:606::-;31824:21;;:::i;:::-;31865:16;31873:7;31865;:16::i;:::-;31857:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31937:26;31985:12;31974:7;:23;31970:93;;32054:1;32039:12;32029:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;32008:47;;31970:93;32076:12;32091:7;32076:22;;32071:212;32108:18;32100:4;:26;32071:212;;32145:31;32179:11;:17;32191:4;32179:17;;;;;;;;;;;32145:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32235:1;32209:28;;:9;:14;;;:28;;;32205:71;;32257:9;32250:16;;;;;;;32205:71;32136:147;32128:6;;;;;:::i;:::-;;;;32071:212;;;;32291:57;;;;;;;;;;:::i;:::-;;;;;;;;31748:606;;;;:::o;7357:191::-;7431:16;7450:6;;;;;;;;;;;7431:25;;7476:8;7467:6;;:17;;;;;;;;;;;;;;;;;;7531:8;7500:40;;7521:8;7500:40;;;;;;;;;;;;7420:128;7357:191;:::o;41337:690::-;41474:4;41491:15;:2;:13;;;:15::i;:::-;41487:535;;;41546:2;41530:36;;;41567:12;:10;:12::i;:::-;41581:4;41587:7;41596:5;41530:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41517:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41778:1;41761:6;:13;:18;41757:215;;;41794:61;;;;;;;;;;:::i;:::-;;;;;;;;41757:215;41940:6;41934:13;41925:6;41921:2;41917:15;41910:38;41517:464;41662:45;;;41652:55;;;:6;:55;;;;41645:62;;;;;41487:535;42010:4;42003:11;;41337:690;;;;;;;:::o;47619:101::-;47671:13;47704:8;47697:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47619:101;:::o;1895:723::-;1951:13;2181:1;2172:5;:10;2168:53;;;2199:10;;;;;;;;;;;;;;;;;;;;;2168:53;2231:12;2246:5;2231:20;;2262:14;2287:78;2302:1;2294:4;:9;2287:78;;2320:8;;;;;:::i;:::-;;;;2351:2;2343:10;;;;;:::i;:::-;;;2287:78;;;2375:19;2407:6;2397:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2375:39;;2425:154;2441:1;2432:5;:10;2425:154;;2469:1;2459:11;;;;;:::i;:::-;;;2536:2;2528:5;:10;;;;:::i;:::-;2515:2;:24;;;;:::i;:::-;2502:39;;2485:6;2492;2485:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2565:2;2556:11;;;;;:::i;:::-;;;2425:154;;;2603:6;2589:21;;;;;1895:723;;;;:::o;42489:141::-;;;;;:::o;43016:140::-;;;;;:::o;36483:1272::-;36588:20;36611:12;;36588:35;;36652:1;36638:16;;:2;:16;;;;36630:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;36829:21;36837:12;36829:7;:21::i;:::-;36828:22;36820:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36911:12;36899:8;:24;;36891:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;36971:61;37001:1;37005:2;37009:12;37023:8;36971:21;:61::i;:::-;37041:30;37074:12;:16;37087:2;37074:16;;;;;;;;;;;;;;;37041:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37116:119;;;;;;;;37166:8;37136:11;:19;;;:39;;;;:::i;:::-;37116:119;;;;;;37219:8;37184:11;:24;;;:44;;;;:::i;:::-;37116:119;;;;;37097:12;:16;37110:2;37097:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37270:43;;;;;;;;37285:2;37270:43;;;;;;37296:15;37270:43;;;;;37242:11;:25;37254:12;37242:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37322:20;37345:12;37322:35;;37371:9;37366:281;37390:8;37386:1;:12;37366:281;;;37444:12;37440:2;37419:38;;37436:1;37419:38;;;;;;;;;;;;37484:59;37515:1;37519:2;37523:12;37537:5;37484:22;:59::i;:::-;37466:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;37625:14;;;;;:::i;:::-;;;;37400:3;;;;;:::i;:::-;;;;37366:281;;;;37670:12;37655;:27;;;;37689:60;37718:1;37722:2;37726:12;37740:8;37689:20;:60::i;:::-;36581:1174;;;36483:1272;;;:::o;10470:326::-;10530:4;10787:1;10765:7;:19;;;:23;10758:30;;10470:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:553::-;2982:8;2992:6;3042:3;3035:4;3027:6;3023:17;3019:27;3009:122;;3050:79;;:::i;:::-;3009:122;3163:6;3150:20;3140:30;;3193:18;3185:6;3182:30;3179:117;;;3215:79;;:::i;:::-;3179:117;3329:4;3321:6;3317:17;3305:29;;3383:3;3375:4;3367:6;3363:17;3353:8;3349:32;3346:41;3343:128;;;3390:79;;:::i;:::-;3343:128;2924:553;;;;;:::o;3497:340::-;3553:5;3602:3;3595:4;3587:6;3583:17;3579:27;3569:122;;3610:79;;:::i;:::-;3569:122;3727:6;3714:20;3752:79;3827:3;3819:6;3812:4;3804:6;3800:17;3752:79;:::i;:::-;3743:88;;3559:278;3497:340;;;;:::o;3843:139::-;3889:5;3927:6;3914:20;3905:29;;3943:33;3970:5;3943:33;:::i;:::-;3843:139;;;;:::o;3988:329::-;4047:6;4096:2;4084:9;4075:7;4071:23;4067:32;4064:119;;;4102:79;;:::i;:::-;4064:119;4222:1;4247:53;4292:7;4283:6;4272:9;4268:22;4247:53;:::i;:::-;4237:63;;4193:117;3988:329;;;;:::o;4323:474::-;4391:6;4399;4448:2;4436:9;4427:7;4423:23;4419:32;4416:119;;;4454:79;;:::i;:::-;4416:119;4574:1;4599:53;4644:7;4635:6;4624:9;4620:22;4599:53;:::i;:::-;4589:63;;4545:117;4701:2;4727:53;4772:7;4763:6;4752:9;4748:22;4727:53;:::i;:::-;4717:63;;4672:118;4323:474;;;;;:::o;4803:619::-;4880:6;4888;4896;4945:2;4933:9;4924:7;4920:23;4916:32;4913:119;;;4951:79;;:::i;:::-;4913:119;5071:1;5096:53;5141:7;5132:6;5121:9;5117:22;5096:53;:::i;:::-;5086:63;;5042:117;5198:2;5224:53;5269:7;5260:6;5249:9;5245:22;5224:53;:::i;:::-;5214:63;;5169:118;5326:2;5352:53;5397:7;5388:6;5377:9;5373:22;5352:53;:::i;:::-;5342:63;;5297:118;4803:619;;;;;:::o;5428:943::-;5523:6;5531;5539;5547;5596:3;5584:9;5575:7;5571:23;5567:33;5564:120;;;5603:79;;:::i;:::-;5564:120;5723:1;5748:53;5793:7;5784:6;5773:9;5769:22;5748:53;:::i;:::-;5738:63;;5694:117;5850:2;5876:53;5921:7;5912:6;5901:9;5897:22;5876:53;:::i;:::-;5866:63;;5821:118;5978:2;6004:53;6049:7;6040:6;6029:9;6025:22;6004:53;:::i;:::-;5994:63;;5949:118;6134:2;6123:9;6119:18;6106:32;6165:18;6157:6;6154:30;6151:117;;;6187:79;;:::i;:::-;6151:117;6292:62;6346:7;6337:6;6326:9;6322:22;6292:62;:::i;:::-;6282:72;;6077:287;5428:943;;;;;;;:::o;6377:468::-;6442:6;6450;6499:2;6487:9;6478:7;6474:23;6470:32;6467:119;;;6505:79;;:::i;:::-;6467:119;6625:1;6650:53;6695:7;6686:6;6675:9;6671:22;6650:53;:::i;:::-;6640:63;;6596:117;6752:2;6778:50;6820:7;6811:6;6800:9;6796:22;6778:50;:::i;:::-;6768:60;;6723:115;6377:468;;;;;:::o;6851:474::-;6919:6;6927;6976:2;6964:9;6955:7;6951:23;6947:32;6944:119;;;6982:79;;:::i;:::-;6944:119;7102:1;7127:53;7172:7;7163:6;7152:9;7148:22;7127:53;:::i;:::-;7117:63;;7073:117;7229:2;7255:53;7300:7;7291:6;7280:9;7276:22;7255:53;:::i;:::-;7245:63;;7200:118;6851:474;;;;;:::o;7331:539::-;7415:6;7464:2;7452:9;7443:7;7439:23;7435:32;7432:119;;;7470:79;;:::i;:::-;7432:119;7618:1;7607:9;7603:17;7590:31;7648:18;7640:6;7637:30;7634:117;;;7670:79;;:::i;:::-;7634:117;7775:78;7845:7;7836:6;7825:9;7821:22;7775:78;:::i;:::-;7765:88;;7561:302;7331:539;;;;:::o;7876:327::-;7934:6;7983:2;7971:9;7962:7;7958:23;7954:32;7951:119;;;7989:79;;:::i;:::-;7951:119;8109:1;8134:52;8178:7;8169:6;8158:9;8154:22;8134:52;:::i;:::-;8124:62;;8080:116;7876:327;;;;:::o;8209:349::-;8278:6;8327:2;8315:9;8306:7;8302:23;8298:32;8295:119;;;8333:79;;:::i;:::-;8295:119;8453:1;8478:63;8533:7;8524:6;8513:9;8509:22;8478:63;:::i;:::-;8468:73;;8424:127;8209:349;;;;:::o;8564:529::-;8635:6;8643;8692:2;8680:9;8671:7;8667:23;8663:32;8660:119;;;8698:79;;:::i;:::-;8660:119;8846:1;8835:9;8831:17;8818:31;8876:18;8868:6;8865:30;8862:117;;;8898:79;;:::i;:::-;8862:117;9011:65;9068:7;9059:6;9048:9;9044:22;9011:65;:::i;:::-;8993:83;;;;8789:297;8564:529;;;;;:::o;9099:509::-;9168:6;9217:2;9205:9;9196:7;9192:23;9188:32;9185:119;;;9223:79;;:::i;:::-;9185:119;9371:1;9360:9;9356:17;9343:31;9401:18;9393:6;9390:30;9387:117;;;9423:79;;:::i;:::-;9387:117;9528:63;9583:7;9574:6;9563:9;9559:22;9528:63;:::i;:::-;9518:73;;9314:287;9099:509;;;;:::o;9614:329::-;9673:6;9722:2;9710:9;9701:7;9697:23;9693:32;9690:119;;;9728:79;;:::i;:::-;9690:119;9848:1;9873:53;9918:7;9909:6;9898:9;9894:22;9873:53;:::i;:::-;9863:63;;9819:117;9614:329;;;;:::o;9949:118::-;10036:24;10054:5;10036:24;:::i;:::-;10031:3;10024:37;9949:118;;:::o;10073:109::-;10154:21;10169:5;10154:21;:::i;:::-;10149:3;10142:34;10073:109;;:::o;10188:360::-;10274:3;10302:38;10334:5;10302:38;:::i;:::-;10356:70;10419:6;10414:3;10356:70;:::i;:::-;10349:77;;10435:52;10480:6;10475:3;10468:4;10461:5;10457:16;10435:52;:::i;:::-;10512:29;10534:6;10512:29;:::i;:::-;10507:3;10503:39;10496:46;;10278:270;10188:360;;;;:::o;10554:364::-;10642:3;10670:39;10703:5;10670:39;:::i;:::-;10725:71;10789:6;10784:3;10725:71;:::i;:::-;10718:78;;10805:52;10850:6;10845:3;10838:4;10831:5;10827:16;10805:52;:::i;:::-;10882:29;10904:6;10882:29;:::i;:::-;10877:3;10873:39;10866:46;;10646:272;10554:364;;;;:::o;10924:377::-;11030:3;11058:39;11091:5;11058:39;:::i;:::-;11113:89;11195:6;11190:3;11113:89;:::i;:::-;11106:96;;11211:52;11256:6;11251:3;11244:4;11237:5;11233:16;11211:52;:::i;:::-;11288:6;11283:3;11279:16;11272:23;;11034:267;10924:377;;;;:::o;11307:366::-;11449:3;11470:67;11534:2;11529:3;11470:67;:::i;:::-;11463:74;;11546:93;11635:3;11546:93;:::i;:::-;11664:2;11659:3;11655:12;11648:19;;11307:366;;;:::o;11679:::-;11821:3;11842:67;11906:2;11901:3;11842:67;:::i;:::-;11835:74;;11918:93;12007:3;11918:93;:::i;:::-;12036:2;12031:3;12027:12;12020:19;;11679:366;;;:::o;12051:::-;12193:3;12214:67;12278:2;12273:3;12214:67;:::i;:::-;12207:74;;12290:93;12379:3;12290:93;:::i;:::-;12408:2;12403:3;12399:12;12392:19;;12051:366;;;:::o;12423:::-;12565:3;12586:67;12650:2;12645:3;12586:67;:::i;:::-;12579:74;;12662:93;12751:3;12662:93;:::i;:::-;12780:2;12775:3;12771:12;12764:19;;12423:366;;;:::o;12795:::-;12937:3;12958:67;13022:2;13017:3;12958:67;:::i;:::-;12951:74;;13034:93;13123:3;13034:93;:::i;:::-;13152:2;13147:3;13143:12;13136:19;;12795:366;;;:::o;13167:::-;13309:3;13330:67;13394:2;13389:3;13330:67;:::i;:::-;13323:74;;13406:93;13495:3;13406:93;:::i;:::-;13524:2;13519:3;13515:12;13508:19;;13167:366;;;:::o;13539:::-;13681:3;13702:67;13766:2;13761:3;13702:67;:::i;:::-;13695:74;;13778:93;13867:3;13778:93;:::i;:::-;13896:2;13891:3;13887:12;13880:19;;13539:366;;;:::o;13911:::-;14053:3;14074:67;14138:2;14133:3;14074:67;:::i;:::-;14067:74;;14150:93;14239:3;14150:93;:::i;:::-;14268:2;14263:3;14259:12;14252:19;;13911:366;;;:::o;14283:::-;14425:3;14446:67;14510:2;14505:3;14446:67;:::i;:::-;14439:74;;14522:93;14611:3;14522:93;:::i;:::-;14640:2;14635:3;14631:12;14624:19;;14283:366;;;:::o;14655:::-;14797:3;14818:67;14882:2;14877:3;14818:67;:::i;:::-;14811:74;;14894:93;14983:3;14894:93;:::i;:::-;15012:2;15007:3;15003:12;14996:19;;14655:366;;;:::o;15027:::-;15169:3;15190:67;15254:2;15249:3;15190:67;:::i;:::-;15183:74;;15266:93;15355:3;15266:93;:::i;:::-;15384:2;15379:3;15375:12;15368:19;;15027:366;;;:::o;15399:::-;15541:3;15562:67;15626:2;15621:3;15562:67;:::i;:::-;15555:74;;15638:93;15727:3;15638:93;:::i;:::-;15756:2;15751:3;15747:12;15740:19;;15399:366;;;:::o;15771:::-;15913:3;15934:67;15998:2;15993:3;15934:67;:::i;:::-;15927:74;;16010:93;16099:3;16010:93;:::i;:::-;16128:2;16123:3;16119:12;16112:19;;15771:366;;;:::o;16143:::-;16285:3;16306:67;16370:2;16365:3;16306:67;:::i;:::-;16299:74;;16382:93;16471:3;16382:93;:::i;:::-;16500:2;16495:3;16491:12;16484:19;;16143:366;;;:::o;16515:::-;16657:3;16678:67;16742:2;16737:3;16678:67;:::i;:::-;16671:74;;16754:93;16843:3;16754:93;:::i;:::-;16872:2;16867:3;16863:12;16856:19;;16515:366;;;:::o;16887:::-;17029:3;17050:67;17114:2;17109:3;17050:67;:::i;:::-;17043:74;;17126:93;17215:3;17126:93;:::i;:::-;17244:2;17239:3;17235:12;17228:19;;16887:366;;;:::o;17259:::-;17401:3;17422:67;17486:2;17481:3;17422:67;:::i;:::-;17415:74;;17498:93;17587:3;17498:93;:::i;:::-;17616:2;17611:3;17607:12;17600:19;;17259:366;;;:::o;17631:::-;17773:3;17794:67;17858:2;17853:3;17794:67;:::i;:::-;17787:74;;17870:93;17959:3;17870:93;:::i;:::-;17988:2;17983:3;17979:12;17972:19;;17631:366;;;:::o;18003:::-;18145:3;18166:67;18230:2;18225:3;18166:67;:::i;:::-;18159:74;;18242:93;18331:3;18242:93;:::i;:::-;18360:2;18355:3;18351:12;18344:19;;18003:366;;;:::o;18375:::-;18517:3;18538:67;18602:2;18597:3;18538:67;:::i;:::-;18531:74;;18614:93;18703:3;18614:93;:::i;:::-;18732:2;18727:3;18723:12;18716:19;;18375:366;;;:::o;18747:::-;18889:3;18910:67;18974:2;18969:3;18910:67;:::i;:::-;18903:74;;18986:93;19075:3;18986:93;:::i;:::-;19104:2;19099:3;19095:12;19088:19;;18747:366;;;:::o;19119:::-;19261:3;19282:67;19346:2;19341:3;19282:67;:::i;:::-;19275:74;;19358:93;19447:3;19358:93;:::i;:::-;19476:2;19471:3;19467:12;19460:19;;19119:366;;;:::o;19491:::-;19633:3;19654:67;19718:2;19713:3;19654:67;:::i;:::-;19647:74;;19730:93;19819:3;19730:93;:::i;:::-;19848:2;19843:3;19839:12;19832:19;;19491:366;;;:::o;19863:::-;20005:3;20026:67;20090:2;20085:3;20026:67;:::i;:::-;20019:74;;20102:93;20191:3;20102:93;:::i;:::-;20220:2;20215:3;20211:12;20204:19;;19863:366;;;:::o;20235:::-;20377:3;20398:67;20462:2;20457:3;20398:67;:::i;:::-;20391:74;;20474:93;20563:3;20474:93;:::i;:::-;20592:2;20587:3;20583:12;20576:19;;20235:366;;;:::o;20607:::-;20749:3;20770:67;20834:2;20829:3;20770:67;:::i;:::-;20763:74;;20846:93;20935:3;20846:93;:::i;:::-;20964:2;20959:3;20955:12;20948:19;;20607:366;;;:::o;20979:::-;21121:3;21142:67;21206:2;21201:3;21142:67;:::i;:::-;21135:74;;21218:93;21307:3;21218:93;:::i;:::-;21336:2;21331:3;21327:12;21320:19;;20979:366;;;:::o;21351:::-;21493:3;21514:67;21578:2;21573:3;21514:67;:::i;:::-;21507:74;;21590:93;21679:3;21590:93;:::i;:::-;21708:2;21703:3;21699:12;21692:19;;21351:366;;;:::o;21723:::-;21865:3;21886:67;21950:2;21945:3;21886:67;:::i;:::-;21879:74;;21962:93;22051:3;21962:93;:::i;:::-;22080:2;22075:3;22071:12;22064:19;;21723:366;;;:::o;22095:::-;22237:3;22258:67;22322:2;22317:3;22258:67;:::i;:::-;22251:74;;22334:93;22423:3;22334:93;:::i;:::-;22452:2;22447:3;22443:12;22436:19;;22095:366;;;:::o;22467:::-;22609:3;22630:67;22694:2;22689:3;22630:67;:::i;:::-;22623:74;;22706:93;22795:3;22706:93;:::i;:::-;22824:2;22819:3;22815:12;22808:19;;22467:366;;;:::o;22839:118::-;22926:24;22944:5;22926:24;:::i;:::-;22921:3;22914:37;22839:118;;:::o;22963:435::-;23143:3;23165:95;23256:3;23247:6;23165:95;:::i;:::-;23158:102;;23277:95;23368:3;23359:6;23277:95;:::i;:::-;23270:102;;23389:3;23382:10;;22963:435;;;;;:::o;23404:222::-;23497:4;23535:2;23524:9;23520:18;23512:26;;23548:71;23616:1;23605:9;23601:17;23592:6;23548:71;:::i;:::-;23404:222;;;;:::o;23632:640::-;23827:4;23865:3;23854:9;23850:19;23842:27;;23879:71;23947:1;23936:9;23932:17;23923:6;23879:71;:::i;:::-;23960:72;24028:2;24017:9;24013:18;24004:6;23960:72;:::i;:::-;24042;24110:2;24099:9;24095:18;24086:6;24042:72;:::i;:::-;24161:9;24155:4;24151:20;24146:2;24135:9;24131:18;24124:48;24189:76;24260:4;24251:6;24189:76;:::i;:::-;24181:84;;23632:640;;;;;;;:::o;24278:210::-;24365:4;24403:2;24392:9;24388:18;24380:26;;24416:65;24478:1;24467:9;24463:17;24454:6;24416:65;:::i;:::-;24278:210;;;;:::o;24494:313::-;24607:4;24645:2;24634:9;24630:18;24622:26;;24694:9;24688:4;24684:20;24680:1;24669:9;24665:17;24658:47;24722:78;24795:4;24786:6;24722:78;:::i;:::-;24714:86;;24494:313;;;;:::o;24813:419::-;24979:4;25017:2;25006:9;25002:18;24994:26;;25066:9;25060:4;25056:20;25052:1;25041:9;25037:17;25030:47;25094:131;25220:4;25094:131;:::i;:::-;25086:139;;24813:419;;;:::o;25238:::-;25404:4;25442:2;25431:9;25427:18;25419:26;;25491:9;25485:4;25481:20;25477:1;25466:9;25462:17;25455:47;25519:131;25645:4;25519:131;:::i;:::-;25511:139;;25238:419;;;:::o;25663:::-;25829:4;25867:2;25856:9;25852:18;25844:26;;25916:9;25910:4;25906:20;25902:1;25891:9;25887:17;25880:47;25944:131;26070:4;25944:131;:::i;:::-;25936:139;;25663:419;;;:::o;26088:::-;26254:4;26292:2;26281:9;26277:18;26269:26;;26341:9;26335:4;26331:20;26327:1;26316:9;26312:17;26305:47;26369:131;26495:4;26369:131;:::i;:::-;26361:139;;26088:419;;;:::o;26513:::-;26679:4;26717:2;26706:9;26702:18;26694:26;;26766:9;26760:4;26756:20;26752:1;26741:9;26737:17;26730:47;26794:131;26920:4;26794:131;:::i;:::-;26786:139;;26513:419;;;:::o;26938:::-;27104:4;27142:2;27131:9;27127:18;27119:26;;27191:9;27185:4;27181:20;27177:1;27166:9;27162:17;27155:47;27219:131;27345:4;27219:131;:::i;:::-;27211:139;;26938:419;;;:::o;27363:::-;27529:4;27567:2;27556:9;27552:18;27544:26;;27616:9;27610:4;27606:20;27602:1;27591:9;27587:17;27580:47;27644:131;27770:4;27644:131;:::i;:::-;27636:139;;27363:419;;;:::o;27788:::-;27954:4;27992:2;27981:9;27977:18;27969:26;;28041:9;28035:4;28031:20;28027:1;28016:9;28012:17;28005:47;28069:131;28195:4;28069:131;:::i;:::-;28061:139;;27788:419;;;:::o;28213:::-;28379:4;28417:2;28406:9;28402:18;28394:26;;28466:9;28460:4;28456:20;28452:1;28441:9;28437:17;28430:47;28494:131;28620:4;28494:131;:::i;:::-;28486:139;;28213:419;;;:::o;28638:::-;28804:4;28842:2;28831:9;28827:18;28819:26;;28891:9;28885:4;28881:20;28877:1;28866:9;28862:17;28855:47;28919:131;29045:4;28919:131;:::i;:::-;28911:139;;28638:419;;;:::o;29063:::-;29229:4;29267:2;29256:9;29252:18;29244:26;;29316:9;29310:4;29306:20;29302:1;29291:9;29287:17;29280:47;29344:131;29470:4;29344:131;:::i;:::-;29336:139;;29063:419;;;:::o;29488:::-;29654:4;29692:2;29681:9;29677:18;29669:26;;29741:9;29735:4;29731:20;29727:1;29716:9;29712:17;29705:47;29769:131;29895:4;29769:131;:::i;:::-;29761:139;;29488:419;;;:::o;29913:::-;30079:4;30117:2;30106:9;30102:18;30094:26;;30166:9;30160:4;30156:20;30152:1;30141:9;30137:17;30130:47;30194:131;30320:4;30194:131;:::i;:::-;30186:139;;29913:419;;;:::o;30338:::-;30504:4;30542:2;30531:9;30527:18;30519:26;;30591:9;30585:4;30581:20;30577:1;30566:9;30562:17;30555:47;30619:131;30745:4;30619:131;:::i;:::-;30611:139;;30338:419;;;:::o;30763:::-;30929:4;30967:2;30956:9;30952:18;30944:26;;31016:9;31010:4;31006:20;31002:1;30991:9;30987:17;30980:47;31044:131;31170:4;31044:131;:::i;:::-;31036:139;;30763:419;;;:::o;31188:::-;31354:4;31392:2;31381:9;31377:18;31369:26;;31441:9;31435:4;31431:20;31427:1;31416:9;31412:17;31405:47;31469:131;31595:4;31469:131;:::i;:::-;31461:139;;31188:419;;;:::o;31613:::-;31779:4;31817:2;31806:9;31802:18;31794:26;;31866:9;31860:4;31856:20;31852:1;31841:9;31837:17;31830:47;31894:131;32020:4;31894:131;:::i;:::-;31886:139;;31613:419;;;:::o;32038:::-;32204:4;32242:2;32231:9;32227:18;32219:26;;32291:9;32285:4;32281:20;32277:1;32266:9;32262:17;32255:47;32319:131;32445:4;32319:131;:::i;:::-;32311:139;;32038:419;;;:::o;32463:::-;32629:4;32667:2;32656:9;32652:18;32644:26;;32716:9;32710:4;32706:20;32702:1;32691:9;32687:17;32680:47;32744:131;32870:4;32744:131;:::i;:::-;32736:139;;32463:419;;;:::o;32888:::-;33054:4;33092:2;33081:9;33077:18;33069:26;;33141:9;33135:4;33131:20;33127:1;33116:9;33112:17;33105:47;33169:131;33295:4;33169:131;:::i;:::-;33161:139;;32888:419;;;:::o;33313:::-;33479:4;33517:2;33506:9;33502:18;33494:26;;33566:9;33560:4;33556:20;33552:1;33541:9;33537:17;33530:47;33594:131;33720:4;33594:131;:::i;:::-;33586:139;;33313:419;;;:::o;33738:::-;33904:4;33942:2;33931:9;33927:18;33919:26;;33991:9;33985:4;33981:20;33977:1;33966:9;33962:17;33955:47;34019:131;34145:4;34019:131;:::i;:::-;34011:139;;33738:419;;;:::o;34163:::-;34329:4;34367:2;34356:9;34352:18;34344:26;;34416:9;34410:4;34406:20;34402:1;34391:9;34387:17;34380:47;34444:131;34570:4;34444:131;:::i;:::-;34436:139;;34163:419;;;:::o;34588:::-;34754:4;34792:2;34781:9;34777:18;34769:26;;34841:9;34835:4;34831:20;34827:1;34816:9;34812:17;34805:47;34869:131;34995:4;34869:131;:::i;:::-;34861:139;;34588:419;;;:::o;35013:::-;35179:4;35217:2;35206:9;35202:18;35194:26;;35266:9;35260:4;35256:20;35252:1;35241:9;35237:17;35230:47;35294:131;35420:4;35294:131;:::i;:::-;35286:139;;35013:419;;;:::o;35438:::-;35604:4;35642:2;35631:9;35627:18;35619:26;;35691:9;35685:4;35681:20;35677:1;35666:9;35662:17;35655:47;35719:131;35845:4;35719:131;:::i;:::-;35711:139;;35438:419;;;:::o;35863:::-;36029:4;36067:2;36056:9;36052:18;36044:26;;36116:9;36110:4;36106:20;36102:1;36091:9;36087:17;36080:47;36144:131;36270:4;36144:131;:::i;:::-;36136:139;;35863:419;;;:::o;36288:::-;36454:4;36492:2;36481:9;36477:18;36469:26;;36541:9;36535:4;36531:20;36527:1;36516:9;36512:17;36505:47;36569:131;36695:4;36569:131;:::i;:::-;36561:139;;36288:419;;;:::o;36713:::-;36879:4;36917:2;36906:9;36902:18;36894:26;;36966:9;36960:4;36956:20;36952:1;36941:9;36937:17;36930:47;36994:131;37120:4;36994:131;:::i;:::-;36986:139;;36713:419;;;:::o;37138:::-;37304:4;37342:2;37331:9;37327:18;37319:26;;37391:9;37385:4;37381:20;37377:1;37366:9;37362:17;37355:47;37419:131;37545:4;37419:131;:::i;:::-;37411:139;;37138:419;;;:::o;37563:::-;37729:4;37767:2;37756:9;37752:18;37744:26;;37816:9;37810:4;37806:20;37802:1;37791:9;37787:17;37780:47;37844:131;37970:4;37844:131;:::i;:::-;37836:139;;37563:419;;;:::o;37988:222::-;38081:4;38119:2;38108:9;38104:18;38096:26;;38132:71;38200:1;38189:9;38185:17;38176:6;38132:71;:::i;:::-;37988:222;;;;:::o;38216:129::-;38250:6;38277:20;;:::i;:::-;38267:30;;38306:33;38334:4;38326:6;38306:33;:::i;:::-;38216:129;;;:::o;38351:75::-;38384:6;38417:2;38411:9;38401:19;;38351:75;:::o;38432:311::-;38509:4;38599:18;38591:6;38588:30;38585:56;;;38621:18;;:::i;:::-;38585:56;38671:4;38663:6;38659:17;38651:25;;38731:4;38725;38721:15;38713:23;;38432:311;;;:::o;38749:307::-;38810:4;38900:18;38892:6;38889:30;38886:56;;;38922:18;;:::i;:::-;38886:56;38960:29;38982:6;38960:29;:::i;:::-;38952:37;;39044:4;39038;39034:15;39026:23;;38749:307;;;:::o;39062:308::-;39124:4;39214:18;39206:6;39203:30;39200:56;;;39236:18;;:::i;:::-;39200:56;39274:29;39296:6;39274:29;:::i;:::-;39266:37;;39358:4;39352;39348:15;39340:23;;39062:308;;;:::o;39376:98::-;39427:6;39461:5;39455:12;39445:22;;39376:98;;;:::o;39480:99::-;39532:6;39566:5;39560:12;39550:22;;39480:99;;;:::o;39585:168::-;39668:11;39702:6;39697:3;39690:19;39742:4;39737:3;39733:14;39718:29;;39585:168;;;;:::o;39759:169::-;39843:11;39877:6;39872:3;39865:19;39917:4;39912:3;39908:14;39893:29;;39759:169;;;;:::o;39934:148::-;40036:11;40073:3;40058:18;;39934:148;;;;:::o;40088:273::-;40128:3;40147:20;40165:1;40147:20;:::i;:::-;40142:25;;40181:20;40199:1;40181:20;:::i;:::-;40176:25;;40303:1;40267:34;40263:42;40260:1;40257:49;40254:75;;;40309:18;;:::i;:::-;40254:75;40353:1;40350;40346:9;40339:16;;40088:273;;;;:::o;40367:305::-;40407:3;40426:20;40444:1;40426:20;:::i;:::-;40421:25;;40460:20;40478:1;40460:20;:::i;:::-;40455:25;;40614:1;40546:66;40542:74;40539:1;40536:81;40533:107;;;40620:18;;:::i;:::-;40533:107;40664:1;40661;40657:9;40650:16;;40367:305;;;;:::o;40678:185::-;40718:1;40735:20;40753:1;40735:20;:::i;:::-;40730:25;;40769:20;40787:1;40769:20;:::i;:::-;40764:25;;40808:1;40798:35;;40813:18;;:::i;:::-;40798:35;40855:1;40852;40848:9;40843:14;;40678:185;;;;:::o;40869:348::-;40909:7;40932:20;40950:1;40932:20;:::i;:::-;40927:25;;40966:20;40984:1;40966:20;:::i;:::-;40961:25;;41154:1;41086:66;41082:74;41079:1;41076:81;41071:1;41064:9;41057:17;41053:105;41050:131;;;41161:18;;:::i;:::-;41050:131;41209:1;41206;41202:9;41191:20;;40869:348;;;;:::o;41223:191::-;41263:4;41283:20;41301:1;41283:20;:::i;:::-;41278:25;;41317:20;41335:1;41317:20;:::i;:::-;41312:25;;41356:1;41353;41350:8;41347:34;;;41361:18;;:::i;:::-;41347:34;41406:1;41403;41399:9;41391:17;;41223:191;;;;:::o;41420:::-;41460:4;41480:20;41498:1;41480:20;:::i;:::-;41475:25;;41514:20;41532:1;41514:20;:::i;:::-;41509:25;;41553:1;41550;41547:8;41544:34;;;41558:18;;:::i;:::-;41544:34;41603:1;41600;41596:9;41588:17;;41420:191;;;;:::o;41617:96::-;41654:7;41683:24;41701:5;41683:24;:::i;:::-;41672:35;;41617:96;;;:::o;41719:90::-;41753:7;41796:5;41789:13;41782:21;41771:32;;41719:90;;;:::o;41815:149::-;41851:7;41891:66;41884:5;41880:78;41869:89;;41815:149;;;:::o;41970:118::-;42007:7;42047:34;42040:5;42036:46;42025:57;;41970:118;;;:::o;42094:126::-;42131:7;42171:42;42164:5;42160:54;42149:65;;42094:126;;;:::o;42226:77::-;42263:7;42292:5;42281:16;;42226:77;;;:::o;42309:154::-;42393:6;42388:3;42383;42370:30;42455:1;42446:6;42441:3;42437:16;42430:27;42309:154;;;:::o;42469:307::-;42537:1;42547:113;42561:6;42558:1;42555:13;42547:113;;;42646:1;42641:3;42637:11;42631:18;42627:1;42622:3;42618:11;42611:39;42583:2;42580:1;42576:10;42571:15;;42547:113;;;42678:6;42675:1;42672:13;42669:101;;;42758:1;42749:6;42744:3;42740:16;42733:27;42669:101;42518:258;42469:307;;;:::o;42782:171::-;42821:3;42844:24;42862:5;42844:24;:::i;:::-;42835:33;;42890:4;42883:5;42880:15;42877:41;;;42898:18;;:::i;:::-;42877:41;42945:1;42938:5;42934:13;42927:20;;42782:171;;;:::o;42959:320::-;43003:6;43040:1;43034:4;43030:12;43020:22;;43087:1;43081:4;43077:12;43108:18;43098:81;;43164:4;43156:6;43152:17;43142:27;;43098:81;43226:2;43218:6;43215:14;43195:18;43192:38;43189:84;;;43245:18;;:::i;:::-;43189:84;43010:269;42959:320;;;:::o;43285:281::-;43368:27;43390:4;43368:27;:::i;:::-;43360:6;43356:40;43498:6;43486:10;43483:22;43462:18;43450:10;43447:34;43444:62;43441:88;;;43509:18;;:::i;:::-;43441:88;43549:10;43545:2;43538:22;43328:238;43285:281;;:::o;43572:233::-;43611:3;43634:24;43652:5;43634:24;:::i;:::-;43625:33;;43680:66;43673:5;43670:77;43667:103;;;43750:18;;:::i;:::-;43667:103;43797:1;43790:5;43786:13;43779:20;;43572:233;;;:::o;43811:176::-;43843:1;43860:20;43878:1;43860:20;:::i;:::-;43855:25;;43894:20;43912:1;43894:20;:::i;:::-;43889:25;;43933:1;43923:35;;43938:18;;:::i;:::-;43923:35;43979:1;43976;43972:9;43967:14;;43811:176;;;;:::o;43993:180::-;44041:77;44038:1;44031:88;44138:4;44135:1;44128:15;44162:4;44159:1;44152:15;44179:180;44227:77;44224:1;44217:88;44324:4;44321:1;44314:15;44348:4;44345:1;44338:15;44365:180;44413:77;44410:1;44403:88;44510:4;44507:1;44500:15;44534:4;44531:1;44524:15;44551:180;44599:77;44596:1;44589:88;44696:4;44693:1;44686:15;44720:4;44717:1;44710:15;44737:180;44785:77;44782:1;44775:88;44882:4;44879:1;44872:15;44906:4;44903:1;44896:15;44923:180;44971:77;44968:1;44961:88;45068:4;45065:1;45058:15;45092:4;45089:1;45082:15;45109:117;45218:1;45215;45208:12;45232:117;45341:1;45338;45331:12;45355:117;45464:1;45461;45454:12;45478:117;45587:1;45584;45577:12;45601:117;45710:1;45707;45700:12;45724:117;45833:1;45830;45823:12;45847:102;45888:6;45939:2;45935:7;45930:2;45923:5;45919:14;45915:28;45905:38;;45847:102;;;:::o;45955:221::-;46095:34;46091:1;46083:6;46079:14;46072:58;46164:4;46159:2;46151:6;46147:15;46140:29;45955:221;:::o;46182:160::-;46322:12;46318:1;46310:6;46306:14;46299:36;46182:160;:::o;46348:225::-;46488:34;46484:1;46476:6;46472:14;46465:58;46557:8;46552:2;46544:6;46540:15;46533:33;46348:225;:::o;46579:168::-;46719:20;46715:1;46707:6;46703:14;46696:44;46579:168;:::o;46753:229::-;46893:34;46889:1;46881:6;46877:14;46870:58;46962:12;46957:2;46949:6;46945:15;46938:37;46753:229;:::o;46988:230::-;47128:34;47124:1;47116:6;47112:14;47105:58;47197:13;47192:2;47184:6;47180:15;47173:38;46988:230;:::o;47224:222::-;47364:34;47360:1;47352:6;47348:14;47341:58;47433:5;47428:2;47420:6;47416:15;47409:30;47224:222;:::o;47452:224::-;47592:34;47588:1;47580:6;47576:14;47569:58;47661:7;47656:2;47648:6;47644:15;47637:32;47452:224;:::o;47682:175::-;47822:27;47818:1;47810:6;47806:14;47799:51;47682:175;:::o;47863:226::-;48003:34;47999:1;47991:6;47987:14;47980:58;48072:9;48067:2;48059:6;48055:15;48048:34;47863:226;:::o;48095:244::-;48235:34;48231:1;48223:6;48219:14;48212:58;48304:27;48299:2;48291:6;48287:15;48280:52;48095:244;:::o;48345:230::-;48485:34;48481:1;48473:6;48469:14;48462:58;48554:13;48549:2;48541:6;48537:15;48530:38;48345:230;:::o;48581:225::-;48721:34;48717:1;48709:6;48705:14;48698:58;48790:8;48785:2;48777:6;48773:15;48766:33;48581:225;:::o;48812:182::-;48952:34;48948:1;48940:6;48936:14;48929:58;48812:182;:::o;49000:234::-;49140:34;49136:1;49128:6;49124:14;49117:58;49209:17;49204:2;49196:6;49192:15;49185:42;49000:234;:::o;49240:176::-;49380:28;49376:1;49368:6;49364:14;49357:52;49240:176;:::o;49422:237::-;49562:34;49558:1;49550:6;49546:14;49539:58;49631:20;49626:2;49618:6;49614:15;49607:45;49422:237;:::o;49665:176::-;49805:28;49801:1;49793:6;49789:14;49782:52;49665:176;:::o;49847:181::-;49987:33;49983:1;49975:6;49971:14;49964:57;49847:181;:::o;50034:169::-;50174:21;50170:1;50162:6;50158:14;50151:45;50034:169;:::o;50209:221::-;50349:34;50345:1;50337:6;50333:14;50326:58;50418:4;50413:2;50405:6;50401:15;50394:29;50209:221;:::o;50436:238::-;50576:34;50572:1;50564:6;50560:14;50553:58;50645:21;50640:2;50632:6;50628:15;50621:46;50436:238;:::o;50680:179::-;50820:31;50816:1;50808:6;50804:14;50797:55;50680:179;:::o;50865:220::-;51005:34;51001:1;50993:6;50989:14;50982:58;51074:3;51069:2;51061:6;51057:15;51050:28;50865:220;:::o;51091:233::-;51231:34;51227:1;51219:6;51215:14;51208:58;51300:16;51295:2;51287:6;51283:15;51276:41;51091:233;:::o;51330:171::-;51470:23;51466:1;51458:6;51454:14;51447:47;51330:171;:::o;51507:174::-;51647:26;51643:1;51635:6;51631:14;51624:50;51507:174;:::o;51687:234::-;51827:34;51823:1;51815:6;51811:14;51804:58;51896:17;51891:2;51883:6;51879:15;51872:42;51687:234;:::o;51927:180::-;52067:32;52063:1;52055:6;52051:14;52044:56;51927:180;:::o;52113:232::-;52253:34;52249:1;52241:6;52237:14;52230:58;52322:15;52317:2;52309:6;52305:15;52298:40;52113:232;:::o;52351:221::-;52491:34;52487:1;52479:6;52475:14;52468:58;52560:4;52555:2;52547:6;52543:15;52536:29;52351:221;:::o;52578:122::-;52651:24;52669:5;52651:24;:::i;:::-;52644:5;52641:35;52631:63;;52690:1;52687;52680:12;52631:63;52578:122;:::o;52706:116::-;52776:21;52791:5;52776:21;:::i;:::-;52769:5;52766:32;52756:60;;52812:1;52809;52802:12;52756:60;52706:116;:::o;52828:120::-;52900:23;52917:5;52900:23;:::i;:::-;52893:5;52890:34;52880:62;;52938:1;52935;52928:12;52880:62;52828:120;:::o;52954:122::-;53027:24;53045:5;53027:24;:::i;:::-;53020:5;53017:35;53007:63;;53066:1;53063;53056:12;53007:63;52954:122;:::o
Swarm Source
ipfs://d9fd76a6d70507efb4558eb95eb370654630e4f5ebbe53ad2de419a9a6e66a28
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.