Token Corgiclub
Overview CRC1155
Total Supply:
92 Corgiclub
Holders:
34 addresses
Contract:
Balance
0 Corgiclub
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
HaveFeeCollection
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-03-15 */ // Sources flattened with hardhat v2.8.4 https://hardhat.org // File @openzeppelin/contracts/utils/introspection/[email protected] // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC1155/[email protected] // // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File @openzeppelin/contracts/token/ERC1155/[email protected] // // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC1155/extensions/[email protected] // // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] // // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] // // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/utils/introspection/[email protected] // // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/token/ERC1155/[email protected] // // OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File @openzeppelin/contracts/access/[email protected] // // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/utils/[email protected] // // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File @openzeppelin/contracts/utils/math/[email protected] // // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File contracts/interfaces/ERC1155Tradable.sol pragma solidity ^0.8.0; // abstract contract ERC1155Tradable is ERC1155, Ownable { using Counters for Counters.Counter; Counters.Counter private _counter; using SafeMath for uint256; mapping (uint256 => address) public creators; mapping (uint256 => uint256) public tokenSupply; mapping (uint256 => string) public uris; string public name; string public symbol; modifier creatorOnly(uint256 _id) { require(creators[_id] == msg.sender, "ERC1155Tradable#creatorOnly: ONLY_CREATOR_ALLOWED"); _; } modifier ownersOnly(uint256 _id) { require(balanceOf(msg.sender, _id) > 0, "ERC1155Tradable#ownersOnly: ONLY_OWNERS_ALLOWED"); _; } constructor( string memory _name, string memory _symbol ) ERC1155("") { _counter.increment(); name = _name; symbol = _symbol; } function create( address _initialOwner, uint256 _initialSupply, string calldata _uri ) public virtual payable returns (uint256) { uint256 _id = _counter.current(); _counter.increment(); _mint(_initialOwner, _id, _initialSupply, ""); tokenSupply[_id] = _initialSupply; creators[_id] = msg.sender; uris[_id] = _uri; return _id; } } // File contracts/interfaces/ICollectionRoyalty.sol pragma solidity ^0.8.0; // interface ICollectionRoyalty { function setRoyalty(uint256 _id, uint256 royalty) external; function getRoyalty(uint256 _id) external view returns(uint256); function getCreator(uint256 _id) external view returns(address); function getDecimal() external view returns(uint256); } // File contracts/ERC1155Collection.sol pragma solidity ^0.8.0; // contract ERC1155Collection is ERC1155Tradable, ICollectionRoyalty { string public contractURI; mapping (uint256 => uint256) public royalties; uint256 decimal = 2; constructor( string memory _name, string memory _symbol, string memory _uri ) ERC1155Tradable(_name, _symbol) { contractURI = _uri; } function uri(uint256 _id) public view override returns (string memory) { return uris[_id]; } function setRoyalty(uint256 _id, uint256 royalty) public override creatorOnly(_id) { royalties[_id] = royalty; } function getRoyalty(uint256 _id) public override view returns(uint256) { return royalties[_id]; } function getCreator(uint256 _id) public override view returns(address) { return creators[_id]; } function getDecimal() public override view returns(uint256) { return decimal; } } // File contracts/HaveFeeCollection.sol pragma solidity ^0.8.0; // contract HaveFeeCollection is ERC1155Collection { using Counters for Counters.Counter; Counters.Counter private _counter; uint256 public publicFee; uint256 public earlyFee; uint256 public earlyLimit; address public payee; constructor( string memory _name, string memory _symbol, string memory _uri, uint256 _publicFee, uint256 _earlyFee, uint32 _earlyLimit, address _payee ) ERC1155Collection(_name, _symbol, _uri) { _counter.increment(); publicFee = _publicFee; earlyFee = _earlyFee; earlyLimit = _earlyLimit; payee = _payee; } function totalMinted() public view returns (uint256) { return _counter.current() - 1; } function totalSupply() public view returns (uint256) { return _counter.current() - 1; } function getFee(address minter) public view returns (uint256) { if (minter == payee) { return 0; } if (totalMinted() < earlyLimit) { return earlyFee; } else { return publicFee; } } modifier enoughFee(uint256 value, address minter, uint256 quantity) { uint256 fee = publicFee * quantity; if (_counter.current() <= earlyLimit) { fee = earlyFee * quantity; } if (minter == payee) { fee = 0; } require(value == fee, "Not enough fee"); _; } function create( address _initialOwner, uint256 _initialSupply, string calldata _uri ) public enoughFee(msg.value, msg.sender, 1) payable override returns (uint256) { uint256 id = super.create(_initialOwner, _initialSupply, _uri); _counter.increment(); payable(payee).transfer(msg.value); return id; } function bulkCreate( address _initialOwner, string[] calldata _uris ) public enoughFee(msg.value, msg.sender, _uris.length) payable { for (uint256 i = 0; i < _uris.length; i++) { super.create(_initialOwner, 1, _uris[i]); _counter.increment(); } payable(payee).transfer(msg.value); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"uint256","name":"_publicFee","type":"uint256"},{"internalType":"uint256","name":"_earlyFee","type":"uint256"},{"internalType":"uint32","name":"_earlyLimit","type":"uint32"},{"internalType":"address","name":"_payee","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"string[]","name":"_uris","type":"string[]"}],"name":"bulkCreate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"create","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"creators","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getCreator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDecimal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"getFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getRoyalty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"royalties","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","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":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"royalty","type":"uint256"}],"name":"setRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uris","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526002600c553480156200001657600080fd5b50604051620045ed380380620045ed83398181016040528101906200003c9190620003dd565b86868682826040518060200160405280600081525062000062816200016a60201b60201c565b5062000083620000776200018660201b60201c565b6200018e60201b60201c565b6200009a60046200025460201b6200169b1760201c565b8160089080519060200190620000b29291906200026a565b508060099080519060200190620000cb9291906200026a565b50505080600a9080519060200190620000e69291906200026a565b5050505062000101600d6200025460201b6200169b1760201c565b83600e8190555082600f819055508163ffffffff1660108190555080601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505050506200070d565b8060029080519060200190620001829291906200026a565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b8280546200027890620005d0565b90600052602060002090601f0160209004810192826200029c5760008555620002e8565b82601f10620002b757805160ff1916838001178555620002e8565b82800160010185558215620002e8579182015b82811115620002e7578251825591602001919060010190620002ca565b5b509050620002f79190620002fb565b5090565b5b8082111562000316576000816000905550600101620002fc565b5090565b6000620003316200032b8462000516565b620004ed565b90508281526020810184848401111562000350576200034f6200069f565b5b6200035d8482856200059a565b509392505050565b6000815190506200037681620006bf565b92915050565b600082601f8301126200039457620003936200069a565b5b8151620003a68482602086016200031a565b91505092915050565b600081519050620003c081620006d9565b92915050565b600081519050620003d781620006f3565b92915050565b600080600080600080600060e0888a031215620003ff57620003fe620006a9565b5b600088015167ffffffffffffffff81111562000420576200041f620006a4565b5b6200042e8a828b016200037c565b975050602088015167ffffffffffffffff811115620004525762000451620006a4565b5b620004608a828b016200037c565b965050604088015167ffffffffffffffff811115620004845762000483620006a4565b5b620004928a828b016200037c565b9550506060620004a58a828b01620003af565b9450506080620004b88a828b01620003af565b93505060a0620004cb8a828b01620003c6565b92505060c0620004de8a828b0162000365565b91505092959891949750929550565b6000620004f96200050c565b905062000507828262000606565b919050565b6000604051905090565b600067ffffffffffffffff8211156200053457620005336200066b565b5b6200053f82620006ae565b9050602081019050919050565b6000620005598262000560565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b60005b83811015620005ba5780820151818401526020810190506200059d565b83811115620005ca576000848401525b50505050565b60006002820490506001821680620005e957607f821691505b602082108114156200060057620005ff6200063c565b5b50919050565b6200061182620006ae565b810181811067ffffffffffffffff821117156200063357620006326200066b565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620006ca816200054c565b8114620006d657600080fd5b50565b620006e48162000580565b8114620006f057600080fd5b50565b620006fe816200058a565b81146200070a57600080fd5b50565b613ed0806200071d6000396000f3fe6080604052600436106101d75760003560e01c806369fc551a11610102578063ae90b21311610095578063e8a3d48511610064578063e8a3d48514610707578063e985e9c514610732578063f242432a1461076f578063f2fde38b14610798576101d7565b8063ae90b21314610625578063b88c914814610650578063cd53d08e1461068d578063d48e638a146106ca576101d7565b8063933a6f0d116100d1578063933a6f0d1461057d57806395d89b41146105a6578063a22cb465146105d1578063a2309ff8146105fa576101d7565b806369fc551a146104ce578063715018a6146104fe5780637f77f574146105155780638da5cb5b14610552576101d7565b80631af9cf491161017a57806334ce10c41161014957806334ce10c4146104105780634e1273f41461043b57806359646463146104785780635fe212ef146104a3576101d7565b80631af9cf49146103515780631d40dbba1461038e5780632693ebf2146103aa5780632eb2c2d6146103e7576101d7565b80630e89341c116101b65780630e89341c146102815780631253c546146102be57806315bbd78f146102fb57806318160ddd14610326576101d7565b8062fdd58e146101dc57806301ffc9a71461021957806306fdde0314610256575b600080fd5b3480156101e857600080fd5b5061020360048036038101906101fe9190612ba7565b6107c1565b604051610210919061341e565b60405180910390f35b34801561022557600080fd5b50610240600480360381019061023b9190612cd3565b61088a565b60405161024d9190613201565b60405180910390f35b34801561026257600080fd5b5061026b61096c565b604051610278919061321c565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190612d2d565b6109fa565b6040516102b5919061321c565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e09190612d2d565b610a9f565b6040516102f2919061321c565b60405180910390f35b34801561030757600080fd5b50610310610b3f565b60405161031d919061341e565b60405180910390f35b34801561033257600080fd5b5061033b610b45565b604051610348919061341e565b60405180910390f35b34801561035d57600080fd5b5061037860048036038101906103739190612d2d565b610b62565b604051610385919061341e565b60405180910390f35b6103a860048036038101906103a39190612b07565b610b7f565b005b3480156103b657600080fd5b506103d160048036038101906103cc9190612d2d565b610d26565b6040516103de919061341e565b60405180910390f35b3480156103f357600080fd5b5061040e600480360381019061040991906129a1565b610d3e565b005b34801561041c57600080fd5b50610425610ddf565b604051610432919061341e565b60405180910390f35b34801561044757600080fd5b50610462600480360381019061045d9190612c5b565b610de9565b60405161046f91906131a8565b60405180910390f35b34801561048457600080fd5b5061048d610f02565b60405161049a919061341e565b60405180910390f35b3480156104af57600080fd5b506104b8610f08565b6040516104c5919061341e565b60405180910390f35b6104e860048036038101906104e39190612be7565b610f0e565b6040516104f5919061341e565b60405180910390f35b34801561050a57600080fd5b50610513611079565b005b34801561052157600080fd5b5061053c60048036038101906105379190612d2d565b611101565b604051610549919061341e565b60405180910390f35b34801561055e57600080fd5b50610567611119565b60405161057491906130cb565b60405180910390f35b34801561058957600080fd5b506105a4600480360381019061059f9190612d5a565b611143565b005b3480156105b257600080fd5b506105bb611202565b6040516105c8919061321c565b60405180910390f35b3480156105dd57600080fd5b506105f860048036038101906105f39190612b67565b611290565b005b34801561060657600080fd5b5061060f6112a6565b60405161061c919061341e565b60405180910390f35b34801561063157600080fd5b5061063a6112c3565b60405161064791906130cb565b60405180910390f35b34801561065c57600080fd5b5061067760048036038101906106729190612934565b6112e9565b604051610684919061341e565b60405180910390f35b34801561069957600080fd5b506106b460048036038101906106af9190612d2d565b611370565b6040516106c191906130cb565b60405180910390f35b3480156106d657600080fd5b506106f160048036038101906106ec9190612d2d565b6113a3565b6040516106fe91906130cb565b60405180910390f35b34801561071357600080fd5b5061071c6113e0565b604051610729919061321c565b60405180910390f35b34801561073e57600080fd5b5061075960048036038101906107549190612961565b61146e565b6040516107669190613201565b60405180910390f35b34801561077b57600080fd5b5061079660048036038101906107919190612a70565b611502565b005b3480156107a457600080fd5b506107bf60048036038101906107ba9190612934565b6115a3565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610832576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108299061329e565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061095557507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109655750610964826116b1565b5b9050919050565b600880546109799061377e565b80601f01602080910402602001604051908101604052809291908181526020018280546109a59061377e565b80156109f25780601f106109c7576101008083540402835291602001916109f2565b820191906000526020600020905b8154815290600101906020018083116109d557829003601f168201915b505050505081565b6060600760008381526020019081526020016000208054610a1a9061377e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a469061377e565b8015610a935780601f10610a6857610100808354040283529160200191610a93565b820191906000526020600020905b815481529060010190602001808311610a7657829003601f168201915b50505050509050919050565b60076020528060005260406000206000915090508054610abe9061377e565b80601f0160208091040260200160405190810160405280929190818152602001828054610aea9061377e565b8015610b375780601f10610b0c57610100808354040283529160200191610b37565b820191906000526020600020905b815481529060010190602001808311610b1a57829003601f168201915b505050505081565b600f5481565b60006001610b53600d61171b565b610b5d9190613694565b905090565b6000600b6000838152602001908152602001600020549050919050565b343383839050600081600e54610b95919061363a565b9050601054610ba4600d61171b565b11610bba5781600f54610bb7919061363a565b90505b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c1557600090505b808414610c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4e9061327e565b60405180910390fd5b60005b86869050811015610cb357610c95886001898985818110610c7e57610c7d613888565b5b9050602002810190610c909190613462565b611729565b50610ca0600d61169b565b8080610cab906137e1565b915050610c5a565b50601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610d1c573d6000803e3d6000fd5b5050505050505050565b60066020528060005260406000206000915090505481565b610d466117f6565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610d8c5750610d8b85610d866117f6565b61146e565b5b610dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc29061331e565b60405180910390fd5b610dd885858585856117fe565b5050505050565b6000600c54905090565b60608151835114610e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e269061339e565b60405180910390fd5b6000835167ffffffffffffffff811115610e4c57610e4b6138b7565b5b604051908082528060200260200182016040528015610e7a5781602001602082028036833780820191505090505b50905060005b8451811015610ef757610ec7858281518110610e9f57610e9e613888565b5b6020026020010151858381518110610eba57610eb9613888565b5b60200260200101516107c1565b828281518110610eda57610ed9613888565b5b60200260200101818152505080610ef0906137e1565b9050610e80565b508091505092915050565b600e5481565b60105481565b600034336001600081600e54610f24919061363a565b9050601054610f33600d61171b565b11610f495781600f54610f46919061363a565b90505b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fa457600090505b808414610fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdd9061327e565b60405180910390fd5b6000610ff48a8a8a8a611729565b9050611000600d61169b565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611068573d6000803e3d6000fd5b508095505050505050949350505050565b6110816117f6565b73ffffffffffffffffffffffffffffffffffffffff1661109f611119565b73ffffffffffffffffffffffffffffffffffffffff16146110f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ec9061335e565b60405180910390fd5b6110ff6000611b12565b565b600b6020528060005260406000206000915090505481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b813373ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111dc906133fe565b60405180910390fd5b81600b600085815260200190815260200160002081905550505050565b6009805461120f9061377e565b80601f016020809104026020016040519081016040528092919081815260200182805461123b9061377e565b80156112885780601f1061125d57610100808354040283529160200191611288565b820191906000526020600020905b81548152906001019060200180831161126b57829003601f168201915b505050505081565b6112a261129b6117f6565b8383611bd8565b5050565b600060016112b4600d61171b565b6112be9190613694565b905090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561134a576000905061136b565b6010546113556112a6565b101561136557600f54905061136b565b600e5490505b919050565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600a80546113ed9061377e565b80601f01602080910402602001604051908101604052809291908181526020018280546114199061377e565b80156114665780601f1061143b57610100808354040283529160200191611466565b820191906000526020600020905b81548152906001019060200180831161144957829003601f168201915b505050505081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61150a6117f6565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611550575061154f8561154a6117f6565b61146e565b5b61158f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611586906132de565b60405180910390fd5b61159c8585858585611d45565b5050505050565b6115ab6117f6565b73ffffffffffffffffffffffffffffffffffffffff166115c9611119565b73ffffffffffffffffffffffffffffffffffffffff161461161f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116169061335e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561168f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611686906132be565b60405180910390fd5b61169881611b12565b50565b6001816000016000828254019250508190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081600001549050919050565b600080611736600461171b565b9050611742600461169b565b61175d86828760405180602001604052806000815250611fc7565b846006600083815260200190815260200160002081905550336005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083836007600084815260200190815260200160002091906117e99291906125d0565b5080915050949350505050565b600033905090565b8151835114611842576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611839906133be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156118b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a9906132fe565b60405180910390fd5b60006118bc6117f6565b90506118cc81878787878761215d565b60005b8451811015611a7d5760008582815181106118ed576118ec613888565b5b60200260200101519050600085838151811061190c5761190b613888565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a49061333e565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a6291906135e4565b9250508190555050505080611a76906137e1565b90506118cf565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611af49291906131ca565b60405180910390a4611b0a818787878787612165565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3e9061337e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d389190613201565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac906132fe565b60405180910390fd5b6000611dbf6117f6565b9050611ddf818787611dd08861234c565b611dd98861234c565b8761215d565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6d9061333e565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f2b91906135e4565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611fa8929190613439565b60405180910390a4611fbe8288888888886123c6565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202e906133de565b60405180910390fd5b60006120416117f6565b9050612062816000876120538861234c565b61205c8861234c565b8761215d565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120c191906135e4565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161213f929190613439565b60405180910390a4612156816000878787876123c6565b5050505050565b505050505050565b6121848473ffffffffffffffffffffffffffffffffffffffff166125ad565b15612344578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016121ca9594939291906130e6565b602060405180830381600087803b1580156121e457600080fd5b505af192505050801561221557506040513d601f19601f820116820180604052508101906122129190612d00565b60015b6122bb576122216138e6565b806308c379a0141561227e5750612236613da8565b806122415750612280565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612275919061321c565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b29061323e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612342576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123399061325e565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561236b5761236a6138b7565b5b6040519080825280602002602001820160405280156123995781602001602082028036833780820191505090505b50905082816000815181106123b1576123b0613888565b5b60200260200101818152505080915050919050565b6123e58473ffffffffffffffffffffffffffffffffffffffff166125ad565b156125a5578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161242b95949392919061314e565b602060405180830381600087803b15801561244557600080fd5b505af192505050801561247657506040513d601f19601f820116820180604052508101906124739190612d00565b60015b61251c576124826138e6565b806308c379a014156124df5750612497613da8565b806124a257506124e1565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d6919061321c565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125139061323e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146125a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259a9061325e565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546125dc9061377e565b90600052602060002090601f0160209004810192826125fe5760008555612645565b82601f1061261757803560ff1916838001178555612645565b82800160010185558215612645579182015b82811115612644578235825591602001919060010190612629565b5b5090506126529190612656565b5090565b5b8082111561266f576000816000905550600101612657565b5090565b6000612686612681846134ea565b6134c5565b905080838252602082019050828560208602820111156126a9576126a861391c565b5b60005b858110156126d957816126bf8882612795565b8452602084019350602083019250506001810190506126ac565b5050509392505050565b60006126f66126f184613516565b6134c5565b905080838252602082019050828560208602820111156127195761271861391c565b5b60005b85811015612749578161272f888261291f565b84526020840193506020830192505060018101905061271c565b5050509392505050565b600061276661276184613542565b6134c5565b90508281526020810184848401111561278257612781613926565b5b61278d84828561373c565b509392505050565b6000813590506127a481613e3e565b92915050565b600082601f8301126127bf576127be61390d565b5b81356127cf848260208601612673565b91505092915050565b60008083601f8401126127ee576127ed61390d565b5b8235905067ffffffffffffffff81111561280b5761280a613908565b5b6020830191508360208202830111156128275761282661391c565b5b9250929050565b600082601f8301126128435761284261390d565b5b81356128538482602086016126e3565b91505092915050565b60008135905061286b81613e55565b92915050565b60008135905061288081613e6c565b92915050565b60008151905061289581613e6c565b92915050565b600082601f8301126128b0576128af61390d565b5b81356128c0848260208601612753565b91505092915050565b60008083601f8401126128df576128de61390d565b5b8235905067ffffffffffffffff8111156128fc576128fb613908565b5b6020830191508360018202830111156129185761291761391c565b5b9250929050565b60008135905061292e81613e83565b92915050565b60006020828403121561294a57612949613930565b5b600061295884828501612795565b91505092915050565b6000806040838503121561297857612977613930565b5b600061298685828601612795565b925050602061299785828601612795565b9150509250929050565b600080600080600060a086880312156129bd576129bc613930565b5b60006129cb88828901612795565b95505060206129dc88828901612795565b945050604086013567ffffffffffffffff8111156129fd576129fc61392b565b5b612a098882890161282e565b935050606086013567ffffffffffffffff811115612a2a57612a2961392b565b5b612a368882890161282e565b925050608086013567ffffffffffffffff811115612a5757612a5661392b565b5b612a638882890161289b565b9150509295509295909350565b600080600080600060a08688031215612a8c57612a8b613930565b5b6000612a9a88828901612795565b9550506020612aab88828901612795565b9450506040612abc8882890161291f565b9350506060612acd8882890161291f565b925050608086013567ffffffffffffffff811115612aee57612aed61392b565b5b612afa8882890161289b565b9150509295509295909350565b600080600060408486031215612b2057612b1f613930565b5b6000612b2e86828701612795565b935050602084013567ffffffffffffffff811115612b4f57612b4e61392b565b5b612b5b868287016127d8565b92509250509250925092565b60008060408385031215612b7e57612b7d613930565b5b6000612b8c85828601612795565b9250506020612b9d8582860161285c565b9150509250929050565b60008060408385031215612bbe57612bbd613930565b5b6000612bcc85828601612795565b9250506020612bdd8582860161291f565b9150509250929050565b60008060008060608587031215612c0157612c00613930565b5b6000612c0f87828801612795565b9450506020612c208782880161291f565b935050604085013567ffffffffffffffff811115612c4157612c4061392b565b5b612c4d878288016128c9565b925092505092959194509250565b60008060408385031215612c7257612c71613930565b5b600083013567ffffffffffffffff811115612c9057612c8f61392b565b5b612c9c858286016127aa565b925050602083013567ffffffffffffffff811115612cbd57612cbc61392b565b5b612cc98582860161282e565b9150509250929050565b600060208284031215612ce957612ce8613930565b5b6000612cf784828501612871565b91505092915050565b600060208284031215612d1657612d15613930565b5b6000612d2484828501612886565b91505092915050565b600060208284031215612d4357612d42613930565b5b6000612d518482850161291f565b91505092915050565b60008060408385031215612d7157612d70613930565b5b6000612d7f8582860161291f565b9250506020612d908582860161291f565b9150509250929050565b6000612da683836130ad565b60208301905092915050565b612dbb816136c8565b82525050565b6000612dcc82613583565b612dd681856135b1565b9350612de183613573565b8060005b83811015612e12578151612df98882612d9a565b9750612e04836135a4565b925050600181019050612de5565b5085935050505092915050565b612e28816136da565b82525050565b6000612e398261358e565b612e4381856135c2565b9350612e5381856020860161374b565b612e5c81613935565b840191505092915050565b6000612e7282613599565b612e7c81856135d3565b9350612e8c81856020860161374b565b612e9581613935565b840191505092915050565b6000612ead6034836135d3565b9150612eb882613953565b604082019050919050565b6000612ed06028836135d3565b9150612edb826139a2565b604082019050919050565b6000612ef3600e836135d3565b9150612efe826139f1565b602082019050919050565b6000612f16602b836135d3565b9150612f2182613a1a565b604082019050919050565b6000612f396026836135d3565b9150612f4482613a69565b604082019050919050565b6000612f5c6029836135d3565b9150612f6782613ab8565b604082019050919050565b6000612f7f6025836135d3565b9150612f8a82613b07565b604082019050919050565b6000612fa26032836135d3565b9150612fad82613b56565b604082019050919050565b6000612fc5602a836135d3565b9150612fd082613ba5565b604082019050919050565b6000612fe86020836135d3565b9150612ff382613bf4565b602082019050919050565b600061300b6029836135d3565b915061301682613c1d565b604082019050919050565b600061302e6029836135d3565b915061303982613c6c565b604082019050919050565b60006130516028836135d3565b915061305c82613cbb565b604082019050919050565b60006130746021836135d3565b915061307f82613d0a565b604082019050919050565b60006130976031836135d3565b91506130a282613d59565b604082019050919050565b6130b681613732565b82525050565b6130c581613732565b82525050565b60006020820190506130e06000830184612db2565b92915050565b600060a0820190506130fb6000830188612db2565b6131086020830187612db2565b818103604083015261311a8186612dc1565b9050818103606083015261312e8185612dc1565b905081810360808301526131428184612e2e565b90509695505050505050565b600060a0820190506131636000830188612db2565b6131706020830187612db2565b61317d60408301866130bc565b61318a60608301856130bc565b818103608083015261319c8184612e2e565b90509695505050505050565b600060208201905081810360008301526131c28184612dc1565b905092915050565b600060408201905081810360008301526131e48185612dc1565b905081810360208301526131f88184612dc1565b90509392505050565b60006020820190506132166000830184612e1f565b92915050565b600060208201905081810360008301526132368184612e67565b905092915050565b6000602082019050818103600083015261325781612ea0565b9050919050565b6000602082019050818103600083015261327781612ec3565b9050919050565b6000602082019050818103600083015261329781612ee6565b9050919050565b600060208201905081810360008301526132b781612f09565b9050919050565b600060208201905081810360008301526132d781612f2c565b9050919050565b600060208201905081810360008301526132f781612f4f565b9050919050565b6000602082019050818103600083015261331781612f72565b9050919050565b6000602082019050818103600083015261333781612f95565b9050919050565b6000602082019050818103600083015261335781612fb8565b9050919050565b6000602082019050818103600083015261337781612fdb565b9050919050565b6000602082019050818103600083015261339781612ffe565b9050919050565b600060208201905081810360008301526133b781613021565b9050919050565b600060208201905081810360008301526133d781613044565b9050919050565b600060208201905081810360008301526133f781613067565b9050919050565b600060208201905081810360008301526134178161308a565b9050919050565b600060208201905061343360008301846130bc565b92915050565b600060408201905061344e60008301856130bc565b61345b60208301846130bc565b9392505050565b6000808335600160200384360303811261347f5761347e613917565b5b80840192508235915067ffffffffffffffff8211156134a1576134a0613912565b5b6020830192506001820236038313156134bd576134bc613921565b5b509250929050565b60006134cf6134e0565b90506134db82826137b0565b919050565b6000604051905090565b600067ffffffffffffffff821115613505576135046138b7565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613531576135306138b7565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561355d5761355c6138b7565b5b61356682613935565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006135ef82613732565b91506135fa83613732565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561362f5761362e61382a565b5b828201905092915050565b600061364582613732565b915061365083613732565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136895761368861382a565b5b828202905092915050565b600061369f82613732565b91506136aa83613732565b9250828210156136bd576136bc61382a565b5b828203905092915050565b60006136d382613712565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561376957808201518184015260208101905061374e565b83811115613778576000848401525b50505050565b6000600282049050600182168061379657607f821691505b602082108114156137aa576137a9613859565b5b50919050565b6137b982613935565b810181811067ffffffffffffffff821117156137d8576137d76138b7565b5b80604052505050565b60006137ec82613732565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561381f5761381e61382a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156139055760046000803e613902600051613946565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820666565000000000000000000000000000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135355472616461626c652363726561746f724f6e6c793a204f4e4c60008201527f595f43524541544f525f414c4c4f574544000000000000000000000000000000602082015250565b600060443d1015613db857613e3b565b613dc06134e0565b60043d036004823e80513d602482011167ffffffffffffffff82111715613de8575050613e3b565b808201805167ffffffffffffffff811115613e065750505050613e3b565b80602083010160043d038501811115613e23575050505050613e3b565b613e32826020018501866137b0565b82955050505050505b90565b613e47816136c8565b8114613e5257600080fd5b50565b613e5e816136da565b8114613e6957600080fd5b50565b613e75816136e6565b8114613e8057600080fd5b50565b613e8c81613732565b8114613e9757600080fd5b5056fea2646970667358221220edb3f3ee4f5f72c21353a42b6fccb258eb9be066dbb2d444efc0e6f0e228590564736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000ad78ebc5ac620000000000000000000000000000000000000000000000000000821ab0d441498000000000000000000000000000000000000000000000000000000000000000005dc0000000000000000000000008a04c9a13473fbded852e9650bd095c20b1385870000000000000000000000000000000000000000000000000000000000000009436f726769636c756200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009436f726769636c75620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005a68747470733a2f2f63726f6e6f73636f726769636c75622e6d7970696e6174612e636c6f75642f697066732f516d62775a4c7a5956364e66784e6638313170374a4a74756748336264706e473874626a4e673847665831536b35000000000000
Deployed Bytecode
0x6080604052600436106101d75760003560e01c806369fc551a11610102578063ae90b21311610095578063e8a3d48511610064578063e8a3d48514610707578063e985e9c514610732578063f242432a1461076f578063f2fde38b14610798576101d7565b8063ae90b21314610625578063b88c914814610650578063cd53d08e1461068d578063d48e638a146106ca576101d7565b8063933a6f0d116100d1578063933a6f0d1461057d57806395d89b41146105a6578063a22cb465146105d1578063a2309ff8146105fa576101d7565b806369fc551a146104ce578063715018a6146104fe5780637f77f574146105155780638da5cb5b14610552576101d7565b80631af9cf491161017a57806334ce10c41161014957806334ce10c4146104105780634e1273f41461043b57806359646463146104785780635fe212ef146104a3576101d7565b80631af9cf49146103515780631d40dbba1461038e5780632693ebf2146103aa5780632eb2c2d6146103e7576101d7565b80630e89341c116101b65780630e89341c146102815780631253c546146102be57806315bbd78f146102fb57806318160ddd14610326576101d7565b8062fdd58e146101dc57806301ffc9a71461021957806306fdde0314610256575b600080fd5b3480156101e857600080fd5b5061020360048036038101906101fe9190612ba7565b6107c1565b604051610210919061341e565b60405180910390f35b34801561022557600080fd5b50610240600480360381019061023b9190612cd3565b61088a565b60405161024d9190613201565b60405180910390f35b34801561026257600080fd5b5061026b61096c565b604051610278919061321c565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190612d2d565b6109fa565b6040516102b5919061321c565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e09190612d2d565b610a9f565b6040516102f2919061321c565b60405180910390f35b34801561030757600080fd5b50610310610b3f565b60405161031d919061341e565b60405180910390f35b34801561033257600080fd5b5061033b610b45565b604051610348919061341e565b60405180910390f35b34801561035d57600080fd5b5061037860048036038101906103739190612d2d565b610b62565b604051610385919061341e565b60405180910390f35b6103a860048036038101906103a39190612b07565b610b7f565b005b3480156103b657600080fd5b506103d160048036038101906103cc9190612d2d565b610d26565b6040516103de919061341e565b60405180910390f35b3480156103f357600080fd5b5061040e600480360381019061040991906129a1565b610d3e565b005b34801561041c57600080fd5b50610425610ddf565b604051610432919061341e565b60405180910390f35b34801561044757600080fd5b50610462600480360381019061045d9190612c5b565b610de9565b60405161046f91906131a8565b60405180910390f35b34801561048457600080fd5b5061048d610f02565b60405161049a919061341e565b60405180910390f35b3480156104af57600080fd5b506104b8610f08565b6040516104c5919061341e565b60405180910390f35b6104e860048036038101906104e39190612be7565b610f0e565b6040516104f5919061341e565b60405180910390f35b34801561050a57600080fd5b50610513611079565b005b34801561052157600080fd5b5061053c60048036038101906105379190612d2d565b611101565b604051610549919061341e565b60405180910390f35b34801561055e57600080fd5b50610567611119565b60405161057491906130cb565b60405180910390f35b34801561058957600080fd5b506105a4600480360381019061059f9190612d5a565b611143565b005b3480156105b257600080fd5b506105bb611202565b6040516105c8919061321c565b60405180910390f35b3480156105dd57600080fd5b506105f860048036038101906105f39190612b67565b611290565b005b34801561060657600080fd5b5061060f6112a6565b60405161061c919061341e565b60405180910390f35b34801561063157600080fd5b5061063a6112c3565b60405161064791906130cb565b60405180910390f35b34801561065c57600080fd5b5061067760048036038101906106729190612934565b6112e9565b604051610684919061341e565b60405180910390f35b34801561069957600080fd5b506106b460048036038101906106af9190612d2d565b611370565b6040516106c191906130cb565b60405180910390f35b3480156106d657600080fd5b506106f160048036038101906106ec9190612d2d565b6113a3565b6040516106fe91906130cb565b60405180910390f35b34801561071357600080fd5b5061071c6113e0565b604051610729919061321c565b60405180910390f35b34801561073e57600080fd5b5061075960048036038101906107549190612961565b61146e565b6040516107669190613201565b60405180910390f35b34801561077b57600080fd5b5061079660048036038101906107919190612a70565b611502565b005b3480156107a457600080fd5b506107bf60048036038101906107ba9190612934565b6115a3565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610832576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108299061329e565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061095557507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109655750610964826116b1565b5b9050919050565b600880546109799061377e565b80601f01602080910402602001604051908101604052809291908181526020018280546109a59061377e565b80156109f25780601f106109c7576101008083540402835291602001916109f2565b820191906000526020600020905b8154815290600101906020018083116109d557829003601f168201915b505050505081565b6060600760008381526020019081526020016000208054610a1a9061377e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a469061377e565b8015610a935780601f10610a6857610100808354040283529160200191610a93565b820191906000526020600020905b815481529060010190602001808311610a7657829003601f168201915b50505050509050919050565b60076020528060005260406000206000915090508054610abe9061377e565b80601f0160208091040260200160405190810160405280929190818152602001828054610aea9061377e565b8015610b375780601f10610b0c57610100808354040283529160200191610b37565b820191906000526020600020905b815481529060010190602001808311610b1a57829003601f168201915b505050505081565b600f5481565b60006001610b53600d61171b565b610b5d9190613694565b905090565b6000600b6000838152602001908152602001600020549050919050565b343383839050600081600e54610b95919061363a565b9050601054610ba4600d61171b565b11610bba5781600f54610bb7919061363a565b90505b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c1557600090505b808414610c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4e9061327e565b60405180910390fd5b60005b86869050811015610cb357610c95886001898985818110610c7e57610c7d613888565b5b9050602002810190610c909190613462565b611729565b50610ca0600d61169b565b8080610cab906137e1565b915050610c5a565b50601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610d1c573d6000803e3d6000fd5b5050505050505050565b60066020528060005260406000206000915090505481565b610d466117f6565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610d8c5750610d8b85610d866117f6565b61146e565b5b610dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc29061331e565b60405180910390fd5b610dd885858585856117fe565b5050505050565b6000600c54905090565b60608151835114610e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e269061339e565b60405180910390fd5b6000835167ffffffffffffffff811115610e4c57610e4b6138b7565b5b604051908082528060200260200182016040528015610e7a5781602001602082028036833780820191505090505b50905060005b8451811015610ef757610ec7858281518110610e9f57610e9e613888565b5b6020026020010151858381518110610eba57610eb9613888565b5b60200260200101516107c1565b828281518110610eda57610ed9613888565b5b60200260200101818152505080610ef0906137e1565b9050610e80565b508091505092915050565b600e5481565b60105481565b600034336001600081600e54610f24919061363a565b9050601054610f33600d61171b565b11610f495781600f54610f46919061363a565b90505b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fa457600090505b808414610fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdd9061327e565b60405180910390fd5b6000610ff48a8a8a8a611729565b9050611000600d61169b565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611068573d6000803e3d6000fd5b508095505050505050949350505050565b6110816117f6565b73ffffffffffffffffffffffffffffffffffffffff1661109f611119565b73ffffffffffffffffffffffffffffffffffffffff16146110f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ec9061335e565b60405180910390fd5b6110ff6000611b12565b565b600b6020528060005260406000206000915090505481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b813373ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111dc906133fe565b60405180910390fd5b81600b600085815260200190815260200160002081905550505050565b6009805461120f9061377e565b80601f016020809104026020016040519081016040528092919081815260200182805461123b9061377e565b80156112885780601f1061125d57610100808354040283529160200191611288565b820191906000526020600020905b81548152906001019060200180831161126b57829003601f168201915b505050505081565b6112a261129b6117f6565b8383611bd8565b5050565b600060016112b4600d61171b565b6112be9190613694565b905090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561134a576000905061136b565b6010546113556112a6565b101561136557600f54905061136b565b600e5490505b919050565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600a80546113ed9061377e565b80601f01602080910402602001604051908101604052809291908181526020018280546114199061377e565b80156114665780601f1061143b57610100808354040283529160200191611466565b820191906000526020600020905b81548152906001019060200180831161144957829003601f168201915b505050505081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61150a6117f6565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611550575061154f8561154a6117f6565b61146e565b5b61158f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611586906132de565b60405180910390fd5b61159c8585858585611d45565b5050505050565b6115ab6117f6565b73ffffffffffffffffffffffffffffffffffffffff166115c9611119565b73ffffffffffffffffffffffffffffffffffffffff161461161f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116169061335e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561168f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611686906132be565b60405180910390fd5b61169881611b12565b50565b6001816000016000828254019250508190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081600001549050919050565b600080611736600461171b565b9050611742600461169b565b61175d86828760405180602001604052806000815250611fc7565b846006600083815260200190815260200160002081905550336005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083836007600084815260200190815260200160002091906117e99291906125d0565b5080915050949350505050565b600033905090565b8151835114611842576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611839906133be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156118b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a9906132fe565b60405180910390fd5b60006118bc6117f6565b90506118cc81878787878761215d565b60005b8451811015611a7d5760008582815181106118ed576118ec613888565b5b60200260200101519050600085838151811061190c5761190b613888565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a49061333e565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a6291906135e4565b9250508190555050505080611a76906137e1565b90506118cf565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611af49291906131ca565b60405180910390a4611b0a818787878787612165565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3e9061337e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d389190613201565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac906132fe565b60405180910390fd5b6000611dbf6117f6565b9050611ddf818787611dd08861234c565b611dd98861234c565b8761215d565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6d9061333e565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f2b91906135e4565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611fa8929190613439565b60405180910390a4611fbe8288888888886123c6565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202e906133de565b60405180910390fd5b60006120416117f6565b9050612062816000876120538861234c565b61205c8861234c565b8761215d565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120c191906135e4565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161213f929190613439565b60405180910390a4612156816000878787876123c6565b5050505050565b505050505050565b6121848473ffffffffffffffffffffffffffffffffffffffff166125ad565b15612344578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016121ca9594939291906130e6565b602060405180830381600087803b1580156121e457600080fd5b505af192505050801561221557506040513d601f19601f820116820180604052508101906122129190612d00565b60015b6122bb576122216138e6565b806308c379a0141561227e5750612236613da8565b806122415750612280565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612275919061321c565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b29061323e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612342576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123399061325e565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561236b5761236a6138b7565b5b6040519080825280602002602001820160405280156123995781602001602082028036833780820191505090505b50905082816000815181106123b1576123b0613888565b5b60200260200101818152505080915050919050565b6123e58473ffffffffffffffffffffffffffffffffffffffff166125ad565b156125a5578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161242b95949392919061314e565b602060405180830381600087803b15801561244557600080fd5b505af192505050801561247657506040513d601f19601f820116820180604052508101906124739190612d00565b60015b61251c576124826138e6565b806308c379a014156124df5750612497613da8565b806124a257506124e1565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d6919061321c565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125139061323e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146125a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259a9061325e565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546125dc9061377e565b90600052602060002090601f0160209004810192826125fe5760008555612645565b82601f1061261757803560ff1916838001178555612645565b82800160010185558215612645579182015b82811115612644578235825591602001919060010190612629565b5b5090506126529190612656565b5090565b5b8082111561266f576000816000905550600101612657565b5090565b6000612686612681846134ea565b6134c5565b905080838252602082019050828560208602820111156126a9576126a861391c565b5b60005b858110156126d957816126bf8882612795565b8452602084019350602083019250506001810190506126ac565b5050509392505050565b60006126f66126f184613516565b6134c5565b905080838252602082019050828560208602820111156127195761271861391c565b5b60005b85811015612749578161272f888261291f565b84526020840193506020830192505060018101905061271c565b5050509392505050565b600061276661276184613542565b6134c5565b90508281526020810184848401111561278257612781613926565b5b61278d84828561373c565b509392505050565b6000813590506127a481613e3e565b92915050565b600082601f8301126127bf576127be61390d565b5b81356127cf848260208601612673565b91505092915050565b60008083601f8401126127ee576127ed61390d565b5b8235905067ffffffffffffffff81111561280b5761280a613908565b5b6020830191508360208202830111156128275761282661391c565b5b9250929050565b600082601f8301126128435761284261390d565b5b81356128538482602086016126e3565b91505092915050565b60008135905061286b81613e55565b92915050565b60008135905061288081613e6c565b92915050565b60008151905061289581613e6c565b92915050565b600082601f8301126128b0576128af61390d565b5b81356128c0848260208601612753565b91505092915050565b60008083601f8401126128df576128de61390d565b5b8235905067ffffffffffffffff8111156128fc576128fb613908565b5b6020830191508360018202830111156129185761291761391c565b5b9250929050565b60008135905061292e81613e83565b92915050565b60006020828403121561294a57612949613930565b5b600061295884828501612795565b91505092915050565b6000806040838503121561297857612977613930565b5b600061298685828601612795565b925050602061299785828601612795565b9150509250929050565b600080600080600060a086880312156129bd576129bc613930565b5b60006129cb88828901612795565b95505060206129dc88828901612795565b945050604086013567ffffffffffffffff8111156129fd576129fc61392b565b5b612a098882890161282e565b935050606086013567ffffffffffffffff811115612a2a57612a2961392b565b5b612a368882890161282e565b925050608086013567ffffffffffffffff811115612a5757612a5661392b565b5b612a638882890161289b565b9150509295509295909350565b600080600080600060a08688031215612a8c57612a8b613930565b5b6000612a9a88828901612795565b9550506020612aab88828901612795565b9450506040612abc8882890161291f565b9350506060612acd8882890161291f565b925050608086013567ffffffffffffffff811115612aee57612aed61392b565b5b612afa8882890161289b565b9150509295509295909350565b600080600060408486031215612b2057612b1f613930565b5b6000612b2e86828701612795565b935050602084013567ffffffffffffffff811115612b4f57612b4e61392b565b5b612b5b868287016127d8565b92509250509250925092565b60008060408385031215612b7e57612b7d613930565b5b6000612b8c85828601612795565b9250506020612b9d8582860161285c565b9150509250929050565b60008060408385031215612bbe57612bbd613930565b5b6000612bcc85828601612795565b9250506020612bdd8582860161291f565b9150509250929050565b60008060008060608587031215612c0157612c00613930565b5b6000612c0f87828801612795565b9450506020612c208782880161291f565b935050604085013567ffffffffffffffff811115612c4157612c4061392b565b5b612c4d878288016128c9565b925092505092959194509250565b60008060408385031215612c7257612c71613930565b5b600083013567ffffffffffffffff811115612c9057612c8f61392b565b5b612c9c858286016127aa565b925050602083013567ffffffffffffffff811115612cbd57612cbc61392b565b5b612cc98582860161282e565b9150509250929050565b600060208284031215612ce957612ce8613930565b5b6000612cf784828501612871565b91505092915050565b600060208284031215612d1657612d15613930565b5b6000612d2484828501612886565b91505092915050565b600060208284031215612d4357612d42613930565b5b6000612d518482850161291f565b91505092915050565b60008060408385031215612d7157612d70613930565b5b6000612d7f8582860161291f565b9250506020612d908582860161291f565b9150509250929050565b6000612da683836130ad565b60208301905092915050565b612dbb816136c8565b82525050565b6000612dcc82613583565b612dd681856135b1565b9350612de183613573565b8060005b83811015612e12578151612df98882612d9a565b9750612e04836135a4565b925050600181019050612de5565b5085935050505092915050565b612e28816136da565b82525050565b6000612e398261358e565b612e4381856135c2565b9350612e5381856020860161374b565b612e5c81613935565b840191505092915050565b6000612e7282613599565b612e7c81856135d3565b9350612e8c81856020860161374b565b612e9581613935565b840191505092915050565b6000612ead6034836135d3565b9150612eb882613953565b604082019050919050565b6000612ed06028836135d3565b9150612edb826139a2565b604082019050919050565b6000612ef3600e836135d3565b9150612efe826139f1565b602082019050919050565b6000612f16602b836135d3565b9150612f2182613a1a565b604082019050919050565b6000612f396026836135d3565b9150612f4482613a69565b604082019050919050565b6000612f5c6029836135d3565b9150612f6782613ab8565b604082019050919050565b6000612f7f6025836135d3565b9150612f8a82613b07565b604082019050919050565b6000612fa26032836135d3565b9150612fad82613b56565b604082019050919050565b6000612fc5602a836135d3565b9150612fd082613ba5565b604082019050919050565b6000612fe86020836135d3565b9150612ff382613bf4565b602082019050919050565b600061300b6029836135d3565b915061301682613c1d565b604082019050919050565b600061302e6029836135d3565b915061303982613c6c565b604082019050919050565b60006130516028836135d3565b915061305c82613cbb565b604082019050919050565b60006130746021836135d3565b915061307f82613d0a565b604082019050919050565b60006130976031836135d3565b91506130a282613d59565b604082019050919050565b6130b681613732565b82525050565b6130c581613732565b82525050565b60006020820190506130e06000830184612db2565b92915050565b600060a0820190506130fb6000830188612db2565b6131086020830187612db2565b818103604083015261311a8186612dc1565b9050818103606083015261312e8185612dc1565b905081810360808301526131428184612e2e565b90509695505050505050565b600060a0820190506131636000830188612db2565b6131706020830187612db2565b61317d60408301866130bc565b61318a60608301856130bc565b818103608083015261319c8184612e2e565b90509695505050505050565b600060208201905081810360008301526131c28184612dc1565b905092915050565b600060408201905081810360008301526131e48185612dc1565b905081810360208301526131f88184612dc1565b90509392505050565b60006020820190506132166000830184612e1f565b92915050565b600060208201905081810360008301526132368184612e67565b905092915050565b6000602082019050818103600083015261325781612ea0565b9050919050565b6000602082019050818103600083015261327781612ec3565b9050919050565b6000602082019050818103600083015261329781612ee6565b9050919050565b600060208201905081810360008301526132b781612f09565b9050919050565b600060208201905081810360008301526132d781612f2c565b9050919050565b600060208201905081810360008301526132f781612f4f565b9050919050565b6000602082019050818103600083015261331781612f72565b9050919050565b6000602082019050818103600083015261333781612f95565b9050919050565b6000602082019050818103600083015261335781612fb8565b9050919050565b6000602082019050818103600083015261337781612fdb565b9050919050565b6000602082019050818103600083015261339781612ffe565b9050919050565b600060208201905081810360008301526133b781613021565b9050919050565b600060208201905081810360008301526133d781613044565b9050919050565b600060208201905081810360008301526133f781613067565b9050919050565b600060208201905081810360008301526134178161308a565b9050919050565b600060208201905061343360008301846130bc565b92915050565b600060408201905061344e60008301856130bc565b61345b60208301846130bc565b9392505050565b6000808335600160200384360303811261347f5761347e613917565b5b80840192508235915067ffffffffffffffff8211156134a1576134a0613912565b5b6020830192506001820236038313156134bd576134bc613921565b5b509250929050565b60006134cf6134e0565b90506134db82826137b0565b919050565b6000604051905090565b600067ffffffffffffffff821115613505576135046138b7565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613531576135306138b7565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561355d5761355c6138b7565b5b61356682613935565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006135ef82613732565b91506135fa83613732565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561362f5761362e61382a565b5b828201905092915050565b600061364582613732565b915061365083613732565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136895761368861382a565b5b828202905092915050565b600061369f82613732565b91506136aa83613732565b9250828210156136bd576136bc61382a565b5b828203905092915050565b60006136d382613712565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561376957808201518184015260208101905061374e565b83811115613778576000848401525b50505050565b6000600282049050600182168061379657607f821691505b602082108114156137aa576137a9613859565b5b50919050565b6137b982613935565b810181811067ffffffffffffffff821117156137d8576137d76138b7565b5b80604052505050565b60006137ec82613732565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561381f5761381e61382a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156139055760046000803e613902600051613946565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820666565000000000000000000000000000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135355472616461626c652363726561746f724f6e6c793a204f4e4c60008201527f595f43524541544f525f414c4c4f574544000000000000000000000000000000602082015250565b600060443d1015613db857613e3b565b613dc06134e0565b60043d036004823e80513d602482011167ffffffffffffffff82111715613de8575050613e3b565b808201805167ffffffffffffffff811115613e065750505050613e3b565b80602083010160043d038501811115613e23575050505050613e3b565b613e32826020018501866137b0565b82955050505050505b90565b613e47816136c8565b8114613e5257600080fd5b50565b613e5e816136da565b8114613e6957600080fd5b50565b613e75816136e6565b8114613e8057600080fd5b50565b613e8c81613732565b8114613e9757600080fd5b5056fea2646970667358221220edb3f3ee4f5f72c21353a42b6fccb258eb9be066dbb2d444efc0e6f0e228590564736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000ad78ebc5ac620000000000000000000000000000000000000000000000000000821ab0d441498000000000000000000000000000000000000000000000000000000000000000005dc0000000000000000000000008a04c9a13473fbded852e9650bd095c20b1385870000000000000000000000000000000000000000000000000000000000000009436f726769636c756200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009436f726769636c75620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005a68747470733a2f2f63726f6e6f73636f726769636c75622e6d7970696e6174612e636c6f75642f697066732f516d62775a4c7a5956364e66784e6638313170374a4a74756748336264706e473874626a4e673847665831536b35000000000000
-----Decoded View---------------
Arg [0] : _name (string): Corgiclub
Arg [1] : _symbol (string): Corgiclub
Arg [2] : _uri (string): https://cronoscorgiclub.mypinata.cloud/ipfs/QmbwZLzYV6NfxNf811p7JJtugH3bdpnG8tbjNg8GfX1Sk5
Arg [3] : _publicFee (uint256): 200000000000000000000
Arg [4] : _earlyFee (uint256): 150000000000000000000
Arg [5] : _earlyLimit (uint32): 1500
Arg [6] : _payee (address): 0x8a04c9a13473fbded852e9650bd095c20b138587
-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [3] : 00000000000000000000000000000000000000000000000ad78ebc5ac6200000
Arg [4] : 00000000000000000000000000000000000000000000000821ab0d4414980000
Arg [5] : 00000000000000000000000000000000000000000000000000000000000005dc
Arg [6] : 0000000000000000000000008a04c9a13473fbded852e9650bd095c20b138587
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [8] : 436f726769636c75620000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [10] : 436f726769636c75620000000000000000000000000000000000000000000000
Arg [11] : 000000000000000000000000000000000000000000000000000000000000005a
Arg [12] : 68747470733a2f2f63726f6e6f73636f726769636c75622e6d7970696e617461
Arg [13] : 2e636c6f75642f697066732f516d62775a4c7a5956364e66784e663831317037
Arg [14] : 4a4a74756748336264706e473874626a4e673847665831536b35000000000000
Deployed ByteCode Sourcemap
48521:2296:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21015:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20038:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45994:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47853:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45946:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48691:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49325:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48105:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50449:365;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45892:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22954:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48342:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21412:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48660:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48721:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50067:374;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36240:103;;;;;;;;;;;;;:::i;:::-;;47586:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35589:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47967:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46019:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22009:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49216:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48753:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49434:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45841:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48224:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47554:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22236:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22476:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36498:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21015:231;21101:7;21148:1;21129:21;;:7;:21;;;;21121:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;21216:9;:13;21226:2;21216:13;;;;;;;;;;;:22;21230:7;21216:22;;;;;;;;;;;;;;;;21209:29;;21015:231;;;;:::o;20038:310::-;20140:4;20192:26;20177:41;;;:11;:41;;;;:110;;;;20250:37;20235:52;;;:11;:52;;;;20177:110;:163;;;;20304:36;20328:11;20304:23;:36::i;:::-;20177:163;20157:183;;20038:310;;;:::o;45994:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47853:106::-;47909:13;47942:4;:9;47947:3;47942:9;;;;;;;;;;;47935:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47853:106;;;:::o;45946:39::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48691:23::-;;;;:::o;49325:101::-;49369:7;49417:1;49396:18;:8;:16;:18::i;:::-;:22;;;;:::i;:::-;49389:29;;49325:101;:::o;48105:111::-;48167:7;48194:9;:14;48204:3;48194:14;;;;;;;;;;;;48187:21;;48105:111;;;:::o;50449:365::-;50559:9;50570:10;50582:5;;:12;;49790:11;49816:8;49804:9;;:20;;;;:::i;:::-;49790:34;;49861:10;;49839:18;:8;:16;:18::i;:::-;:32;49835:90;;49905:8;49894;;:19;;;;:::i;:::-;49888:25;;49835:90;49949:5;;;;;;;;;;;49939:15;;:6;:15;;;49935:55;;;49977:1;49971:7;;49935:55;50017:3;50008:5;:12;50000:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;50620:9:::1;50615:145;50639:5;;:12;;50635:1;:16;50615:145;;;50673:40;50686:13;50701:1;50704:5;;50710:1;50704:8;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;50673:12;:40::i;:::-;;50728:20;:8;:18;:20::i;:::-;50653:3;;;;;:::i;:::-;;;;50615:145;;;;50780:5;;;;;;;;;;;50772:23;;:34;50796:9;50772:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;49779:280:::0;50449:365;;;;;;:::o;45892:47::-;;;;;;;;;;;;;;;;;:::o;22954:442::-;23195:12;:10;:12::i;:::-;23187:20;;:4;:20;;;:60;;;;23211:36;23228:4;23234:12;:10;:12::i;:::-;23211:16;:36::i;:::-;23187:60;23165:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;23336:52;23359:4;23365:2;23369:3;23374:7;23383:4;23336:22;:52::i;:::-;22954:442;;;;;:::o;48342:93::-;48393:7;48420;;48413:14;;48342:93;:::o;21412:524::-;21568:16;21629:3;:10;21610:8;:15;:29;21602:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;21698:30;21745:8;:15;21731:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21698:63;;21779:9;21774:122;21798:8;:15;21794:1;:19;21774:122;;;21854:30;21864:8;21873:1;21864:11;;;;;;;;:::i;:::-;;;;;;;;21877:3;21881:1;21877:6;;;;;;;;:::i;:::-;;;;;;;;21854:9;:30::i;:::-;21835:13;21849:1;21835:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;21815:3;;;;:::i;:::-;;;21774:122;;;;21915:13;21908:20;;;21412:524;;;;:::o;48660:24::-;;;;:::o;48721:25::-;;;;:::o;50067:374::-;50255:7;50203:9;50214:10;50226:1;49790:11;49816:8;49804:9;;:20;;;;:::i;:::-;49790:34;;49861:10;;49839:18;:8;:16;:18::i;:::-;:32;49835:90;;49905:8;49894;;:19;;;;:::i;:::-;49888:25;;49835:90;49949:5;;;;;;;;;;;49939:15;;:6;:15;;;49935:55;;;49977:1;49971:7;;49935:55;50017:3;50008:5;:12;50000:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;50275:10:::1;50288:49;50301:13;50316:14;50332:4;;50288:12;:49::i;:::-;50275:62;;50348:20;:8;:18;:20::i;:::-;50387:5;;;;;;;;;;;50379:23;;:34;50403:9;50379:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;50431:2;50424:9;;;49779:280:::0;50067:374;;;;;;;;;:::o;36240:103::-;35820:12;:10;:12::i;:::-;35809:23;;:7;:5;:7::i;:::-;:23;;;35801:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36305:30:::1;36332:1;36305:18;:30::i;:::-;36240:103::o:0;47586:45::-;;;;;;;;;;;;;;;;;:::o;35589:87::-;35635:7;35662:6;;;;;;;;;;;35655:13;;35589:87;:::o;47967:126::-;48045:3;46118:10;46101:27;;:8;:13;46110:3;46101:13;;;;;;;;;;;;;;;;;;;;;:27;;;46093:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;48078:7:::1;48061:9;:14;48071:3;48061:14;;;;;;;;;;;:24;;;;47967:126:::0;;;:::o;46019:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22009:155::-;22104:52;22123:12;:10;:12::i;:::-;22137:8;22147;22104:18;:52::i;:::-;22009:155;;:::o;49216:101::-;49260:7;49308:1;49287:18;:8;:16;:18::i;:::-;:22;;;;:::i;:::-;49280:29;;49216:101;:::o;48753:20::-;;;;;;;;;;;;;:::o;49434:269::-;49487:7;49521:5;;;;;;;;;;;49511:15;;:6;:15;;;49507:56;;;49550:1;49543:8;;;;49507:56;49593:10;;49577:13;:11;:13::i;:::-;:26;49573:123;;;49627:8;;49620:15;;;;49573:123;49675:9;;49668:16;;49434:269;;;;:::o;45841:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;48224:110::-;48286:7;48313:8;:13;48322:3;48313:13;;;;;;;;;;;;;;;;;;;;;48306:20;;48224:110;;;:::o;47554:25::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22236:168::-;22335:4;22359:18;:27;22378:7;22359:27;;;;;;;;;;;;;;;:37;22387:8;22359:37;;;;;;;;;;;;;;;;;;;;;;;;;22352:44;;22236:168;;;;:::o;22476:401::-;22692:12;:10;:12::i;:::-;22684:20;;:4;:20;;;:60;;;;22708:36;22725:4;22731:12;:10;:12::i;:::-;22708:16;:36::i;:::-;22684:60;22662:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;22824:45;22842:4;22848:2;22852;22856:6;22864:4;22824:17;:45::i;:::-;22476:401;;;;;:::o;36498:201::-;35820:12;:10;:12::i;:::-;35809:23;;:7;:5;:7::i;:::-;:23;;;35801:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36607:1:::1;36587:22;;:8;:22;;;;36579:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36663:28;36682:8;36663:18;:28::i;:::-;36498:201:::0;:::o;38062:127::-;38169:1;38151:7;:14;;;:19;;;;;;;;;;;38062:127;:::o;18788:157::-;18873:4;18912:25;18897:40;;;:11;:40;;;;18890:47;;18788:157;;;:::o;37940:114::-;38005:7;38032;:14;;;38025:21;;37940:114;;;:::o;46562:431::-;46713:7;46733:11;46747:18;:8;:16;:18::i;:::-;46733:32;;46776:20;:8;:18;:20::i;:::-;46809:45;46815:13;46830:3;46835:14;46809:45;;;;;;;;;;;;:5;:45::i;:::-;46884:14;46865:11;:16;46877:3;46865:16;;;;;;;;;;;:33;;;;46925:10;46909:8;:13;46918:3;46909:13;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;46958:4;;46946;:9;46951:3;46946:9;;;;;;;;;;;:16;;;;;;;:::i;:::-;;46982:3;46975:10;;;46562:431;;;;;;:::o;17700:98::-;17753:7;17780:10;17773:17;;17700:98;:::o;25038:1074::-;25265:7;:14;25251:3;:10;:28;25243:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;25357:1;25343:16;;:2;:16;;;;25335:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25414:16;25433:12;:10;:12::i;:::-;25414:31;;25458:60;25479:8;25489:4;25495:2;25499:3;25504:7;25513:4;25458:20;:60::i;:::-;25536:9;25531:421;25555:3;:10;25551:1;:14;25531:421;;;25587:10;25600:3;25604:1;25600:6;;;;;;;;:::i;:::-;;;;;;;;25587:19;;25621:14;25638:7;25646:1;25638:10;;;;;;;;:::i;:::-;;;;;;;;25621:27;;25665:19;25687:9;:13;25697:2;25687:13;;;;;;;;;;;:19;25701:4;25687:19;;;;;;;;;;;;;;;;25665:41;;25744:6;25729:11;:21;;25721:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25877:6;25863:11;:20;25841:9;:13;25851:2;25841:13;;;;;;;;;;;:19;25855:4;25841:19;;;;;;;;;;;;;;;:42;;;;25934:6;25913:9;:13;25923:2;25913:13;;;;;;;;;;;:17;25927:2;25913:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;25572:380;;;25567:3;;;;:::i;:::-;;;25531:421;;;;25999:2;25969:47;;25993:4;25969:47;;25983:8;25969:47;;;26003:3;26008:7;25969:47;;;;;;;:::i;:::-;;;;;;;;26029:75;26065:8;26075:4;26081:2;26085:3;26090:7;26099:4;26029:35;:75::i;:::-;25232:880;25038:1074;;;;;:::o;36859:191::-;36933:16;36952:6;;;;;;;;;;;36933:25;;36978:8;36969:6;;:17;;;;;;;;;;;;;;;;;;37033:8;37002:40;;37023:8;37002:40;;;;;;;;;;;;36922:128;36859:191;:::o;31224:331::-;31379:8;31370:17;;:5;:17;;;;31362:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31482:8;31444:18;:25;31463:5;31444:25;;;;;;;;;;;;;;;:35;31470:8;31444:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31528:8;31506:41;;31521:5;31506:41;;;31538:8;31506:41;;;;;;:::i;:::-;;;;;;;;31224:331;;;:::o;23860:820::-;24062:1;24048:16;;:2;:16;;;;24040:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24119:16;24138:12;:10;:12::i;:::-;24119:31;;24163:96;24184:8;24194:4;24200:2;24204:21;24222:2;24204:17;:21::i;:::-;24227:25;24245:6;24227:17;:25::i;:::-;24254:4;24163:20;:96::i;:::-;24272:19;24294:9;:13;24304:2;24294:13;;;;;;;;;;;:19;24308:4;24294:19;;;;;;;;;;;;;;;;24272:41;;24347:6;24332:11;:21;;24324:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24472:6;24458:11;:20;24436:9;:13;24446:2;24436:13;;;;;;;;;;;:19;24450:4;24436:19;;;;;;;;;;;;;;;:42;;;;24521:6;24500:9;:13;24510:2;24500:13;;;;;;;;;;;:17;24514:2;24500:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;24576:2;24545:46;;24570:4;24545:46;;24560:8;24545:46;;;24580:2;24584:6;24545:46;;;;;;;:::i;:::-;;;;;;;;24604:68;24635:8;24645:4;24651:2;24655;24659:6;24667:4;24604:30;:68::i;:::-;24029:651;;23860:820;;;;;:::o;27430:569::-;27597:1;27583:16;;:2;:16;;;;27575:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27650:16;27669:12;:10;:12::i;:::-;27650:31;;27694:102;27715:8;27733:1;27737:2;27741:21;27759:2;27741:17;:21::i;:::-;27764:25;27782:6;27764:17;:25::i;:::-;27791:4;27694:20;:102::i;:::-;27830:6;27809:9;:13;27819:2;27809:13;;;;;;;;;;;:17;27823:2;27809:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27889:2;27852:52;;27885:1;27852:52;;27867:8;27852:52;;;27893:2;27897:6;27852:52;;;;;;;:::i;:::-;;;;;;;;27917:74;27948:8;27966:1;27970:2;27974;27978:6;27986:4;27917:30;:74::i;:::-;27564:435;27430:569;;;;:::o;32511:221::-;;;;;;;:::o;33492:813::-;33732:15;:2;:13;;;:15::i;:::-;33728:570;;;33785:2;33768:43;;;33812:8;33822:4;33828:3;33833:7;33842:4;33768:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33764:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;34160:6;34153:14;;;;;;;;;;;:::i;:::-;;;;;;;;33764:523;;;34209:62;;;;;;;;;;:::i;:::-;;;;;;;;33764:523;33941:48;;;33929:60;;;:8;:60;;;;33925:159;;34014:50;;;;;;;;;;:::i;:::-;;;;;;;;33925:159;33848:251;33728:570;33492:813;;;;;;:::o;34313:198::-;34379:16;34408:22;34447:1;34433:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34408:41;;34471:7;34460:5;34466:1;34460:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;34498:5;34491:12;;;34313:198;;;:::o;32740:744::-;32955:15;:2;:13;;;:15::i;:::-;32951:526;;;33008:2;32991:38;;;33030:8;33040:4;33046:2;33050:6;33058:4;32991:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32987:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33339:6;33332:14;;;;;;;;;;;:::i;:::-;;;;;;;;32987:479;;;33388:62;;;;;;;;;;:::i;:::-;;;;;;;;32987:479;33125:43;;;33113:55;;;:8;:55;;;;33109:154;;33193:50;;;;;;;;;;:::i;:::-;;;;;;;;33109:154;33064:214;32951:526;32740:744;;;;;;:::o;9740:326::-;9800:4;10057:1;10035:7;:19;;;:23;10028:30;;9740:326;;;:::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;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:139::-;1959:5;1997:6;1984:20;1975:29;;2013:33;2040:5;2013:33;:::i;:::-;1913:139;;;;:::o;2075:370::-;2146:5;2195:3;2188:4;2180:6;2176:17;2172:27;2162:122;;2203:79;;:::i;:::-;2162:122;2320:6;2307:20;2345:94;2435:3;2427:6;2420:4;2412:6;2408:17;2345:94;:::i;:::-;2336:103;;2152:293;2075:370;;;;:::o;2467:580::-;2552:8;2562:6;2612:3;2605:4;2597:6;2593:17;2589:27;2579:122;;2620:79;;:::i;:::-;2579:122;2733:6;2720:20;2710:30;;2763:18;2755:6;2752:30;2749:117;;;2785:79;;:::i;:::-;2749:117;2899:4;2891:6;2887:17;2875:29;;2953:3;2945:4;2937:6;2933:17;2923:8;2919:32;2916:41;2913:128;;;2960:79;;:::i;:::-;2913:128;2467:580;;;;;:::o;3070:370::-;3141:5;3190:3;3183:4;3175:6;3171:17;3167:27;3157:122;;3198:79;;:::i;:::-;3157:122;3315:6;3302:20;3340:94;3430:3;3422:6;3415:4;3407:6;3403:17;3340:94;:::i;:::-;3331:103;;3147:293;3070:370;;;;:::o;3446:133::-;3489:5;3527:6;3514:20;3505:29;;3543:30;3567:5;3543:30;:::i;:::-;3446:133;;;;:::o;3585:137::-;3630:5;3668:6;3655:20;3646:29;;3684:32;3710:5;3684:32;:::i;:::-;3585:137;;;;:::o;3728:141::-;3784:5;3815:6;3809:13;3800:22;;3831:32;3857:5;3831:32;:::i;:::-;3728:141;;;;:::o;3888:338::-;3943:5;3992:3;3985:4;3977:6;3973:17;3969:27;3959:122;;4000:79;;:::i;:::-;3959:122;4117:6;4104:20;4142:78;4216:3;4208:6;4201:4;4193:6;4189:17;4142:78;:::i;:::-;4133:87;;3949:277;3888:338;;;;:::o;4246:553::-;4304:8;4314:6;4364:3;4357:4;4349:6;4345:17;4341:27;4331:122;;4372:79;;:::i;:::-;4331:122;4485:6;4472:20;4462:30;;4515:18;4507:6;4504:30;4501:117;;;4537:79;;:::i;:::-;4501:117;4651:4;4643:6;4639:17;4627:29;;4705:3;4697:4;4689:6;4685:17;4675:8;4671:32;4668:41;4665:128;;;4712:79;;:::i;:::-;4665:128;4246:553;;;;;:::o;4805:139::-;4851:5;4889:6;4876:20;4867:29;;4905:33;4932:5;4905:33;:::i;:::-;4805:139;;;;:::o;4950:329::-;5009:6;5058:2;5046:9;5037:7;5033:23;5029:32;5026:119;;;5064:79;;:::i;:::-;5026:119;5184:1;5209:53;5254:7;5245:6;5234:9;5230:22;5209:53;:::i;:::-;5199:63;;5155:117;4950:329;;;;:::o;5285:474::-;5353:6;5361;5410:2;5398:9;5389:7;5385:23;5381:32;5378:119;;;5416:79;;:::i;:::-;5378:119;5536:1;5561:53;5606:7;5597:6;5586:9;5582:22;5561:53;:::i;:::-;5551:63;;5507:117;5663:2;5689:53;5734:7;5725:6;5714:9;5710:22;5689:53;:::i;:::-;5679:63;;5634:118;5285:474;;;;;:::o;5765:1509::-;5919:6;5927;5935;5943;5951;6000:3;5988:9;5979:7;5975:23;5971:33;5968:120;;;6007:79;;:::i;:::-;5968:120;6127:1;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6098:117;6254:2;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;:::i;:::-;6270:63;;6225:118;6410:2;6399:9;6395:18;6382:32;6441:18;6433:6;6430:30;6427:117;;;6463:79;;:::i;:::-;6427:117;6568:78;6638:7;6629:6;6618:9;6614:22;6568:78;:::i;:::-;6558:88;;6353:303;6723:2;6712:9;6708:18;6695:32;6754:18;6746:6;6743:30;6740:117;;;6776:79;;:::i;:::-;6740:117;6881:78;6951:7;6942:6;6931:9;6927:22;6881:78;:::i;:::-;6871:88;;6666:303;7036:3;7025:9;7021:19;7008:33;7068:18;7060:6;7057:30;7054:117;;;7090:79;;:::i;:::-;7054:117;7195:62;7249:7;7240:6;7229:9;7225:22;7195:62;:::i;:::-;7185:72;;6979:288;5765:1509;;;;;;;;:::o;7280:1089::-;7384:6;7392;7400;7408;7416;7465:3;7453:9;7444:7;7440:23;7436:33;7433:120;;;7472:79;;:::i;:::-;7433:120;7592:1;7617:53;7662:7;7653:6;7642:9;7638:22;7617:53;:::i;:::-;7607:63;;7563:117;7719:2;7745:53;7790:7;7781:6;7770:9;7766:22;7745:53;:::i;:::-;7735:63;;7690:118;7847:2;7873:53;7918:7;7909:6;7898:9;7894:22;7873:53;:::i;:::-;7863:63;;7818:118;7975:2;8001:53;8046:7;8037:6;8026:9;8022:22;8001:53;:::i;:::-;7991:63;;7946:118;8131:3;8120:9;8116:19;8103:33;8163:18;8155:6;8152:30;8149:117;;;8185:79;;:::i;:::-;8149:117;8290:62;8344:7;8335:6;8324:9;8320:22;8290:62;:::i;:::-;8280:72;;8074:288;7280:1089;;;;;;;;:::o;8375:728::-;8482:6;8490;8498;8547:2;8535:9;8526:7;8522:23;8518:32;8515:119;;;8553:79;;:::i;:::-;8515:119;8673:1;8698:53;8743:7;8734:6;8723:9;8719:22;8698:53;:::i;:::-;8688:63;;8644:117;8828:2;8817:9;8813:18;8800:32;8859:18;8851:6;8848:30;8845:117;;;8881:79;;:::i;:::-;8845:117;8994:92;9078:7;9069:6;9058:9;9054:22;8994:92;:::i;:::-;8976:110;;;;8771:325;8375:728;;;;;:::o;9109:468::-;9174:6;9182;9231:2;9219:9;9210:7;9206:23;9202:32;9199:119;;;9237:79;;:::i;:::-;9199:119;9357:1;9382:53;9427:7;9418:6;9407:9;9403:22;9382:53;:::i;:::-;9372:63;;9328:117;9484:2;9510:50;9552:7;9543:6;9532:9;9528:22;9510:50;:::i;:::-;9500:60;;9455:115;9109:468;;;;;:::o;9583:474::-;9651:6;9659;9708:2;9696:9;9687:7;9683:23;9679:32;9676:119;;;9714:79;;:::i;:::-;9676:119;9834:1;9859:53;9904:7;9895:6;9884:9;9880:22;9859:53;:::i;:::-;9849:63;;9805:117;9961:2;9987:53;10032:7;10023:6;10012:9;10008:22;9987:53;:::i;:::-;9977:63;;9932:118;9583:474;;;;;:::o;10063:819::-;10152:6;10160;10168;10176;10225:2;10213:9;10204:7;10200:23;10196:32;10193:119;;;10231:79;;:::i;:::-;10193:119;10351:1;10376:53;10421:7;10412:6;10401:9;10397:22;10376:53;:::i;:::-;10366:63;;10322:117;10478:2;10504:53;10549:7;10540:6;10529:9;10525:22;10504:53;:::i;:::-;10494:63;;10449:118;10634:2;10623:9;10619:18;10606:32;10665:18;10657:6;10654:30;10651:117;;;10687:79;;:::i;:::-;10651:117;10800:65;10857:7;10848:6;10837:9;10833:22;10800:65;:::i;:::-;10782:83;;;;10577:298;10063:819;;;;;;;:::o;10888:894::-;11006:6;11014;11063:2;11051:9;11042:7;11038:23;11034:32;11031:119;;;11069:79;;:::i;:::-;11031:119;11217:1;11206:9;11202:17;11189:31;11247:18;11239:6;11236:30;11233:117;;;11269:79;;:::i;:::-;11233:117;11374:78;11444:7;11435:6;11424:9;11420:22;11374:78;:::i;:::-;11364:88;;11160:302;11529:2;11518:9;11514:18;11501:32;11560:18;11552:6;11549:30;11546:117;;;11582:79;;:::i;:::-;11546:117;11687:78;11757:7;11748:6;11737:9;11733:22;11687:78;:::i;:::-;11677:88;;11472:303;10888:894;;;;;:::o;11788:327::-;11846:6;11895:2;11883:9;11874:7;11870:23;11866:32;11863:119;;;11901:79;;:::i;:::-;11863:119;12021:1;12046:52;12090:7;12081:6;12070:9;12066:22;12046:52;:::i;:::-;12036:62;;11992:116;11788:327;;;;:::o;12121:349::-;12190:6;12239:2;12227:9;12218:7;12214:23;12210:32;12207:119;;;12245:79;;:::i;:::-;12207:119;12365:1;12390:63;12445:7;12436:6;12425:9;12421:22;12390:63;:::i;:::-;12380:73;;12336:127;12121:349;;;;:::o;12476:329::-;12535:6;12584:2;12572:9;12563:7;12559:23;12555:32;12552:119;;;12590:79;;:::i;:::-;12552:119;12710:1;12735:53;12780:7;12771:6;12760:9;12756:22;12735:53;:::i;:::-;12725:63;;12681:117;12476:329;;;;:::o;12811:474::-;12879:6;12887;12936:2;12924:9;12915:7;12911:23;12907:32;12904:119;;;12942:79;;:::i;:::-;12904:119;13062:1;13087:53;13132:7;13123:6;13112:9;13108:22;13087:53;:::i;:::-;13077:63;;13033:117;13189:2;13215:53;13260:7;13251:6;13240:9;13236:22;13215:53;:::i;:::-;13205:63;;13160:118;12811:474;;;;;:::o;13291:179::-;13360:10;13381:46;13423:3;13415:6;13381:46;:::i;:::-;13459:4;13454:3;13450:14;13436:28;;13291:179;;;;:::o;13476:118::-;13563:24;13581:5;13563:24;:::i;:::-;13558:3;13551:37;13476:118;;:::o;13630:732::-;13749:3;13778:54;13826:5;13778:54;:::i;:::-;13848:86;13927:6;13922:3;13848:86;:::i;:::-;13841:93;;13958:56;14008:5;13958:56;:::i;:::-;14037:7;14068:1;14053:284;14078:6;14075:1;14072:13;14053:284;;;14154:6;14148:13;14181:63;14240:3;14225:13;14181:63;:::i;:::-;14174:70;;14267:60;14320:6;14267:60;:::i;:::-;14257:70;;14113:224;14100:1;14097;14093:9;14088:14;;14053:284;;;14057:14;14353:3;14346:10;;13754:608;;;13630:732;;;;:::o;14368:109::-;14449:21;14464:5;14449:21;:::i;:::-;14444:3;14437:34;14368:109;;:::o;14483:360::-;14569:3;14597:38;14629:5;14597:38;:::i;:::-;14651:70;14714:6;14709:3;14651:70;:::i;:::-;14644:77;;14730:52;14775:6;14770:3;14763:4;14756:5;14752:16;14730:52;:::i;:::-;14807:29;14829:6;14807:29;:::i;:::-;14802:3;14798:39;14791:46;;14573:270;14483:360;;;;:::o;14849:364::-;14937:3;14965:39;14998:5;14965:39;:::i;:::-;15020:71;15084:6;15079:3;15020:71;:::i;:::-;15013:78;;15100:52;15145:6;15140:3;15133:4;15126:5;15122:16;15100:52;:::i;:::-;15177:29;15199:6;15177:29;:::i;:::-;15172:3;15168:39;15161:46;;14941:272;14849:364;;;;:::o;15219:366::-;15361:3;15382:67;15446:2;15441:3;15382:67;:::i;:::-;15375:74;;15458:93;15547:3;15458:93;:::i;:::-;15576:2;15571:3;15567:12;15560:19;;15219:366;;;:::o;15591:::-;15733:3;15754:67;15818:2;15813:3;15754:67;:::i;:::-;15747:74;;15830:93;15919:3;15830:93;:::i;:::-;15948:2;15943:3;15939:12;15932:19;;15591:366;;;:::o;15963:::-;16105:3;16126:67;16190:2;16185:3;16126:67;:::i;:::-;16119:74;;16202:93;16291:3;16202:93;:::i;:::-;16320:2;16315:3;16311:12;16304:19;;15963:366;;;:::o;16335:::-;16477:3;16498:67;16562:2;16557:3;16498:67;:::i;:::-;16491:74;;16574:93;16663:3;16574:93;:::i;:::-;16692:2;16687:3;16683:12;16676:19;;16335:366;;;:::o;16707:::-;16849:3;16870:67;16934:2;16929:3;16870:67;:::i;:::-;16863:74;;16946:93;17035:3;16946:93;:::i;:::-;17064:2;17059:3;17055:12;17048:19;;16707:366;;;:::o;17079:::-;17221:3;17242:67;17306:2;17301:3;17242:67;:::i;:::-;17235:74;;17318:93;17407:3;17318:93;:::i;:::-;17436:2;17431:3;17427:12;17420:19;;17079:366;;;:::o;17451:::-;17593:3;17614:67;17678:2;17673:3;17614:67;:::i;:::-;17607:74;;17690:93;17779:3;17690:93;:::i;:::-;17808:2;17803:3;17799:12;17792:19;;17451:366;;;:::o;17823:::-;17965:3;17986:67;18050:2;18045:3;17986:67;:::i;:::-;17979:74;;18062:93;18151:3;18062:93;:::i;:::-;18180:2;18175:3;18171:12;18164:19;;17823:366;;;:::o;18195:::-;18337:3;18358:67;18422:2;18417:3;18358:67;:::i;:::-;18351:74;;18434:93;18523:3;18434:93;:::i;:::-;18552:2;18547:3;18543:12;18536:19;;18195:366;;;:::o;18567:::-;18709:3;18730:67;18794:2;18789:3;18730:67;:::i;:::-;18723:74;;18806:93;18895:3;18806:93;:::i;:::-;18924:2;18919:3;18915:12;18908:19;;18567:366;;;:::o;18939:::-;19081:3;19102:67;19166:2;19161:3;19102:67;:::i;:::-;19095:74;;19178:93;19267:3;19178:93;:::i;:::-;19296:2;19291:3;19287:12;19280:19;;18939:366;;;:::o;19311:::-;19453:3;19474:67;19538:2;19533:3;19474:67;:::i;:::-;19467:74;;19550:93;19639:3;19550:93;:::i;:::-;19668:2;19663:3;19659:12;19652:19;;19311:366;;;:::o;19683:::-;19825:3;19846:67;19910:2;19905:3;19846:67;:::i;:::-;19839:74;;19922:93;20011:3;19922:93;:::i;:::-;20040:2;20035:3;20031:12;20024:19;;19683:366;;;:::o;20055:::-;20197:3;20218:67;20282:2;20277:3;20218:67;:::i;:::-;20211:74;;20294:93;20383:3;20294:93;:::i;:::-;20412:2;20407:3;20403:12;20396:19;;20055:366;;;:::o;20427:::-;20569:3;20590:67;20654:2;20649:3;20590:67;:::i;:::-;20583:74;;20666:93;20755:3;20666:93;:::i;:::-;20784:2;20779:3;20775:12;20768:19;;20427:366;;;:::o;20799:108::-;20876:24;20894:5;20876:24;:::i;:::-;20871:3;20864:37;20799:108;;:::o;20913:118::-;21000:24;21018:5;21000:24;:::i;:::-;20995:3;20988:37;20913:118;;:::o;21037:222::-;21130:4;21168:2;21157:9;21153:18;21145:26;;21181:71;21249:1;21238:9;21234:17;21225:6;21181:71;:::i;:::-;21037:222;;;;:::o;21265:1053::-;21588:4;21626:3;21615:9;21611:19;21603:27;;21640:71;21708:1;21697:9;21693:17;21684:6;21640:71;:::i;:::-;21721:72;21789:2;21778:9;21774:18;21765:6;21721:72;:::i;:::-;21840:9;21834:4;21830:20;21825:2;21814:9;21810:18;21803:48;21868:108;21971:4;21962:6;21868:108;:::i;:::-;21860:116;;22023:9;22017:4;22013:20;22008:2;21997:9;21993:18;21986:48;22051:108;22154:4;22145:6;22051:108;:::i;:::-;22043:116;;22207:9;22201:4;22197:20;22191:3;22180:9;22176:19;22169:49;22235:76;22306:4;22297:6;22235:76;:::i;:::-;22227:84;;21265:1053;;;;;;;;:::o;22324:751::-;22547:4;22585:3;22574:9;22570:19;22562:27;;22599:71;22667:1;22656:9;22652:17;22643:6;22599:71;:::i;:::-;22680:72;22748:2;22737:9;22733:18;22724:6;22680:72;:::i;:::-;22762;22830:2;22819:9;22815:18;22806:6;22762:72;:::i;:::-;22844;22912:2;22901:9;22897:18;22888:6;22844:72;:::i;:::-;22964:9;22958:4;22954:20;22948:3;22937:9;22933:19;22926:49;22992:76;23063:4;23054:6;22992:76;:::i;:::-;22984:84;;22324:751;;;;;;;;:::o;23081:373::-;23224:4;23262:2;23251:9;23247:18;23239:26;;23311:9;23305:4;23301:20;23297:1;23286:9;23282:17;23275:47;23339:108;23442:4;23433:6;23339:108;:::i;:::-;23331:116;;23081:373;;;;:::o;23460:634::-;23681:4;23719:2;23708:9;23704:18;23696:26;;23768:9;23762:4;23758:20;23754:1;23743:9;23739:17;23732:47;23796:108;23899:4;23890:6;23796:108;:::i;:::-;23788:116;;23951:9;23945:4;23941:20;23936:2;23925:9;23921:18;23914:48;23979:108;24082:4;24073:6;23979:108;:::i;:::-;23971:116;;23460:634;;;;;:::o;24100:210::-;24187:4;24225:2;24214:9;24210:18;24202:26;;24238:65;24300:1;24289:9;24285:17;24276:6;24238:65;:::i;:::-;24100:210;;;;:::o;24316:313::-;24429:4;24467:2;24456:9;24452:18;24444:26;;24516:9;24510:4;24506:20;24502:1;24491:9;24487:17;24480:47;24544:78;24617:4;24608:6;24544:78;:::i;:::-;24536:86;;24316:313;;;;:::o;24635:419::-;24801:4;24839:2;24828:9;24824:18;24816:26;;24888:9;24882:4;24878:20;24874:1;24863:9;24859:17;24852:47;24916:131;25042:4;24916:131;:::i;:::-;24908:139;;24635:419;;;:::o;25060:::-;25226:4;25264:2;25253:9;25249:18;25241:26;;25313:9;25307:4;25303:20;25299:1;25288:9;25284:17;25277:47;25341:131;25467:4;25341:131;:::i;:::-;25333:139;;25060:419;;;:::o;25485:::-;25651:4;25689:2;25678:9;25674:18;25666:26;;25738:9;25732:4;25728:20;25724:1;25713:9;25709:17;25702:47;25766:131;25892:4;25766:131;:::i;:::-;25758:139;;25485:419;;;:::o;25910:::-;26076:4;26114:2;26103:9;26099:18;26091:26;;26163:9;26157:4;26153:20;26149:1;26138:9;26134:17;26127:47;26191:131;26317:4;26191:131;:::i;:::-;26183:139;;25910:419;;;:::o;26335:::-;26501:4;26539:2;26528:9;26524:18;26516:26;;26588:9;26582:4;26578:20;26574:1;26563:9;26559:17;26552:47;26616:131;26742:4;26616:131;:::i;:::-;26608:139;;26335:419;;;:::o;26760:::-;26926:4;26964:2;26953:9;26949:18;26941:26;;27013:9;27007:4;27003:20;26999:1;26988:9;26984:17;26977:47;27041:131;27167:4;27041:131;:::i;:::-;27033:139;;26760:419;;;:::o;27185:::-;27351:4;27389:2;27378:9;27374:18;27366:26;;27438:9;27432:4;27428:20;27424:1;27413:9;27409:17;27402:47;27466:131;27592:4;27466:131;:::i;:::-;27458:139;;27185:419;;;:::o;27610:::-;27776:4;27814:2;27803:9;27799:18;27791:26;;27863:9;27857:4;27853:20;27849:1;27838:9;27834:17;27827:47;27891:131;28017:4;27891:131;:::i;:::-;27883:139;;27610:419;;;:::o;28035:::-;28201:4;28239:2;28228:9;28224:18;28216:26;;28288:9;28282:4;28278:20;28274:1;28263:9;28259:17;28252:47;28316:131;28442:4;28316:131;:::i;:::-;28308:139;;28035:419;;;:::o;28460:::-;28626:4;28664:2;28653:9;28649:18;28641:26;;28713:9;28707:4;28703:20;28699:1;28688:9;28684:17;28677:47;28741:131;28867:4;28741:131;:::i;:::-;28733:139;;28460:419;;;:::o;28885:::-;29051:4;29089:2;29078:9;29074:18;29066:26;;29138:9;29132:4;29128:20;29124:1;29113:9;29109:17;29102:47;29166:131;29292:4;29166:131;:::i;:::-;29158:139;;28885:419;;;:::o;29310:::-;29476:4;29514:2;29503:9;29499:18;29491:26;;29563:9;29557:4;29553:20;29549:1;29538:9;29534:17;29527:47;29591:131;29717:4;29591:131;:::i;:::-;29583:139;;29310:419;;;:::o;29735:::-;29901:4;29939:2;29928:9;29924:18;29916:26;;29988:9;29982:4;29978:20;29974:1;29963:9;29959:17;29952:47;30016:131;30142:4;30016:131;:::i;:::-;30008:139;;29735:419;;;:::o;30160:::-;30326:4;30364:2;30353:9;30349:18;30341:26;;30413:9;30407:4;30403:20;30399:1;30388:9;30384:17;30377:47;30441:131;30567:4;30441:131;:::i;:::-;30433:139;;30160:419;;;:::o;30585:::-;30751:4;30789:2;30778:9;30774:18;30766:26;;30838:9;30832:4;30828:20;30824:1;30813:9;30809:17;30802:47;30866:131;30992:4;30866:131;:::i;:::-;30858:139;;30585:419;;;:::o;31010:222::-;31103:4;31141:2;31130:9;31126:18;31118:26;;31154:71;31222:1;31211:9;31207:17;31198:6;31154:71;:::i;:::-;31010:222;;;;:::o;31238:332::-;31359:4;31397:2;31386:9;31382:18;31374:26;;31410:71;31478:1;31467:9;31463:17;31454:6;31410:71;:::i;:::-;31491:72;31559:2;31548:9;31544:18;31535:6;31491:72;:::i;:::-;31238:332;;;;;:::o;31576:725::-;31654:4;31660:6;31716:11;31703:25;31816:1;31810:4;31806:12;31795:8;31779:14;31775:29;31771:48;31751:18;31747:73;31737:168;;31824:79;;:::i;:::-;31737:168;31936:18;31926:8;31922:33;31914:41;;31988:4;31975:18;31965:28;;32016:18;32008:6;32005:30;32002:117;;;32038:79;;:::i;:::-;32002:117;32146:2;32140:4;32136:13;32128:21;;32203:4;32195:6;32191:17;32175:14;32171:38;32165:4;32161:49;32158:136;;;32213:79;;:::i;:::-;32158:136;31667:634;31576:725;;;;;:::o;32307:129::-;32341:6;32368:20;;:::i;:::-;32358:30;;32397:33;32425:4;32417:6;32397:33;:::i;:::-;32307:129;;;:::o;32442:75::-;32475:6;32508:2;32502:9;32492:19;;32442:75;:::o;32523:311::-;32600:4;32690:18;32682:6;32679:30;32676:56;;;32712:18;;:::i;:::-;32676:56;32762:4;32754:6;32750:17;32742:25;;32822:4;32816;32812:15;32804:23;;32523:311;;;:::o;32840:::-;32917:4;33007:18;32999:6;32996:30;32993:56;;;33029:18;;:::i;:::-;32993:56;33079:4;33071:6;33067:17;33059:25;;33139:4;33133;33129:15;33121:23;;32840:311;;;:::o;33157:307::-;33218:4;33308:18;33300:6;33297:30;33294:56;;;33330:18;;:::i;:::-;33294:56;33368:29;33390:6;33368:29;:::i;:::-;33360:37;;33452:4;33446;33442:15;33434:23;;33157:307;;;:::o;33470:132::-;33537:4;33560:3;33552:11;;33590:4;33585:3;33581:14;33573:22;;33470:132;;;:::o;33608:114::-;33675:6;33709:5;33703:12;33693:22;;33608:114;;;:::o;33728:98::-;33779:6;33813:5;33807:12;33797:22;;33728:98;;;:::o;33832:99::-;33884:6;33918:5;33912:12;33902:22;;33832:99;;;:::o;33937:113::-;34007:4;34039;34034:3;34030:14;34022:22;;33937:113;;;:::o;34056:184::-;34155:11;34189:6;34184:3;34177:19;34229:4;34224:3;34220:14;34205:29;;34056:184;;;;:::o;34246:168::-;34329:11;34363:6;34358:3;34351:19;34403:4;34398:3;34394:14;34379:29;;34246:168;;;;:::o;34420:169::-;34504:11;34538:6;34533:3;34526:19;34578:4;34573:3;34569:14;34554:29;;34420:169;;;;:::o;34595:305::-;34635:3;34654:20;34672:1;34654:20;:::i;:::-;34649:25;;34688:20;34706:1;34688:20;:::i;:::-;34683:25;;34842:1;34774:66;34770:74;34767:1;34764:81;34761:107;;;34848:18;;:::i;:::-;34761:107;34892:1;34889;34885:9;34878:16;;34595:305;;;;:::o;34906:348::-;34946:7;34969:20;34987:1;34969:20;:::i;:::-;34964:25;;35003:20;35021:1;35003:20;:::i;:::-;34998:25;;35191:1;35123:66;35119:74;35116:1;35113:81;35108:1;35101:9;35094:17;35090:105;35087:131;;;35198:18;;:::i;:::-;35087:131;35246:1;35243;35239:9;35228:20;;34906:348;;;;:::o;35260:191::-;35300:4;35320:20;35338:1;35320:20;:::i;:::-;35315:25;;35354:20;35372:1;35354:20;:::i;:::-;35349:25;;35393:1;35390;35387:8;35384:34;;;35398:18;;:::i;:::-;35384:34;35443:1;35440;35436:9;35428:17;;35260:191;;;;:::o;35457:96::-;35494:7;35523:24;35541:5;35523:24;:::i;:::-;35512:35;;35457:96;;;:::o;35559:90::-;35593:7;35636:5;35629:13;35622:21;35611:32;;35559:90;;;:::o;35655:149::-;35691:7;35731:66;35724:5;35720:78;35709:89;;35655:149;;;:::o;35810:126::-;35847:7;35887:42;35880:5;35876:54;35865:65;;35810:126;;;:::o;35942:77::-;35979:7;36008:5;35997:16;;35942:77;;;:::o;36025:154::-;36109:6;36104:3;36099;36086:30;36171:1;36162:6;36157:3;36153:16;36146:27;36025:154;;;:::o;36185:307::-;36253:1;36263:113;36277:6;36274:1;36271:13;36263:113;;;36362:1;36357:3;36353:11;36347:18;36343:1;36338:3;36334:11;36327:39;36299:2;36296:1;36292:10;36287:15;;36263:113;;;36394:6;36391:1;36388:13;36385:101;;;36474:1;36465:6;36460:3;36456:16;36449:27;36385:101;36234:258;36185:307;;;:::o;36498:320::-;36542:6;36579:1;36573:4;36569:12;36559:22;;36626:1;36620:4;36616:12;36647:18;36637:81;;36703:4;36695:6;36691:17;36681:27;;36637:81;36765:2;36757:6;36754:14;36734:18;36731:38;36728:84;;;36784:18;;:::i;:::-;36728:84;36549:269;36498:320;;;:::o;36824:281::-;36907:27;36929:4;36907:27;:::i;:::-;36899:6;36895:40;37037:6;37025:10;37022:22;37001:18;36989:10;36986:34;36983:62;36980:88;;;37048:18;;:::i;:::-;36980:88;37088:10;37084:2;37077:22;36867:238;36824:281;;:::o;37111:233::-;37150:3;37173:24;37191:5;37173:24;:::i;:::-;37164:33;;37219:66;37212:5;37209:77;37206:103;;;37289:18;;:::i;:::-;37206:103;37336:1;37329:5;37325:13;37318:20;;37111:233;;;:::o;37350:180::-;37398:77;37395:1;37388:88;37495:4;37492:1;37485:15;37519:4;37516:1;37509:15;37536:180;37584:77;37581:1;37574:88;37681:4;37678:1;37671:15;37705:4;37702:1;37695:15;37722:180;37770:77;37767:1;37760:88;37867:4;37864:1;37857:15;37891:4;37888:1;37881:15;37908:180;37956:77;37953:1;37946:88;38053:4;38050:1;38043:15;38077:4;38074:1;38067:15;38094:183;38129:3;38167:1;38149:16;38146:23;38143:128;;;38205:1;38202;38199;38184:23;38227:34;38258:1;38252:8;38227:34;:::i;:::-;38220:41;;38143:128;38094:183;:::o;38283:117::-;38392:1;38389;38382:12;38406:117;38515:1;38512;38505:12;38529:117;38638:1;38635;38628:12;38652:117;38761:1;38758;38751:12;38775:117;38884:1;38881;38874:12;38898:117;39007:1;39004;38997:12;39021:117;39130:1;39127;39120:12;39144:117;39253:1;39250;39243:12;39267:117;39376:1;39373;39366:12;39390:102;39431:6;39482:2;39478:7;39473:2;39466:5;39462:14;39458:28;39448:38;;39390:102;;;:::o;39498:106::-;39542:8;39591:5;39586:3;39582:15;39561:36;;39498:106;;;:::o;39610:239::-;39750:34;39746:1;39738:6;39734:14;39727:58;39819:22;39814:2;39806:6;39802:15;39795:47;39610:239;:::o;39855:227::-;39995:34;39991:1;39983:6;39979:14;39972:58;40064:10;40059:2;40051:6;40047:15;40040:35;39855:227;:::o;40088:164::-;40228:16;40224:1;40216:6;40212:14;40205:40;40088:164;:::o;40258:230::-;40398:34;40394:1;40386:6;40382:14;40375:58;40467:13;40462:2;40454:6;40450:15;40443:38;40258:230;:::o;40494:225::-;40634:34;40630:1;40622:6;40618:14;40611:58;40703:8;40698:2;40690:6;40686:15;40679:33;40494:225;:::o;40725:228::-;40865:34;40861:1;40853:6;40849:14;40842:58;40934:11;40929:2;40921:6;40917:15;40910:36;40725:228;:::o;40959:224::-;41099:34;41095:1;41087:6;41083:14;41076:58;41168:7;41163:2;41155:6;41151:15;41144:32;40959:224;:::o;41189:237::-;41329:34;41325:1;41317:6;41313:14;41306:58;41398:20;41393:2;41385:6;41381:15;41374:45;41189:237;:::o;41432:229::-;41572:34;41568:1;41560:6;41556:14;41549:58;41641:12;41636:2;41628:6;41624:15;41617:37;41432:229;:::o;41667:182::-;41807:34;41803:1;41795:6;41791:14;41784:58;41667:182;:::o;41855:228::-;41995:34;41991:1;41983:6;41979:14;41972:58;42064:11;42059:2;42051:6;42047:15;42040:36;41855:228;:::o;42089:::-;42229:34;42225:1;42217:6;42213:14;42206:58;42298:11;42293:2;42285:6;42281:15;42274:36;42089:228;:::o;42323:227::-;42463:34;42459:1;42451:6;42447:14;42440:58;42532:10;42527:2;42519:6;42515:15;42508:35;42323:227;:::o;42556:220::-;42696:34;42692:1;42684:6;42680:14;42673:58;42765:3;42760:2;42752:6;42748:15;42741:28;42556:220;:::o;42782:236::-;42922:34;42918:1;42910:6;42906:14;42899:58;42991:19;42986:2;42978:6;42974:15;42967:44;42782:236;:::o;43024:711::-;43063:3;43101:4;43083:16;43080:26;43077:39;;;43109:5;;43077:39;43138:20;;:::i;:::-;43213:1;43195:16;43191:24;43188:1;43182:4;43167:49;43246:4;43240:11;43345:16;43338:4;43330:6;43326:17;43323:39;43290:18;43282:6;43279:30;43263:113;43260:146;;;43391:5;;;;43260:146;43437:6;43431:4;43427:17;43473:3;43467:10;43500:18;43492:6;43489:30;43486:43;;;43522:5;;;;;;43486:43;43570:6;43563:4;43558:3;43554:14;43550:27;43629:1;43611:16;43607:24;43601:4;43597:35;43592:3;43589:44;43586:57;;;43636:5;;;;;;;43586:57;43653;43701:6;43695:4;43691:17;43683:6;43679:30;43673:4;43653:57;:::i;:::-;43726:3;43719:10;;43067:668;;;;;43024:711;;:::o;43741:122::-;43814:24;43832:5;43814:24;:::i;:::-;43807:5;43804:35;43794:63;;43853:1;43850;43843:12;43794:63;43741:122;:::o;43869:116::-;43939:21;43954:5;43939:21;:::i;:::-;43932:5;43929:32;43919:60;;43975:1;43972;43965:12;43919:60;43869:116;:::o;43991:120::-;44063:23;44080:5;44063:23;:::i;:::-;44056:5;44053:34;44043:62;;44101:1;44098;44091:12;44043:62;43991:120;:::o;44117:122::-;44190:24;44208:5;44190:24;:::i;:::-;44183:5;44180:35;44170:63;;44229:1;44226;44219:12;44170:63;44117:122;:::o
Swarm Source
ipfs://edb3f3ee4f5f72c21353a42b6fccb258eb9be066dbb2d444efc0e6f0e2285905