ERC-1155
Gaming
Overview
Max Total Supply
0
Holders
20,174
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
CropBytes
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2023-03-14 */ pragma solidity ^0.8.4; // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) /** * @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); } // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) /** * @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; } // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) /** * @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); } // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) /** * @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); } // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) /** * @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); } } } } // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) /** * @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; } } // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/ERC1155.sol) /** * @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 id) public view virtual override returns (string memory) { return string( abi.encodePacked( _uri, Strings.toString(id), ".json" ) ); } /** * @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: address zero is not a valid owner"); return _balanceOf(account, id); } function _balanceOf(address account, uint256 id) internal view virtual returns(uint256) { 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(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, 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); _afterTokenTransfer(operator, from, to, ids, amounts, data); _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); _afterTokenTransfer(operator, from, to, ids, amounts, data); _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(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _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); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _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(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); 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); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @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); _afterTokenTransfer(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 {} /** * @dev Hook that is called after 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 _afterTokenTransfer( 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; } } // OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol) /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleOwnerChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {AccessControl-_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleOwner(bytes32 role) external view returns (bytes32); /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) external; /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) external; /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) external; } // OpenZeppelin Contracts (last updated v4.6.0) (access/AccessControl.sol) /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 ownerRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant OWNER_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view virtual override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `_msgSender()` is missing `role`. * Overriding this function changes the behavior of the {onlyRole} modifier. * * Format of the revert message is described in {_checkRole}. * * _Available since v4.6._ */ function _checkRole(bytes32 role) internal view virtual { _checkRole(role, _msgSender()); } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ */ function _checkRole(bytes32 role, address account) internal view virtual { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleOwner(bytes32 role) public view virtual override returns (bytes32) { return _roles[role].ownerRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleOwner(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleOwner(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been revoked `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== * * NOTE: This function is deprecated in favor of {_grantRole}. */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `ownerRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleOwner(bytes32 role, bytes32 ownerRole) internal virtual { bytes32 previousownerRole = getRoleOwner(role); _roles[role].ownerRole = ownerRole; emit RoleOwnerChanged(role, previousownerRole, ownerRole); } /** * @dev Grants `role` to `account`. * * Internal function without access restriction. */ function _grantRole(bytes32 role, address account) internal virtual { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } /** * @dev Revokes `role` from `account`. * * Internal function without access restriction. */ function _revokeRole(bytes32 role, address account) internal virtual { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Burnable.sol) /** * @dev Extension of {ERC1155} that allows token holders to destroy both their * own tokens and those that they have been approved to use. * * _Available since v3.1._ */ abstract contract ERC1155Burnable is ERC1155 { function burn( address account, uint256 id, uint256 value ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burn(account, id, value); } function burnBatch( address account, uint256[] memory ids, uint256[] memory values ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burnBatch(account, ids, values); } } // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol) /** * @dev Extension of ERC1155 that adds tracking of total supply per id. * * Useful for scenarios where Fungible and Non-fungible tokens have to be * clearly identified. Note: While a totalSupply of 1 might mean the * corresponding is an NFT, there is no guarantees that no other token with the * same id are not going to be minted. */ abstract contract ERC1155Supply is ERC1155 { mapping(uint256 => uint256) private _totalSupply; /** * @dev Total amount of tokens in with a given id. */ function totalSupply(uint256 id) public view virtual returns (uint256) { return _totalSupply[id]; } /** * @dev Indicates whether any token exist with a given id, or not. */ function exists(uint256 id) public view virtual returns (bool) { return ERC1155Supply.totalSupply(id) > 0; } /** * @dev See {ERC1155-_beforeTokenTransfer}. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); if (from == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] += amounts[i]; } } if (to == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 supply = _totalSupply[id]; require(supply >= amount, "ERC1155: burn amount exceeds totalSupply"); unchecked { _totalSupply[id] = supply - amount; } } } } } // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Burnable.sol) /** * @dev Extension of {ERC1155} that allows token holders to destroy both their * own tokens and those that they have been approved to use. * * _Available since v3.1._ */ abstract contract ERC1155Locking is ERC1155, AccessControl { mapping(address => bool) private _locks; mapping(address => bool) private _permanentLocks; bytes32 private constant ADMIN_ROLE = keccak256("ADMIN_ROLE"); event Lock(address indexed account); event Unlock(address indexed account); event PermanentLock(address indexed account); event PermanentUnlock(address indexed account); function _lock(address account) internal virtual { _locks[account] = true; emit Lock(account); } function _unlock(address account) internal virtual { _locks[account] = false; emit Unlock(account); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155, AccessControl) returns (bool) { return super.supportsInterface(interfaceId); } function _lockPermanent(address account) internal virtual { _permanentLocks[account] = true; emit PermanentLock(account); } function _unlockPermanent(address account) internal virtual { _permanentLocks[account] = false; emit PermanentUnlock(account); } function getLock(address account) external view returns(bool) { return _locks[account]; } function _hasLock(address account) internal virtual view returns(bool) { return _locks[account]; } function getPermanentLock(address account) external view returns(bool) { return _permanentLocks[account]; } function _hasPermanentLock(address account) internal virtual view returns(bool) { return _permanentLocks[account]; } function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); require(_locks[from] == false || hasRole(ADMIN_ROLE, _msgSender()), "ERC1155: Account is Locked"); require(_permanentLocks[from] == false, "ERC1155: Account is permanently Locked"); } } contract CropBytes is ERC1155, AccessControl, Pausable, ERC1155Burnable, ERC1155Supply, ERC1155Locking { bytes32 private constant ADMIN_ROLE = keccak256("ADMIN_ROLE"); bytes32 private constant MINTER_ROLE = keccak256("MINTER_ROLE"); string public name = "CropBytes"; string private _contractUri = "https://blockchain.ethernia.com/metadata/contract-metadata"; constructor() ERC1155("https://testnet.ethernia.com/blockchain/") { _grantRole(OWNER_ROLE, msg.sender); _grantRole(ADMIN_ROLE, msg.sender); _grantRole(MINTER_ROLE, msg.sender); } function setURI(string memory newuri) public onlyRole(ADMIN_ROLE) { _setURI(newuri); } function pause() public onlyRole(OWNER_ROLE) { _pause(); } function updateContractURI(string memory uri) public onlyRole(ADMIN_ROLE) { _contractUri = uri; } function contractURI() public view returns (string memory) { return _contractUri; } function unpause() public onlyRole(OWNER_ROLE) { _unpause(); } //The function will mint assets //Once an asset is minted, it cannot be called again for the same asset function mint(address account, uint256 id, uint256 amount, bytes memory data) public onlyRole(MINTER_ROLE) { _mint(account, id, amount, data); } //The function will mint assets in batch //Once an asset is minted, it cannot be called again for the same asset function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) public onlyRole(MINTER_ROLE) { _mintBatch(to, ids, amounts, data); } //Transfer directly from senders address to "to" address function transfer(address to, uint256 id, uint256 amount, bytes memory data) public { address owner = _msgSender(); _safeTransferFrom(owner, to, id, amount, data); } //Batch transfer from sender address to "to" aoddress function transferBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) public { address owner = _msgSender(); _safeBatchTransferFrom(owner, to, ids, amounts, data); } //The function locks the user assets from preventing further transfer. Only admin role can call this function function permanentLock(address account) public onlyRole(ADMIN_ROLE) { _lockPermanent(account); } //The function unlocks the user assets. function permanentUnlock(address account) public onlyRole(ADMIN_ROLE) { _unlockPermanent(account); } function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal whenNotPaused override(ERC1155, ERC1155Supply, ERC1155Locking) { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); } function supportsInterface(bytes4 interfaceId) public view override(ERC1155, AccessControl, ERC1155Locking) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":"account","type":"address"}],"name":"Lock","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"PermanentLock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"PermanentUnlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleOwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"Unlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"OWNER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"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":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getLock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getPermanentLock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleOwner","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"permanentLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"permanentUnlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","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":"string","name":"newuri","type":"string"}],"name":"setURI","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":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"transferBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"updateContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600981526020017f43726f7042797465730000000000000000000000000000000000000000000000815250600890816200004a91906200053e565b506040518060600160405280603a815260200162005b5c603a9139600990816200007591906200053e565b503480156200008357600080fd5b5060405180606001604052806028815260200162005b3460289139620000af816200014a60201b60201c565b506000600460006101000a81548160ff021916908315150217905550620000e06000801b336200015f60201b60201c565b620001127fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775336200015f60201b60201c565b620001447f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336200015f60201b60201c565b62000625565b80600290816200015b91906200053e565b5050565b6200017182826200025160201b60201c565b6200024d5760016003600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620001f2620002bc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006003600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200034657607f821691505b6020821081036200035c576200035b620002fe565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003c67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000387565b620003d2868362000387565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200041f620004196200041384620003ea565b620003f4565b620003ea565b9050919050565b6000819050919050565b6200043b83620003fe565b620004536200044a8262000426565b84845462000394565b825550505050565b600090565b6200046a6200045b565b6200047781848462000430565b505050565b5b818110156200049f576200049360008262000460565b6001810190506200047d565b5050565b601f821115620004ee57620004b88162000362565b620004c38462000377565b81016020851015620004d3578190505b620004eb620004e28562000377565b8301826200047c565b50505b505050565b600082821c905092915050565b60006200051360001984600802620004f3565b1980831691505092915050565b60006200052e838362000500565b9150826002028217905092915050565b6200054982620002c4565b67ffffffffffffffff811115620005655762000564620002cf565b5b6200057182546200032d565b6200057e828285620004a3565b600060209050601f831160018114620005b65760008415620005a1578287015190505b620005ad858262000520565b8655506200061d565b601f198416620005c68662000362565b60005b82811015620005f057848901518255600182019150602085019450602081019050620005c9565b868310156200061057848901516200060c601f89168262000500565b8355505b6001600288020188555050505b505050505050565b6154ff80620006356000396000f3fe608060405234801561001057600080fd5b50600436106101fa5760003560e01c80636b9db4e61161011a578063d547741f116100ad578063e8a3d4851161007c578063e8a3d485146105a5578063e985e9c5146105c3578063eb1fe5a7146105f3578063f242432a14610623578063f5298aca1461063f576101fa565b8063d547741f1461051f578063dabd76e91461053b578063e386880d14610557578063e58378bb14610587576101fa565b806391d14854116100e957806391d1485414610487578063a22cb465146104b7578063a5f13076146104d3578063bd85b039146104ef576101fa565b80636b9db4e614610415578063731133e9146104455780637e5b1e24146104615780638456cb591461047d576101fa565b80632f2ff15d116101925780634f558e79116101615780634f558e791461038f5780635c975abb146103bf57806362bed1e5146103dd5780636b20c454146103f9576101fa565b80632f2ff15d1461031d57806336568abe146103395780633f4ba83a146103555780634e1273f41461035f576101fa565b80630e89341c116101ce5780630e89341c1461029957806317fefc03146102c95780631f7fdffa146102e55780632eb2c2d614610301576101fa565b8062fdd58e146101ff57806301ffc9a71461022f57806302fe53051461025f57806306fdde031461027b575b600080fd5b61021960048036038101906102149190613435565b61065b565b6040516102269190613484565b60405180910390f35b610249600480360381019061024491906134f7565b6106dd565b604051610256919061353f565b60405180910390f35b610279600480360381019061027491906136a0565b6106ef565b005b610283610726565b6040516102909190613768565b60405180910390f35b6102b360048036038101906102ae919061378a565b6107b4565b6040516102c09190613768565b60405180910390f35b6102e360048036038101906102de91906137b7565b6107e8565b005b6102ff60048036038101906102fa919061394d565b61081f565b005b61031b60048036038101906103169190613a08565b61085c565b005b61033760048036038101906103329190613b0d565b6108fd565b005b610353600480360381019061034e9190613b0d565b61091e565b005b61035d6109a1565b005b61037960048036038101906103749190613c10565b6109b9565b6040516103869190613d46565b60405180910390f35b6103a960048036038101906103a4919061378a565b610ad2565b6040516103b6919061353f565b60405180910390f35b6103c7610ae6565b6040516103d4919061353f565b60405180910390f35b6103f760048036038101906103f291906137b7565b610afd565b005b610413600480360381019061040e9190613d68565b610b34565b005b61042f600480360381019061042a91906137b7565b610bd1565b60405161043c919061353f565b60405180910390f35b61045f600480360381019061045a9190613df3565b610c27565b005b61047b600480360381019061047691906136a0565b610c64565b005b610485610ca2565b005b6104a1600480360381019061049c9190613b0d565b610cba565b6040516104ae919061353f565b60405180910390f35b6104d160048036038101906104cc9190613ea2565b610d25565b005b6104ed60048036038101906104e8919061394d565b610d3b565b005b6105096004803603810190610504919061378a565b610d5b565b6040516105169190613484565b60405180910390f35b61053960048036038101906105349190613b0d565b610d78565b005b61055560048036038101906105509190613df3565b610d99565b005b610571600480360381019061056c9190613ee2565b610db9565b60405161057e9190613f1e565b60405180910390f35b61058f610dd9565b60405161059c9190613f1e565b60405180910390f35b6105ad610de0565b6040516105ba9190613768565b60405180910390f35b6105dd60048036038101906105d89190613f39565b610e72565b6040516105ea919061353f565b60405180910390f35b61060d600480360381019061060891906137b7565b610f06565b60405161061a919061353f565b60405180910390f35b61063d60048036038101906106389190613f79565b610f5c565b005b61065960048036038101906106549190614010565b610ffd565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c2906140d5565b60405180910390fd5b6106d5838361109a565b905092915050565b60006106e8826110f4565b9050919050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561071981611106565b6107228261111a565b5050565b6008805461073390614124565b80601f016020809104026020016040519081016040528092919081815260200182805461075f90614124565b80156107ac5780601f10610781576101008083540402835291602001916107ac565b820191906000526020600020905b81548152906001019060200180831161078f57829003601f168201915b505050505081565b606060026107c18361112d565b6040516020016107d2929190614275565b6040516020818303038152906040529050919050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561081281611106565b61081b8261128d565b5050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661084981611106565b6108558585858561132b565b5050505050565b610864611557565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806108aa57506108a9856108a4611557565b610e72565b5b6108e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e090614316565b60405180910390fd5b6108f6858585858561155f565b5050505050565b61090682610db9565b61090f81611106565b6109198383611880565b505050565b610926611557565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098a906143a8565b60405180910390fd5b61099d8282611961565b5050565b6000801b6109ae81611106565b6109b6611a43565b50565b606081518351146109ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f69061443a565b60405180910390fd5b6000835167ffffffffffffffff811115610a1c57610a1b613575565b5b604051908082528060200260200182016040528015610a4a5781602001602082028036833780820191505090505b50905060005b8451811015610ac757610a97858281518110610a6f57610a6e61445a565b5b6020026020010151858381518110610a8a57610a8961445a565b5b602002602001015161065b565b828281518110610aaa57610aa961445a565b5b60200260200101818152505080610ac0906144b8565b9050610a50565b508091505092915050565b600080610ade83610d5b565b119050919050565b6000600460009054906101000a900460ff16905090565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610b2781611106565b610b3082611ae5565b5050565b610b3c611557565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610b825750610b8183610b7c611557565b610e72565b5b610bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb890614572565b60405180910390fd5b610bcc838383611b83565b505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610c5181611106565b610c5d85858585611e51565b5050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610c8e81611106565b8160099081610c9d9190614729565b505050565b6000801b610caf81611106565b610cb7612001565b50565b60006003600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610d37610d30611557565b83836120a4565b5050565b6000610d45611557565b9050610d54818686868661155f565b5050505050565b600060056000838152602001908152602001600020549050919050565b610d8182610db9565b610d8a81611106565b610d948383611961565b505050565b6000610da3611557565b9050610db28186868686612210565b5050505050565b600060036000838152602001908152602001600020600101549050919050565b6000801b81565b606060098054610def90614124565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1b90614124565b8015610e685780601f10610e3d57610100808354040283529160200191610e68565b820191906000526020600020905b815481529060010190602001808311610e4b57829003601f168201915b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f64611557565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610faa5750610fa985610fa4611557565b610e72565b5b610fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe090614572565b60405180910390fd5b610ff68585858585612210565b5050505050565b611005611557565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061104b575061104a83611045611557565b610e72565b5b61108a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108190614572565b60405180910390fd5b6110958383836124ab565b505050565b600080600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006110ff826126f1565b9050919050565b61111781611112611557565b61276b565b50565b80600290816111299190614729565b5050565b606060008203611174576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611288565b600082905060005b600082146111a657808061118f906144b8565b915050600a8261119f919061482a565b915061117c565b60008167ffffffffffffffff8111156111c2576111c1613575565b5b6040519080825280601f01601f1916602001820160405280156111f45781602001600182028036833780820191505090505b5090505b600085146112815760018261120d919061485b565b9150600a8561121c919061488f565b603061122891906148c0565b60f81b81838151811061123e5761123d61445a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561127a919061482a565b94506111f8565b8093505050505b919050565b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f11442fe37fe2300ecf19dce69a0cf2a40cb10d15b1bb4dce3bb2f130ab1a7d5760405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361139a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139190614966565b60405180910390fd5b81518351146113de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d5906149f8565b60405180910390fd5b60006113e8611557565b90506113f981600087878787612808565b60005b84518110156114b2578381815181106114185761141761445a565b5b60200260200101516000808784815181106114365761143561445a565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461149891906148c0565b9250508190555080806114aa906144b8565b9150506113fc565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161152a929190614a18565b60405180910390a461154181600087878787612866565b6115508160008787878761286e565b5050505050565b600033905090565b81518351146115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a906149f8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611612576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160990614ac1565b60405180910390fd5b600061161c611557565b905061162c818787878787612808565b60005b84518110156117dd57600085828151811061164d5761164c61445a565b5b60200260200101519050600085838151811061166c5761166b61445a565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561170d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170490614b53565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117c291906148c0565b92505081905550505050806117d6906144b8565b905061162f565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611854929190614a18565b60405180910390a461186a818787878787612866565b61187881878787878761286e565b505050505050565b61188a8282610cba565b61195d5760016003600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611902611557565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b61196b8282610cba565b15611a3f5760006003600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506119e4611557565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b611a4b610ae6565b611a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8190614bbf565b60405180910390fd5b6000600460006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611ace611557565b604051611adb9190614bee565b60405180910390a1565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f3ac6ae1ab9191602a77d3ae545aafded61a6e883e7b6d4c65677152f3ddf56fe60405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be990614c7b565b60405180910390fd5b8051825114611c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2d906149f8565b60405180910390fd5b6000611c40611557565b9050611c6081856000868660405180602001604052806000815250612808565b60005b8351811015611dad576000848281518110611c8157611c8061445a565b5b602002602001015190506000848381518110611ca057611c9f61445a565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3890614d0d565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611da5906144b8565b915050611c63565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611e25929190614a18565b60405180910390a4611e4b81856000868660405180602001604052806000815250612866565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb790614966565b60405180910390fd5b6000611eca611557565b90506000611ed785612a45565b90506000611ee485612a45565b9050611ef583600089858589612808565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f5491906148c0565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611fd2929190614d2d565b60405180910390a4611fe983600089858589612866565b611ff883600089898989612abf565b50505050505050565b612009610ae6565b15612049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204090614da2565b60405180910390fd5b6001600460006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861208d611557565b60405161209a9190614bee565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210990614e34565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612203919061353f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361227f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227690614ac1565b60405180910390fd5b6000612289611557565b9050600061229685612a45565b905060006122a385612a45565b90506122b3838989858589612808565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508581101561234a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234190614b53565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123ff91906148c0565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a60405161247c929190614d2d565b60405180910390a4612492848a8a86868a612866565b6124a0848a8a8a8a8a612abf565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361251a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251190614c7b565b60405180910390fd5b6000612524611557565b9050600061253184612a45565b9050600061253e84612a45565b905061255e83876000858560405180602001604052806000815250612808565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050848110156125f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ec90614d0d565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516126c2929190614d2d565b60405180910390a46126e884886000868660405180602001604052806000815250612866565b50505050505050565b60007fbe69cfa5000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612764575061276382612c96565b5b9050919050565b6127758282610cba565b6128045761279a8173ffffffffffffffffffffffffffffffffffffffff166014612d78565b6127a88360001c6020612d78565b6040516020016127b9929190614eec565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fb9190613768565b60405180910390fd5b5050565b612810610ae6565b15612850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284790614da2565b60405180910390fd5b61285e868686868686612fb4565b505050505050565b505050505050565b61288d8473ffffffffffffffffffffffffffffffffffffffff16613128565b15612a3d578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016128d3959493929190614f7b565b6020604051808303816000875af192505050801561290f57506040513d601f19601f8201168201806040525081019061290c9190614ff8565b60015b6129b45761291b615032565b806308c379a003612977575061292f615054565b8061293a5750612979565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296e9190613768565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ab90615156565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a32906151e8565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115612a6457612a63613575565b5b604051908082528060200260200182016040528015612a925781602001602082028036833780820191505090505b5090508281600081518110612aaa57612aa961445a565b5b60200260200101818152505080915050919050565b612ade8473ffffffffffffffffffffffffffffffffffffffff16613128565b15612c8e578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612b24959493929190615208565b6020604051808303816000875af1925050508015612b6057506040513d601f19601f82011682018060405250810190612b5d9190614ff8565b60015b612c0557612b6c615032565b806308c379a003612bc85750612b80615054565b80612b8b5750612bca565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbf9190613768565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfc90615156565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c83906151e8565b60405180910390fd5b505b505050505050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612d6157507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612d715750612d708261314b565b5b9050919050565b606060006002836002612d8b9190615262565b612d9591906148c0565b67ffffffffffffffff811115612dae57612dad613575565b5b6040519080825280601f01601f191660200182016040528015612de05781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612e1857612e1761445a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612e7c57612e7b61445a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002612ebc9190615262565b612ec691906148c0565b90505b6001811115612f66577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612f0857612f0761445a565b5b1a60f81b828281518110612f1f57612f1e61445a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612f5f906152a4565b9050612ec9565b5060008414612faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa190615319565b60405180910390fd5b8091505092915050565b612fc28686868686866131b5565b60001515600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515148061304e575061304d7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775613048611557565b610cba565b5b61308d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308490615385565b60405180910390fd5b60001515600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514613120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311790615417565b60405180910390fd5b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6131c3868686868686613385565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036132745760005b8351811015613272578281815181106132165761321561445a565b5b6020026020010151600560008684815181106132355761323461445a565b5b60200260200101518152602001908152602001600020600082825461325a91906148c0565b925050819055508061326b906144b8565b90506131fa565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361337d5760005b835181101561337b5760008482815181106132c9576132c861445a565b5b6020026020010151905060008483815181106132e8576132e761445a565b5b602002602001015190506000600560008481526020019081526020016000205490508181101561334d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613344906154a9565b60405180910390fd5b818103600560008581526020019081526020016000208190555050505080613374906144b8565b90506132ab565b505b505050505050565b505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133cc826133a1565b9050919050565b6133dc816133c1565b81146133e757600080fd5b50565b6000813590506133f9816133d3565b92915050565b6000819050919050565b613412816133ff565b811461341d57600080fd5b50565b60008135905061342f81613409565b92915050565b6000806040838503121561344c5761344b613397565b5b600061345a858286016133ea565b925050602061346b85828601613420565b9150509250929050565b61347e816133ff565b82525050565b60006020820190506134996000830184613475565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6134d48161349f565b81146134df57600080fd5b50565b6000813590506134f1816134cb565b92915050565b60006020828403121561350d5761350c613397565b5b600061351b848285016134e2565b91505092915050565b60008115159050919050565b61353981613524565b82525050565b60006020820190506135546000830184613530565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6135ad82613564565b810181811067ffffffffffffffff821117156135cc576135cb613575565b5b80604052505050565b60006135df61338d565b90506135eb82826135a4565b919050565b600067ffffffffffffffff82111561360b5761360a613575565b5b61361482613564565b9050602081019050919050565b82818337600083830152505050565b600061364361363e846135f0565b6135d5565b90508281526020810184848401111561365f5761365e61355f565b5b61366a848285613621565b509392505050565b600082601f8301126136875761368661355a565b5b8135613697848260208601613630565b91505092915050565b6000602082840312156136b6576136b5613397565b5b600082013567ffffffffffffffff8111156136d4576136d361339c565b5b6136e084828501613672565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613723578082015181840152602081019050613708565b60008484015250505050565b600061373a826136e9565b61374481856136f4565b9350613754818560208601613705565b61375d81613564565b840191505092915050565b60006020820190508181036000830152613782818461372f565b905092915050565b6000602082840312156137a05761379f613397565b5b60006137ae84828501613420565b91505092915050565b6000602082840312156137cd576137cc613397565b5b60006137db848285016133ea565b91505092915050565b600067ffffffffffffffff8211156137ff576137fe613575565b5b602082029050602081019050919050565b600080fd5b6000613828613823846137e4565b6135d5565b9050808382526020820190506020840283018581111561384b5761384a613810565b5b835b8181101561387457806138608882613420565b84526020840193505060208101905061384d565b5050509392505050565b600082601f8301126138935761389261355a565b5b81356138a3848260208601613815565b91505092915050565b600067ffffffffffffffff8211156138c7576138c6613575565b5b6138d082613564565b9050602081019050919050565b60006138f06138eb846138ac565b6135d5565b90508281526020810184848401111561390c5761390b61355f565b5b613917848285613621565b509392505050565b600082601f8301126139345761393361355a565b5b81356139448482602086016138dd565b91505092915050565b6000806000806080858703121561396757613966613397565b5b6000613975878288016133ea565b945050602085013567ffffffffffffffff8111156139965761399561339c565b5b6139a28782880161387e565b935050604085013567ffffffffffffffff8111156139c3576139c261339c565b5b6139cf8782880161387e565b925050606085013567ffffffffffffffff8111156139f0576139ef61339c565b5b6139fc8782880161391f565b91505092959194509250565b600080600080600060a08688031215613a2457613a23613397565b5b6000613a32888289016133ea565b9550506020613a43888289016133ea565b945050604086013567ffffffffffffffff811115613a6457613a6361339c565b5b613a708882890161387e565b935050606086013567ffffffffffffffff811115613a9157613a9061339c565b5b613a9d8882890161387e565b925050608086013567ffffffffffffffff811115613abe57613abd61339c565b5b613aca8882890161391f565b9150509295509295909350565b6000819050919050565b613aea81613ad7565b8114613af557600080fd5b50565b600081359050613b0781613ae1565b92915050565b60008060408385031215613b2457613b23613397565b5b6000613b3285828601613af8565b9250506020613b43858286016133ea565b9150509250929050565b600067ffffffffffffffff821115613b6857613b67613575565b5b602082029050602081019050919050565b6000613b8c613b8784613b4d565b6135d5565b90508083825260208201905060208402830185811115613baf57613bae613810565b5b835b81811015613bd85780613bc488826133ea565b845260208401935050602081019050613bb1565b5050509392505050565b600082601f830112613bf757613bf661355a565b5b8135613c07848260208601613b79565b91505092915050565b60008060408385031215613c2757613c26613397565b5b600083013567ffffffffffffffff811115613c4557613c4461339c565b5b613c5185828601613be2565b925050602083013567ffffffffffffffff811115613c7257613c7161339c565b5b613c7e8582860161387e565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613cbd816133ff565b82525050565b6000613ccf8383613cb4565b60208301905092915050565b6000602082019050919050565b6000613cf382613c88565b613cfd8185613c93565b9350613d0883613ca4565b8060005b83811015613d39578151613d208882613cc3565b9750613d2b83613cdb565b925050600181019050613d0c565b5085935050505092915050565b60006020820190508181036000830152613d608184613ce8565b905092915050565b600080600060608486031215613d8157613d80613397565b5b6000613d8f868287016133ea565b935050602084013567ffffffffffffffff811115613db057613daf61339c565b5b613dbc8682870161387e565b925050604084013567ffffffffffffffff811115613ddd57613ddc61339c565b5b613de98682870161387e565b9150509250925092565b60008060008060808587031215613e0d57613e0c613397565b5b6000613e1b878288016133ea565b9450506020613e2c87828801613420565b9350506040613e3d87828801613420565b925050606085013567ffffffffffffffff811115613e5e57613e5d61339c565b5b613e6a8782880161391f565b91505092959194509250565b613e7f81613524565b8114613e8a57600080fd5b50565b600081359050613e9c81613e76565b92915050565b60008060408385031215613eb957613eb8613397565b5b6000613ec7858286016133ea565b9250506020613ed885828601613e8d565b9150509250929050565b600060208284031215613ef857613ef7613397565b5b6000613f0684828501613af8565b91505092915050565b613f1881613ad7565b82525050565b6000602082019050613f336000830184613f0f565b92915050565b60008060408385031215613f5057613f4f613397565b5b6000613f5e858286016133ea565b9250506020613f6f858286016133ea565b9150509250929050565b600080600080600060a08688031215613f9557613f94613397565b5b6000613fa3888289016133ea565b9550506020613fb4888289016133ea565b9450506040613fc588828901613420565b9350506060613fd688828901613420565b925050608086013567ffffffffffffffff811115613ff757613ff661339c565b5b6140038882890161391f565b9150509295509295909350565b60008060006060848603121561402957614028613397565b5b6000614037868287016133ea565b935050602061404886828701613420565b925050604061405986828701613420565b9150509250925092565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b60006140bf602a836136f4565b91506140ca82614063565b604082019050919050565b600060208201905081810360008301526140ee816140b2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061413c57607f821691505b60208210810361414f5761414e6140f5565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461418281614124565b61418c8186614155565b945060018216600081146141a757600181146141bc576141ef565b60ff19831686528115158202860193506141ef565b6141c585614160565b60005b838110156141e7578154818901526001820191506020810190506141c8565b838801955050505b50505092915050565b6000614203826136e9565b61420d8185614155565b935061421d818560208601613705565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b600061425f600583614155565b915061426a82614229565b600582019050919050565b60006142818285614175565b915061428d82846141f8565b915061429882614252565b91508190509392505050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006143006032836136f4565b915061430b826142a4565b604082019050919050565b6000602082019050818103600083015261432f816142f3565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000614392602f836136f4565b915061439d82614336565b604082019050919050565b600060208201905081810360008301526143c181614385565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006144246029836136f4565b915061442f826143c8565b604082019050919050565b6000602082019050818103600083015261445381614417565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006144c3826133ff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036144f5576144f4614489565b5b600182019050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b600061455c6029836136f4565b915061456782614500565b604082019050919050565b6000602082019050818103600083015261458b8161454f565b9050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026145df7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826145a2565b6145e986836145a2565b95508019841693508086168417925050509392505050565b6000819050919050565b600061462661462161461c846133ff565b614601565b6133ff565b9050919050565b6000819050919050565b6146408361460b565b61465461464c8261462d565b8484546145af565b825550505050565b600090565b61466961465c565b614674818484614637565b505050565b5b818110156146985761468d600082614661565b60018101905061467a565b5050565b601f8211156146dd576146ae81614160565b6146b784614592565b810160208510156146c6578190505b6146da6146d285614592565b830182614679565b50505b505050565b600082821c905092915050565b6000614700600019846008026146e2565b1980831691505092915050565b600061471983836146ef565b9150826002028217905092915050565b614732826136e9565b67ffffffffffffffff81111561474b5761474a613575565b5b6147558254614124565b61476082828561469c565b600060209050601f8311600181146147935760008415614781578287015190505b61478b858261470d565b8655506147f3565b601f1984166147a186614160565b60005b828110156147c9578489015182556001820191506020850194506020810190506147a4565b868310156147e657848901516147e2601f8916826146ef565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614835826133ff565b9150614840836133ff565b9250826148505761484f6147fb565b5b828204905092915050565b6000614866826133ff565b9150614871836133ff565b925082820390508181111561488957614888614489565b5b92915050565b600061489a826133ff565b91506148a5836133ff565b9250826148b5576148b46147fb565b5b828206905092915050565b60006148cb826133ff565b91506148d6836133ff565b92508282019050808211156148ee576148ed614489565b5b92915050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006149506021836136f4565b915061495b826148f4565b604082019050919050565b6000602082019050818103600083015261497f81614943565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006149e26028836136f4565b91506149ed82614986565b604082019050919050565b60006020820190508181036000830152614a11816149d5565b9050919050565b60006040820190508181036000830152614a328185613ce8565b90508181036020830152614a468184613ce8565b90509392505050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614aab6025836136f4565b9150614ab682614a4f565b604082019050919050565b60006020820190508181036000830152614ada81614a9e565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000614b3d602a836136f4565b9150614b4882614ae1565b604082019050919050565b60006020820190508181036000830152614b6c81614b30565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000614ba96014836136f4565b9150614bb482614b73565b602082019050919050565b60006020820190508181036000830152614bd881614b9c565b9050919050565b614be8816133c1565b82525050565b6000602082019050614c036000830184614bdf565b92915050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614c656023836136f4565b9150614c7082614c09565b604082019050919050565b60006020820190508181036000830152614c9481614c58565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000614cf76024836136f4565b9150614d0282614c9b565b604082019050919050565b60006020820190508181036000830152614d2681614cea565b9050919050565b6000604082019050614d426000830185613475565b614d4f6020830184613475565b9392505050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614d8c6010836136f4565b9150614d9782614d56565b602082019050919050565b60006020820190508181036000830152614dbb81614d7f565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000614e1e6029836136f4565b9150614e2982614dc2565b604082019050919050565b60006020820190508181036000830152614e4d81614e11565b9050919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000614e8a601783614155565b9150614e9582614e54565b601782019050919050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000614ed6601183614155565b9150614ee182614ea0565b601182019050919050565b6000614ef782614e7d565b9150614f0382856141f8565b9150614f0e82614ec9565b9150614f1a82846141f8565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000614f4d82614f26565b614f578185614f31565b9350614f67818560208601613705565b614f7081613564565b840191505092915050565b600060a082019050614f906000830188614bdf565b614f9d6020830187614bdf565b8181036040830152614faf8186613ce8565b90508181036060830152614fc38185613ce8565b90508181036080830152614fd78184614f42565b90509695505050505050565b600081519050614ff2816134cb565b92915050565b60006020828403121561500e5761500d613397565b5b600061501c84828501614fe3565b91505092915050565b60008160e01c9050919050565b600060033d11156150515760046000803e61504e600051615025565b90505b90565b600060443d106150e15761506661338d565b60043d036004823e80513d602482011167ffffffffffffffff8211171561508e5750506150e1565b808201805167ffffffffffffffff8111156150ac57505050506150e1565b80602083010160043d0385018111156150c95750505050506150e1565b6150d8826020018501866135a4565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006151406034836136f4565b915061514b826150e4565b604082019050919050565b6000602082019050818103600083015261516f81615133565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006151d26028836136f4565b91506151dd82615176565b604082019050919050565b60006020820190508181036000830152615201816151c5565b9050919050565b600060a08201905061521d6000830188614bdf565b61522a6020830187614bdf565b6152376040830186613475565b6152446060830185613475565b81810360808301526152568184614f42565b90509695505050505050565b600061526d826133ff565b9150615278836133ff565b9250828202615286816133ff565b9150828204841483151761529d5761529c614489565b5b5092915050565b60006152af826133ff565b9150600082036152c2576152c1614489565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b60006153036020836136f4565b915061530e826152cd565b602082019050919050565b60006020820190508181036000830152615332816152f6565b9050919050565b7f455243313135353a204163636f756e74206973204c6f636b6564000000000000600082015250565b600061536f601a836136f4565b915061537a82615339565b602082019050919050565b6000602082019050818103600083015261539e81615362565b9050919050565b7f455243313135353a204163636f756e74206973207065726d616e656e746c792060008201527f4c6f636b65640000000000000000000000000000000000000000000000000000602082015250565b60006154016026836136f4565b915061540c826153a5565b604082019050919050565b60006020820190508181036000830152615430816153f4565b9050919050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b60006154936028836136f4565b915061549e82615437565b604082019050919050565b600060208201905081810360008301526154c281615486565b905091905056fea26469706673582212204aa54b93522ee7090ef2b6057c2a82a019afc2ea781ddaaf7b49b709c8b21e4764736f6c6343000812003368747470733a2f2f746573746e65742e65746865726e69612e636f6d2f626c6f636b636861696e2f68747470733a2f2f626c6f636b636861696e2e65746865726e69612e636f6d2f6d657461646174612f636f6e74726163742d6d65746164617461
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101fa5760003560e01c80636b9db4e61161011a578063d547741f116100ad578063e8a3d4851161007c578063e8a3d485146105a5578063e985e9c5146105c3578063eb1fe5a7146105f3578063f242432a14610623578063f5298aca1461063f576101fa565b8063d547741f1461051f578063dabd76e91461053b578063e386880d14610557578063e58378bb14610587576101fa565b806391d14854116100e957806391d1485414610487578063a22cb465146104b7578063a5f13076146104d3578063bd85b039146104ef576101fa565b80636b9db4e614610415578063731133e9146104455780637e5b1e24146104615780638456cb591461047d576101fa565b80632f2ff15d116101925780634f558e79116101615780634f558e791461038f5780635c975abb146103bf57806362bed1e5146103dd5780636b20c454146103f9576101fa565b80632f2ff15d1461031d57806336568abe146103395780633f4ba83a146103555780634e1273f41461035f576101fa565b80630e89341c116101ce5780630e89341c1461029957806317fefc03146102c95780631f7fdffa146102e55780632eb2c2d614610301576101fa565b8062fdd58e146101ff57806301ffc9a71461022f57806302fe53051461025f57806306fdde031461027b575b600080fd5b61021960048036038101906102149190613435565b61065b565b6040516102269190613484565b60405180910390f35b610249600480360381019061024491906134f7565b6106dd565b604051610256919061353f565b60405180910390f35b610279600480360381019061027491906136a0565b6106ef565b005b610283610726565b6040516102909190613768565b60405180910390f35b6102b360048036038101906102ae919061378a565b6107b4565b6040516102c09190613768565b60405180910390f35b6102e360048036038101906102de91906137b7565b6107e8565b005b6102ff60048036038101906102fa919061394d565b61081f565b005b61031b60048036038101906103169190613a08565b61085c565b005b61033760048036038101906103329190613b0d565b6108fd565b005b610353600480360381019061034e9190613b0d565b61091e565b005b61035d6109a1565b005b61037960048036038101906103749190613c10565b6109b9565b6040516103869190613d46565b60405180910390f35b6103a960048036038101906103a4919061378a565b610ad2565b6040516103b6919061353f565b60405180910390f35b6103c7610ae6565b6040516103d4919061353f565b60405180910390f35b6103f760048036038101906103f291906137b7565b610afd565b005b610413600480360381019061040e9190613d68565b610b34565b005b61042f600480360381019061042a91906137b7565b610bd1565b60405161043c919061353f565b60405180910390f35b61045f600480360381019061045a9190613df3565b610c27565b005b61047b600480360381019061047691906136a0565b610c64565b005b610485610ca2565b005b6104a1600480360381019061049c9190613b0d565b610cba565b6040516104ae919061353f565b60405180910390f35b6104d160048036038101906104cc9190613ea2565b610d25565b005b6104ed60048036038101906104e8919061394d565b610d3b565b005b6105096004803603810190610504919061378a565b610d5b565b6040516105169190613484565b60405180910390f35b61053960048036038101906105349190613b0d565b610d78565b005b61055560048036038101906105509190613df3565b610d99565b005b610571600480360381019061056c9190613ee2565b610db9565b60405161057e9190613f1e565b60405180910390f35b61058f610dd9565b60405161059c9190613f1e565b60405180910390f35b6105ad610de0565b6040516105ba9190613768565b60405180910390f35b6105dd60048036038101906105d89190613f39565b610e72565b6040516105ea919061353f565b60405180910390f35b61060d600480360381019061060891906137b7565b610f06565b60405161061a919061353f565b60405180910390f35b61063d60048036038101906106389190613f79565b610f5c565b005b61065960048036038101906106549190614010565b610ffd565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c2906140d5565b60405180910390fd5b6106d5838361109a565b905092915050565b60006106e8826110f4565b9050919050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561071981611106565b6107228261111a565b5050565b6008805461073390614124565b80601f016020809104026020016040519081016040528092919081815260200182805461075f90614124565b80156107ac5780601f10610781576101008083540402835291602001916107ac565b820191906000526020600020905b81548152906001019060200180831161078f57829003601f168201915b505050505081565b606060026107c18361112d565b6040516020016107d2929190614275565b6040516020818303038152906040529050919050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561081281611106565b61081b8261128d565b5050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661084981611106565b6108558585858561132b565b5050505050565b610864611557565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806108aa57506108a9856108a4611557565b610e72565b5b6108e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e090614316565b60405180910390fd5b6108f6858585858561155f565b5050505050565b61090682610db9565b61090f81611106565b6109198383611880565b505050565b610926611557565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098a906143a8565b60405180910390fd5b61099d8282611961565b5050565b6000801b6109ae81611106565b6109b6611a43565b50565b606081518351146109ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f69061443a565b60405180910390fd5b6000835167ffffffffffffffff811115610a1c57610a1b613575565b5b604051908082528060200260200182016040528015610a4a5781602001602082028036833780820191505090505b50905060005b8451811015610ac757610a97858281518110610a6f57610a6e61445a565b5b6020026020010151858381518110610a8a57610a8961445a565b5b602002602001015161065b565b828281518110610aaa57610aa961445a565b5b60200260200101818152505080610ac0906144b8565b9050610a50565b508091505092915050565b600080610ade83610d5b565b119050919050565b6000600460009054906101000a900460ff16905090565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610b2781611106565b610b3082611ae5565b5050565b610b3c611557565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610b825750610b8183610b7c611557565b610e72565b5b610bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb890614572565b60405180910390fd5b610bcc838383611b83565b505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610c5181611106565b610c5d85858585611e51565b5050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610c8e81611106565b8160099081610c9d9190614729565b505050565b6000801b610caf81611106565b610cb7612001565b50565b60006003600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610d37610d30611557565b83836120a4565b5050565b6000610d45611557565b9050610d54818686868661155f565b5050505050565b600060056000838152602001908152602001600020549050919050565b610d8182610db9565b610d8a81611106565b610d948383611961565b505050565b6000610da3611557565b9050610db28186868686612210565b5050505050565b600060036000838152602001908152602001600020600101549050919050565b6000801b81565b606060098054610def90614124565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1b90614124565b8015610e685780601f10610e3d57610100808354040283529160200191610e68565b820191906000526020600020905b815481529060010190602001808311610e4b57829003601f168201915b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f64611557565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610faa5750610fa985610fa4611557565b610e72565b5b610fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe090614572565b60405180910390fd5b610ff68585858585612210565b5050505050565b611005611557565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061104b575061104a83611045611557565b610e72565b5b61108a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108190614572565b60405180910390fd5b6110958383836124ab565b505050565b600080600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006110ff826126f1565b9050919050565b61111781611112611557565b61276b565b50565b80600290816111299190614729565b5050565b606060008203611174576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611288565b600082905060005b600082146111a657808061118f906144b8565b915050600a8261119f919061482a565b915061117c565b60008167ffffffffffffffff8111156111c2576111c1613575565b5b6040519080825280601f01601f1916602001820160405280156111f45781602001600182028036833780820191505090505b5090505b600085146112815760018261120d919061485b565b9150600a8561121c919061488f565b603061122891906148c0565b60f81b81838151811061123e5761123d61445a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561127a919061482a565b94506111f8565b8093505050505b919050565b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f11442fe37fe2300ecf19dce69a0cf2a40cb10d15b1bb4dce3bb2f130ab1a7d5760405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361139a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139190614966565b60405180910390fd5b81518351146113de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d5906149f8565b60405180910390fd5b60006113e8611557565b90506113f981600087878787612808565b60005b84518110156114b2578381815181106114185761141761445a565b5b60200260200101516000808784815181106114365761143561445a565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461149891906148c0565b9250508190555080806114aa906144b8565b9150506113fc565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161152a929190614a18565b60405180910390a461154181600087878787612866565b6115508160008787878761286e565b5050505050565b600033905090565b81518351146115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a906149f8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611612576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160990614ac1565b60405180910390fd5b600061161c611557565b905061162c818787878787612808565b60005b84518110156117dd57600085828151811061164d5761164c61445a565b5b60200260200101519050600085838151811061166c5761166b61445a565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561170d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170490614b53565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117c291906148c0565b92505081905550505050806117d6906144b8565b905061162f565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611854929190614a18565b60405180910390a461186a818787878787612866565b61187881878787878761286e565b505050505050565b61188a8282610cba565b61195d5760016003600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611902611557565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b61196b8282610cba565b15611a3f5760006003600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506119e4611557565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b611a4b610ae6565b611a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8190614bbf565b60405180910390fd5b6000600460006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611ace611557565b604051611adb9190614bee565b60405180910390a1565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f3ac6ae1ab9191602a77d3ae545aafded61a6e883e7b6d4c65677152f3ddf56fe60405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be990614c7b565b60405180910390fd5b8051825114611c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2d906149f8565b60405180910390fd5b6000611c40611557565b9050611c6081856000868660405180602001604052806000815250612808565b60005b8351811015611dad576000848281518110611c8157611c8061445a565b5b602002602001015190506000848381518110611ca057611c9f61445a565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3890614d0d565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611da5906144b8565b915050611c63565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611e25929190614a18565b60405180910390a4611e4b81856000868660405180602001604052806000815250612866565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb790614966565b60405180910390fd5b6000611eca611557565b90506000611ed785612a45565b90506000611ee485612a45565b9050611ef583600089858589612808565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f5491906148c0565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611fd2929190614d2d565b60405180910390a4611fe983600089858589612866565b611ff883600089898989612abf565b50505050505050565b612009610ae6565b15612049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204090614da2565b60405180910390fd5b6001600460006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861208d611557565b60405161209a9190614bee565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210990614e34565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612203919061353f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361227f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227690614ac1565b60405180910390fd5b6000612289611557565b9050600061229685612a45565b905060006122a385612a45565b90506122b3838989858589612808565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508581101561234a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234190614b53565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123ff91906148c0565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a60405161247c929190614d2d565b60405180910390a4612492848a8a86868a612866565b6124a0848a8a8a8a8a612abf565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361251a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251190614c7b565b60405180910390fd5b6000612524611557565b9050600061253184612a45565b9050600061253e84612a45565b905061255e83876000858560405180602001604052806000815250612808565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050848110156125f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ec90614d0d565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516126c2929190614d2d565b60405180910390a46126e884886000868660405180602001604052806000815250612866565b50505050505050565b60007fbe69cfa5000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612764575061276382612c96565b5b9050919050565b6127758282610cba565b6128045761279a8173ffffffffffffffffffffffffffffffffffffffff166014612d78565b6127a88360001c6020612d78565b6040516020016127b9929190614eec565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fb9190613768565b60405180910390fd5b5050565b612810610ae6565b15612850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284790614da2565b60405180910390fd5b61285e868686868686612fb4565b505050505050565b505050505050565b61288d8473ffffffffffffffffffffffffffffffffffffffff16613128565b15612a3d578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016128d3959493929190614f7b565b6020604051808303816000875af192505050801561290f57506040513d601f19601f8201168201806040525081019061290c9190614ff8565b60015b6129b45761291b615032565b806308c379a003612977575061292f615054565b8061293a5750612979565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296e9190613768565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ab90615156565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a32906151e8565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115612a6457612a63613575565b5b604051908082528060200260200182016040528015612a925781602001602082028036833780820191505090505b5090508281600081518110612aaa57612aa961445a565b5b60200260200101818152505080915050919050565b612ade8473ffffffffffffffffffffffffffffffffffffffff16613128565b15612c8e578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612b24959493929190615208565b6020604051808303816000875af1925050508015612b6057506040513d601f19601f82011682018060405250810190612b5d9190614ff8565b60015b612c0557612b6c615032565b806308c379a003612bc85750612b80615054565b80612b8b5750612bca565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbf9190613768565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfc90615156565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c83906151e8565b60405180910390fd5b505b505050505050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612d6157507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612d715750612d708261314b565b5b9050919050565b606060006002836002612d8b9190615262565b612d9591906148c0565b67ffffffffffffffff811115612dae57612dad613575565b5b6040519080825280601f01601f191660200182016040528015612de05781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612e1857612e1761445a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612e7c57612e7b61445a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002612ebc9190615262565b612ec691906148c0565b90505b6001811115612f66577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612f0857612f0761445a565b5b1a60f81b828281518110612f1f57612f1e61445a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612f5f906152a4565b9050612ec9565b5060008414612faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa190615319565b60405180910390fd5b8091505092915050565b612fc28686868686866131b5565b60001515600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515148061304e575061304d7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775613048611557565b610cba565b5b61308d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308490615385565b60405180910390fd5b60001515600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514613120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311790615417565b60405180910390fd5b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6131c3868686868686613385565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036132745760005b8351811015613272578281815181106132165761321561445a565b5b6020026020010151600560008684815181106132355761323461445a565b5b60200260200101518152602001908152602001600020600082825461325a91906148c0565b925050819055508061326b906144b8565b90506131fa565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361337d5760005b835181101561337b5760008482815181106132c9576132c861445a565b5b6020026020010151905060008483815181106132e8576132e761445a565b5b602002602001015190506000600560008481526020019081526020016000205490508181101561334d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613344906154a9565b60405180910390fd5b818103600560008581526020019081526020016000208190555050505080613374906144b8565b90506132ab565b505b505050505050565b505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133cc826133a1565b9050919050565b6133dc816133c1565b81146133e757600080fd5b50565b6000813590506133f9816133d3565b92915050565b6000819050919050565b613412816133ff565b811461341d57600080fd5b50565b60008135905061342f81613409565b92915050565b6000806040838503121561344c5761344b613397565b5b600061345a858286016133ea565b925050602061346b85828601613420565b9150509250929050565b61347e816133ff565b82525050565b60006020820190506134996000830184613475565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6134d48161349f565b81146134df57600080fd5b50565b6000813590506134f1816134cb565b92915050565b60006020828403121561350d5761350c613397565b5b600061351b848285016134e2565b91505092915050565b60008115159050919050565b61353981613524565b82525050565b60006020820190506135546000830184613530565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6135ad82613564565b810181811067ffffffffffffffff821117156135cc576135cb613575565b5b80604052505050565b60006135df61338d565b90506135eb82826135a4565b919050565b600067ffffffffffffffff82111561360b5761360a613575565b5b61361482613564565b9050602081019050919050565b82818337600083830152505050565b600061364361363e846135f0565b6135d5565b90508281526020810184848401111561365f5761365e61355f565b5b61366a848285613621565b509392505050565b600082601f8301126136875761368661355a565b5b8135613697848260208601613630565b91505092915050565b6000602082840312156136b6576136b5613397565b5b600082013567ffffffffffffffff8111156136d4576136d361339c565b5b6136e084828501613672565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613723578082015181840152602081019050613708565b60008484015250505050565b600061373a826136e9565b61374481856136f4565b9350613754818560208601613705565b61375d81613564565b840191505092915050565b60006020820190508181036000830152613782818461372f565b905092915050565b6000602082840312156137a05761379f613397565b5b60006137ae84828501613420565b91505092915050565b6000602082840312156137cd576137cc613397565b5b60006137db848285016133ea565b91505092915050565b600067ffffffffffffffff8211156137ff576137fe613575565b5b602082029050602081019050919050565b600080fd5b6000613828613823846137e4565b6135d5565b9050808382526020820190506020840283018581111561384b5761384a613810565b5b835b8181101561387457806138608882613420565b84526020840193505060208101905061384d565b5050509392505050565b600082601f8301126138935761389261355a565b5b81356138a3848260208601613815565b91505092915050565b600067ffffffffffffffff8211156138c7576138c6613575565b5b6138d082613564565b9050602081019050919050565b60006138f06138eb846138ac565b6135d5565b90508281526020810184848401111561390c5761390b61355f565b5b613917848285613621565b509392505050565b600082601f8301126139345761393361355a565b5b81356139448482602086016138dd565b91505092915050565b6000806000806080858703121561396757613966613397565b5b6000613975878288016133ea565b945050602085013567ffffffffffffffff8111156139965761399561339c565b5b6139a28782880161387e565b935050604085013567ffffffffffffffff8111156139c3576139c261339c565b5b6139cf8782880161387e565b925050606085013567ffffffffffffffff8111156139f0576139ef61339c565b5b6139fc8782880161391f565b91505092959194509250565b600080600080600060a08688031215613a2457613a23613397565b5b6000613a32888289016133ea565b9550506020613a43888289016133ea565b945050604086013567ffffffffffffffff811115613a6457613a6361339c565b5b613a708882890161387e565b935050606086013567ffffffffffffffff811115613a9157613a9061339c565b5b613a9d8882890161387e565b925050608086013567ffffffffffffffff811115613abe57613abd61339c565b5b613aca8882890161391f565b9150509295509295909350565b6000819050919050565b613aea81613ad7565b8114613af557600080fd5b50565b600081359050613b0781613ae1565b92915050565b60008060408385031215613b2457613b23613397565b5b6000613b3285828601613af8565b9250506020613b43858286016133ea565b9150509250929050565b600067ffffffffffffffff821115613b6857613b67613575565b5b602082029050602081019050919050565b6000613b8c613b8784613b4d565b6135d5565b90508083825260208201905060208402830185811115613baf57613bae613810565b5b835b81811015613bd85780613bc488826133ea565b845260208401935050602081019050613bb1565b5050509392505050565b600082601f830112613bf757613bf661355a565b5b8135613c07848260208601613b79565b91505092915050565b60008060408385031215613c2757613c26613397565b5b600083013567ffffffffffffffff811115613c4557613c4461339c565b5b613c5185828601613be2565b925050602083013567ffffffffffffffff811115613c7257613c7161339c565b5b613c7e8582860161387e565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613cbd816133ff565b82525050565b6000613ccf8383613cb4565b60208301905092915050565b6000602082019050919050565b6000613cf382613c88565b613cfd8185613c93565b9350613d0883613ca4565b8060005b83811015613d39578151613d208882613cc3565b9750613d2b83613cdb565b925050600181019050613d0c565b5085935050505092915050565b60006020820190508181036000830152613d608184613ce8565b905092915050565b600080600060608486031215613d8157613d80613397565b5b6000613d8f868287016133ea565b935050602084013567ffffffffffffffff811115613db057613daf61339c565b5b613dbc8682870161387e565b925050604084013567ffffffffffffffff811115613ddd57613ddc61339c565b5b613de98682870161387e565b9150509250925092565b60008060008060808587031215613e0d57613e0c613397565b5b6000613e1b878288016133ea565b9450506020613e2c87828801613420565b9350506040613e3d87828801613420565b925050606085013567ffffffffffffffff811115613e5e57613e5d61339c565b5b613e6a8782880161391f565b91505092959194509250565b613e7f81613524565b8114613e8a57600080fd5b50565b600081359050613e9c81613e76565b92915050565b60008060408385031215613eb957613eb8613397565b5b6000613ec7858286016133ea565b9250506020613ed885828601613e8d565b9150509250929050565b600060208284031215613ef857613ef7613397565b5b6000613f0684828501613af8565b91505092915050565b613f1881613ad7565b82525050565b6000602082019050613f336000830184613f0f565b92915050565b60008060408385031215613f5057613f4f613397565b5b6000613f5e858286016133ea565b9250506020613f6f858286016133ea565b9150509250929050565b600080600080600060a08688031215613f9557613f94613397565b5b6000613fa3888289016133ea565b9550506020613fb4888289016133ea565b9450506040613fc588828901613420565b9350506060613fd688828901613420565b925050608086013567ffffffffffffffff811115613ff757613ff661339c565b5b6140038882890161391f565b9150509295509295909350565b60008060006060848603121561402957614028613397565b5b6000614037868287016133ea565b935050602061404886828701613420565b925050604061405986828701613420565b9150509250925092565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b60006140bf602a836136f4565b91506140ca82614063565b604082019050919050565b600060208201905081810360008301526140ee816140b2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061413c57607f821691505b60208210810361414f5761414e6140f5565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461418281614124565b61418c8186614155565b945060018216600081146141a757600181146141bc576141ef565b60ff19831686528115158202860193506141ef565b6141c585614160565b60005b838110156141e7578154818901526001820191506020810190506141c8565b838801955050505b50505092915050565b6000614203826136e9565b61420d8185614155565b935061421d818560208601613705565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b600061425f600583614155565b915061426a82614229565b600582019050919050565b60006142818285614175565b915061428d82846141f8565b915061429882614252565b91508190509392505050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006143006032836136f4565b915061430b826142a4565b604082019050919050565b6000602082019050818103600083015261432f816142f3565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000614392602f836136f4565b915061439d82614336565b604082019050919050565b600060208201905081810360008301526143c181614385565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006144246029836136f4565b915061442f826143c8565b604082019050919050565b6000602082019050818103600083015261445381614417565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006144c3826133ff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036144f5576144f4614489565b5b600182019050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b600061455c6029836136f4565b915061456782614500565b604082019050919050565b6000602082019050818103600083015261458b8161454f565b9050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026145df7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826145a2565b6145e986836145a2565b95508019841693508086168417925050509392505050565b6000819050919050565b600061462661462161461c846133ff565b614601565b6133ff565b9050919050565b6000819050919050565b6146408361460b565b61465461464c8261462d565b8484546145af565b825550505050565b600090565b61466961465c565b614674818484614637565b505050565b5b818110156146985761468d600082614661565b60018101905061467a565b5050565b601f8211156146dd576146ae81614160565b6146b784614592565b810160208510156146c6578190505b6146da6146d285614592565b830182614679565b50505b505050565b600082821c905092915050565b6000614700600019846008026146e2565b1980831691505092915050565b600061471983836146ef565b9150826002028217905092915050565b614732826136e9565b67ffffffffffffffff81111561474b5761474a613575565b5b6147558254614124565b61476082828561469c565b600060209050601f8311600181146147935760008415614781578287015190505b61478b858261470d565b8655506147f3565b601f1984166147a186614160565b60005b828110156147c9578489015182556001820191506020850194506020810190506147a4565b868310156147e657848901516147e2601f8916826146ef565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614835826133ff565b9150614840836133ff565b9250826148505761484f6147fb565b5b828204905092915050565b6000614866826133ff565b9150614871836133ff565b925082820390508181111561488957614888614489565b5b92915050565b600061489a826133ff565b91506148a5836133ff565b9250826148b5576148b46147fb565b5b828206905092915050565b60006148cb826133ff565b91506148d6836133ff565b92508282019050808211156148ee576148ed614489565b5b92915050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006149506021836136f4565b915061495b826148f4565b604082019050919050565b6000602082019050818103600083015261497f81614943565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006149e26028836136f4565b91506149ed82614986565b604082019050919050565b60006020820190508181036000830152614a11816149d5565b9050919050565b60006040820190508181036000830152614a328185613ce8565b90508181036020830152614a468184613ce8565b90509392505050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614aab6025836136f4565b9150614ab682614a4f565b604082019050919050565b60006020820190508181036000830152614ada81614a9e565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000614b3d602a836136f4565b9150614b4882614ae1565b604082019050919050565b60006020820190508181036000830152614b6c81614b30565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000614ba96014836136f4565b9150614bb482614b73565b602082019050919050565b60006020820190508181036000830152614bd881614b9c565b9050919050565b614be8816133c1565b82525050565b6000602082019050614c036000830184614bdf565b92915050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614c656023836136f4565b9150614c7082614c09565b604082019050919050565b60006020820190508181036000830152614c9481614c58565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000614cf76024836136f4565b9150614d0282614c9b565b604082019050919050565b60006020820190508181036000830152614d2681614cea565b9050919050565b6000604082019050614d426000830185613475565b614d4f6020830184613475565b9392505050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614d8c6010836136f4565b9150614d9782614d56565b602082019050919050565b60006020820190508181036000830152614dbb81614d7f565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000614e1e6029836136f4565b9150614e2982614dc2565b604082019050919050565b60006020820190508181036000830152614e4d81614e11565b9050919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000614e8a601783614155565b9150614e9582614e54565b601782019050919050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000614ed6601183614155565b9150614ee182614ea0565b601182019050919050565b6000614ef782614e7d565b9150614f0382856141f8565b9150614f0e82614ec9565b9150614f1a82846141f8565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000614f4d82614f26565b614f578185614f31565b9350614f67818560208601613705565b614f7081613564565b840191505092915050565b600060a082019050614f906000830188614bdf565b614f9d6020830187614bdf565b8181036040830152614faf8186613ce8565b90508181036060830152614fc38185613ce8565b90508181036080830152614fd78184614f42565b90509695505050505050565b600081519050614ff2816134cb565b92915050565b60006020828403121561500e5761500d613397565b5b600061501c84828501614fe3565b91505092915050565b60008160e01c9050919050565b600060033d11156150515760046000803e61504e600051615025565b90505b90565b600060443d106150e15761506661338d565b60043d036004823e80513d602482011167ffffffffffffffff8211171561508e5750506150e1565b808201805167ffffffffffffffff8111156150ac57505050506150e1565b80602083010160043d0385018111156150c95750505050506150e1565b6150d8826020018501866135a4565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006151406034836136f4565b915061514b826150e4565b604082019050919050565b6000602082019050818103600083015261516f81615133565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006151d26028836136f4565b91506151dd82615176565b604082019050919050565b60006020820190508181036000830152615201816151c5565b9050919050565b600060a08201905061521d6000830188614bdf565b61522a6020830187614bdf565b6152376040830186613475565b6152446060830185613475565b81810360808301526152568184614f42565b90509695505050505050565b600061526d826133ff565b9150615278836133ff565b9250828202615286816133ff565b9150828204841483151761529d5761529c614489565b5b5092915050565b60006152af826133ff565b9150600082036152c2576152c1614489565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b60006153036020836136f4565b915061530e826152cd565b602082019050919050565b60006020820190508181036000830152615332816152f6565b9050919050565b7f455243313135353a204163636f756e74206973204c6f636b6564000000000000600082015250565b600061536f601a836136f4565b915061537a82615339565b602082019050919050565b6000602082019050818103600083015261539e81615362565b9050919050565b7f455243313135353a204163636f756e74206973207065726d616e656e746c792060008201527f4c6f636b65640000000000000000000000000000000000000000000000000000602082015250565b60006154016026836136f4565b915061540c826153a5565b604082019050919050565b60006020820190508181036000830152615430816153f4565b9050919050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b60006154936028836136f4565b915061549e82615437565b604082019050919050565b600060208201905081810360008301526154c281615486565b905091905056fea26469706673582212204aa54b93522ee7090ef2b6057c2a82a019afc2ea781ddaaf7b49b709c8b21e4764736f6c63430008120033
Deployed Bytecode Sourcemap
56368:3323:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22321:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59462:226;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56972:100;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56616:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21915:255;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58793:133;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57894:203;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24412:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45501:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46549:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57384:76;;;:::i;:::-;;22862:532;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52740:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49709:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58979:137;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51541:353;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55336:106;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57582:181;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57160:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57080:72;;;:::i;:::-;;43568:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23467:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58436:234;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52529:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45893:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58167:202;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45108:131;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42681:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57279:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23694:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55573:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23934:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51212:321;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22321:231;22407:7;22454:1;22435:21;;:7;:21;;;22427:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22521:23;22532:7;22541:2;22521:10;:23::i;:::-;22514:30;;22321:231;;;;:::o;59462:226::-;59615:4;59644:36;59668:11;59644:23;:36::i;:::-;59637:43;;59462:226;;;:::o;56972:100::-;56516:23;43164:16;43175:4;43164:10;:16::i;:::-;57049:15:::1;57057:6;57049:7;:15::i;:::-;56972:100:::0;;:::o;56616:32::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21915:255::-;21978:13;22067:4;22090:20;22107:2;22090:16;:20::i;:::-;22032:119;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22004:158;;21915:255;;;:::o;58793:133::-;56516:23;43164:16;43175:4;43164:10;:16::i;:::-;58895:23:::1;58910:7;58895:14;:23::i;:::-;58793:133:::0;;:::o;57894:203::-;56585:24;43164:16;43175:4;43164:10;:16::i;:::-;58055:34:::1;58066:2;58070:3;58075:7;58084:4;58055:10;:34::i;:::-;57894:203:::0;;;;;:::o;24412:442::-;24653:12;:10;:12::i;:::-;24645:20;;:4;:20;;;:60;;;;24669:36;24686:4;24692:12;:10;:12::i;:::-;24669:16;:36::i;:::-;24645:60;24623:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;24794:52;24817:4;24823:2;24827:3;24832:7;24841:4;24794:22;:52::i;:::-;24412:442;;;;;:::o;45501:147::-;45584:18;45597:4;45584:12;:18::i;:::-;43164:16;43175:4;43164:10;:16::i;:::-;45615:25:::1;45626:4;45632:7;45615:10;:25::i;:::-;45501:147:::0;;;:::o;46549:218::-;46656:12;:10;:12::i;:::-;46645:23;;:7;:23;;;46637:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;46733:26;46745:4;46751:7;46733:11;:26::i;:::-;46549:218;;:::o;57384:76::-;42718:4;57419:10;;43164:16;43175:4;43164:10;:16::i;:::-;57442:10:::1;:8;:10::i;:::-;57384:76:::0;:::o;22862:532::-;23018:16;23079:3;:10;23060:8;:15;:29;23052:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;23156:30;23203:8;:15;23189:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23156:63;;23237:9;23232:122;23256:8;:15;23252:1;:19;23232:122;;;23312:30;23322:8;23331:1;23322:11;;;;;;;;:::i;:::-;;;;;;;;23335:3;23339:1;23335:6;;;;;;;;:::i;:::-;;;;;;;;23312:9;:30::i;:::-;23293:13;23307:1;23293:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;23273:3;;;;:::i;:::-;;;23232:122;;;;23373:13;23366:20;;;22862:532;;;;:::o;52740:122::-;52797:4;52853:1;52821:29;52847:2;52821:25;:29::i;:::-;:33;52814:40;;52740:122;;;:::o;49709:86::-;49756:4;49780:7;;;;;;;;;;;49773:14;;49709:86;:::o;58979:137::-;56516:23;43164:16;43175:4;43164:10;:16::i;:::-;59083:25:::1;59100:7;59083:16;:25::i;:::-;58979:137:::0;;:::o;51541:353::-;51717:12;:10;:12::i;:::-;51706:23;;:7;:23;;;:66;;;;51733:39;51750:7;51759:12;:10;:12::i;:::-;51733:16;:39::i;:::-;51706:66;51684:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;51854:32;51865:7;51874:3;51879:6;51854:10;:32::i;:::-;51541:353;;;:::o;55336:106::-;55392:4;55419:6;:15;55426:7;55419:15;;;;;;;;;;;;;;;;;;;;;;;;;55412:22;;55336:106;;;:::o;57582:181::-;56585:24;43164:16;43175:4;43164:10;:16::i;:::-;57723:32:::1;57729:7;57738:2;57742:6;57750:4;57723:5;:32::i;:::-;57582:181:::0;;;;;:::o;57160:111::-;56516:23;43164:16;43175:4;43164:10;:16::i;:::-;57260:3:::1;57245:12;:18;;;;;;:::i;:::-;;57160:111:::0;;:::o;57080:72::-;42718:4;57113:10;;43164:16;43175:4;43164:10;:16::i;:::-;57136:8:::1;:6;:8::i;:::-;57080:72:::0;:::o;43568:147::-;43654:4;43678:6;:12;43685:4;43678:12;;;;;;;;;;;:20;;:29;43699:7;43678:29;;;;;;;;;;;;;;;;;;;;;;;;;43671:36;;43568:147;;;;:::o;23467:155::-;23562:52;23581:12;:10;:12::i;:::-;23595:8;23605;23562:18;:52::i;:::-;23467:155;;:::o;58436:234::-;58570:13;58586:12;:10;:12::i;:::-;58570:28;;58609:53;58632:5;58639:2;58643:3;58648:7;58657:4;58609:22;:53::i;:::-;58559:111;58436:234;;;;:::o;52529:113::-;52591:7;52618:12;:16;52631:2;52618:16;;;;;;;;;;;;52611:23;;52529:113;;;:::o;45893:149::-;45977:18;45990:4;45977:12;:18::i;:::-;43164:16;43175:4;43164:10;:16::i;:::-;46008:26:::1;46020:4;46026:7;46008:11;:26::i;:::-;45893:149:::0;;;:::o;58167:202::-;58276:13;58292:12;:10;:12::i;:::-;58276:28;;58315:46;58333:5;58340:2;58344;58348:6;58356:4;58315:17;:46::i;:::-;58265:104;58167:202;;;;:::o;45108:131::-;45182:7;45209:6;:12;45216:4;45209:12;;;;;;;;;;;:22;;;45202:29;;45108:131;;;:::o;42681:41::-;42718:4;42681:41;;;:::o;57279:97::-;57323:13;57356:12;57349:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57279:97;:::o;23694:168::-;23793:4;23817:18;:27;23836:7;23817:27;;;;;;;;;;;;;;;:37;23845:8;23817:37;;;;;;;;;;;;;;;;;;;;;;;;;23810:44;;23694:168;;;;:::o;55573:124::-;55638:4;55665:15;:24;55681:7;55665:24;;;;;;;;;;;;;;;;;;;;;;;;;55658:31;;55573:124;;;:::o;23934:401::-;24150:12;:10;:12::i;:::-;24142:20;;:4;:20;;;:60;;;;24166:36;24183:4;24189:12;:10;:12::i;:::-;24166:16;:36::i;:::-;24142:60;24120:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;24282:45;24300:4;24306:2;24310;24314:6;24322:4;24282:17;:45::i;:::-;23934:401;;;;;:::o;51212:321::-;51363:12;:10;:12::i;:::-;51352:23;;:7;:23;;;:66;;;;51379:39;51396:7;51405:12;:10;:12::i;:::-;51379:16;:39::i;:::-;51352:66;51330:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;51500:25;51506:7;51515:2;51519:5;51500;:25::i;:::-;51212:321;;;:::o;22560:136::-;22639:7;22666:9;:13;22676:2;22666:13;;;;;;;;;;;:22;22680:7;22666:22;;;;;;;;;;;;;;;;22659:29;;22560:136;;;;:::o;54836:177::-;54945:4;54969:36;54993:11;54969:23;:36::i;:::-;54962:43;;54836:177;;;:::o;44019:105::-;44086:30;44097:4;44103:12;:10;:12::i;:::-;44086:10;:30::i;:::-;44019:105;:::o;28642:88::-;28716:6;28709:4;:13;;;;;;:::i;:::-;;28642:88;:::o;18448:723::-;18504:13;18734:1;18725:5;:10;18721:53;;18752:10;;;;;;;;;;;;;;;;;;;;;18721:53;18784:12;18799:5;18784:20;;18815:14;18840:78;18855:1;18847:4;:9;18840:78;;18873:8;;;;;:::i;:::-;;;;18904:2;18896:10;;;;;:::i;:::-;;;18840:78;;;18928:19;18960:6;18950:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18928:39;;18978:154;18994:1;18985:5;:10;18978:154;;19022:1;19012:11;;;;;:::i;:::-;;;19089:2;19081:5;:10;;;;:::i;:::-;19068:2;:24;;;;:::i;:::-;19055:39;;19038:6;19045;19038:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;19118:2;19109:11;;;;;:::i;:::-;;;18978:154;;;19156:6;19142:21;;;;;18448:723;;;;:::o;55021:147::-;55120:4;55093:15;:24;55109:7;55093:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;55152:7;55138:22;;;;;;;;;;;;55021:147;:::o;30201:813::-;30393:1;30379:16;;:2;:16;;;30371:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30466:7;:14;30452:3;:10;:28;30444:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30538:16;30557:12;:10;:12::i;:::-;30538:31;;30582:66;30603:8;30621:1;30625:2;30629:3;30634:7;30643:4;30582:20;:66::i;:::-;30666:9;30661:103;30685:3;:10;30681:1;:14;30661:103;;;30742:7;30750:1;30742:10;;;;;;;;:::i;:::-;;;;;;;;30717:9;:17;30727:3;30731:1;30727:6;;;;;;;;:::i;:::-;;;;;;;;30717:17;;;;;;;;;;;:21;30735:2;30717:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;30697:3;;;;;:::i;:::-;;;;30661:103;;;;30817:2;30781:53;;30813:1;30781:53;;30795:8;30781:53;;;30821:3;30826:7;30781:53;;;;;;;:::i;:::-;;;;;;;;30847:65;30867:8;30885:1;30889:2;30893:3;30898:7;30907:4;30847:19;:65::i;:::-;30925:81;30961:8;30979:1;30983:2;30987:3;30992:7;31001:4;30925:35;:81::i;:::-;30360:654;30201:813;;;;:::o;17025:98::-;17078:7;17105:10;17098:17;;17025:98;:::o;26652:1146::-;26879:7;:14;26865:3;:10;:28;26857:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;26971:1;26957:16;;:2;:16;;;26949:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27028:16;27047:12;:10;:12::i;:::-;27028:31;;27072:60;27093:8;27103:4;27109:2;27113:3;27118:7;27127:4;27072:20;:60::i;:::-;27150:9;27145:421;27169:3;:10;27165:1;:14;27145:421;;;27201:10;27214:3;27218:1;27214:6;;;;;;;;:::i;:::-;;;;;;;;27201:19;;27235:14;27252:7;27260:1;27252:10;;;;;;;;:::i;:::-;;;;;;;;27235:27;;27279:19;27301:9;:13;27311:2;27301:13;;;;;;;;;;;:19;27315:4;27301:19;;;;;;;;;;;;;;;;27279:41;;27358:6;27343:11;:21;;27335:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27491:6;27477:11;:20;27455:9;:13;27465:2;27455:13;;;;;;;;;;;:19;27469:4;27455:19;;;;;;;;;;;;;;;:42;;;;27548:6;27527:9;:13;27537:2;27527:13;;;;;;;;;;;:17;27541:2;27527:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27186:380;;;27181:3;;;;:::i;:::-;;;27145:421;;;;27613:2;27583:47;;27607:4;27583:47;;27597:8;27583:47;;;27617:3;27622:7;27583:47;;;;;;;:::i;:::-;;;;;;;;27643:59;27663:8;27673:4;27679:2;27683:3;27688:7;27697:4;27643:19;:59::i;:::-;27715:75;27751:8;27761:4;27767:2;27771:3;27776:7;27785:4;27715:35;:75::i;:::-;26846:952;26652:1146;;;;;:::o;48050:238::-;48134:22;48142:4;48148:7;48134;:22::i;:::-;48129:152;;48205:4;48173:6;:12;48180:4;48173:12;;;;;;;;;;;:20;;:29;48194:7;48173:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;48256:12;:10;:12::i;:::-;48229:40;;48247:7;48229:40;;48241:4;48229:40;;;;;;;;;;48129:152;48050:238;;:::o;48420:239::-;48504:22;48512:4;48518:7;48504;:22::i;:::-;48500:152;;;48575:5;48543:6;:12;48550:4;48543:12;;;;;;;;;;;:20;;:29;48564:7;48543:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;48627:12;:10;:12::i;:::-;48600:40;;48618:7;48600:40;;48612:4;48600:40;;;;;;;;;;48500:152;48420:239;;:::o;50768:120::-;50312:8;:6;:8::i;:::-;50304:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;50837:5:::1;50827:7;;:15;;;;;;;;;;;;;;;;;;50858:22;50867:12;:10;:12::i;:::-;50858:22;;;;;;:::i;:::-;;;;;;;;50768:120::o:0;55176:152::-;55277:5;55250:15;:24;55266:7;55250:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;55312:7;55296:24;;;;;;;;;;;;55176:152;:::o;32275:969::-;32443:1;32427:18;;:4;:18;;;32419:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32518:7;:14;32504:3;:10;:28;32496:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32590:16;32609:12;:10;:12::i;:::-;32590:31;;32634:66;32655:8;32665:4;32679:1;32683:3;32688:7;32634:66;;;;;;;;;;;;:20;:66::i;:::-;32718:9;32713:373;32737:3;:10;32733:1;:14;32713:373;;;32769:10;32782:3;32786:1;32782:6;;;;;;;;:::i;:::-;;;;;;;;32769:19;;32803:14;32820:7;32828:1;32820:10;;;;;;;;:::i;:::-;;;;;;;;32803:27;;32847:19;32869:9;:13;32879:2;32869:13;;;;;;;;;;;:19;32883:4;32869:19;;;;;;;;;;;;;;;;32847:41;;32926:6;32911:11;:21;;32903:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;33053:6;33039:11;:20;33017:9;:13;33027:2;33017:13;;;;;;;;;;;:19;33031:4;33017:19;;;;;;;;;;;;;;;:42;;;;32754:332;;;32749:3;;;;;:::i;:::-;;;;32713:373;;;;33141:1;33103:55;;33127:4;33103:55;;33117:8;33103:55;;;33145:3;33150:7;33103:55;;;;;;;:::i;:::-;;;;;;;;33171:65;33191:8;33201:4;33215:1;33219:3;33224:7;33171:65;;;;;;;;;;;;:19;:65::i;:::-;32408:836;32275:969;;;:::o;29116:729::-;29283:1;29269:16;;:2;:16;;;29261:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29336:16;29355:12;:10;:12::i;:::-;29336:31;;29378:20;29401:21;29419:2;29401:17;:21::i;:::-;29378:44;;29433:24;29460:25;29478:6;29460:17;:25::i;:::-;29433:52;;29498:66;29519:8;29537:1;29541:2;29545:3;29550:7;29559:4;29498:20;:66::i;:::-;29598:6;29577:9;:13;29587:2;29577:13;;;;;;;;;;;:17;29591:2;29577:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29657:2;29620:52;;29653:1;29620:52;;29635:8;29620:52;;;29661:2;29665:6;29620:52;;;;;;;:::i;:::-;;;;;;;;29685:65;29705:8;29723:1;29727:2;29731:3;29736:7;29745:4;29685:19;:65::i;:::-;29763:74;29794:8;29812:1;29816:2;29820;29824:6;29832:4;29763:30;:74::i;:::-;29250:595;;;29116:729;;;;:::o;50509:118::-;50035:8;:6;:8::i;:::-;50034:9;50026:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;50579:4:::1;50569:7;;:14;;;;;;;;;;;;;;;;;;50599:20;50606:12;:10;:12::i;:::-;50599:20;;;;;;:::i;:::-;;;;;;;;50509:118::o:0;33386:331::-;33541:8;33532:17;;:5;:17;;;33524:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33644:8;33606:18;:25;33625:5;33606:25;;;;;;;;;;;;;;;:35;33632:8;33606:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33690:8;33668:41;;33683:5;33668:41;;;33700:8;33668:41;;;;;;:::i;:::-;;;;;;;;33386:331;;;:::o;25320:974::-;25522:1;25508:16;;:2;:16;;;25500:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25579:16;25598:12;:10;:12::i;:::-;25579:31;;25621:20;25644:21;25662:2;25644:17;:21::i;:::-;25621:44;;25676:24;25703:25;25721:6;25703:17;:25::i;:::-;25676:52;;25741:60;25762:8;25772:4;25778:2;25782:3;25787:7;25796:4;25741:20;:60::i;:::-;25814:19;25836:9;:13;25846:2;25836:13;;;;;;;;;;;:19;25850:4;25836:19;;;;;;;;;;;;;;;;25814:41;;25889:6;25874:11;:21;;25866:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26014:6;26000:11;:20;25978:9;:13;25988:2;25978:13;;;;;;;;;;;:19;25992:4;25978:19;;;;;;;;;;;;;;;:42;;;;26063:6;26042:9;:13;26052:2;26042:13;;;;;;;;;;;:17;26056:2;26042:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26118:2;26087:46;;26112:4;26087:46;;26102:8;26087:46;;;26122:2;26126:6;26087:46;;;;;;;:::i;:::-;;;;;;;;26146:59;26166:8;26176:4;26182:2;26186:3;26191:7;26200:4;26146:19;:59::i;:::-;26218:68;26249:8;26259:4;26265:2;26269;26273:6;26281:4;26218:30;:68::i;:::-;25489:805;;;;25320:974;;;;;:::o;31264:808::-;31407:1;31391:18;;:4;:18;;;31383:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31462:16;31481:12;:10;:12::i;:::-;31462:31;;31504:20;31527:21;31545:2;31527:17;:21::i;:::-;31504:44;;31559:24;31586:25;31604:6;31586:17;:25::i;:::-;31559:52;;31624:66;31645:8;31655:4;31669:1;31673:3;31678:7;31624:66;;;;;;;;;;;;:20;:66::i;:::-;31703:19;31725:9;:13;31735:2;31725:13;;;;;;;;;;;:19;31739:4;31725:19;;;;;;;;;;;;;;;;31703:41;;31778:6;31763:11;:21;;31755:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;31897:6;31883:11;:20;31861:9;:13;31871:2;31861:13;;;;;;;;;;;:19;31875:4;31861:19;;;;;;;;;;;;;;;:42;;;;31971:1;31932:54;;31957:4;31932:54;;31947:8;31932:54;;;31975:2;31979:6;31932:54;;;;;;;:::i;:::-;;;;;;;;31999:65;32019:8;32029:4;32043:1;32047:3;32052:7;31999:65;;;;;;;;;;;;:19;:65::i;:::-;31372:700;;;;31264:808;;;:::o;43272:204::-;43357:4;43396:32;43381:47;;;:11;:47;;;;:87;;;;43432:36;43456:11;43432:23;:36::i;:::-;43381:87;43374:94;;43272:204;;;:::o;44414:505::-;44503:22;44511:4;44517:7;44503;:22::i;:::-;44498:414;;44691:41;44719:7;44691:41;;44729:2;44691:19;:41::i;:::-;44805:38;44833:4;44825:13;;44840:2;44805:19;:38::i;:::-;44596:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44542:358;;;;;;;;;;;:::i;:::-;;;;;;;;44498:414;44414:505;;:::o;59124:330::-;50035:8;:6;:8::i;:::-;50034:9;50026:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;59380:66:::1;59407:8;59417:4;59423:2;59427:3;59432:7;59441:4;59380:26;:66::i;:::-;59124:330:::0;;;;;;:::o;35849:220::-;;;;;;;:::o;36829:813::-;37069:15;:2;:13;;;:15::i;:::-;37065:570;;;37122:2;37105:43;;;37149:8;37159:4;37165:3;37170:7;37179:4;37105:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37101:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;37497:6;37490:14;;;;;;;;;;;:::i;:::-;;;;;;;;37101:523;;;37546:62;;;;;;;;;;:::i;:::-;;;;;;;;37101:523;37278:48;;;37266:60;;;:8;:60;;;;37262:159;;37351:50;;;;;;;;;;:::i;:::-;;;;;;;;37262:159;37185:251;37065:570;36829:813;;;;;;:::o;37650:198::-;37716:16;37745:22;37784:1;37770:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37745:41;;37808:7;37797:5;37803:1;37797:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;37835:5;37828:12;;;37650:198;;;:::o;36077:744::-;36292:15;:2;:13;;;:15::i;:::-;36288:526;;;36345:2;36328:38;;;36367:8;36377:4;36383:2;36387:6;36395:4;36328:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36324:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;36676:6;36669:14;;;;;;;;;;;:::i;:::-;;;;;;;;36324:479;;;36725:62;;;;;;;;;;:::i;:::-;;;;;;;;36324:479;36462:43;;;36450:55;;;:8;:55;;;;36446:154;;36530:50;;;;;;;;;;:::i;:::-;;;;;;;;36446:154;36401:214;36288:526;36077:744;;;;;;:::o;21194:310::-;21296:4;21348:26;21333:41;;;:11;:41;;;;:110;;;;21406:37;21391:52;;;:11;:52;;;;21333:110;:163;;;;21460:36;21484:11;21460:23;:36::i;:::-;21333:163;21313:183;;21194:310;;;:::o;19749:451::-;19824:13;19850:19;19895:1;19886:6;19882:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;19872:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19850:47;;19908:15;:6;19915:1;19908:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;19934;:6;19941:1;19934:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;19965:9;19990:1;19981:6;19977:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;19965:26;;19960:135;19997:1;19993;:5;19960:135;;;20032:12;20053:3;20045:5;:11;20032:25;;;;;;;:::i;:::-;;;;;20020:6;20027:1;20020:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;20082:1;20072:11;;;;;20000:3;;;;:::i;:::-;;;19960:135;;;;20122:1;20113:5;:10;20105:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;20185:6;20171:21;;;19749:451;;;;:::o;55846:515::-;56085:66;56112:8;56122:4;56128:2;56132:3;56137:7;56146:4;56085:26;:66::i;:::-;56188:5;56172:21;;:6;:12;56179:4;56172:12;;;;;;;;;;;;;;;;;;;;;;;;;:21;;;:58;;;;56197:33;54351:23;56217:12;:10;:12::i;:::-;56197:7;:33::i;:::-;56172:58;56164:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;56305:5;56280:30;;:15;:21;56296:4;56280:21;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;56272:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;55846:515;;;;;;:::o;9161:326::-;9221:4;9478:1;9456:7;:19;;;:23;9449:30;;9161:326;;;:::o;18004:157::-;18089:4;18128:25;18113:40;;;:11;:40;;;;18106:47;;18004:157;;;:::o;52937:931::-;53176:66;53203:8;53213:4;53219:2;53223:3;53228:7;53237:4;53176:26;:66::i;:::-;53275:1;53259:18;;:4;:18;;;53255:160;;53299:9;53294:110;53318:3;:10;53314:1;:14;53294:110;;;53378:7;53386:1;53378:10;;;;;;;;:::i;:::-;;;;;;;;53354:12;:20;53367:3;53371:1;53367:6;;;;;;;;:::i;:::-;;;;;;;;53354:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;53330:3;;;;:::i;:::-;;;53294:110;;;;53255:160;53445:1;53431:16;;:2;:16;;;53427:434;;53469:9;53464:386;53488:3;:10;53484:1;:14;53464:386;;;53524:10;53537:3;53541:1;53537:6;;;;;;;;:::i;:::-;;;;;;;;53524:19;;53562:14;53579:7;53587:1;53579:10;;;;;;;;:::i;:::-;;;;;;;;53562:27;;53608:14;53625:12;:16;53638:2;53625:16;;;;;;;;;;;;53608:33;;53678:6;53668;:16;;53660:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;53809:6;53800;:15;53781:12;:16;53794:2;53781:16;;;;;;;;;;;:34;;;;53505:345;;;53500:3;;;;:::i;:::-;;;53464:386;;;;53427:434;52937:931;;;;;;:::o;34673:221::-;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:117::-;3322:1;3319;3312:12;3336:117;3445:1;3442;3435:12;3459:102;3500:6;3551:2;3547:7;3542:2;3535:5;3531:14;3527:28;3517:38;;3459:102;;;:::o;3567:180::-;3615:77;3612:1;3605:88;3712:4;3709:1;3702:15;3736:4;3733:1;3726:15;3753:281;3836:27;3858:4;3836:27;:::i;:::-;3828:6;3824:40;3966:6;3954:10;3951:22;3930:18;3918:10;3915:34;3912:62;3909:88;;;3977:18;;:::i;:::-;3909:88;4017:10;4013:2;4006:22;3796:238;3753:281;;:::o;4040:129::-;4074:6;4101:20;;:::i;:::-;4091:30;;4130:33;4158:4;4150:6;4130:33;:::i;:::-;4040:129;;;:::o;4175:308::-;4237:4;4327:18;4319:6;4316:30;4313:56;;;4349:18;;:::i;:::-;4313:56;4387:29;4409:6;4387:29;:::i;:::-;4379:37;;4471:4;4465;4461:15;4453:23;;4175:308;;;:::o;4489:146::-;4586:6;4581:3;4576;4563:30;4627:1;4618:6;4613:3;4609:16;4602:27;4489:146;;;:::o;4641:425::-;4719:5;4744:66;4760:49;4802:6;4760:49;:::i;:::-;4744:66;:::i;:::-;4735:75;;4833:6;4826:5;4819:21;4871:4;4864:5;4860:16;4909:3;4900:6;4895:3;4891:16;4888:25;4885:112;;;4916:79;;:::i;:::-;4885:112;5006:54;5053:6;5048:3;5043;5006:54;:::i;:::-;4725:341;4641:425;;;;;:::o;5086:340::-;5142:5;5191:3;5184:4;5176:6;5172:17;5168:27;5158:122;;5199:79;;:::i;:::-;5158:122;5316:6;5303:20;5341:79;5416:3;5408:6;5401:4;5393:6;5389:17;5341:79;:::i;:::-;5332:88;;5148:278;5086:340;;;;:::o;5432:509::-;5501:6;5550:2;5538:9;5529:7;5525:23;5521:32;5518:119;;;5556:79;;:::i;:::-;5518:119;5704:1;5693:9;5689:17;5676:31;5734:18;5726:6;5723:30;5720:117;;;5756:79;;:::i;:::-;5720:117;5861:63;5916:7;5907:6;5896:9;5892:22;5861:63;:::i;:::-;5851:73;;5647:287;5432:509;;;;:::o;5947:99::-;5999:6;6033:5;6027:12;6017:22;;5947:99;;;:::o;6052:169::-;6136:11;6170:6;6165:3;6158:19;6210:4;6205:3;6201:14;6186:29;;6052:169;;;;:::o;6227:246::-;6308:1;6318:113;6332:6;6329:1;6326:13;6318:113;;;6417:1;6412:3;6408:11;6402:18;6398:1;6393:3;6389:11;6382:39;6354:2;6351:1;6347:10;6342:15;;6318:113;;;6465:1;6456:6;6451:3;6447:16;6440:27;6289:184;6227:246;;;:::o;6479:377::-;6567:3;6595:39;6628:5;6595:39;:::i;:::-;6650:71;6714:6;6709:3;6650:71;:::i;:::-;6643:78;;6730:65;6788:6;6783:3;6776:4;6769:5;6765:16;6730:65;:::i;:::-;6820:29;6842:6;6820:29;:::i;:::-;6815:3;6811:39;6804:46;;6571:285;6479:377;;;;:::o;6862:313::-;6975:4;7013:2;7002:9;6998:18;6990:26;;7062:9;7056:4;7052:20;7048:1;7037:9;7033:17;7026:47;7090:78;7163:4;7154:6;7090:78;:::i;:::-;7082:86;;6862:313;;;;:::o;7181:329::-;7240:6;7289:2;7277:9;7268:7;7264:23;7260:32;7257:119;;;7295:79;;:::i;:::-;7257:119;7415:1;7440:53;7485:7;7476:6;7465:9;7461:22;7440:53;:::i;:::-;7430:63;;7386:117;7181:329;;;;:::o;7516:::-;7575:6;7624:2;7612:9;7603:7;7599:23;7595:32;7592:119;;;7630:79;;:::i;:::-;7592:119;7750:1;7775:53;7820:7;7811:6;7800:9;7796:22;7775:53;:::i;:::-;7765:63;;7721:117;7516:329;;;;:::o;7851:311::-;7928:4;8018:18;8010:6;8007:30;8004:56;;;8040:18;;:::i;:::-;8004:56;8090:4;8082:6;8078:17;8070:25;;8150:4;8144;8140:15;8132:23;;7851:311;;;:::o;8168:117::-;8277:1;8274;8267:12;8308:710;8404:5;8429:81;8445:64;8502:6;8445:64;:::i;:::-;8429:81;:::i;:::-;8420:90;;8530:5;8559:6;8552:5;8545:21;8593:4;8586:5;8582:16;8575:23;;8646:4;8638:6;8634:17;8626:6;8622:30;8675:3;8667:6;8664:15;8661:122;;;8694:79;;:::i;:::-;8661:122;8809:6;8792:220;8826:6;8821:3;8818:15;8792:220;;;8901:3;8930:37;8963:3;8951:10;8930:37;:::i;:::-;8925:3;8918:50;8997:4;8992:3;8988:14;8981:21;;8868:144;8852:4;8847:3;8843:14;8836:21;;8792:220;;;8796:21;8410:608;;8308:710;;;;;:::o;9041:370::-;9112:5;9161:3;9154:4;9146:6;9142:17;9138:27;9128:122;;9169:79;;:::i;:::-;9128:122;9286:6;9273:20;9311:94;9401:3;9393:6;9386:4;9378:6;9374:17;9311:94;:::i;:::-;9302:103;;9118:293;9041:370;;;;:::o;9417:307::-;9478:4;9568:18;9560:6;9557:30;9554:56;;;9590:18;;:::i;:::-;9554:56;9628:29;9650:6;9628:29;:::i;:::-;9620:37;;9712:4;9706;9702:15;9694:23;;9417:307;;;:::o;9730:423::-;9807:5;9832:65;9848:48;9889:6;9848:48;:::i;:::-;9832:65;:::i;:::-;9823:74;;9920:6;9913:5;9906:21;9958:4;9951:5;9947:16;9996:3;9987:6;9982:3;9978:16;9975:25;9972:112;;;10003:79;;:::i;:::-;9972:112;10093:54;10140:6;10135:3;10130;10093:54;:::i;:::-;9813:340;9730:423;;;;;:::o;10172:338::-;10227:5;10276:3;10269:4;10261:6;10257:17;10253:27;10243:122;;10284:79;;:::i;:::-;10243:122;10401:6;10388:20;10426:78;10500:3;10492:6;10485:4;10477:6;10473:17;10426:78;:::i;:::-;10417:87;;10233:277;10172:338;;;;:::o;10516:1363::-;10661:6;10669;10677;10685;10734:3;10722:9;10713:7;10709:23;10705:33;10702:120;;;10741:79;;:::i;:::-;10702:120;10861:1;10886:53;10931:7;10922:6;10911:9;10907:22;10886:53;:::i;:::-;10876:63;;10832:117;11016:2;11005:9;11001:18;10988:32;11047:18;11039:6;11036:30;11033:117;;;11069:79;;:::i;:::-;11033:117;11174:78;11244:7;11235:6;11224:9;11220:22;11174:78;:::i;:::-;11164:88;;10959:303;11329:2;11318:9;11314:18;11301:32;11360:18;11352:6;11349:30;11346:117;;;11382:79;;:::i;:::-;11346:117;11487:78;11557:7;11548:6;11537:9;11533:22;11487:78;:::i;:::-;11477:88;;11272:303;11642:2;11631:9;11627:18;11614:32;11673:18;11665:6;11662:30;11659:117;;;11695:79;;:::i;:::-;11659:117;11800:62;11854:7;11845:6;11834:9;11830:22;11800:62;:::i;:::-;11790:72;;11585:287;10516:1363;;;;;;;:::o;11885:1509::-;12039:6;12047;12055;12063;12071;12120:3;12108:9;12099:7;12095:23;12091:33;12088:120;;;12127:79;;:::i;:::-;12088:120;12247:1;12272:53;12317:7;12308:6;12297:9;12293:22;12272:53;:::i;:::-;12262:63;;12218:117;12374:2;12400:53;12445:7;12436:6;12425:9;12421:22;12400:53;:::i;:::-;12390:63;;12345:118;12530:2;12519:9;12515:18;12502:32;12561:18;12553:6;12550:30;12547:117;;;12583:79;;:::i;:::-;12547:117;12688:78;12758:7;12749:6;12738:9;12734:22;12688:78;:::i;:::-;12678:88;;12473:303;12843:2;12832:9;12828:18;12815:32;12874:18;12866:6;12863:30;12860:117;;;12896:79;;:::i;:::-;12860:117;13001:78;13071:7;13062:6;13051:9;13047:22;13001:78;:::i;:::-;12991:88;;12786:303;13156:3;13145:9;13141:19;13128:33;13188:18;13180:6;13177:30;13174:117;;;13210:79;;:::i;:::-;13174:117;13315:62;13369:7;13360:6;13349:9;13345:22;13315:62;:::i;:::-;13305:72;;13099:288;11885:1509;;;;;;;;:::o;13400:77::-;13437:7;13466:5;13455:16;;13400:77;;;:::o;13483:122::-;13556:24;13574:5;13556:24;:::i;:::-;13549:5;13546:35;13536:63;;13595:1;13592;13585:12;13536:63;13483:122;:::o;13611:139::-;13657:5;13695:6;13682:20;13673:29;;13711:33;13738:5;13711:33;:::i;:::-;13611:139;;;;:::o;13756:474::-;13824:6;13832;13881:2;13869:9;13860:7;13856:23;13852:32;13849:119;;;13887:79;;:::i;:::-;13849:119;14007:1;14032:53;14077:7;14068:6;14057:9;14053:22;14032:53;:::i;:::-;14022:63;;13978:117;14134:2;14160:53;14205:7;14196:6;14185:9;14181:22;14160:53;:::i;:::-;14150:63;;14105:118;13756:474;;;;;:::o;14236:311::-;14313:4;14403:18;14395:6;14392:30;14389:56;;;14425:18;;:::i;:::-;14389:56;14475:4;14467:6;14463:17;14455:25;;14535:4;14529;14525:15;14517:23;;14236:311;;;:::o;14570:710::-;14666:5;14691:81;14707:64;14764:6;14707:64;:::i;:::-;14691:81;:::i;:::-;14682:90;;14792:5;14821:6;14814:5;14807:21;14855:4;14848:5;14844:16;14837:23;;14908:4;14900:6;14896:17;14888:6;14884:30;14937:3;14929:6;14926:15;14923:122;;;14956:79;;:::i;:::-;14923:122;15071:6;15054:220;15088:6;15083:3;15080:15;15054:220;;;15163:3;15192:37;15225:3;15213:10;15192:37;:::i;:::-;15187:3;15180:50;15259:4;15254:3;15250:14;15243:21;;15130:144;15114:4;15109:3;15105:14;15098:21;;15054:220;;;15058:21;14672:608;;14570:710;;;;;:::o;15303:370::-;15374:5;15423:3;15416:4;15408:6;15404:17;15400:27;15390:122;;15431:79;;:::i;:::-;15390:122;15548:6;15535:20;15573:94;15663:3;15655:6;15648:4;15640:6;15636:17;15573:94;:::i;:::-;15564:103;;15380:293;15303:370;;;;:::o;15679:894::-;15797:6;15805;15854:2;15842:9;15833:7;15829:23;15825:32;15822:119;;;15860:79;;:::i;:::-;15822:119;16008:1;15997:9;15993:17;15980:31;16038:18;16030:6;16027:30;16024:117;;;16060:79;;:::i;:::-;16024:117;16165:78;16235:7;16226:6;16215:9;16211:22;16165:78;:::i;:::-;16155:88;;15951:302;16320:2;16309:9;16305:18;16292:32;16351:18;16343:6;16340:30;16337:117;;;16373:79;;:::i;:::-;16337:117;16478:78;16548:7;16539:6;16528:9;16524:22;16478:78;:::i;:::-;16468:88;;16263:303;15679:894;;;;;:::o;16579:114::-;16646:6;16680:5;16674:12;16664:22;;16579:114;;;:::o;16699:184::-;16798:11;16832:6;16827:3;16820:19;16872:4;16867:3;16863:14;16848:29;;16699:184;;;;:::o;16889:132::-;16956:4;16979:3;16971:11;;17009:4;17004:3;17000:14;16992:22;;16889:132;;;:::o;17027:108::-;17104:24;17122:5;17104:24;:::i;:::-;17099:3;17092:37;17027:108;;:::o;17141:179::-;17210:10;17231:46;17273:3;17265:6;17231:46;:::i;:::-;17309:4;17304:3;17300:14;17286:28;;17141:179;;;;:::o;17326:113::-;17396:4;17428;17423:3;17419:14;17411:22;;17326:113;;;:::o;17475:732::-;17594:3;17623:54;17671:5;17623:54;:::i;:::-;17693:86;17772:6;17767:3;17693:86;:::i;:::-;17686:93;;17803:56;17853:5;17803:56;:::i;:::-;17882:7;17913:1;17898:284;17923:6;17920:1;17917:13;17898:284;;;17999:6;17993:13;18026:63;18085:3;18070:13;18026:63;:::i;:::-;18019:70;;18112:60;18165:6;18112:60;:::i;:::-;18102:70;;17958:224;17945:1;17942;17938:9;17933:14;;17898:284;;;17902:14;18198:3;18191:10;;17599:608;;;17475:732;;;;:::o;18213:373::-;18356:4;18394:2;18383:9;18379:18;18371:26;;18443:9;18437:4;18433:20;18429:1;18418:9;18414:17;18407:47;18471:108;18574:4;18565:6;18471:108;:::i;:::-;18463:116;;18213:373;;;;:::o;18592:1039::-;18719:6;18727;18735;18784:2;18772:9;18763:7;18759:23;18755:32;18752:119;;;18790:79;;:::i;:::-;18752:119;18910:1;18935:53;18980:7;18971:6;18960:9;18956:22;18935:53;:::i;:::-;18925:63;;18881:117;19065:2;19054:9;19050:18;19037:32;19096:18;19088:6;19085:30;19082:117;;;19118:79;;:::i;:::-;19082:117;19223:78;19293:7;19284:6;19273:9;19269:22;19223:78;:::i;:::-;19213:88;;19008:303;19378:2;19367:9;19363:18;19350:32;19409:18;19401:6;19398:30;19395:117;;;19431:79;;:::i;:::-;19395:117;19536:78;19606:7;19597:6;19586:9;19582:22;19536:78;:::i;:::-;19526:88;;19321:303;18592:1039;;;;;:::o;19637:943::-;19732:6;19740;19748;19756;19805:3;19793:9;19784:7;19780:23;19776:33;19773:120;;;19812:79;;:::i;:::-;19773:120;19932:1;19957:53;20002:7;19993:6;19982:9;19978:22;19957:53;:::i;:::-;19947:63;;19903:117;20059:2;20085:53;20130:7;20121:6;20110:9;20106:22;20085:53;:::i;:::-;20075:63;;20030:118;20187:2;20213:53;20258:7;20249:6;20238:9;20234:22;20213:53;:::i;:::-;20203:63;;20158:118;20343:2;20332:9;20328:18;20315:32;20374:18;20366:6;20363:30;20360:117;;;20396:79;;:::i;:::-;20360:117;20501:62;20555:7;20546:6;20535:9;20531:22;20501:62;:::i;:::-;20491:72;;20286:287;19637:943;;;;;;;:::o;20586:116::-;20656:21;20671:5;20656:21;:::i;:::-;20649:5;20646:32;20636:60;;20692:1;20689;20682:12;20636:60;20586:116;:::o;20708:133::-;20751:5;20789:6;20776:20;20767:29;;20805:30;20829:5;20805:30;:::i;:::-;20708:133;;;;:::o;20847:468::-;20912:6;20920;20969:2;20957:9;20948:7;20944:23;20940:32;20937:119;;;20975:79;;:::i;:::-;20937:119;21095:1;21120:53;21165:7;21156:6;21145:9;21141:22;21120:53;:::i;:::-;21110:63;;21066:117;21222:2;21248:50;21290:7;21281:6;21270:9;21266:22;21248:50;:::i;:::-;21238:60;;21193:115;20847:468;;;;;:::o;21321:329::-;21380:6;21429:2;21417:9;21408:7;21404:23;21400:32;21397:119;;;21435:79;;:::i;:::-;21397:119;21555:1;21580:53;21625:7;21616:6;21605:9;21601:22;21580:53;:::i;:::-;21570:63;;21526:117;21321:329;;;;:::o;21656:118::-;21743:24;21761:5;21743:24;:::i;:::-;21738:3;21731:37;21656:118;;:::o;21780:222::-;21873:4;21911:2;21900:9;21896:18;21888:26;;21924:71;21992:1;21981:9;21977:17;21968:6;21924:71;:::i;:::-;21780:222;;;;:::o;22008:474::-;22076:6;22084;22133:2;22121:9;22112:7;22108:23;22104:32;22101:119;;;22139:79;;:::i;:::-;22101:119;22259:1;22284:53;22329:7;22320:6;22309:9;22305:22;22284:53;:::i;:::-;22274:63;;22230:117;22386:2;22412:53;22457:7;22448:6;22437:9;22433:22;22412:53;:::i;:::-;22402:63;;22357:118;22008:474;;;;;:::o;22488:1089::-;22592:6;22600;22608;22616;22624;22673:3;22661:9;22652:7;22648:23;22644:33;22641:120;;;22680:79;;:::i;:::-;22641:120;22800:1;22825:53;22870:7;22861:6;22850:9;22846:22;22825:53;:::i;:::-;22815:63;;22771:117;22927:2;22953:53;22998:7;22989:6;22978:9;22974:22;22953:53;:::i;:::-;22943:63;;22898:118;23055:2;23081:53;23126:7;23117:6;23106:9;23102:22;23081:53;:::i;:::-;23071:63;;23026:118;23183:2;23209:53;23254:7;23245:6;23234:9;23230:22;23209:53;:::i;:::-;23199:63;;23154:118;23339:3;23328:9;23324:19;23311:33;23371:18;23363:6;23360:30;23357:117;;;23393:79;;:::i;:::-;23357:117;23498:62;23552:7;23543:6;23532:9;23528:22;23498:62;:::i;:::-;23488:72;;23282:288;22488:1089;;;;;;;;:::o;23583:619::-;23660:6;23668;23676;23725:2;23713:9;23704:7;23700:23;23696:32;23693:119;;;23731:79;;:::i;:::-;23693:119;23851:1;23876:53;23921:7;23912:6;23901:9;23897:22;23876:53;:::i;:::-;23866:63;;23822:117;23978:2;24004:53;24049:7;24040:6;24029:9;24025:22;24004:53;:::i;:::-;23994:63;;23949:118;24106:2;24132:53;24177:7;24168:6;24157:9;24153:22;24132:53;:::i;:::-;24122:63;;24077:118;23583:619;;;;;:::o;24208:229::-;24348:34;24344:1;24336:6;24332:14;24325:58;24417:12;24412:2;24404:6;24400:15;24393:37;24208:229;:::o;24443:366::-;24585:3;24606:67;24670:2;24665:3;24606:67;:::i;:::-;24599:74;;24682:93;24771:3;24682:93;:::i;:::-;24800:2;24795:3;24791:12;24784:19;;24443:366;;;:::o;24815:419::-;24981:4;25019:2;25008:9;25004:18;24996:26;;25068:9;25062:4;25058:20;25054:1;25043:9;25039:17;25032:47;25096:131;25222:4;25096:131;:::i;:::-;25088:139;;24815:419;;;:::o;25240:180::-;25288:77;25285:1;25278:88;25385:4;25382:1;25375:15;25409:4;25406:1;25399:15;25426:320;25470:6;25507:1;25501:4;25497:12;25487:22;;25554:1;25548:4;25544:12;25575:18;25565:81;;25631:4;25623:6;25619:17;25609:27;;25565:81;25693:2;25685:6;25682:14;25662:18;25659:38;25656:84;;25712:18;;:::i;:::-;25656:84;25477:269;25426:320;;;:::o;25752:148::-;25854:11;25891:3;25876:18;;25752:148;;;;:::o;25906:141::-;25955:4;25978:3;25970:11;;26001:3;25998:1;25991:14;26035:4;26032:1;26022:18;26014:26;;25906:141;;;:::o;26077:874::-;26180:3;26217:5;26211:12;26246:36;26272:9;26246:36;:::i;:::-;26298:89;26380:6;26375:3;26298:89;:::i;:::-;26291:96;;26418:1;26407:9;26403:17;26434:1;26429:166;;;;26609:1;26604:341;;;;26396:549;;26429:166;26513:4;26509:9;26498;26494:25;26489:3;26482:38;26575:6;26568:14;26561:22;26553:6;26549:35;26544:3;26540:45;26533:52;;26429:166;;26604:341;26671:38;26703:5;26671:38;:::i;:::-;26731:1;26745:154;26759:6;26756:1;26753:13;26745:154;;;26833:7;26827:14;26823:1;26818:3;26814:11;26807:35;26883:1;26874:7;26870:15;26859:26;;26781:4;26778:1;26774:12;26769:17;;26745:154;;;26928:6;26923:3;26919:16;26912:23;;26611:334;;26396:549;;26184:767;;26077:874;;;;:::o;26957:390::-;27063:3;27091:39;27124:5;27091:39;:::i;:::-;27146:89;27228:6;27223:3;27146:89;:::i;:::-;27139:96;;27244:65;27302:6;27297:3;27290:4;27283:5;27279:16;27244:65;:::i;:::-;27334:6;27329:3;27325:16;27318:23;;27067:280;26957:390;;;;:::o;27353:155::-;27493:7;27489:1;27481:6;27477:14;27470:31;27353:155;:::o;27514:400::-;27674:3;27695:84;27777:1;27772:3;27695:84;:::i;:::-;27688:91;;27788:93;27877:3;27788:93;:::i;:::-;27906:1;27901:3;27897:11;27890:18;;27514:400;;;:::o;27920:695::-;28198:3;28220:92;28308:3;28299:6;28220:92;:::i;:::-;28213:99;;28329:95;28420:3;28411:6;28329:95;:::i;:::-;28322:102;;28441:148;28585:3;28441:148;:::i;:::-;28434:155;;28606:3;28599:10;;27920:695;;;;;:::o;28621:237::-;28761:34;28757:1;28749:6;28745:14;28738:58;28830:20;28825:2;28817:6;28813:15;28806:45;28621:237;:::o;28864:366::-;29006:3;29027:67;29091:2;29086:3;29027:67;:::i;:::-;29020:74;;29103:93;29192:3;29103:93;:::i;:::-;29221:2;29216:3;29212:12;29205:19;;28864:366;;;:::o;29236:419::-;29402:4;29440:2;29429:9;29425:18;29417:26;;29489:9;29483:4;29479:20;29475:1;29464:9;29460:17;29453:47;29517:131;29643:4;29517:131;:::i;:::-;29509:139;;29236:419;;;:::o;29661:234::-;29801:34;29797:1;29789:6;29785:14;29778:58;29870:17;29865:2;29857:6;29853:15;29846:42;29661:234;:::o;29901:366::-;30043:3;30064:67;30128:2;30123:3;30064:67;:::i;:::-;30057:74;;30140:93;30229:3;30140:93;:::i;:::-;30258:2;30253:3;30249:12;30242:19;;29901:366;;;:::o;30273:419::-;30439:4;30477:2;30466:9;30462:18;30454:26;;30526:9;30520:4;30516:20;30512:1;30501:9;30497:17;30490:47;30554:131;30680:4;30554:131;:::i;:::-;30546:139;;30273:419;;;:::o;30698:228::-;30838:34;30834:1;30826:6;30822:14;30815:58;30907:11;30902:2;30894:6;30890:15;30883:36;30698:228;:::o;30932:366::-;31074:3;31095:67;31159:2;31154:3;31095:67;:::i;:::-;31088:74;;31171:93;31260:3;31171:93;:::i;:::-;31289:2;31284:3;31280:12;31273:19;;30932:366;;;:::o;31304:419::-;31470:4;31508:2;31497:9;31493:18;31485:26;;31557:9;31551:4;31547:20;31543:1;31532:9;31528:17;31521:47;31585:131;31711:4;31585:131;:::i;:::-;31577:139;;31304:419;;;:::o;31729:180::-;31777:77;31774:1;31767:88;31874:4;31871:1;31864:15;31898:4;31895:1;31888:15;31915:180;31963:77;31960:1;31953:88;32060:4;32057:1;32050:15;32084:4;32081:1;32074:15;32101:233;32140:3;32163:24;32181:5;32163:24;:::i;:::-;32154:33;;32209:66;32202:5;32199:77;32196:103;;32279:18;;:::i;:::-;32196:103;32326:1;32319:5;32315:13;32308:20;;32101:233;;;:::o;32340:228::-;32480:34;32476:1;32468:6;32464:14;32457:58;32549:11;32544:2;32536:6;32532:15;32525:36;32340:228;:::o;32574:366::-;32716:3;32737:67;32801:2;32796:3;32737:67;:::i;:::-;32730:74;;32813:93;32902:3;32813:93;:::i;:::-;32931:2;32926:3;32922:12;32915:19;;32574:366;;;:::o;32946:419::-;33112:4;33150:2;33139:9;33135:18;33127:26;;33199:9;33193:4;33189:20;33185:1;33174:9;33170:17;33163:47;33227:131;33353:4;33227:131;:::i;:::-;33219:139;;32946:419;;;:::o;33371:93::-;33408:6;33455:2;33450;33443:5;33439:14;33435:23;33425:33;;33371:93;;;:::o;33470:107::-;33514:8;33564:5;33558:4;33554:16;33533:37;;33470:107;;;;:::o;33583:393::-;33652:6;33702:1;33690:10;33686:18;33725:97;33755:66;33744:9;33725:97;:::i;:::-;33843:39;33873:8;33862:9;33843:39;:::i;:::-;33831:51;;33915:4;33911:9;33904:5;33900:21;33891:30;;33964:4;33954:8;33950:19;33943:5;33940:30;33930:40;;33659:317;;33583:393;;;;;:::o;33982:60::-;34010:3;34031:5;34024:12;;33982:60;;;:::o;34048:142::-;34098:9;34131:53;34149:34;34158:24;34176:5;34158:24;:::i;:::-;34149:34;:::i;:::-;34131:53;:::i;:::-;34118:66;;34048:142;;;:::o;34196:75::-;34239:3;34260:5;34253:12;;34196:75;;;:::o;34277:269::-;34387:39;34418:7;34387:39;:::i;:::-;34448:91;34497:41;34521:16;34497:41;:::i;:::-;34489:6;34482:4;34476:11;34448:91;:::i;:::-;34442:4;34435:105;34353:193;34277:269;;;:::o;34552:73::-;34597:3;34552:73;:::o;34631:189::-;34708:32;;:::i;:::-;34749:65;34807:6;34799;34793:4;34749:65;:::i;:::-;34684:136;34631:189;;:::o;34826:186::-;34886:120;34903:3;34896:5;34893:14;34886:120;;;34957:39;34994:1;34987:5;34957:39;:::i;:::-;34930:1;34923:5;34919:13;34910:22;;34886:120;;;34826:186;;:::o;35018:543::-;35119:2;35114:3;35111:11;35108:446;;;35153:38;35185:5;35153:38;:::i;:::-;35237:29;35255:10;35237:29;:::i;:::-;35227:8;35223:44;35420:2;35408:10;35405:18;35402:49;;;35441:8;35426:23;;35402:49;35464:80;35520:22;35538:3;35520:22;:::i;:::-;35510:8;35506:37;35493:11;35464:80;:::i;:::-;35123:431;;35108:446;35018:543;;;:::o;35567:117::-;35621:8;35671:5;35665:4;35661:16;35640:37;;35567:117;;;;:::o;35690:169::-;35734:6;35767:51;35815:1;35811:6;35803:5;35800:1;35796:13;35767:51;:::i;:::-;35763:56;35848:4;35842;35838:15;35828:25;;35741:118;35690:169;;;;:::o;35864:295::-;35940:4;36086:29;36111:3;36105:4;36086:29;:::i;:::-;36078:37;;36148:3;36145:1;36141:11;36135:4;36132:21;36124:29;;35864:295;;;;:::o;36164:1395::-;36281:37;36314:3;36281:37;:::i;:::-;36383:18;36375:6;36372:30;36369:56;;;36405:18;;:::i;:::-;36369:56;36449:38;36481:4;36475:11;36449:38;:::i;:::-;36534:67;36594:6;36586;36580:4;36534:67;:::i;:::-;36628:1;36652:4;36639:17;;36684:2;36676:6;36673:14;36701:1;36696:618;;;;37358:1;37375:6;37372:77;;;37424:9;37419:3;37415:19;37409:26;37400:35;;37372:77;37475:67;37535:6;37528:5;37475:67;:::i;:::-;37469:4;37462:81;37331:222;36666:887;;36696:618;36748:4;36744:9;36736:6;36732:22;36782:37;36814:4;36782:37;:::i;:::-;36841:1;36855:208;36869:7;36866:1;36863:14;36855:208;;;36948:9;36943:3;36939:19;36933:26;36925:6;36918:42;36999:1;36991:6;36987:14;36977:24;;37046:2;37035:9;37031:18;37018:31;;36892:4;36889:1;36885:12;36880:17;;36855:208;;;37091:6;37082:7;37079:19;37076:179;;;37149:9;37144:3;37140:19;37134:26;37192:48;37234:4;37226:6;37222:17;37211:9;37192:48;:::i;:::-;37184:6;37177:64;37099:156;37076:179;37301:1;37297;37289:6;37285:14;37281:22;37275:4;37268:36;36703:611;;;36666:887;;36256:1303;;;36164:1395;;:::o;37565:180::-;37613:77;37610:1;37603:88;37710:4;37707:1;37700:15;37734:4;37731:1;37724:15;37751:185;37791:1;37808:20;37826:1;37808:20;:::i;:::-;37803:25;;37842:20;37860:1;37842:20;:::i;:::-;37837:25;;37881:1;37871:35;;37886:18;;:::i;:::-;37871:35;37928:1;37925;37921:9;37916:14;;37751:185;;;;:::o;37942:194::-;37982:4;38002:20;38020:1;38002:20;:::i;:::-;37997:25;;38036:20;38054:1;38036:20;:::i;:::-;38031:25;;38080:1;38077;38073:9;38065:17;;38104:1;38098:4;38095:11;38092:37;;;38109:18;;:::i;:::-;38092:37;37942:194;;;;:::o;38142:176::-;38174:1;38191:20;38209:1;38191:20;:::i;:::-;38186:25;;38225:20;38243:1;38225:20;:::i;:::-;38220:25;;38264:1;38254:35;;38269:18;;:::i;:::-;38254:35;38310:1;38307;38303:9;38298:14;;38142:176;;;;:::o;38324:191::-;38364:3;38383:20;38401:1;38383:20;:::i;:::-;38378:25;;38417:20;38435:1;38417:20;:::i;:::-;38412:25;;38460:1;38457;38453:9;38446:16;;38481:3;38478:1;38475:10;38472:36;;;38488:18;;:::i;:::-;38472:36;38324:191;;;;:::o;38521:220::-;38661:34;38657:1;38649:6;38645:14;38638:58;38730:3;38725:2;38717:6;38713:15;38706:28;38521:220;:::o;38747:366::-;38889:3;38910:67;38974:2;38969:3;38910:67;:::i;:::-;38903:74;;38986:93;39075:3;38986:93;:::i;:::-;39104:2;39099:3;39095:12;39088:19;;38747:366;;;:::o;39119:419::-;39285:4;39323:2;39312:9;39308:18;39300:26;;39372:9;39366:4;39362:20;39358:1;39347:9;39343:17;39336:47;39400:131;39526:4;39400:131;:::i;:::-;39392:139;;39119:419;;;:::o;39544:227::-;39684:34;39680:1;39672:6;39668:14;39661:58;39753:10;39748:2;39740:6;39736:15;39729:35;39544:227;:::o;39777:366::-;39919:3;39940:67;40004:2;39999:3;39940:67;:::i;:::-;39933:74;;40016:93;40105:3;40016:93;:::i;:::-;40134:2;40129:3;40125:12;40118:19;;39777:366;;;:::o;40149:419::-;40315:4;40353:2;40342:9;40338:18;40330:26;;40402:9;40396:4;40392:20;40388:1;40377:9;40373:17;40366:47;40430:131;40556:4;40430:131;:::i;:::-;40422:139;;40149:419;;;:::o;40574:634::-;40795:4;40833:2;40822:9;40818:18;40810:26;;40882:9;40876:4;40872:20;40868:1;40857:9;40853:17;40846:47;40910:108;41013:4;41004:6;40910:108;:::i;:::-;40902:116;;41065:9;41059:4;41055:20;41050:2;41039:9;41035:18;41028:48;41093:108;41196:4;41187:6;41093:108;:::i;:::-;41085:116;;40574:634;;;;;:::o;41214:224::-;41354:34;41350:1;41342:6;41338:14;41331:58;41423:7;41418:2;41410:6;41406:15;41399:32;41214:224;:::o;41444:366::-;41586:3;41607:67;41671:2;41666:3;41607:67;:::i;:::-;41600:74;;41683:93;41772:3;41683:93;:::i;:::-;41801:2;41796:3;41792:12;41785:19;;41444:366;;;:::o;41816:419::-;41982:4;42020:2;42009:9;42005:18;41997:26;;42069:9;42063:4;42059:20;42055:1;42044:9;42040:17;42033:47;42097:131;42223:4;42097:131;:::i;:::-;42089:139;;41816:419;;;:::o;42241:229::-;42381:34;42377:1;42369:6;42365:14;42358:58;42450:12;42445:2;42437:6;42433:15;42426:37;42241:229;:::o;42476:366::-;42618:3;42639:67;42703:2;42698:3;42639:67;:::i;:::-;42632:74;;42715:93;42804:3;42715:93;:::i;:::-;42833:2;42828:3;42824:12;42817:19;;42476:366;;;:::o;42848:419::-;43014:4;43052:2;43041:9;43037:18;43029:26;;43101:9;43095:4;43091:20;43087:1;43076:9;43072:17;43065:47;43129:131;43255:4;43129:131;:::i;:::-;43121:139;;42848:419;;;:::o;43273:170::-;43413:22;43409:1;43401:6;43397:14;43390:46;43273:170;:::o;43449:366::-;43591:3;43612:67;43676:2;43671:3;43612:67;:::i;:::-;43605:74;;43688:93;43777:3;43688:93;:::i;:::-;43806:2;43801:3;43797:12;43790:19;;43449:366;;;:::o;43821:419::-;43987:4;44025:2;44014:9;44010:18;44002:26;;44074:9;44068:4;44064:20;44060:1;44049:9;44045:17;44038:47;44102:131;44228:4;44102:131;:::i;:::-;44094:139;;43821:419;;;:::o;44246:118::-;44333:24;44351:5;44333:24;:::i;:::-;44328:3;44321:37;44246:118;;:::o;44370:222::-;44463:4;44501:2;44490:9;44486:18;44478:26;;44514:71;44582:1;44571:9;44567:17;44558:6;44514:71;:::i;:::-;44370:222;;;;:::o;44598:::-;44738:34;44734:1;44726:6;44722:14;44715:58;44807:5;44802:2;44794:6;44790:15;44783:30;44598:222;:::o;44826:366::-;44968:3;44989:67;45053:2;45048:3;44989:67;:::i;:::-;44982:74;;45065:93;45154:3;45065:93;:::i;:::-;45183:2;45178:3;45174:12;45167:19;;44826:366;;;:::o;45198:419::-;45364:4;45402:2;45391:9;45387:18;45379:26;;45451:9;45445:4;45441:20;45437:1;45426:9;45422:17;45415:47;45479:131;45605:4;45479:131;:::i;:::-;45471:139;;45198:419;;;:::o;45623:223::-;45763:34;45759:1;45751:6;45747:14;45740:58;45832:6;45827:2;45819:6;45815:15;45808:31;45623:223;:::o;45852:366::-;45994:3;46015:67;46079:2;46074:3;46015:67;:::i;:::-;46008:74;;46091:93;46180:3;46091:93;:::i;:::-;46209:2;46204:3;46200:12;46193:19;;45852:366;;;:::o;46224:419::-;46390:4;46428:2;46417:9;46413:18;46405:26;;46477:9;46471:4;46467:20;46463:1;46452:9;46448:17;46441:47;46505:131;46631:4;46505:131;:::i;:::-;46497:139;;46224:419;;;:::o;46649:332::-;46770:4;46808:2;46797:9;46793:18;46785:26;;46821:71;46889:1;46878:9;46874:17;46865:6;46821:71;:::i;:::-;46902:72;46970:2;46959:9;46955:18;46946:6;46902:72;:::i;:::-;46649:332;;;;;:::o;46987:166::-;47127:18;47123:1;47115:6;47111:14;47104:42;46987:166;:::o;47159:366::-;47301:3;47322:67;47386:2;47381:3;47322:67;:::i;:::-;47315:74;;47398:93;47487:3;47398:93;:::i;:::-;47516:2;47511:3;47507:12;47500:19;;47159:366;;;:::o;47531:419::-;47697:4;47735:2;47724:9;47720:18;47712:26;;47784:9;47778:4;47774:20;47770:1;47759:9;47755:17;47748:47;47812:131;47938:4;47812:131;:::i;:::-;47804:139;;47531:419;;;:::o;47956:228::-;48096:34;48092:1;48084:6;48080:14;48073:58;48165:11;48160:2;48152:6;48148:15;48141:36;47956:228;:::o;48190:366::-;48332:3;48353:67;48417:2;48412:3;48353:67;:::i;:::-;48346:74;;48429:93;48518:3;48429:93;:::i;:::-;48547:2;48542:3;48538:12;48531:19;;48190:366;;;:::o;48562:419::-;48728:4;48766:2;48755:9;48751:18;48743:26;;48815:9;48809:4;48805:20;48801:1;48790:9;48786:17;48779:47;48843:131;48969:4;48843:131;:::i;:::-;48835:139;;48562:419;;;:::o;48987:173::-;49127:25;49123:1;49115:6;49111:14;49104:49;48987:173;:::o;49166:402::-;49326:3;49347:85;49429:2;49424:3;49347:85;:::i;:::-;49340:92;;49441:93;49530:3;49441:93;:::i;:::-;49559:2;49554:3;49550:12;49543:19;;49166:402;;;:::o;49574:167::-;49714:19;49710:1;49702:6;49698:14;49691:43;49574:167;:::o;49747:402::-;49907:3;49928:85;50010:2;50005:3;49928:85;:::i;:::-;49921:92;;50022:93;50111:3;50022:93;:::i;:::-;50140:2;50135:3;50131:12;50124:19;;49747:402;;;:::o;50155:967::-;50537:3;50559:148;50703:3;50559:148;:::i;:::-;50552:155;;50724:95;50815:3;50806:6;50724:95;:::i;:::-;50717:102;;50836:148;50980:3;50836:148;:::i;:::-;50829:155;;51001:95;51092:3;51083:6;51001:95;:::i;:::-;50994:102;;51113:3;51106:10;;50155:967;;;;;:::o;51128:98::-;51179:6;51213:5;51207:12;51197:22;;51128:98;;;:::o;51232:168::-;51315:11;51349:6;51344:3;51337:19;51389:4;51384:3;51380:14;51365:29;;51232:168;;;;:::o;51406:373::-;51492:3;51520:38;51552:5;51520:38;:::i;:::-;51574:70;51637:6;51632:3;51574:70;:::i;:::-;51567:77;;51653:65;51711:6;51706:3;51699:4;51692:5;51688:16;51653:65;:::i;:::-;51743:29;51765:6;51743:29;:::i;:::-;51738:3;51734:39;51727:46;;51496:283;51406:373;;;;:::o;51785:1053::-;52108:4;52146:3;52135:9;52131:19;52123:27;;52160:71;52228:1;52217:9;52213:17;52204:6;52160:71;:::i;:::-;52241:72;52309:2;52298:9;52294:18;52285:6;52241:72;:::i;:::-;52360:9;52354:4;52350:20;52345:2;52334:9;52330:18;52323:48;52388:108;52491:4;52482:6;52388:108;:::i;:::-;52380:116;;52543:9;52537:4;52533:20;52528:2;52517:9;52513:18;52506:48;52571:108;52674:4;52665:6;52571:108;:::i;:::-;52563:116;;52727:9;52721:4;52717:20;52711:3;52700:9;52696:19;52689:49;52755:76;52826:4;52817:6;52755:76;:::i;:::-;52747:84;;51785:1053;;;;;;;;:::o;52844:141::-;52900:5;52931:6;52925:13;52916:22;;52947:32;52973:5;52947:32;:::i;:::-;52844:141;;;;:::o;52991:349::-;53060:6;53109:2;53097:9;53088:7;53084:23;53080:32;53077:119;;;53115:79;;:::i;:::-;53077:119;53235:1;53260:63;53315:7;53306:6;53295:9;53291:22;53260:63;:::i;:::-;53250:73;;53206:127;52991:349;;;;:::o;53346:106::-;53390:8;53439:5;53434:3;53430:15;53409:36;;53346:106;;;:::o;53458:183::-;53493:3;53531:1;53513:16;53510:23;53507:128;;;53569:1;53566;53563;53548:23;53591:34;53622:1;53616:8;53591:34;:::i;:::-;53584:41;;53507:128;53458:183;:::o;53647:711::-;53686:3;53724:4;53706:16;53703:26;53732:5;53700:39;53761:20;;:::i;:::-;53836:1;53818:16;53814:24;53811:1;53805:4;53790:49;53869:4;53863:11;53968:16;53961:4;53953:6;53949:17;53946:39;53913:18;53905:6;53902:30;53886:113;53883:146;;;54014:5;;;;53883:146;54060:6;54054:4;54050:17;54096:3;54090:10;54123:18;54115:6;54112:30;54109:43;;;54145:5;;;;;;54109:43;54193:6;54186:4;54181:3;54177:14;54173:27;54252:1;54234:16;54230:24;54224:4;54220:35;54215:3;54212:44;54209:57;;;54259:5;;;;;;;54209:57;54276;54324:6;54318:4;54314:17;54306:6;54302:30;54296:4;54276:57;:::i;:::-;54349:3;54342:10;;53690:668;;;;;53647:711;;:::o;54364:239::-;54504:34;54500:1;54492:6;54488:14;54481:58;54573:22;54568:2;54560:6;54556:15;54549:47;54364:239;:::o;54609:366::-;54751:3;54772:67;54836:2;54831:3;54772:67;:::i;:::-;54765:74;;54848:93;54937:3;54848:93;:::i;:::-;54966:2;54961:3;54957:12;54950:19;;54609:366;;;:::o;54981:419::-;55147:4;55185:2;55174:9;55170:18;55162:26;;55234:9;55228:4;55224:20;55220:1;55209:9;55205:17;55198:47;55262:131;55388:4;55262:131;:::i;:::-;55254:139;;54981:419;;;:::o;55406:227::-;55546:34;55542:1;55534:6;55530:14;55523:58;55615:10;55610:2;55602:6;55598:15;55591:35;55406:227;:::o;55639:366::-;55781:3;55802:67;55866:2;55861:3;55802:67;:::i;:::-;55795:74;;55878:93;55967:3;55878:93;:::i;:::-;55996:2;55991:3;55987:12;55980:19;;55639:366;;;:::o;56011:419::-;56177:4;56215:2;56204:9;56200:18;56192:26;;56264:9;56258:4;56254:20;56250:1;56239:9;56235:17;56228:47;56292:131;56418:4;56292:131;:::i;:::-;56284:139;;56011:419;;;:::o;56436:751::-;56659:4;56697:3;56686:9;56682:19;56674:27;;56711:71;56779:1;56768:9;56764:17;56755:6;56711:71;:::i;:::-;56792:72;56860:2;56849:9;56845:18;56836:6;56792:72;:::i;:::-;56874;56942:2;56931:9;56927:18;56918:6;56874:72;:::i;:::-;56956;57024:2;57013:9;57009:18;57000:6;56956:72;:::i;:::-;57076:9;57070:4;57066:20;57060:3;57049:9;57045:19;57038:49;57104:76;57175:4;57166:6;57104:76;:::i;:::-;57096:84;;56436:751;;;;;;;;:::o;57193:410::-;57233:7;57256:20;57274:1;57256:20;:::i;:::-;57251:25;;57290:20;57308:1;57290:20;:::i;:::-;57285:25;;57345:1;57342;57338:9;57367:30;57385:11;57367:30;:::i;:::-;57356:41;;57546:1;57537:7;57533:15;57530:1;57527:22;57507:1;57500:9;57480:83;57457:139;;57576:18;;:::i;:::-;57457:139;57241:362;57193:410;;;;:::o;57609:171::-;57648:3;57671:24;57689:5;57671:24;:::i;:::-;57662:33;;57717:4;57710:5;57707:15;57704:41;;57725:18;;:::i;:::-;57704:41;57772:1;57765:5;57761:13;57754:20;;57609:171;;;:::o;57786:182::-;57926:34;57922:1;57914:6;57910:14;57903:58;57786:182;:::o;57974:366::-;58116:3;58137:67;58201:2;58196:3;58137:67;:::i;:::-;58130:74;;58213:93;58302:3;58213:93;:::i;:::-;58331:2;58326:3;58322:12;58315:19;;57974:366;;;:::o;58346:419::-;58512:4;58550:2;58539:9;58535:18;58527:26;;58599:9;58593:4;58589:20;58585:1;58574:9;58570:17;58563:47;58627:131;58753:4;58627:131;:::i;:::-;58619:139;;58346:419;;;:::o;58771:176::-;58911:28;58907:1;58899:6;58895:14;58888:52;58771:176;:::o;58953:366::-;59095:3;59116:67;59180:2;59175:3;59116:67;:::i;:::-;59109:74;;59192:93;59281:3;59192:93;:::i;:::-;59310:2;59305:3;59301:12;59294:19;;58953:366;;;:::o;59325:419::-;59491:4;59529:2;59518:9;59514:18;59506:26;;59578:9;59572:4;59568:20;59564:1;59553:9;59549:17;59542:47;59606:131;59732:4;59606:131;:::i;:::-;59598:139;;59325:419;;;:::o;59750:225::-;59890:34;59886:1;59878:6;59874:14;59867:58;59959:8;59954:2;59946:6;59942:15;59935:33;59750:225;:::o;59981:366::-;60123:3;60144:67;60208:2;60203:3;60144:67;:::i;:::-;60137:74;;60220:93;60309:3;60220:93;:::i;:::-;60338:2;60333:3;60329:12;60322:19;;59981:366;;;:::o;60353:419::-;60519:4;60557:2;60546:9;60542:18;60534:26;;60606:9;60600:4;60596:20;60592:1;60581:9;60577:17;60570:47;60634:131;60760:4;60634:131;:::i;:::-;60626:139;;60353:419;;;:::o;60778:227::-;60918:34;60914:1;60906:6;60902:14;60895:58;60987:10;60982:2;60974:6;60970:15;60963:35;60778:227;:::o;61011:366::-;61153:3;61174:67;61238:2;61233:3;61174:67;:::i;:::-;61167:74;;61250:93;61339:3;61250:93;:::i;:::-;61368:2;61363:3;61359:12;61352:19;;61011:366;;;:::o;61383:419::-;61549:4;61587:2;61576:9;61572:18;61564:26;;61636:9;61630:4;61626:20;61622:1;61611:9;61607:17;61600:47;61664:131;61790:4;61664:131;:::i;:::-;61656:139;;61383:419;;;:::o
Swarm Source
ipfs://4aa54b93522ee7090ef2b6057c2a82a019afc2ea781ddaaf7b49b709c8b21e47
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.