Token FAUST Deed
Overview ERC-721
Total Supply:
81 DEED
Holders:
50 addresses
Transfers:
-
Contract:
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Faust
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-03 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // File @openzeppelin/contracts/utils/introspection/[email protected] /** * @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/token/ERC721/[email protected] /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File @openzeppelin/contracts/token/ERC721/[email protected] /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] /* * @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/utils/[email protected] /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File @openzeppelin/contracts/utils/introspection/[email protected] /** * @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/[email protected] /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File @openzeppelin/contracts/access/[email protected] /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File contracts/Faust.sol pragma solidity ^0.8.4; contract Faust is ERC721, Ownable { event Minted(address indexed _from, uint256[] _id); modifier mintingStarted() { require(mintingEnabled, "Public minting has not started"); _; } modifier whitelistMintingStarted() { require(whitelistMintingEnabled, "Whitelist minting has not started"); _; } modifier onlyWhitelisted() { require(isWhitelisted(msg.sender), "You are not whitelisted"); _; } modifier callerNotAContract() { require( tx.origin == msg.sender, "The caller can only be a user and not a contract" ); _; } uint16 public totalTokens = 5000; uint256 public maxTokensPerWallet = 500; uint256 public maxWhitelistTokensPerWallet = 4; uint256 public maxTokensPerTransaction = 10; bool private mintingEnabled = false; bool private whitelistMintingEnabled = false; // Price per NFT: 0.05 ETH uint256 public tokenPrice = 50000000000000000; uint256 public totalMintedTokens = 0; string public baseURI; mapping(address => uint256) private claimedTokensPerWallet; uint256 public nextTokenToMint; mapping(address => bool) whitelist; address[] whitelistedAddresses; address public teamAddress; address[] public winnerAddresses; uint256[] public winnerTokens; constructor(string memory _initialBaseURI) ERC721("FAUST Deed", "DEED") { baseURI = _initialBaseURI; teamAddress = msg.sender; nextTokenToMint = 1; } // ONLY OWNER function getRandomTokenIndex() public view onlyOwner returns (uint256) { return random() % (nextTokenToMint-1); } function rewardRandomTokenHolder(uint256 rewardAmount) external onlyOwner{ uint256 tokenId = getRandomTokenIndex(); address tokenOwnerAddress = ownerOf(tokenId); winnerTokens.push(tokenId); winnerAddresses.push(tokenOwnerAddress); payable(tokenOwnerAddress).transfer(rewardAmount); } function random() private view returns (uint) { return uint(keccak256(abi.encodePacked(block.difficulty, block.timestamp))); } /** * @dev Allows to withdraw the Ether in the contract to the address of the owner. */ function emergencyWithdraw() external onlyOwner { uint256 totalBalance = address(this).balance; payable(msg.sender).transfer(totalBalance); } /** * @dev Sets the base URI for the API that provides the NFT data. */ function setBaseTokenURI(string memory _uri) external onlyOwner { baseURI = _uri; } /** * @dev Sets mintingEnabled */ function setMintingEnabled(bool _mintingEnabled) external onlyOwner { mintingEnabled = _mintingEnabled; } /** * @dev Sets WhitelistMintingEnabled */ function setWhitelistMintingEnabled(bool _whitelistMintingEnabled) external onlyOwner { whitelistMintingEnabled = _whitelistMintingEnabled; } /** * @dev Sets maxTokensPerTransaction */ function setMaxTokensPerTransaction(uint256 _maxTokensPerTransaction) external onlyOwner { maxTokensPerTransaction = _maxTokensPerTransaction; } /** * @dev Sets the mint price for each token */ function setTokenPrice(uint256 _tokenPrice) external onlyOwner { tokenPrice = _tokenPrice; } /** * @dev Sets teamAddress */ function setTeamAddress(address _teamAddress) external onlyOwner { teamAddress = _teamAddress; } // END ONLY OWNER FUNCTIONS function isWhitelisted(address _address) public view returns (bool) { return whitelist[_address]; } function whitelistAdd(address _address) public onlyOwner { whitelistedAddresses.push(_address); whitelist[_address] = true; } function whitelistAddMultiple(address[] memory users) public onlyOwner { for (uint i = 0; i < users.length; i++) { whitelistedAddresses.push(users[i]); whitelist[users[i]] = true; } } function whitelistRemove(address _address) public onlyOwner { whitelist[_address] = false; } function getWhitelist() public view returns (address [] memory) { return whitelistedAddresses; } function getWinnerAddresses() public view returns (address [] memory) { return winnerAddresses; } function getWinnerTokens() public view returns (uint256 [] memory) { return winnerTokens; } /** * @dev Claim bulk tokens at once - Whitelisted only */ function whitelistMintTokens(uint256 amount) external payable callerNotAContract whitelistMintingStarted onlyWhitelisted { require( claimedTokensPerWallet[msg.sender] + amount <= maxWhitelistTokensPerWallet, "You cannot claim more tokens" ); _batchMintWithSplit(msg.sender, amount); } /** * @dev Claim bulk tokens at once */ function mintTokens(uint256 amount) external payable callerNotAContract mintingStarted { _batchMintWithSplit(msg.sender, amount); } function _batchMintWithSplit(address to, uint256 amount) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require( msg.value >= tokenPrice * amount, "Not enough Ether to claim the tokens" ); require(amount <= maxTokensPerTransaction, "Unable to mint this many"); require( claimedTokensPerWallet[msg.sender] + amount <= maxTokensPerWallet, "You cannot claim more tokens" ); require( totalTokens - (nextTokenToMint - 1) > amount, "No tokens left to be claimed" ); // Get token ids available uint256[] memory tokenIds = new uint256[](amount); claimedTokensPerWallet[msg.sender] += amount; totalMintedTokens += amount; for (uint256 i; i < amount; i++) { tokenIds[i] = getTokenToBeClaimed(); } // Mint Each Individually for (uint256 i; i < tokenIds.length; i++) { require(!_exists(tokenIds[i]), "ERC721: token already minted"); _safeMint(to, tokenIds[i]); } // Split payments between Pot & Team uint256 totalPayment = tokenPrice * amount; payable(teamAddress).transfer(totalPayment / 2); emit Minted(msg.sender, tokenIds); } /** * @dev Returns the tokenId by index */ function tokenByIndex(uint256 tokenId) external view returns (uint256) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); return tokenId; } /** * @dev Returns the base URI for the tokens API. */ function baseTokenURI() external view returns (string memory) { return baseURI; } /** * @dev Returns how many tokens are still available to be claimed */ function getAvailableTokens() external view returns (uint256) { return totalTokens - (nextTokenToMint - 1); } /** * @dev Returns the claim price */ function getTokenPrice() external view returns (uint256) { return tokenPrice; } /** * @dev Returns the minting start date */ function getMintingEnabled() external view returns (bool) { return mintingEnabled; } /** * @dev Returns the minting start date */ function getWhitelistMintingEnabled() external view returns (bool) { return whitelistMintingEnabled; } /** * @dev Returns the total supply */ function totalSupply() external view virtual returns (uint256) { return totalMintedTokens; } // Private and Internal functions /** * @dev Returns a random available token to be claimed */ function getTokenToBeClaimed() private returns (uint256) { uint256 tokenId = nextTokenToMint; nextTokenToMint++; return tokenId; } /** * @dev See {ERC721}. */ function _baseURI() internal view virtual override returns (string memory) { return baseURI; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_initialBaseURI","type":"string"}],"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":"_from","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"_id","type":"uint256[]"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAvailableTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRandomTokenIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWhitelist","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWhitelistMintingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWinnerAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWinnerTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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":[{"internalType":"address","name":"_address","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokensPerTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokensPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWhitelistTokensPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextTokenToMint","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewardAmount","type":"uint256"}],"name":"rewardRandomTokenHolder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTokensPerTransaction","type":"uint256"}],"name":"setMaxTokensPerTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_mintingEnabled","type":"bool"}],"name":"setMintingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_teamAddress","type":"address"}],"name":"setTeamAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenPrice","type":"uint256"}],"name":"setTokenPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_whitelistMintingEnabled","type":"bool"}],"name":"setWhitelistMintingEnabled","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":[],"name":"teamAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMintedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokens","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"whitelistAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"}],"name":"whitelistAddMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"whitelistMintTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"whitelistRemove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"winnerAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"winnerTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052611388600660146101000a81548161ffff021916908361ffff1602179055506101f46007556004600855600a6009556000600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff02191690831515021790555066b1a2bc2ec50000600b556000600c553480156200008657600080fd5b50604051620058ee380380620058ee8339818101604052810190620000ac9190620003d1565b6040518060400160405280600a81526020017f46415553542044656564000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4445454400000000000000000000000000000000000000000000000000000000815250816000908051906020019062000130929190620002a3565b50806001908051906020019062000149929190620002a3565b5050506200016c62000160620001d560201b60201c565b620001dd60201b60201c565b80600d908051906020019062000184929190620002a3565b5033601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f8190555050620005a6565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002b190620004b7565b90600052602060002090601f016020900481019282620002d5576000855562000321565b82601f10620002f057805160ff191683800117855562000321565b8280016001018555821562000321579182015b828111156200032057825182559160200191906001019062000303565b5b50905062000330919062000334565b5090565b5b808211156200034f57600081600090555060010162000335565b5090565b60006200036a62000364846200044b565b62000422565b90508281526020810184848401111562000389576200038862000586565b5b6200039684828562000481565b509392505050565b600082601f830112620003b657620003b562000581565b5b8151620003c884826020860162000353565b91505092915050565b600060208284031215620003ea57620003e962000590565b5b600082015167ffffffffffffffff8111156200040b576200040a6200058b565b5b62000419848285016200039e565b91505092915050565b60006200042e62000441565b90506200043c8282620004ed565b919050565b6000604051905090565b600067ffffffffffffffff82111562000469576200046862000552565b5b620004748262000595565b9050602081019050919050565b60005b83811015620004a157808201518184015260208101905062000484565b83811115620004b1576000848401525b50505050565b60006002820490506001821680620004d057607f821691505b60208210811415620004e757620004e662000523565b5b50919050565b620004f88262000595565b810181811067ffffffffffffffff821117156200051a576200051962000552565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61533880620005b66000396000f3fe6080604052600436106102ff5760003560e01c80636a61e5fc11610190578063a9329c0b116100dc578063d547cfb711610095578063e77f1b151161006f578063e77f1b1514610b52578063e985e9c514610b7d578063f2fde38b14610bba578063f85aff9414610be3576102ff565b8063d547cfb714610ae5578063db2e21bc14610b10578063e35568cb14610b27576102ff565b8063a9329c0b146109e6578063a932ed0d14610a02578063b4b9ee6014610a2b578063b88d4fde14610a54578063c87b56dd14610a7d578063d01f63f514610aba576102ff565b80638546b881116101495780638e32e316116101235780638e32e3161461094b57806395d89b411461097657806397304ced146109a1578063a22cb465146109bd576102ff565b80638546b881146108cc5780638da5cb5b146108f75780638db5e37f14610922576102ff565b80636a61e5fc146107ce5780636c0360eb146107f757806370a0823114610822578063715018a61461085f5780637e1c0c09146108765780637ff9b596146108a1576102ff565b806330176e131161024f5780634b94f50e11610208578063524fa7b9116101e2578063524fa7b9146107145780636352211e1461073d5780636690864e1461077a578063687e7c43146107a3576102ff565b80634b94f50e146106835780634ea3871a146106ae5780634f6ccce7146106d7576102ff565b806330176e131461057557806337ec3e591461059e5780633af32abf146105c75780633ce3ca931461060457806342842e0e1461062f578063469132ce14610658576102ff565b8063107d19ab116102bc5780631c75f085116102965780631c75f085146104cb5780631d47a066146104f65780631ef9c56f1461052157806323b872dd1461054c576102ff565b8063107d19ab1461044c5780631449d3e61461047757806318160ddd146104a0576102ff565b8063016c42501461030457806301ffc9a714610341578063045f9c971461037e57806306fdde03146103bb578063081812fc146103e6578063095ea7b314610423575b600080fd5b34801561031057600080fd5b5061032b60048036038101906103269190613d74565b610c0e565b604051610338919061473c565b60405180910390f35b34801561034d57600080fd5b5061036860048036038101906103639190613cd1565b610c32565b60405161037591906143e4565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190613d74565b610d14565b6040516103b29190614339565b60405180910390f35b3480156103c757600080fd5b506103d0610d53565b6040516103dd91906143ff565b60405180910390f35b3480156103f257600080fd5b5061040d60048036038101906104089190613d74565b610de5565b60405161041a9190614339565b60405180910390f35b34801561042f57600080fd5b5061044a60048036038101906104459190613c1b565b610e6a565b005b34801561045857600080fd5b50610461610f82565b60405161046e919061473c565b60405180910390f35b34801561048357600080fd5b5061049e60048036038101906104999190613d74565b610f88565b005b3480156104ac57600080fd5b506104b561100e565b6040516104c2919061473c565b60405180910390f35b3480156104d757600080fd5b506104e0611018565b6040516104ed9190614339565b60405180910390f35b34801561050257600080fd5b5061050b61103e565b604051610518919061473c565b60405180910390f35b34801561052d57600080fd5b506105366110e2565b60405161054391906143a0565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e9190613b05565b611170565b005b34801561058157600080fd5b5061059c60048036038101906105979190613d2b565b6111d0565b005b3480156105aa57600080fd5b506105c560048036038101906105c09190613c5b565b611266565b005b3480156105d357600080fd5b506105ee60048036038101906105e99190613a98565b6113f4565b6040516105fb91906143e4565b60405180910390f35b34801561061057600080fd5b5061061961144a565b60405161062691906143e4565b60405180910390f35b34801561063b57600080fd5b5061065660048036038101906106519190613b05565b611461565b005b34801561066457600080fd5b5061066d611481565b60405161067a919061473c565b60405180910390f35b34801561068f57600080fd5b50610698611487565b6040516106a5919061473c565b60405180910390f35b3480156106ba57600080fd5b506106d560048036038101906106d09190613ca4565b611491565b005b3480156106e357600080fd5b506106fe60048036038101906106f99190613d74565b61152a565b60405161070b919061473c565b60405180910390f35b34801561072057600080fd5b5061073b60048036038101906107369190613a98565b61157c565b005b34801561074957600080fd5b50610764600480360381019061075f9190613d74565b6116b6565b6040516107719190614339565b60405180910390f35b34801561078657600080fd5b506107a1600480360381019061079c9190613a98565b611768565b005b3480156107af57600080fd5b506107b8611828565b6040516107c5919061473c565b60405180910390f35b3480156107da57600080fd5b506107f560048036038101906107f09190613d74565b61182e565b005b34801561080357600080fd5b5061080c6118b4565b60405161081991906143ff565b60405180910390f35b34801561082e57600080fd5b5061084960048036038101906108449190613a98565b611942565b604051610856919061473c565b60405180910390f35b34801561086b57600080fd5b506108746119fa565b005b34801561088257600080fd5b5061088b611a82565b6040516108989190614721565b60405180910390f35b3480156108ad57600080fd5b506108b6611a96565b6040516108c3919061473c565b60405180910390f35b3480156108d857600080fd5b506108e1611a9c565b6040516108ee91906143e4565b60405180910390f35b34801561090357600080fd5b5061090c611ab3565b6040516109199190614339565b60405180910390f35b34801561092e57600080fd5b5061094960048036038101906109449190613ca4565b611add565b005b34801561095757600080fd5b50610960611b76565b60405161096d919061473c565b60405180910390f35b34801561098257600080fd5b5061098b611b7c565b60405161099891906143ff565b60405180910390f35b6109bb60048036038101906109b69190613d74565b611c0e565b005b3480156109c957600080fd5b506109e460048036038101906109df9190613bdb565b611cd8565b005b610a0060048036038101906109fb9190613d74565b611e59565b005b348015610a0e57600080fd5b50610a296004803603810190610a249190613a98565b611ffa565b005b348015610a3757600080fd5b50610a526004803603810190610a4d9190613d74565b6120d1565b005b348015610a6057600080fd5b50610a7b6004803603810190610a769190613b58565b61223e565b005b348015610a8957600080fd5b50610aa46004803603810190610a9f9190613d74565b6122a0565b604051610ab191906143ff565b60405180910390f35b348015610ac657600080fd5b50610acf612347565b604051610adc91906143a0565b60405180910390f35b348015610af157600080fd5b50610afa6123d5565b604051610b0791906143ff565b60405180910390f35b348015610b1c57600080fd5b50610b25612467565b005b348015610b3357600080fd5b50610b3c612532565b604051610b49919061473c565b60405180910390f35b348015610b5e57600080fd5b50610b67612567565b604051610b7491906143c2565b60405180910390f35b348015610b8957600080fd5b50610ba46004803603810190610b9f9190613ac5565b6125bf565b604051610bb191906143e4565b60405180910390f35b348015610bc657600080fd5b50610be16004803603810190610bdc9190613a98565b612653565b005b348015610bef57600080fd5b50610bf861274b565b604051610c05919061473c565b60405180910390f35b60148181548110610c1e57600080fd5b906000526020600020016000915090505481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610cfd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d0d5750610d0c82612751565b5b9050919050565b60138181548110610d2457600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060008054610d6290614a98565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8e90614a98565b8015610ddb5780601f10610db057610100808354040283529160200191610ddb565b820191906000526020600020905b815481529060010190602001808311610dbe57829003601f168201915b5050505050905090565b6000610df0826127bb565b610e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2690614641565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e75826116b6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edd906146c1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f05612827565b73ffffffffffffffffffffffffffffffffffffffff161480610f345750610f3381610f2e612827565b6125bf565b5b610f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6a90614581565b60405180910390fd5b610f7d838361282f565b505050565b60085481565b610f90612827565b73ffffffffffffffffffffffffffffffffffffffff16610fae611ab3565b73ffffffffffffffffffffffffffffffffffffffff1614611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb90614661565b60405180910390fd5b8060098190555050565b6000600c54905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611048612827565b73ffffffffffffffffffffffffffffffffffffffff16611066611ab3565b73ffffffffffffffffffffffffffffffffffffffff16146110bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b390614661565b60405180910390fd5b6001600f546110cb91906149a0565b6110d36128e8565b6110dd9190614b4e565b905090565b6060601380548060200260200160405190810160405280929190818152602001828054801561116657602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161111c575b5050505050905090565b61118161117b612827565b8261291b565b6111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b790614701565b60405180910390fd5b6111cb8383836129f9565b505050565b6111d8612827565b73ffffffffffffffffffffffffffffffffffffffff166111f6611ab3565b73ffffffffffffffffffffffffffffffffffffffff161461124c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124390614661565b60405180910390fd5b80600d908051906020019061126292919061380e565b5050565b61126e612827565b73ffffffffffffffffffffffffffffffffffffffff1661128c611ab3565b73ffffffffffffffffffffffffffffffffffffffff16146112e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d990614661565b60405180910390fd5b60005b81518110156113f057601182828151811061130357611302614c0c565b5b60200260200101519080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016010600084848151811061138457611383614c0c565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806113e890614afb565b9150506112e5565b5050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600a60009054906101000a900460ff16905090565b61147c8383836040518060200160405280600081525061223e565b505050565b60075481565b6000600b54905090565b611499612827565b73ffffffffffffffffffffffffffffffffffffffff166114b7611ab3565b73ffffffffffffffffffffffffffffffffffffffff161461150d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150490614661565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b6000611535826127bb565b611574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156b90614541565b60405180910390fd5b819050919050565b611584612827565b73ffffffffffffffffffffffffffffffffffffffff166115a2611ab3565b73ffffffffffffffffffffffffffffffffffffffff16146115f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ef90614661565b60405180910390fd5b6011819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561175f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611756906145e1565b60405180910390fd5b80915050919050565b611770612827565b73ffffffffffffffffffffffffffffffffffffffff1661178e611ab3565b73ffffffffffffffffffffffffffffffffffffffff16146117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90614661565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b611836612827565b73ffffffffffffffffffffffffffffffffffffffff16611854611ab3565b73ffffffffffffffffffffffffffffffffffffffff16146118aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a190614661565b60405180910390fd5b80600b8190555050565b600d80546118c190614a98565b80601f01602080910402602001604051908101604052809291908181526020018280546118ed90614a98565b801561193a5780601f1061190f5761010080835404028352916020019161193a565b820191906000526020600020905b81548152906001019060200180831161191d57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa906145c1565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a02612827565b73ffffffffffffffffffffffffffffffffffffffff16611a20611ab3565b73ffffffffffffffffffffffffffffffffffffffff1614611a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6d90614661565b60405180910390fd5b611a806000612c55565b565b600660149054906101000a900461ffff1681565b600b5481565b6000600a60019054906101000a900460ff16905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611ae5612827565b73ffffffffffffffffffffffffffffffffffffffff16611b03611ab3565b73ffffffffffffffffffffffffffffffffffffffff1614611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5090614661565b60405180910390fd5b80600a60016101000a81548160ff02191690831515021790555050565b600c5481565b606060018054611b8b90614a98565b80601f0160208091040260200160405190810160405280929190818152602001828054611bb790614a98565b8015611c045780601f10611bd957610100808354040283529160200191611c04565b820191906000526020600020905b815481529060010190602001808311611be757829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7390614441565b60405180910390fd5b600a60009054906101000a900460ff16611ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc2906144c1565b60405180910390fd5b611cd53382612d1b565b50565b611ce0612827565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4590614501565b60405180910390fd5b8060056000611d5b612827565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e08612827565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e4d91906143e4565b60405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebe90614441565b60405180910390fd5b600a60019054906101000a900460ff16611f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0d90614561565b60405180910390fd5b611f1f336113f4565b611f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5590614621565b60405180910390fd5b60085481600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fac91906148bf565b1115611fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe490614521565b60405180910390fd5b611ff73382612d1b565b50565b612002612827565b73ffffffffffffffffffffffffffffffffffffffff16612020611ab3565b73ffffffffffffffffffffffffffffffffffffffff1614612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206d90614661565b60405180910390fd5b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6120d9612827565b73ffffffffffffffffffffffffffffffffffffffff166120f7611ab3565b73ffffffffffffffffffffffffffffffffffffffff161461214d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214490614661565b60405180910390fd5b600061215761103e565b90506000612164826116b6565b905060148290806001815401808255809150506001900390600052602060002001600090919091909150556013819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015612238573d6000803e3d6000fd5b50505050565b61224f612249612827565b8361291b565b61228e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228590614701565b60405180910390fd5b61229a848484846131a2565b50505050565b60606122ab826127bb565b6122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e1906146a1565b60405180910390fd5b60006122f46131fe565b90506000815111612314576040518060200160405280600081525061233f565b8061231e84613290565b60405160200161232f9291906142e9565b6040516020818303038152906040525b915050919050565b606060118054806020026020016040519081016040528092919081815260200182805480156123cb57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612381575b5050505050905090565b6060600d80546123e490614a98565b80601f016020809104026020016040519081016040528092919081815260200182805461241090614a98565b801561245d5780601f106124325761010080835404028352916020019161245d565b820191906000526020600020905b81548152906001019060200180831161244057829003601f168201915b5050505050905090565b61246f612827565b73ffffffffffffffffffffffffffffffffffffffff1661248d611ab3565b73ffffffffffffffffffffffffffffffffffffffff16146124e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124da90614661565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561252e573d6000803e3d6000fd5b5050565b60006001600f5461254391906149a0565b600660149054906101000a900461ffff1661ffff1661256291906149a0565b905090565b606060148054806020026020016040519081016040528092919081815260200182805480156125b557602002820191906000526020600020905b8154815260200190600101908083116125a1575b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61265b612827565b73ffffffffffffffffffffffffffffffffffffffff16612679611ab3565b73ffffffffffffffffffffffffffffffffffffffff16146126cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c690614661565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561273f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273690614481565b60405180910390fd5b61274881612c55565b50565b60095481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166128a2836116b6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600044426040516020016128fd92919061430d565b6040516020818303038152906040528051906020012060001c905090565b6000612926826127bb565b612965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295c90614541565b60405180910390fd5b6000612970836116b6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806129df57508373ffffffffffffffffffffffffffffffffffffffff166129c784610de5565b73ffffffffffffffffffffffffffffffffffffffff16145b806129f057506129ef81856125bf565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612a19826116b6565b73ffffffffffffffffffffffffffffffffffffffff1614612a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6690614681565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad6906144e1565b60405180910390fd5b612aea8383836133f1565b612af560008261282f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b4591906149a0565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b9c91906148bf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8290614601565b60405180910390fd5b80600b54612d999190614946565b341015612ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd2906146e1565b60405180910390fd5b600954811115612e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e17906145a1565b60405180910390fd5b60075481600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6e91906148bf565b1115612eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea690614521565b60405180910390fd5b806001600f54612ebf91906149a0565b600660149054906101000a900461ffff1661ffff16612ede91906149a0565b11612f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1590614461565b60405180910390fd5b60008167ffffffffffffffff811115612f3a57612f39614c3b565b5b604051908082528060200260200182016040528015612f685781602001602082028036833780820191505090505b50905081600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fba91906148bf565b9250508190555081600c6000828254612fd391906148bf565b9250508190555060005b8281101561301f57612fed6133f6565b82828151811061300057612fff614c0c565b5b602002602001018181525050808061301790614afb565b915050612fdd565b5060005b81518110156130c65761304f82828151811061304257613041614c0c565b5b60200260200101516127bb565b1561308f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613086906144a1565b60405180910390fd5b6130b3848383815181106130a6576130a5614c0c565b5b602002602001015161341d565b80806130be90614afb565b915050613023565b50600082600b546130d79190614946565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6002836131229190614915565b9081150290604051600060405180830381858888f1935050505015801561314d573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff167f2625f80a8d24fb2b4a5f95be0398a21b27d1ed1677f4a3140fbdd87015b525a48360405161319491906143c2565b60405180910390a250505050565b6131ad8484846129f9565b6131b98484848461343b565b6131f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ef90614421565b60405180910390fd5b50505050565b6060600d805461320d90614a98565b80601f016020809104026020016040519081016040528092919081815260200182805461323990614a98565b80156132865780601f1061325b57610100808354040283529160200191613286565b820191906000526020600020905b81548152906001019060200180831161326957829003601f168201915b5050505050905090565b606060008214156132d8576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506133ec565b600082905060005b6000821461330a5780806132f390614afb565b915050600a826133039190614915565b91506132e0565b60008167ffffffffffffffff81111561332657613325614c3b565b5b6040519080825280601f01601f1916602001820160405280156133585781602001600182028036833780820191505090505b5090505b600085146133e55760018261337191906149a0565b9150600a856133809190614b4e565b603061338c91906148bf565b60f81b8183815181106133a2576133a1614c0c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856133de9190614915565b945061335c565b8093505050505b919050565b505050565b600080600f549050600f600081548092919061341190614afb565b91905055508091505090565b6134378282604051806020016040528060008152506135d2565b5050565b600061345c8473ffffffffffffffffffffffffffffffffffffffff1661362d565b156135c5578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613485612827565b8786866040518563ffffffff1660e01b81526004016134a79493929190614354565b602060405180830381600087803b1580156134c157600080fd5b505af19250505080156134f257506040513d601f19601f820116820180604052508101906134ef9190613cfe565b60015b613575573d8060008114613522576040519150601f19603f3d011682016040523d82523d6000602084013e613527565b606091505b5060008151141561356d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356490614421565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506135ca565b600190505b949350505050565b6135dc8383613640565b6135e9600084848461343b565b613628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361f90614421565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136a790614601565b60405180910390fd5b6136b9816127bb565b156136f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136f0906144a1565b60405180910390fd5b613705600083836133f1565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461375591906148bf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461381a90614a98565b90600052602060002090601f01602090048101928261383c5760008555613883565b82601f1061385557805160ff1916838001178555613883565b82800160010185558215613883579182015b82811115613882578251825591602001919060010190613867565b5b5090506138909190613894565b5090565b5b808211156138ad576000816000905550600101613895565b5090565b60006138c46138bf8461477c565b614757565b905080838252602082019050828560208602820111156138e7576138e6614c6f565b5b60005b8581101561391757816138fd88826139a5565b8452602084019350602083019250506001810190506138ea565b5050509392505050565b600061393461392f846147a8565b614757565b9050828152602081018484840111156139505761394f614c74565b5b61395b848285614a56565b509392505050565b6000613976613971846147d9565b614757565b90508281526020810184848401111561399257613991614c74565b5b61399d848285614a56565b509392505050565b6000813590506139b4816152a6565b92915050565b600082601f8301126139cf576139ce614c6a565b5b81356139df8482602086016138b1565b91505092915050565b6000813590506139f7816152bd565b92915050565b600081359050613a0c816152d4565b92915050565b600081519050613a21816152d4565b92915050565b600082601f830112613a3c57613a3b614c6a565b5b8135613a4c848260208601613921565b91505092915050565b600082601f830112613a6a57613a69614c6a565b5b8135613a7a848260208601613963565b91505092915050565b600081359050613a92816152eb565b92915050565b600060208284031215613aae57613aad614c7e565b5b6000613abc848285016139a5565b91505092915050565b60008060408385031215613adc57613adb614c7e565b5b6000613aea858286016139a5565b9250506020613afb858286016139a5565b9150509250929050565b600080600060608486031215613b1e57613b1d614c7e565b5b6000613b2c868287016139a5565b9350506020613b3d868287016139a5565b9250506040613b4e86828701613a83565b9150509250925092565b60008060008060808587031215613b7257613b71614c7e565b5b6000613b80878288016139a5565b9450506020613b91878288016139a5565b9350506040613ba287828801613a83565b925050606085013567ffffffffffffffff811115613bc357613bc2614c79565b5b613bcf87828801613a27565b91505092959194509250565b60008060408385031215613bf257613bf1614c7e565b5b6000613c00858286016139a5565b9250506020613c11858286016139e8565b9150509250929050565b60008060408385031215613c3257613c31614c7e565b5b6000613c40858286016139a5565b9250506020613c5185828601613a83565b9150509250929050565b600060208284031215613c7157613c70614c7e565b5b600082013567ffffffffffffffff811115613c8f57613c8e614c79565b5b613c9b848285016139ba565b91505092915050565b600060208284031215613cba57613cb9614c7e565b5b6000613cc8848285016139e8565b91505092915050565b600060208284031215613ce757613ce6614c7e565b5b6000613cf5848285016139fd565b91505092915050565b600060208284031215613d1457613d13614c7e565b5b6000613d2284828501613a12565b91505092915050565b600060208284031215613d4157613d40614c7e565b5b600082013567ffffffffffffffff811115613d5f57613d5e614c79565b5b613d6b84828501613a55565b91505092915050565b600060208284031215613d8a57613d89614c7e565b5b6000613d9884828501613a83565b91505092915050565b6000613dad8383613dd1565b60208301905092915050565b6000613dc583836142b4565b60208301905092915050565b613dda816149d4565b82525050565b613de9816149d4565b82525050565b6000613dfa8261482a565b613e048185614870565b9350613e0f8361480a565b8060005b83811015613e40578151613e278882613da1565b9750613e3283614856565b925050600181019050613e13565b5085935050505092915050565b6000613e5882614835565b613e628185614881565b9350613e6d8361481a565b8060005b83811015613e9e578151613e858882613db9565b9750613e9083614863565b925050600181019050613e71565b5085935050505092915050565b613eb4816149e6565b82525050565b6000613ec582614840565b613ecf8185614892565b9350613edf818560208601614a65565b613ee881614c83565b840191505092915050565b6000613efe8261484b565b613f0881856148a3565b9350613f18818560208601614a65565b613f2181614c83565b840191505092915050565b6000613f378261484b565b613f4181856148b4565b9350613f51818560208601614a65565b80840191505092915050565b6000613f6a6032836148a3565b9150613f7582614c94565b604082019050919050565b6000613f8d6030836148a3565b9150613f9882614ce3565b604082019050919050565b6000613fb0601c836148a3565b9150613fbb82614d32565b602082019050919050565b6000613fd36026836148a3565b9150613fde82614d5b565b604082019050919050565b6000613ff6601c836148a3565b915061400182614daa565b602082019050919050565b6000614019601e836148a3565b915061402482614dd3565b602082019050919050565b600061403c6024836148a3565b915061404782614dfc565b604082019050919050565b600061405f6019836148a3565b915061406a82614e4b565b602082019050919050565b6000614082601c836148a3565b915061408d82614e74565b602082019050919050565b60006140a5602c836148a3565b91506140b082614e9d565b604082019050919050565b60006140c86021836148a3565b91506140d382614eec565b604082019050919050565b60006140eb6038836148a3565b91506140f682614f3b565b604082019050919050565b600061410e6018836148a3565b915061411982614f8a565b602082019050919050565b6000614131602a836148a3565b915061413c82614fb3565b604082019050919050565b60006141546029836148a3565b915061415f82615002565b604082019050919050565b60006141776020836148a3565b915061418282615051565b602082019050919050565b600061419a6017836148a3565b91506141a58261507a565b602082019050919050565b60006141bd602c836148a3565b91506141c8826150a3565b604082019050919050565b60006141e06020836148a3565b91506141eb826150f2565b602082019050919050565b60006142036029836148a3565b915061420e8261511b565b604082019050919050565b6000614226602f836148a3565b91506142318261516a565b604082019050919050565b60006142496021836148a3565b9150614254826151b9565b604082019050919050565b600061426c6024836148a3565b915061427782615208565b604082019050919050565b600061428f6031836148a3565b915061429a82615257565b604082019050919050565b6142ae81614a1e565b82525050565b6142bd81614a4c565b82525050565b6142cc81614a4c565b82525050565b6142e36142de82614a4c565b614b44565b82525050565b60006142f58285613f2c565b91506143018284613f2c565b91508190509392505050565b600061431982856142d2565b60208201915061432982846142d2565b6020820191508190509392505050565b600060208201905061434e6000830184613de0565b92915050565b60006080820190506143696000830187613de0565b6143766020830186613de0565b61438360408301856142c3565b81810360608301526143958184613eba565b905095945050505050565b600060208201905081810360008301526143ba8184613def565b905092915050565b600060208201905081810360008301526143dc8184613e4d565b905092915050565b60006020820190506143f96000830184613eab565b92915050565b600060208201905081810360008301526144198184613ef3565b905092915050565b6000602082019050818103600083015261443a81613f5d565b9050919050565b6000602082019050818103600083015261445a81613f80565b9050919050565b6000602082019050818103600083015261447a81613fa3565b9050919050565b6000602082019050818103600083015261449a81613fc6565b9050919050565b600060208201905081810360008301526144ba81613fe9565b9050919050565b600060208201905081810360008301526144da8161400c565b9050919050565b600060208201905081810360008301526144fa8161402f565b9050919050565b6000602082019050818103600083015261451a81614052565b9050919050565b6000602082019050818103600083015261453a81614075565b9050919050565b6000602082019050818103600083015261455a81614098565b9050919050565b6000602082019050818103600083015261457a816140bb565b9050919050565b6000602082019050818103600083015261459a816140de565b9050919050565b600060208201905081810360008301526145ba81614101565b9050919050565b600060208201905081810360008301526145da81614124565b9050919050565b600060208201905081810360008301526145fa81614147565b9050919050565b6000602082019050818103600083015261461a8161416a565b9050919050565b6000602082019050818103600083015261463a8161418d565b9050919050565b6000602082019050818103600083015261465a816141b0565b9050919050565b6000602082019050818103600083015261467a816141d3565b9050919050565b6000602082019050818103600083015261469a816141f6565b9050919050565b600060208201905081810360008301526146ba81614219565b9050919050565b600060208201905081810360008301526146da8161423c565b9050919050565b600060208201905081810360008301526146fa8161425f565b9050919050565b6000602082019050818103600083015261471a81614282565b9050919050565b600060208201905061473660008301846142a5565b92915050565b600060208201905061475160008301846142c3565b92915050565b6000614761614772565b905061476d8282614aca565b919050565b6000604051905090565b600067ffffffffffffffff82111561479757614796614c3b565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156147c3576147c2614c3b565b5b6147cc82614c83565b9050602081019050919050565b600067ffffffffffffffff8211156147f4576147f3614c3b565b5b6147fd82614c83565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006148ca82614a4c565b91506148d583614a4c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561490a57614909614b7f565b5b828201905092915050565b600061492082614a4c565b915061492b83614a4c565b92508261493b5761493a614bae565b5b828204905092915050565b600061495182614a4c565b915061495c83614a4c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561499557614994614b7f565b5b828202905092915050565b60006149ab82614a4c565b91506149b683614a4c565b9250828210156149c9576149c8614b7f565b5b828203905092915050565b60006149df82614a2c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614a83578082015181840152602081019050614a68565b83811115614a92576000848401525b50505050565b60006002820490506001821680614ab057607f821691505b60208210811415614ac457614ac3614bdd565b5b50919050565b614ad382614c83565b810181811067ffffffffffffffff82111715614af257614af1614c3b565b5b80604052505050565b6000614b0682614a4c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b3957614b38614b7f565b5b600182019050919050565b6000819050919050565b6000614b5982614a4c565b9150614b6483614a4c565b925082614b7457614b73614bae565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f5468652063616c6c65722063616e206f6e6c792062652061207573657220616e60008201527f64206e6f74206120636f6e747261637400000000000000000000000000000000602082015250565b7f4e6f20746f6b656e73206c65667420746f20626520636c61696d656400000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5075626c6963206d696e74696e6720686173206e6f7420737461727465640000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f596f752063616e6e6f7420636c61696d206d6f726520746f6b656e7300000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f57686974656c697374206d696e74696e6720686173206e6f742073746172746560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f556e61626c6520746f206d696e742074686973206d616e790000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f596f7520617265206e6f742077686974656c6973746564000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820457468657220746f20636c61696d2074686520746f60008201527f6b656e7300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6152af816149d4565b81146152ba57600080fd5b50565b6152c6816149e6565b81146152d157600080fd5b50565b6152dd816149f2565b81146152e857600080fd5b50565b6152f481614a4c565b81146152ff57600080fd5b5056fea2646970667358221220f327c7d180926e5ff1198b48e43bbcb1f8d7a4aa8fbc99d052d1758fc8fddc5064736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001b68747470733a2f2f66617573742e6e6574776f726b2f6d6574612f0000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001b68747470733a2f2f66617573742e6e6574776f726b2f6d6574612f0000000000
-----Decoded View---------------
Arg [0] : _initialBaseURI (string): https://faust.network/meta/
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000001b
Arg [2] : 68747470733a2f2f66617573742e6e6574776f726b2f6d6574612f0000000000
Deployed ByteCode Sourcemap
34766:8677:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36138:29;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20334:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36099:32;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21259:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22818:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22341:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35535:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37960:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42884:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36066:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36386:127;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39275:111;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23708:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37386:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38803:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38524:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42528:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24118:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35489:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42365:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37542:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41680:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38647:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20953:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38369:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35951:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38207:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35858:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20683:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34073:94;;;;;;;;;;;;;:::i;:::-;;35450:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35763:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42704:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33422:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37737:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35815:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21428:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40044:170;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23111:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39599:372;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39043:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36521:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24374:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21603:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39157:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41987:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37125:164;;;;;;;;;;;;;:::i;:::-;;42179:123;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39394:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23477:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34322:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35588:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36138:29;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20334:285::-;20436:4;20484:25;20469:40;;;:11;:40;;;;:97;;;;20533:33;20518:48;;;:11;:48;;;;20469:97;:142;;;;20575:36;20599:11;20575:23;:36::i;:::-;20469:142;20453:158;;20334:285;;;:::o;36099:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21259:100::-;21313:13;21346:5;21339:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21259:100;:::o;22818:221::-;22894:7;22922:16;22930:7;22922;:16::i;:::-;22914:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23007:15;:24;23023:7;23007:24;;;;;;;;;;;;;;;;;;;;;23000:31;;22818:221;;;:::o;22341:411::-;22422:13;22438:23;22453:7;22438:14;:23::i;:::-;22422:39;;22486:5;22480:11;;:2;:11;;;;22472:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22580:5;22564:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22589:37;22606:5;22613:12;:10;:12::i;:::-;22589:16;:37::i;:::-;22564:62;22542:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22723:21;22732:2;22736:7;22723:8;:21::i;:::-;22411:341;22341:411;;:::o;35535:46::-;;;;:::o;37960:173::-;33653:12;:10;:12::i;:::-;33642:23;;:7;:5;:7::i;:::-;:23;;;33634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38101:24:::1;38075:23;:50;;;;37960:173:::0;:::o;42884:106::-;42938:7;42965:17;;42958:24;;42884:106;:::o;36066:26::-;;;;;;;;;;;;;:::o;36386:127::-;36448:7;33653:12;:10;:12::i;:::-;33642:23;;:7;:5;:7::i;:::-;:23;;;33634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36503:1:::1;36487:15;;:17;;;;:::i;:::-;36475:8;:6;:8::i;:::-;:30;;;;:::i;:::-;36468:37;;36386:127:::0;:::o;39275:111::-;39326:17;39363:15;39356:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39275:111;:::o;23708:339::-;23903:41;23922:12;:10;:12::i;:::-;23936:7;23903:18;:41::i;:::-;23895:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24011:28;24021:4;24027:2;24031:7;24011:9;:28::i;:::-;23708:339;;;:::o;37386:97::-;33653:12;:10;:12::i;:::-;33642:23;;:7;:5;:7::i;:::-;:23;;;33634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37471:4:::1;37461:7;:14;;;;;;;;;;;;:::i;:::-;;37386:97:::0;:::o;38803:232::-;33653:12;:10;:12::i;:::-;33642:23;;:7;:5;:7::i;:::-;:23;;;33634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38890:6:::1;38885:143;38906:5;:12;38902:1;:16;38885:143;;;38940:20;38966:5;38972:1;38966:8;;;;;;;;:::i;:::-;;;;;;;;38940:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39012:4;38990:9;:19;39000:5;39006:1;39000:8;;;;;;;;:::i;:::-;;;;;;;;38990:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;38920:3;;;;;:::i;:::-;;;;38885:143;;;;38803:232:::0;:::o;38524:113::-;38586:4;38610:9;:19;38620:8;38610:19;;;;;;;;;;;;;;;;;;;;;;;;;38603:26;;38524:113;;;:::o;42528:98::-;42580:4;42604:14;;;;;;;;;;;42597:21;;42528:98;:::o;24118:185::-;24256:39;24273:4;24279:2;24283:7;24256:39;;;;;;;;;;;;:16;:39::i;:::-;24118:185;;;:::o;35489:39::-;;;;:::o;42365:93::-;42413:7;42440:10;;42433:17;;42365:93;:::o;37542:119::-;33653:12;:10;:12::i;:::-;33642:23;;:7;:5;:7::i;:::-;:23;;;33634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37638:15:::1;37621:14;;:32;;;;;;;;;;;;;;;;;;37542:119:::0;:::o;41680:227::-;41742:7;41784:16;41792:7;41784;:16::i;:::-;41762:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;41892:7;41885:14;;41680:227;;;:::o;38647:148::-;33653:12;:10;:12::i;:::-;33642:23;;:7;:5;:7::i;:::-;:23;;;33634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38715:20:::1;38741:8;38715:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38783:4;38761:9;:19;38771:8;38761:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;38647:148:::0;:::o;20953:239::-;21025:7;21045:13;21061:7;:16;21069:7;21061:16;;;;;;;;;;;;;;;;;;;;;21045:32;;21113:1;21096:19;;:5;:19;;;;21088:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21179:5;21172:12;;;20953:239;;;:::o;38369:110::-;33653:12;:10;:12::i;:::-;33642:23;;:7;:5;:7::i;:::-;:23;;;33634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38459:12:::1;38445:11;;:26;;;;;;;;;;;;;;;;;;38369:110:::0;:::o;35951:30::-;;;;:::o;38207:106::-;33653:12;:10;:12::i;:::-;33642:23;;:7;:5;:7::i;:::-;:23;;;33634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38294:11:::1;38281:10;:24;;;;38207:106:::0;:::o;35858:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20683:208::-;20755:7;20800:1;20783:19;;:5;:19;;;;20775:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20867:9;:16;20877:5;20867:16;;;;;;;;;;;;;;;;20860:23;;20683:208;;;:::o;34073:94::-;33653:12;:10;:12::i;:::-;33642:23;;:7;:5;:7::i;:::-;:23;;;33634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34138:21:::1;34156:1;34138:9;:21::i;:::-;34073:94::o:0;35450:32::-;;;;;;;;;;;;;:::o;35763:45::-;;;;:::o;42704:116::-;42765:4;42789:23;;;;;;;;;;;42782:30;;42704:116;:::o;33422:87::-;33468:7;33495:6;;;;;;;;;;;33488:13;;33422:87;:::o;37737:155::-;33653:12;:10;:12::i;:::-;33642:23;;:7;:5;:7::i;:::-;:23;;;33634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37860:24:::1;37834:23;;:50;;;;;;;;;;;;;;;;;;37737:155:::0;:::o;35815:36::-;;;;:::o;21428:104::-;21484:13;21517:7;21510:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21428:104;:::o;40044:170::-;35336:10;35323:23;;:9;:23;;;35301:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;34913:14:::1;;;;;;;;;;;34905:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;40167:39:::2;40187:10;40199:6;40167:19;:39::i;:::-;40044:170:::0;:::o;23111:295::-;23226:12;:10;:12::i;:::-;23214:24;;:8;:24;;;;23206:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23326:8;23281:18;:32;23300:12;:10;:12::i;:::-;23281:32;;;;;;;;;;;;;;;:42;23314:8;23281:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23379:8;23350:48;;23365:12;:10;:12::i;:::-;23350:48;;;23389:8;23350:48;;;;;;:::i;:::-;;;;;;;;23111:295;;:::o;39599:372::-;35336:10;35323:23;;:9;:23;;;35301:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;35044:23:::1;;;;;;;;;;;35036:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;35179:25:::2;35193:10;35179:13;:25::i;:::-;35171:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39830:27:::3;;39820:6;39783:22;:34;39806:10;39783:34;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:74;;39761:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;39924:39;39944:10;39956:6;39924:19;:39::i;:::-;39599:372:::0;:::o;39043:106::-;33653:12;:10;:12::i;:::-;33642:23;;:7;:5;:7::i;:::-;:23;;;33634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39136:5:::1;39114:9;:19;39124:8;39114:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;39043:106:::0;:::o;36521:333::-;33653:12;:10;:12::i;:::-;33642:23;;:7;:5;:7::i;:::-;:23;;;33634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36605:15:::1;36623:21;:19;:21::i;:::-;36605:39;;36655:25;36683:16;36691:7;36683;:16::i;:::-;36655:44;;36710:12;36728:7;36710:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36747:15;36768:17;36747:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36805:17;36797:35;;:49;36833:12;36797:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36594:260;;36521:333:::0;:::o;24374:328::-;24549:41;24568:12;:10;:12::i;:::-;24582:7;24549:18;:41::i;:::-;24541:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24655:39;24669:4;24675:2;24679:7;24688:5;24655:13;:39::i;:::-;24374:328;;;;:::o;21603:334::-;21676:13;21710:16;21718:7;21710;:16::i;:::-;21702:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;21791:21;21815:10;:8;:10::i;:::-;21791:34;;21867:1;21849:7;21843:21;:25;:86;;;;;;;;;;;;;;;;;21895:7;21904:18;:7;:16;:18::i;:::-;21878:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21843:86;21836:93;;;21603:334;;;:::o;39157:110::-;39202:17;39239:20;39232:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39157:110;:::o;41987:95::-;42034:13;42067:7;42060:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41987:95;:::o;37125:164::-;33653:12;:10;:12::i;:::-;33642:23;;:7;:5;:7::i;:::-;:23;;;33634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37184:20:::1;37207:21;37184:44;;37247:10;37239:28;;:42;37268:12;37239:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;37173:116;37125:164::o:0;42179:123::-;42232:7;42292:1;42274:15;;:19;;;;:::i;:::-;42259:11;;;;;;;;;;;:35;;;;;;:::i;:::-;42252:42;;42179:123;:::o;39394:105::-;39442:17;39479:12;39472:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39394:105;:::o;23477:164::-;23574:4;23598:18;:25;23617:5;23598:25;;;;;;;;;;;;;;;:35;23624:8;23598:35;;;;;;;;;;;;;;;;;;;;;;;;;23591:42;;23477:164;;;;:::o;34322:192::-;33653:12;:10;:12::i;:::-;33642:23;;:7;:5;:7::i;:::-;:23;;;33634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34431:1:::1;34411:22;;:8;:22;;;;34403:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34487:19;34497:8;34487:9;:19::i;:::-;34322:192:::0;:::o;35588:43::-;;;;:::o;18855:157::-;18940:4;18979:25;18964:40;;;:11;:40;;;;18957:47;;18855:157;;;:::o;26212:127::-;26277:4;26329:1;26301:30;;:7;:16;26309:7;26301:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26294:37;;26212:127;;;:::o;15805:98::-;15858:7;15885:10;15878:17;;15805:98;:::o;30194:174::-;30296:2;30269:15;:24;30285:7;30269:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30352:7;30348:2;30314:46;;30323:23;30338:7;30323:14;:23::i;:::-;30314:46;;;;;;;;;;;;30194:174;;:::o;36862:140::-;36902:4;36958:16;36976:15;36941:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36931:62;;;;;;36926:68;;36919:75;;36862:140;:::o;26506:348::-;26599:4;26624:16;26632:7;26624;:16::i;:::-;26616:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26700:13;26716:23;26731:7;26716:14;:23::i;:::-;26700:39;;26769:5;26758:16;;:7;:16;;;:51;;;;26802:7;26778:31;;:20;26790:7;26778:11;:20::i;:::-;:31;;;26758:51;:87;;;;26813:32;26830:5;26837:7;26813:16;:32::i;:::-;26758:87;26750:96;;;26506:348;;;;:::o;29498:578::-;29657:4;29630:31;;:23;29645:7;29630:14;:23::i;:::-;:31;;;29622:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29740:1;29726:16;;:2;:16;;;;29718:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29796:39;29817:4;29823:2;29827:7;29796:20;:39::i;:::-;29900:29;29917:1;29921:7;29900:8;:29::i;:::-;29961:1;29942:9;:15;29952:4;29942:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29990:1;29973:9;:13;29983:2;29973:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30021:2;30002:7;:16;30010:7;30002:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30060:7;30056:2;30041:27;;30050:4;30041:27;;;;;;;;;;;;29498:578;;;:::o;34522:173::-;34578:16;34597:6;;;;;;;;;;;34578:25;;34623:8;34614:6;;:17;;;;;;;;;;;;;;;;;;34678:8;34647:40;;34668:8;34647:40;;;;;;;;;;;;34567:128;34522:173;:::o;40222:1390::-;40344:1;40330:16;;:2;:16;;;;40322:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;40442:6;40429:10;;:19;;;;:::i;:::-;40416:9;:32;;40394:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;40541:23;;40531:6;:33;;40523:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;40673:18;;40663:6;40626:22;:34;40649:10;40626:34;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:65;;40604:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;40818:6;40813:1;40795:15;;:19;;;;:::i;:::-;40780:11;;;;;;;;;;;:35;;;;;;:::i;:::-;:44;40758:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;40929:25;40971:6;40957:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40929:49;;41029:6;40991:22;:34;41014:10;40991:34;;;;;;;;;;;;;;;;:44;;;;;;;:::i;:::-;;;;;;;;41067:6;41046:17;;:27;;;;;;;:::i;:::-;;;;;;;;41091:9;41086:95;41106:6;41102:1;:10;41086:95;;;41148:21;:19;:21::i;:::-;41134:8;41143:1;41134:11;;;;;;;;:::i;:::-;;;;;;;:35;;;;;41114:3;;;;;:::i;:::-;;;;41086:95;;;;41233:9;41228:172;41248:8;:15;41244:1;:19;41228:172;;;41294:20;41302:8;41311:1;41302:11;;;;;;;;:::i;:::-;;;;;;;;41294:7;:20::i;:::-;41293:21;41285:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;41362:26;41372:2;41376:8;41385:1;41376:11;;;;;;;;:::i;:::-;;;;;;;;41362:9;:26::i;:::-;41265:3;;;;;:::i;:::-;;;;41228:172;;;;41458:20;41494:6;41481:10;;:19;;;;:::i;:::-;41458:42;;41519:11;;;;;;;;;;;41511:29;;:47;41556:1;41541:12;:16;;;;:::i;:::-;41511:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41583:10;41576:28;;;41595:8;41576:28;;;;;;:::i;:::-;;;;;;;;40311:1301;;40222:1390;;:::o;25584:315::-;25741:28;25751:4;25757:2;25761:7;25741:9;:28::i;:::-;25788:48;25811:4;25817:2;25821:7;25830:5;25788:22;:48::i;:::-;25780:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25584:315;;;;:::o;43332:108::-;43392:13;43425:7;43418:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43332:108;:::o;16315:723::-;16371:13;16601:1;16592:5;:10;16588:53;;;16619:10;;;;;;;;;;;;;;;;;;;;;16588:53;16651:12;16666:5;16651:20;;16682:14;16707:78;16722:1;16714:4;:9;16707:78;;16740:8;;;;;:::i;:::-;;;;16771:2;16763:10;;;;;:::i;:::-;;;16707:78;;;16795:19;16827:6;16817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16795:39;;16845:154;16861:1;16852:5;:10;16845:154;;16889:1;16879:11;;;;;:::i;:::-;;;16956:2;16948:5;:10;;;;:::i;:::-;16935:2;:24;;;;:::i;:::-;16922:39;;16905:6;16912;16905:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;16985:2;16976:11;;;;;:::i;:::-;;;16845:154;;;17023:6;17009:21;;;;;16315:723;;;;:::o;32308:126::-;;;;:::o;43117:162::-;43165:7;43185:15;43203;;43185:33;;43229:15;;:17;;;;;;;;;:::i;:::-;;;;;;43264:7;43257:14;;;43117:162;:::o;27196:110::-;27272:26;27282:2;27286:7;27272:26;;;;;;;;;;;;:9;:26::i;:::-;27196:110;;:::o;30933:803::-;31088:4;31109:15;:2;:13;;;:15::i;:::-;31105:624;;;31161:2;31145:36;;;31182:12;:10;:12::i;:::-;31196:4;31202:7;31211:5;31145:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31141:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31408:1;31391:6;:13;:18;31387:272;;;31434:60;;;;;;;;;;:::i;:::-;;;;;;;;31387:272;31609:6;31603:13;31594:6;31590:2;31586:15;31579:38;31141:533;31278:45;;;31268:55;;;:6;:55;;;;31261:62;;;;;31105:624;31713:4;31706:11;;30933:803;;;;;;;:::o;27533:321::-;27663:18;27669:2;27673:7;27663:5;:18::i;:::-;27714:54;27745:1;27749:2;27753:7;27762:5;27714:22;:54::i;:::-;27692:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27533:321;;;:::o;8082:387::-;8142:4;8350:12;8417:7;8405:20;8397:28;;8460:1;8453:4;:8;8446:15;;;8082:387;;;:::o;28190:382::-;28284:1;28270:16;;:2;:16;;;;28262:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28343:16;28351:7;28343;:16::i;:::-;28342:17;28334:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28405:45;28434:1;28438:2;28442:7;28405:20;:45::i;:::-;28480:1;28463:9;:13;28473:2;28463:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28511:2;28492:7;:16;28500:7;28492:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28556:7;28552:2;28531:33;;28548:1;28531:33;;;;;;;;;;;;28190:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::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:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:323::-;7359:6;7408:2;7396:9;7387:7;7383:23;7379:32;7376:119;;;7414:79;;:::i;:::-;7376:119;7534:1;7559:50;7601:7;7592:6;7581:9;7577:22;7559:50;:::i;:::-;7549:60;;7505:114;7303:323;;;;:::o;7632:327::-;7690:6;7739:2;7727:9;7718:7;7714:23;7710:32;7707:119;;;7745:79;;:::i;:::-;7707:119;7865:1;7890:52;7934:7;7925:6;7914:9;7910:22;7890:52;:::i;:::-;7880:62;;7836:116;7632:327;;;;:::o;7965:349::-;8034:6;8083:2;8071:9;8062:7;8058:23;8054:32;8051:119;;;8089:79;;:::i;:::-;8051:119;8209:1;8234:63;8289:7;8280:6;8269:9;8265:22;8234:63;:::i;:::-;8224:73;;8180:127;7965:349;;;;:::o;8320:509::-;8389:6;8438:2;8426:9;8417:7;8413:23;8409:32;8406:119;;;8444:79;;:::i;:::-;8406:119;8592:1;8581:9;8577:17;8564:31;8622:18;8614:6;8611:30;8608:117;;;8644:79;;:::i;:::-;8608:117;8749:63;8804:7;8795:6;8784:9;8780:22;8749:63;:::i;:::-;8739:73;;8535:287;8320:509;;;;:::o;8835:329::-;8894:6;8943:2;8931:9;8922:7;8918:23;8914:32;8911:119;;;8949:79;;:::i;:::-;8911:119;9069:1;9094:53;9139:7;9130:6;9119:9;9115:22;9094:53;:::i;:::-;9084:63;;9040:117;8835:329;;;;:::o;9170:179::-;9239:10;9260:46;9302:3;9294:6;9260:46;:::i;:::-;9338:4;9333:3;9329:14;9315:28;;9170:179;;;;:::o;9355:::-;9424:10;9445:46;9487:3;9479:6;9445:46;:::i;:::-;9523:4;9518:3;9514:14;9500:28;;9355:179;;;;:::o;9540:108::-;9617:24;9635:5;9617:24;:::i;:::-;9612:3;9605:37;9540:108;;:::o;9654:118::-;9741:24;9759:5;9741:24;:::i;:::-;9736:3;9729:37;9654:118;;:::o;9808:732::-;9927:3;9956:54;10004:5;9956:54;:::i;:::-;10026:86;10105:6;10100:3;10026:86;:::i;:::-;10019:93;;10136:56;10186:5;10136:56;:::i;:::-;10215:7;10246:1;10231:284;10256:6;10253:1;10250:13;10231:284;;;10332:6;10326:13;10359:63;10418:3;10403:13;10359:63;:::i;:::-;10352:70;;10445:60;10498:6;10445:60;:::i;:::-;10435:70;;10291:224;10278:1;10275;10271:9;10266:14;;10231:284;;;10235:14;10531:3;10524:10;;9932:608;;;9808:732;;;;:::o;10576:::-;10695:3;10724:54;10772:5;10724:54;:::i;:::-;10794:86;10873:6;10868:3;10794:86;:::i;:::-;10787:93;;10904:56;10954:5;10904:56;:::i;:::-;10983:7;11014:1;10999:284;11024:6;11021:1;11018:13;10999:284;;;11100:6;11094:13;11127:63;11186:3;11171:13;11127:63;:::i;:::-;11120:70;;11213:60;11266:6;11213:60;:::i;:::-;11203:70;;11059:224;11046:1;11043;11039:9;11034:14;;10999:284;;;11003:14;11299:3;11292:10;;10700:608;;;10576:732;;;;:::o;11314:109::-;11395:21;11410:5;11395:21;:::i;:::-;11390:3;11383:34;11314:109;;:::o;11429:360::-;11515:3;11543:38;11575:5;11543:38;:::i;:::-;11597:70;11660:6;11655:3;11597:70;:::i;:::-;11590:77;;11676:52;11721:6;11716:3;11709:4;11702:5;11698:16;11676:52;:::i;:::-;11753:29;11775:6;11753:29;:::i;:::-;11748:3;11744:39;11737:46;;11519:270;11429:360;;;;:::o;11795:364::-;11883:3;11911:39;11944:5;11911:39;:::i;:::-;11966:71;12030:6;12025:3;11966:71;:::i;:::-;11959:78;;12046:52;12091:6;12086:3;12079:4;12072:5;12068:16;12046:52;:::i;:::-;12123:29;12145:6;12123:29;:::i;:::-;12118:3;12114:39;12107:46;;11887:272;11795:364;;;;:::o;12165:377::-;12271:3;12299:39;12332:5;12299:39;:::i;:::-;12354:89;12436:6;12431:3;12354:89;:::i;:::-;12347:96;;12452:52;12497:6;12492:3;12485:4;12478:5;12474:16;12452:52;:::i;:::-;12529:6;12524:3;12520:16;12513:23;;12275:267;12165:377;;;;:::o;12548:366::-;12690:3;12711:67;12775:2;12770:3;12711:67;:::i;:::-;12704:74;;12787:93;12876:3;12787:93;:::i;:::-;12905:2;12900:3;12896:12;12889:19;;12548:366;;;:::o;12920:::-;13062:3;13083:67;13147:2;13142:3;13083:67;:::i;:::-;13076:74;;13159:93;13248:3;13159:93;:::i;:::-;13277:2;13272:3;13268:12;13261:19;;12920:366;;;:::o;13292:::-;13434:3;13455:67;13519:2;13514:3;13455:67;:::i;:::-;13448:74;;13531:93;13620:3;13531:93;:::i;:::-;13649:2;13644:3;13640:12;13633:19;;13292:366;;;:::o;13664:::-;13806:3;13827:67;13891:2;13886:3;13827:67;:::i;:::-;13820:74;;13903:93;13992:3;13903:93;:::i;:::-;14021:2;14016:3;14012:12;14005:19;;13664:366;;;:::o;14036:::-;14178:3;14199:67;14263:2;14258:3;14199:67;:::i;:::-;14192:74;;14275:93;14364:3;14275:93;:::i;:::-;14393:2;14388:3;14384:12;14377:19;;14036:366;;;:::o;14408:::-;14550:3;14571:67;14635:2;14630:3;14571:67;:::i;:::-;14564:74;;14647:93;14736:3;14647:93;:::i;:::-;14765:2;14760:3;14756:12;14749:19;;14408:366;;;:::o;14780:::-;14922:3;14943:67;15007:2;15002:3;14943:67;:::i;:::-;14936:74;;15019:93;15108:3;15019:93;:::i;:::-;15137:2;15132:3;15128:12;15121:19;;14780:366;;;:::o;15152:::-;15294:3;15315:67;15379:2;15374:3;15315:67;:::i;:::-;15308:74;;15391:93;15480:3;15391:93;:::i;:::-;15509:2;15504:3;15500:12;15493:19;;15152:366;;;:::o;15524:::-;15666:3;15687:67;15751:2;15746:3;15687:67;:::i;:::-;15680:74;;15763:93;15852:3;15763:93;:::i;:::-;15881:2;15876:3;15872:12;15865:19;;15524:366;;;:::o;15896:::-;16038:3;16059:67;16123:2;16118:3;16059:67;:::i;:::-;16052:74;;16135:93;16224:3;16135:93;:::i;:::-;16253:2;16248:3;16244:12;16237:19;;15896:366;;;:::o;16268:::-;16410:3;16431:67;16495:2;16490:3;16431:67;:::i;:::-;16424:74;;16507:93;16596:3;16507:93;:::i;:::-;16625:2;16620:3;16616:12;16609:19;;16268:366;;;:::o;16640:::-;16782:3;16803:67;16867:2;16862:3;16803:67;:::i;:::-;16796:74;;16879:93;16968:3;16879:93;:::i;:::-;16997:2;16992:3;16988:12;16981:19;;16640:366;;;:::o;17012:::-;17154:3;17175:67;17239:2;17234:3;17175:67;:::i;:::-;17168:74;;17251:93;17340:3;17251:93;:::i;:::-;17369:2;17364:3;17360:12;17353:19;;17012:366;;;:::o;17384:::-;17526:3;17547:67;17611:2;17606:3;17547:67;:::i;:::-;17540:74;;17623:93;17712:3;17623:93;:::i;:::-;17741:2;17736:3;17732:12;17725:19;;17384:366;;;:::o;17756:::-;17898:3;17919:67;17983:2;17978:3;17919:67;:::i;:::-;17912:74;;17995:93;18084:3;17995:93;:::i;:::-;18113:2;18108:3;18104:12;18097:19;;17756:366;;;:::o;18128:::-;18270:3;18291:67;18355:2;18350:3;18291:67;:::i;:::-;18284:74;;18367:93;18456:3;18367:93;:::i;:::-;18485:2;18480:3;18476:12;18469:19;;18128:366;;;:::o;18500:::-;18642:3;18663:67;18727:2;18722:3;18663:67;:::i;:::-;18656:74;;18739:93;18828:3;18739:93;:::i;:::-;18857:2;18852:3;18848:12;18841:19;;18500:366;;;:::o;18872:::-;19014:3;19035:67;19099:2;19094:3;19035:67;:::i;:::-;19028:74;;19111:93;19200:3;19111:93;:::i;:::-;19229:2;19224:3;19220:12;19213:19;;18872:366;;;:::o;19244:::-;19386:3;19407:67;19471:2;19466:3;19407:67;:::i;:::-;19400:74;;19483:93;19572:3;19483:93;:::i;:::-;19601:2;19596:3;19592:12;19585:19;;19244:366;;;:::o;19616:::-;19758:3;19779:67;19843:2;19838:3;19779:67;:::i;:::-;19772:74;;19855:93;19944:3;19855:93;:::i;:::-;19973:2;19968:3;19964:12;19957:19;;19616:366;;;:::o;19988:::-;20130:3;20151:67;20215:2;20210:3;20151:67;:::i;:::-;20144:74;;20227:93;20316:3;20227:93;:::i;:::-;20345:2;20340:3;20336:12;20329:19;;19988:366;;;:::o;20360:::-;20502:3;20523:67;20587:2;20582:3;20523:67;:::i;:::-;20516:74;;20599:93;20688:3;20599:93;:::i;:::-;20717:2;20712:3;20708:12;20701:19;;20360:366;;;:::o;20732:::-;20874:3;20895:67;20959:2;20954:3;20895:67;:::i;:::-;20888:74;;20971:93;21060:3;20971:93;:::i;:::-;21089:2;21084:3;21080:12;21073:19;;20732:366;;;:::o;21104:::-;21246:3;21267:67;21331:2;21326:3;21267:67;:::i;:::-;21260:74;;21343:93;21432:3;21343:93;:::i;:::-;21461:2;21456:3;21452:12;21445:19;;21104:366;;;:::o;21476:115::-;21561:23;21578:5;21561:23;:::i;:::-;21556:3;21549:36;21476:115;;:::o;21597:108::-;21674:24;21692:5;21674:24;:::i;:::-;21669:3;21662:37;21597:108;;:::o;21711:118::-;21798:24;21816:5;21798:24;:::i;:::-;21793:3;21786:37;21711:118;;:::o;21835:157::-;21940:45;21960:24;21978:5;21960:24;:::i;:::-;21940:45;:::i;:::-;21935:3;21928:58;21835:157;;:::o;21998:435::-;22178:3;22200:95;22291:3;22282:6;22200:95;:::i;:::-;22193:102;;22312:95;22403:3;22394:6;22312:95;:::i;:::-;22305:102;;22424:3;22417:10;;21998:435;;;;;:::o;22439:397::-;22579:3;22594:75;22665:3;22656:6;22594:75;:::i;:::-;22694:2;22689:3;22685:12;22678:19;;22707:75;22778:3;22769:6;22707:75;:::i;:::-;22807:2;22802:3;22798:12;22791:19;;22827:3;22820:10;;22439:397;;;;;:::o;22842:222::-;22935:4;22973:2;22962:9;22958:18;22950:26;;22986:71;23054:1;23043:9;23039:17;23030:6;22986:71;:::i;:::-;22842:222;;;;:::o;23070:640::-;23265:4;23303:3;23292:9;23288:19;23280:27;;23317:71;23385:1;23374:9;23370:17;23361:6;23317:71;:::i;:::-;23398:72;23466:2;23455:9;23451:18;23442:6;23398:72;:::i;:::-;23480;23548:2;23537:9;23533:18;23524:6;23480:72;:::i;:::-;23599:9;23593:4;23589:20;23584:2;23573:9;23569:18;23562:48;23627:76;23698:4;23689:6;23627:76;:::i;:::-;23619:84;;23070:640;;;;;;;:::o;23716:373::-;23859:4;23897:2;23886:9;23882:18;23874:26;;23946:9;23940:4;23936:20;23932:1;23921:9;23917:17;23910:47;23974:108;24077:4;24068:6;23974:108;:::i;:::-;23966:116;;23716:373;;;;:::o;24095:::-;24238:4;24276:2;24265:9;24261:18;24253:26;;24325:9;24319:4;24315:20;24311:1;24300:9;24296:17;24289:47;24353:108;24456:4;24447:6;24353:108;:::i;:::-;24345:116;;24095:373;;;;:::o;24474:210::-;24561:4;24599:2;24588:9;24584:18;24576:26;;24612:65;24674:1;24663:9;24659:17;24650:6;24612:65;:::i;:::-;24474:210;;;;:::o;24690:313::-;24803:4;24841:2;24830:9;24826:18;24818:26;;24890:9;24884:4;24880:20;24876:1;24865:9;24861:17;24854:47;24918:78;24991:4;24982:6;24918:78;:::i;:::-;24910:86;;24690:313;;;;:::o;25009:419::-;25175:4;25213:2;25202:9;25198:18;25190:26;;25262:9;25256:4;25252:20;25248:1;25237:9;25233:17;25226:47;25290:131;25416:4;25290:131;:::i;:::-;25282:139;;25009:419;;;:::o;25434:::-;25600:4;25638:2;25627:9;25623:18;25615:26;;25687:9;25681:4;25677:20;25673:1;25662:9;25658:17;25651:47;25715:131;25841:4;25715:131;:::i;:::-;25707:139;;25434:419;;;:::o;25859:::-;26025:4;26063:2;26052:9;26048:18;26040:26;;26112:9;26106:4;26102:20;26098:1;26087:9;26083:17;26076:47;26140:131;26266:4;26140:131;:::i;:::-;26132:139;;25859:419;;;:::o;26284:::-;26450:4;26488:2;26477:9;26473:18;26465:26;;26537:9;26531:4;26527:20;26523:1;26512:9;26508:17;26501:47;26565:131;26691:4;26565:131;:::i;:::-;26557:139;;26284:419;;;:::o;26709:::-;26875:4;26913:2;26902:9;26898:18;26890:26;;26962:9;26956:4;26952:20;26948:1;26937:9;26933:17;26926:47;26990:131;27116:4;26990:131;:::i;:::-;26982:139;;26709:419;;;:::o;27134:::-;27300:4;27338:2;27327:9;27323:18;27315:26;;27387:9;27381:4;27377:20;27373:1;27362:9;27358:17;27351:47;27415:131;27541:4;27415:131;:::i;:::-;27407:139;;27134:419;;;:::o;27559:::-;27725:4;27763:2;27752:9;27748:18;27740:26;;27812:9;27806:4;27802:20;27798:1;27787:9;27783:17;27776:47;27840:131;27966:4;27840:131;:::i;:::-;27832:139;;27559:419;;;:::o;27984:::-;28150:4;28188:2;28177:9;28173:18;28165:26;;28237:9;28231:4;28227:20;28223:1;28212:9;28208:17;28201:47;28265:131;28391:4;28265:131;:::i;:::-;28257:139;;27984:419;;;:::o;28409:::-;28575:4;28613:2;28602:9;28598:18;28590:26;;28662:9;28656:4;28652:20;28648:1;28637:9;28633:17;28626:47;28690:131;28816:4;28690:131;:::i;:::-;28682:139;;28409:419;;;:::o;28834:::-;29000:4;29038:2;29027:9;29023:18;29015:26;;29087:9;29081:4;29077:20;29073:1;29062:9;29058:17;29051:47;29115:131;29241:4;29115:131;:::i;:::-;29107:139;;28834:419;;;:::o;29259:::-;29425:4;29463:2;29452:9;29448:18;29440:26;;29512:9;29506:4;29502:20;29498:1;29487:9;29483:17;29476:47;29540:131;29666:4;29540:131;:::i;:::-;29532:139;;29259:419;;;:::o;29684:::-;29850:4;29888:2;29877:9;29873:18;29865:26;;29937:9;29931:4;29927:20;29923:1;29912:9;29908:17;29901:47;29965:131;30091:4;29965:131;:::i;:::-;29957:139;;29684:419;;;:::o;30109:::-;30275:4;30313:2;30302:9;30298:18;30290:26;;30362:9;30356:4;30352:20;30348:1;30337:9;30333:17;30326:47;30390:131;30516:4;30390:131;:::i;:::-;30382:139;;30109:419;;;:::o;30534:::-;30700:4;30738:2;30727:9;30723:18;30715:26;;30787:9;30781:4;30777:20;30773:1;30762:9;30758:17;30751:47;30815:131;30941:4;30815:131;:::i;:::-;30807:139;;30534:419;;;:::o;30959:::-;31125:4;31163:2;31152:9;31148:18;31140:26;;31212:9;31206:4;31202:20;31198:1;31187:9;31183:17;31176:47;31240:131;31366:4;31240:131;:::i;:::-;31232:139;;30959:419;;;:::o;31384:::-;31550:4;31588:2;31577:9;31573:18;31565:26;;31637:9;31631:4;31627:20;31623:1;31612:9;31608:17;31601:47;31665:131;31791:4;31665:131;:::i;:::-;31657:139;;31384:419;;;:::o;31809:::-;31975:4;32013:2;32002:9;31998:18;31990:26;;32062:9;32056:4;32052:20;32048:1;32037:9;32033:17;32026:47;32090:131;32216:4;32090:131;:::i;:::-;32082:139;;31809:419;;;:::o;32234:::-;32400:4;32438:2;32427:9;32423:18;32415:26;;32487:9;32481:4;32477:20;32473:1;32462:9;32458:17;32451:47;32515:131;32641:4;32515:131;:::i;:::-;32507:139;;32234:419;;;:::o;32659:::-;32825:4;32863:2;32852:9;32848:18;32840:26;;32912:9;32906:4;32902:20;32898:1;32887:9;32883:17;32876:47;32940:131;33066:4;32940:131;:::i;:::-;32932:139;;32659:419;;;:::o;33084:::-;33250:4;33288:2;33277:9;33273:18;33265:26;;33337:9;33331:4;33327:20;33323:1;33312:9;33308:17;33301:47;33365:131;33491:4;33365:131;:::i;:::-;33357:139;;33084:419;;;:::o;33509:::-;33675:4;33713:2;33702:9;33698:18;33690:26;;33762:9;33756:4;33752:20;33748:1;33737:9;33733:17;33726:47;33790:131;33916:4;33790:131;:::i;:::-;33782:139;;33509:419;;;:::o;33934:::-;34100:4;34138:2;34127:9;34123:18;34115:26;;34187:9;34181:4;34177:20;34173:1;34162:9;34158:17;34151:47;34215:131;34341:4;34215:131;:::i;:::-;34207:139;;33934:419;;;:::o;34359:::-;34525:4;34563:2;34552:9;34548:18;34540:26;;34612:9;34606:4;34602:20;34598:1;34587:9;34583:17;34576:47;34640:131;34766:4;34640:131;:::i;:::-;34632:139;;34359:419;;;:::o;34784:::-;34950:4;34988:2;34977:9;34973:18;34965:26;;35037:9;35031:4;35027:20;35023:1;35012:9;35008:17;35001:47;35065:131;35191:4;35065:131;:::i;:::-;35057:139;;34784:419;;;:::o;35209:218::-;35300:4;35338:2;35327:9;35323:18;35315:26;;35351:69;35417:1;35406:9;35402:17;35393:6;35351:69;:::i;:::-;35209:218;;;;:::o;35433:222::-;35526:4;35564:2;35553:9;35549:18;35541:26;;35577:71;35645:1;35634:9;35630:17;35621:6;35577:71;:::i;:::-;35433:222;;;;:::o;35661:129::-;35695:6;35722:20;;:::i;:::-;35712:30;;35751:33;35779:4;35771:6;35751:33;:::i;:::-;35661:129;;;:::o;35796:75::-;35829:6;35862:2;35856:9;35846:19;;35796:75;:::o;35877:311::-;35954:4;36044:18;36036:6;36033:30;36030:56;;;36066:18;;:::i;:::-;36030:56;36116:4;36108:6;36104:17;36096:25;;36176:4;36170;36166:15;36158:23;;35877:311;;;:::o;36194:307::-;36255:4;36345:18;36337:6;36334:30;36331:56;;;36367:18;;:::i;:::-;36331:56;36405:29;36427:6;36405:29;:::i;:::-;36397:37;;36489:4;36483;36479:15;36471:23;;36194:307;;;:::o;36507:308::-;36569:4;36659:18;36651:6;36648:30;36645:56;;;36681:18;;:::i;:::-;36645:56;36719:29;36741:6;36719:29;:::i;:::-;36711:37;;36803:4;36797;36793:15;36785:23;;36507:308;;;:::o;36821:132::-;36888:4;36911:3;36903:11;;36941:4;36936:3;36932:14;36924:22;;36821:132;;;:::o;36959:::-;37026:4;37049:3;37041:11;;37079:4;37074:3;37070:14;37062:22;;36959:132;;;:::o;37097:114::-;37164:6;37198:5;37192:12;37182:22;;37097:114;;;:::o;37217:::-;37284:6;37318:5;37312:12;37302:22;;37217:114;;;:::o;37337:98::-;37388:6;37422:5;37416:12;37406:22;;37337:98;;;:::o;37441:99::-;37493:6;37527:5;37521:12;37511:22;;37441:99;;;:::o;37546:113::-;37616:4;37648;37643:3;37639:14;37631:22;;37546:113;;;:::o;37665:::-;37735:4;37767;37762:3;37758:14;37750:22;;37665:113;;;:::o;37784:184::-;37883:11;37917:6;37912:3;37905:19;37957:4;37952:3;37948:14;37933:29;;37784:184;;;;:::o;37974:::-;38073:11;38107:6;38102:3;38095:19;38147:4;38142:3;38138:14;38123:29;;37974:184;;;;:::o;38164:168::-;38247:11;38281:6;38276:3;38269:19;38321:4;38316:3;38312:14;38297:29;;38164:168;;;;:::o;38338:169::-;38422:11;38456:6;38451:3;38444:19;38496:4;38491:3;38487:14;38472:29;;38338:169;;;;:::o;38513:148::-;38615:11;38652:3;38637:18;;38513:148;;;;:::o;38667:305::-;38707:3;38726:20;38744:1;38726:20;:::i;:::-;38721:25;;38760:20;38778:1;38760:20;:::i;:::-;38755:25;;38914:1;38846:66;38842:74;38839:1;38836:81;38833:107;;;38920:18;;:::i;:::-;38833:107;38964:1;38961;38957:9;38950:16;;38667:305;;;;:::o;38978:185::-;39018:1;39035:20;39053:1;39035:20;:::i;:::-;39030:25;;39069:20;39087:1;39069:20;:::i;:::-;39064:25;;39108:1;39098:35;;39113:18;;:::i;:::-;39098:35;39155:1;39152;39148:9;39143:14;;38978:185;;;;:::o;39169:348::-;39209:7;39232:20;39250:1;39232:20;:::i;:::-;39227:25;;39266:20;39284:1;39266:20;:::i;:::-;39261:25;;39454:1;39386:66;39382:74;39379:1;39376:81;39371:1;39364:9;39357:17;39353:105;39350:131;;;39461:18;;:::i;:::-;39350:131;39509:1;39506;39502:9;39491:20;;39169:348;;;;:::o;39523:191::-;39563:4;39583:20;39601:1;39583:20;:::i;:::-;39578:25;;39617:20;39635:1;39617:20;:::i;:::-;39612:25;;39656:1;39653;39650:8;39647:34;;;39661:18;;:::i;:::-;39647:34;39706:1;39703;39699:9;39691:17;;39523:191;;;;:::o;39720:96::-;39757:7;39786:24;39804:5;39786:24;:::i;:::-;39775:35;;39720:96;;;:::o;39822:90::-;39856:7;39899:5;39892:13;39885:21;39874:32;;39822:90;;;:::o;39918:149::-;39954:7;39994:66;39987:5;39983:78;39972:89;;39918:149;;;:::o;40073:89::-;40109:7;40149:6;40142:5;40138:18;40127:29;;40073:89;;;:::o;40168:126::-;40205:7;40245:42;40238:5;40234:54;40223:65;;40168:126;;;:::o;40300:77::-;40337:7;40366:5;40355:16;;40300:77;;;:::o;40383:154::-;40467:6;40462:3;40457;40444:30;40529:1;40520:6;40515:3;40511:16;40504:27;40383:154;;;:::o;40543:307::-;40611:1;40621:113;40635:6;40632:1;40629:13;40621:113;;;40720:1;40715:3;40711:11;40705:18;40701:1;40696:3;40692:11;40685:39;40657:2;40654:1;40650:10;40645:15;;40621:113;;;40752:6;40749:1;40746:13;40743:101;;;40832:1;40823:6;40818:3;40814:16;40807:27;40743:101;40592:258;40543:307;;;:::o;40856:320::-;40900:6;40937:1;40931:4;40927:12;40917:22;;40984:1;40978:4;40974:12;41005:18;40995:81;;41061:4;41053:6;41049:17;41039:27;;40995:81;41123:2;41115:6;41112:14;41092:18;41089:38;41086:84;;;41142:18;;:::i;:::-;41086:84;40907:269;40856:320;;;:::o;41182:281::-;41265:27;41287:4;41265:27;:::i;:::-;41257:6;41253:40;41395:6;41383:10;41380:22;41359:18;41347:10;41344:34;41341:62;41338:88;;;41406:18;;:::i;:::-;41338:88;41446:10;41442:2;41435:22;41225:238;41182:281;;:::o;41469:233::-;41508:3;41531:24;41549:5;41531:24;:::i;:::-;41522:33;;41577:66;41570:5;41567:77;41564:103;;;41647:18;;:::i;:::-;41564:103;41694:1;41687:5;41683:13;41676:20;;41469:233;;;:::o;41708:79::-;41747:7;41776:5;41765:16;;41708:79;;;:::o;41793:176::-;41825:1;41842:20;41860:1;41842:20;:::i;:::-;41837:25;;41876:20;41894:1;41876:20;:::i;:::-;41871:25;;41915:1;41905:35;;41920:18;;:::i;:::-;41905:35;41961:1;41958;41954:9;41949:14;;41793:176;;;;:::o;41975:180::-;42023:77;42020:1;42013:88;42120:4;42117:1;42110:15;42144:4;42141:1;42134:15;42161:180;42209:77;42206:1;42199:88;42306:4;42303:1;42296:15;42330:4;42327:1;42320:15;42347:180;42395:77;42392:1;42385:88;42492:4;42489:1;42482:15;42516:4;42513:1;42506:15;42533:180;42581:77;42578:1;42571:88;42678:4;42675:1;42668:15;42702:4;42699:1;42692:15;42719:180;42767:77;42764:1;42757:88;42864:4;42861:1;42854:15;42888:4;42885:1;42878:15;42905:117;43014:1;43011;43004:12;43028:117;43137:1;43134;43127:12;43151:117;43260:1;43257;43250:12;43274:117;43383:1;43380;43373:12;43397:117;43506:1;43503;43496:12;43520:102;43561:6;43612:2;43608:7;43603:2;43596:5;43592:14;43588:28;43578:38;;43520:102;;;:::o;43628:237::-;43768:34;43764:1;43756:6;43752:14;43745:58;43837:20;43832:2;43824:6;43820:15;43813:45;43628:237;:::o;43871:235::-;44011:34;44007:1;43999:6;43995:14;43988:58;44080:18;44075:2;44067:6;44063:15;44056:43;43871:235;:::o;44112:178::-;44252:30;44248:1;44240:6;44236:14;44229:54;44112:178;:::o;44296:225::-;44436:34;44432:1;44424:6;44420:14;44413:58;44505:8;44500:2;44492:6;44488:15;44481:33;44296:225;:::o;44527:178::-;44667:30;44663:1;44655:6;44651:14;44644:54;44527:178;:::o;44711:180::-;44851:32;44847:1;44839:6;44835:14;44828:56;44711:180;:::o;44897:223::-;45037:34;45033:1;45025:6;45021:14;45014:58;45106:6;45101:2;45093:6;45089:15;45082:31;44897:223;:::o;45126:175::-;45266:27;45262:1;45254:6;45250:14;45243:51;45126:175;:::o;45307:178::-;45447:30;45443:1;45435:6;45431:14;45424:54;45307:178;:::o;45491:231::-;45631:34;45627:1;45619:6;45615:14;45608:58;45700:14;45695:2;45687:6;45683:15;45676:39;45491:231;:::o;45728:220::-;45868:34;45864:1;45856:6;45852:14;45845:58;45937:3;45932:2;45924:6;45920:15;45913:28;45728:220;:::o;45954:243::-;46094:34;46090:1;46082:6;46078:14;46071:58;46163:26;46158:2;46150:6;46146:15;46139:51;45954:243;:::o;46203:174::-;46343:26;46339:1;46331:6;46327:14;46320:50;46203:174;:::o;46383:229::-;46523:34;46519:1;46511:6;46507:14;46500:58;46592:12;46587:2;46579:6;46575:15;46568:37;46383:229;:::o;46618:228::-;46758:34;46754:1;46746:6;46742:14;46735:58;46827:11;46822:2;46814:6;46810:15;46803:36;46618:228;:::o;46852:182::-;46992:34;46988:1;46980:6;46976:14;46969:58;46852:182;:::o;47040:173::-;47180:25;47176:1;47168:6;47164:14;47157:49;47040:173;:::o;47219:231::-;47359:34;47355:1;47347:6;47343:14;47336:58;47428:14;47423:2;47415:6;47411:15;47404:39;47219:231;:::o;47456:182::-;47596:34;47592:1;47584:6;47580:14;47573:58;47456:182;:::o;47644:228::-;47784:34;47780:1;47772:6;47768:14;47761:58;47853:11;47848:2;47840:6;47836:15;47829:36;47644:228;:::o;47878:234::-;48018:34;48014:1;48006:6;48002:14;47995:58;48087:17;48082:2;48074:6;48070:15;48063:42;47878:234;:::o;48118:220::-;48258:34;48254:1;48246:6;48242:14;48235:58;48327:3;48322:2;48314:6;48310:15;48303:28;48118:220;:::o;48344:223::-;48484:34;48480:1;48472:6;48468:14;48461:58;48553:6;48548:2;48540:6;48536:15;48529:31;48344:223;:::o;48573:236::-;48713:34;48709:1;48701:6;48697:14;48690:58;48782:19;48777:2;48769:6;48765:15;48758:44;48573:236;:::o;48815:122::-;48888:24;48906:5;48888:24;:::i;:::-;48881:5;48878:35;48868:63;;48927:1;48924;48917:12;48868:63;48815:122;:::o;48943:116::-;49013:21;49028:5;49013:21;:::i;:::-;49006:5;49003:32;48993:60;;49049:1;49046;49039:12;48993:60;48943:116;:::o;49065:120::-;49137:23;49154:5;49137:23;:::i;:::-;49130:5;49127:34;49117:62;;49175:1;49172;49165:12;49117:62;49065:120;:::o;49191:122::-;49264:24;49282:5;49264:24;:::i;:::-;49257:5;49254:35;49244:63;;49303:1;49300;49293:12;49244:63;49191:122;:::o
Swarm Source
ipfs://f327c7d180926e5ff1198b48e43bbcb1f8d7a4aa8fbc99d052d1758fc8fddc50