Polygon Sponsored slots available. Book your slot here!
Contract Overview
[ Download CSV Export ]
Contract Name:
hungryBarn
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-12-25 */ // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.0 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. 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. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Supply.sol) pragma solidity ^0.8.0; /** * @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) { _totalSupply[ids[i]] -= amounts[i]; } } } } // File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Burnable.sol) pragma solidity ^0.8.0; /** * @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); } } // File: contracts/barn.sol pragma solidity ^0.8.10; contract hungryBarn is ERC1155, Ownable, ERC1155Burnable, ERC1155Supply, ReentrancyGuard { string public name; string public symbol; mapping (uint256 => string) private _uris; uint256 maxMints = 6000; bool public mintPaused = false; bool public burnApprovalToggled = false; event burnEvent(address indexed _from, uint256 id, uint256 value); constructor() ERC1155("Hungry Barn") { name = "Hungry Barn"; symbol = "HUNGRYBARN"; } function mint(address to, uint256 id, uint256 amount, bytes memory data) external onlyOwner { require(!mintPaused); require(amount + totalSupply(id) <= maxMints); _mint(to, id, amount, data); } function batchMint(address _to,uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data) external onlyOwner { require(!mintPaused); for (uint256 i = 0; i < _ids.length; i++) { require(_amounts[i] + totalSupply(_ids[i]) <= maxMints); } _mintBatch(_to, _ids, _amounts, _data); } function singleBurn(address from, uint256 id, uint256 amount) external nonReentrant() { if (burnApprovalToggled){ require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not approved" ); } else { require(from == _msgSender(), "caller is not owner"); } require(balanceOf(from, id) > amount); _burn(from, id, amount); emit burnEvent(from, id, amount); } function multiBurn(address from, uint256[] memory ids, uint256[] memory amts) external nonReentrant() { if (burnApprovalToggled){ require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not approved" ); } else { require(from == _msgSender(), "caller is not owner"); } for (uint i = 0; i < ids.length; i++){ require(balanceOf(from, ids[i]) > amts[i]); _burn(from, ids[i], amts[i]); emit burnEvent(from, ids[i], amts[i]); } } function mintPause(bool _flag) external onlyOwner { mintPaused = _flag; } // The following functions are overrides required by Solidity. function uri(uint256 tokenId) override public view returns (string memory) { return (_uris[tokenId]); } function setTokenUri(uint256 tokenId, string memory myUri) public onlyOwner { _uris[tokenId] = myUri; } function setMaxMints(uint256 newMax) public onlyOwner { maxMints = newMax; } function burnApprovalToggle(bool _flag) public onlyOwner { burnApprovalToggled = _flag; } function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal override(ERC1155, ERC1155Supply) { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); } }
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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"burnEvent","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","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":"bool","name":"_flag","type":"bool"}],"name":"burnApprovalToggle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnApprovalToggled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"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"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"mintPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amts","type":"uint256[]"}],"name":"multiBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","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":"uint256","name":"newMax","type":"uint256"}],"name":"setMaxMints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"myUri","type":"string"}],"name":"setTokenUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"singleBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052611770600955600a805461ffff191690553480156200002257600080fd5b5060408051808201909152600b81526a243ab733b93c902130b93760a91b60208201526200005081620000d0565b506200005c33620000e9565b600160055560408051808201909152600b8082526a243ab733b93c902130b93760a91b602090920191825262000095916006916200013b565b5060408051808201909152600a80825269242aa723a92ca120a92760b11b6020909201918252620000c9916007916200013b565b506200021e565b8051620000e59060029060208401906200013b565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200014990620001e1565b90600052602060002090601f0160209004810192826200016d5760008555620001b8565b82601f106200018857805160ff1916838001178555620001b8565b82800160010185558215620001b8579182015b82811115620001b85782518255916020019190600101906200019b565b50620001c6929150620001ca565b5090565b5b80821115620001c65760008155600101620001cb565b600181811c90821680620001f657607f821691505b602082108114156200021857634e487b7160e01b600052602260045260246000fd5b50919050565b61285b806200022e6000396000f3fe608060405234801561001057600080fd5b50600436106101a85760003560e01c806379c9cb7b116100f9578063bd85b03911610097578063e985e9c511610071578063e985e9c51461039d578063f242432a146103d9578063f2fde38b146103ec578063f5298aca146103ff57600080fd5b8063bd85b03914610357578063c9e0912814610377578063cf6b67361461038a57600080fd5b806395d89b41116100d357806395d89b4114610316578063a22cb4651461031e578063a9fb1be114610331578063b48ab8b61461034457600080fd5b806379c9cb7b146102db5780637e4831d3146102ee5780638da5cb5b146102fb57600080fd5b80634e1273f41161016657806357f7789e1161014057806357f7789e1461029a5780636b20c454146102ad578063715018a6146102c0578063731133e9146102c857600080fd5b80634e1273f4146102455780634f558e7914610265578063545949461461028757600080fd5b8062fdd58e146101ad57806301ffc9a7146101d357806306fdde03146101f65780630b386a5c1461020b5780630e89341c1461021d5780632eb2c2d614610230575b600080fd5b6101c06101bb366004611c97565b610412565b6040519081526020015b60405180910390f35b6101e66101e1366004611cd7565b6104a9565b60405190151581526020016101ca565b6101fe6104fb565b6040516101ca9190611d48565b600a546101e690610100900460ff1681565b6101fe61022b366004611d5b565b610589565b61024361023e366004611eca565b61062b565b005b610258610253366004611f74565b6106c2565b6040516101ca919061207a565b6101e6610273366004611d5b565b600090815260046020526040902054151590565b61024361029536600461208d565b6107ec565b6102436102a8366004612101565b610a2d565b6102436102bb36600461208d565b610a7b565b610243610abe565b6102436102d6366004612152565b610af4565b6102436102e9366004611d5b565b610b67565b600a546101e69060ff1681565b6003546040516001600160a01b0390911681526020016101ca565b6101fe610b96565b61024361032c3660046121c3565b610ba3565b61024361033f3660046121f6565b610bb2565b610243610352366004612211565b610bf6565b6101c0610365366004611d5b565b60009081526004602052604090205490565b61024361038536600461229e565b610cbc565b6102436103983660046121f6565b610e4d565b6101e66103ab3660046122d1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6102436103e73660046122fb565b610e8a565b6102436103fa366004612360565b610ecf565b61024361040d36600461229e565b610f6a565b60006001600160a01b0383166104835760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806104da57506001600160e01b031982166303a24d0760e21b145b806104f557506301ffc9a760e01b6001600160e01b03198316145b92915050565b600680546105089061237b565b80601f01602080910402602001604051908101604052809291908181526020018280546105349061237b565b80156105815780601f1061055657610100808354040283529160200191610581565b820191906000526020600020905b81548152906001019060200180831161056457829003601f168201915b505050505081565b60008181526008602052604090208054606091906105a69061237b565b80601f01602080910402602001604051908101604052809291908181526020018280546105d29061237b565b801561061f5780601f106105f45761010080835404028352916020019161061f565b820191906000526020600020905b81548152906001019060200180831161060257829003601f168201915b50505050509050919050565b6001600160a01b038516331480610647575061064785336103ab565b6106ae5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161047a565b6106bb8585858585610fad565b5050505050565b606081518351146107275760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161047a565b6000835167ffffffffffffffff81111561074357610743611d74565b60405190808252806020026020018201604052801561076c578160200160208202803683370190505b50905060005b84518110156107e4576107b7858281518110610790576107906123b6565b60200260200101518583815181106107aa576107aa6123b6565b6020026020010151610412565b8282815181106107c9576107c96123b6565b60209081029190910101526107dd816123e2565b9050610772565b509392505050565b6002600554141561083f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161047a565b6002600555600a54610100900460ff16156108c1576001600160a01b038316331480610870575061087083336103ab565b6108bc5760405162461bcd60e51b815260206004820152601f60248201527f455243313135353a2063616c6c6572206973206e6f7420617070726f76656400604482015260640161047a565b61090f565b6001600160a01b038316331461090f5760405162461bcd60e51b815260206004820152601360248201527231b0b63632b91034b9903737ba1037bbb732b960691b604482015260640161047a565b60005b8251811015610a225781818151811061092d5761092d6123b6565b602002602001015161094b858584815181106107aa576107aa6123b6565b1161095557600080fd5b6109928484838151811061096b5761096b6123b6565b6020026020010151848481518110610985576109856123b6565b6020026020010151611157565b836001600160a01b03167fc6eb8c7e95858f15f4a59de1f4a035cf14d2e5558b7b4a63cab9806e945123b08483815181106109cf576109cf6123b6565b60200260200101518484815181106109e9576109e96123b6565b6020026020010151604051610a08929190918252602082015260400190565b60405180910390a280610a1a816123e2565b915050610912565b505060016005555050565b6003546001600160a01b03163314610a575760405162461bcd60e51b815260040161047a906123fd565b60008281526008602090815260409091208251610a7692840190611be2565b505050565b6001600160a01b038316331480610a975750610a9783336103ab565b610ab35760405162461bcd60e51b815260040161047a90612432565b610a76838383611258565b6003546001600160a01b03163314610ae85760405162461bcd60e51b815260040161047a906123fd565b610af260006113e6565b565b6003546001600160a01b03163314610b1e5760405162461bcd60e51b815260040161047a906123fd565b600a5460ff1615610b2e57600080fd5b600954600084815260046020526040902054610b4a908461247b565b1115610b5557600080fd5b610b6184848484611438565b50505050565b6003546001600160a01b03163314610b915760405162461bcd60e51b815260040161047a906123fd565b600955565b600780546105089061237b565b610bae33838361150e565b5050565b6003546001600160a01b03163314610bdc5760405162461bcd60e51b815260040161047a906123fd565b600a80549115156101000261ff0019909216919091179055565b6003546001600160a01b03163314610c205760405162461bcd60e51b815260040161047a906123fd565b600a5460ff1615610c3057600080fd5b60005b8351811015610caf57600954610c6e858381518110610c5457610c546123b6565b602002602001015160009081526004602052604090205490565b848381518110610c8057610c806123b6565b6020026020010151610c92919061247b565b1115610c9d57600080fd5b80610ca7816123e2565b915050610c33565b50610b61848484846115ef565b60026005541415610d0f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161047a565b6002600555600a54610100900460ff1615610d91576001600160a01b038316331480610d405750610d4083336103ab565b610d8c5760405162461bcd60e51b815260206004820152601f60248201527f455243313135353a2063616c6c6572206973206e6f7420617070726f76656400604482015260640161047a565b610ddf565b6001600160a01b0383163314610ddf5760405162461bcd60e51b815260206004820152601360248201527231b0b63632b91034b9903737ba1037bbb732b960691b604482015260640161047a565b80610dea8484610412565b11610df457600080fd5b610dff838383611157565b60408051838152602081018390526001600160a01b038516917fc6eb8c7e95858f15f4a59de1f4a035cf14d2e5558b7b4a63cab9806e945123b0910160405180910390a25050600160055550565b6003546001600160a01b03163314610e775760405162461bcd60e51b815260040161047a906123fd565b600a805460ff1916911515919091179055565b6001600160a01b038516331480610ea65750610ea685336103ab565b610ec25760405162461bcd60e51b815260040161047a90612432565b6106bb8585858585611749565b6003546001600160a01b03163314610ef95760405162461bcd60e51b815260040161047a906123fd565b6001600160a01b038116610f5e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161047a565b610f67816113e6565b50565b6001600160a01b038316331480610f865750610f8683336103ab565b610fa25760405162461bcd60e51b815260040161047a90612432565b610a76838383611157565b8151835114610fce5760405162461bcd60e51b815260040161047a90612493565b6001600160a01b038416610ff45760405162461bcd60e51b815260040161047a906124db565b33611003818787878787611866565b60005b84518110156110e9576000858281518110611023576110236123b6565b602002602001015190506000858381518110611041576110416123b6565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156110915760405162461bcd60e51b815260040161047a90612520565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906110ce90849061247b565b92505081905550505050806110e2906123e2565b9050611006565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161113992919061256a565b60405180910390a461114f818787878787611874565b505050505050565b6001600160a01b03831661117d5760405162461bcd60e51b815260040161047a90612598565b336111ac8185600061118e876119d0565b611197876119d0565b60405180602001604052806000815250611866565b6000838152602081815260408083206001600160a01b0388168452909152902054828110156111ed5760405162461bcd60e51b815260040161047a906125db565b6000848152602081815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b6001600160a01b03831661127e5760405162461bcd60e51b815260040161047a90612598565b805182511461129f5760405162461bcd60e51b815260040161047a90612493565b60003390506112c281856000868660405180602001604052806000815250611866565b60005b83518110156113875760008482815181106112e2576112e26123b6565b602002602001015190506000848381518110611300576113006123b6565b602090810291909101810151600084815280835260408082206001600160a01b038c1683529093529190912054909150818110156113505760405162461bcd60e51b815260040161047a906125db565b6000928352602083815260408085206001600160a01b038b168652909152909220910390558061137f816123e2565b9150506112c5565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516113d892919061256a565b60405180910390a450505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03841661145e5760405162461bcd60e51b815260040161047a9061261f565b3361147e8160008761146f886119d0565b611478886119d0565b87611866565b6000848152602081815260408083206001600160a01b0389168452909152812080548592906114ae90849061247b565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46106bb81600087878787611a1b565b816001600160a01b0316836001600160a01b031614156115825760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161047a565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166116155760405162461bcd60e51b815260040161047a9061261f565b81518351146116365760405162461bcd60e51b815260040161047a90612493565b3361164681600087878787611866565b60005b84518110156116e157838181518110611664576116646123b6565b6020026020010151600080878481518110611681576116816123b6565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b0316815260200190815260200160002060008282546116c9919061247b565b909155508190506116d9816123e2565b915050611649565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161173292919061256a565b60405180910390a46106bb81600087878787611874565b6001600160a01b03841661176f5760405162461bcd60e51b815260040161047a906124db565b3361177f81878761146f886119d0565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156117c05760405162461bcd60e51b815260040161047a90612520565b6000858152602081815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906117fd90849061247b565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461185d828888888888611a1b565b50505050505050565b61114f868686868686611ad6565b6001600160a01b0384163b1561114f5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906118b89089908990889088908890600401612660565b6020604051808303816000875af19250505080156118f3575060408051601f3d908101601f191682019092526118f0918101906126be565b60015b6119a0576118ff6126db565b806308c379a0141561193957506119146126f7565b8061191f575061193b565b8060405162461bcd60e51b815260040161047a9190611d48565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161047a565b6001600160e01b0319811663bc197c8160e01b1461185d5760405162461bcd60e51b815260040161047a90612781565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611a0a57611a0a6123b6565b602090810291909101015292915050565b6001600160a01b0384163b1561114f5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611a5f90899089908890889088906004016127c9565b6020604051808303816000875af1925050508015611a9a575060408051601f3d908101601f19168201909252611a97918101906126be565b60015b611aa6576118ff6126db565b6001600160e01b0319811663f23a6e6160e01b1461185d5760405162461bcd60e51b815260040161047a90612781565b6001600160a01b038516611b5d5760005b8351811015611b5b57828181518110611b0257611b026123b6565b602002602001015160046000868481518110611b2057611b206123b6565b602002602001015181526020019081526020016000206000828254611b45919061247b565b90915550611b549050816123e2565b9050611ae7565b505b6001600160a01b03841661114f5760005b835181101561185d57828181518110611b8957611b896123b6565b602002602001015160046000868481518110611ba757611ba76123b6565b602002602001015181526020019081526020016000206000828254611bcc919061280e565b90915550611bdb9050816123e2565b9050611b6e565b828054611bee9061237b565b90600052602060002090601f016020900481019282611c105760008555611c56565b82601f10611c2957805160ff1916838001178555611c56565b82800160010185558215611c56579182015b82811115611c56578251825591602001919060010190611c3b565b50611c62929150611c66565b5090565b5b80821115611c625760008155600101611c67565b80356001600160a01b0381168114611c9257600080fd5b919050565b60008060408385031215611caa57600080fd5b611cb383611c7b565b946020939093013593505050565b6001600160e01b031981168114610f6757600080fd5b600060208284031215611ce957600080fd5b8135611cf481611cc1565b9392505050565b6000815180845260005b81811015611d2157602081850181015186830182015201611d05565b81811115611d33576000602083870101525b50601f01601f19169290920160200192915050565b602081526000611cf46020830184611cfb565b600060208284031215611d6d57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff81118282101715611db057611db0611d74565b6040525050565b600067ffffffffffffffff821115611dd157611dd1611d74565b5060051b60200190565b600082601f830112611dec57600080fd5b81356020611df982611db7565b604051611e068282611d8a565b83815260059390931b8501820192828101915086841115611e2657600080fd5b8286015b84811015611e415780358352918301918301611e2a565b509695505050505050565b600067ffffffffffffffff831115611e6657611e66611d74565b604051611e7d601f8501601f191660200182611d8a565b809150838152848484011115611e9257600080fd5b83836020830137600060208583010152509392505050565b600082601f830112611ebb57600080fd5b611cf483833560208501611e4c565b600080600080600060a08688031215611ee257600080fd5b611eeb86611c7b565b9450611ef960208701611c7b565b9350604086013567ffffffffffffffff80821115611f1657600080fd5b611f2289838a01611ddb565b94506060880135915080821115611f3857600080fd5b611f4489838a01611ddb565b93506080880135915080821115611f5a57600080fd5b50611f6788828901611eaa565b9150509295509295909350565b60008060408385031215611f8757600080fd5b823567ffffffffffffffff80821115611f9f57600080fd5b818501915085601f830112611fb357600080fd5b81356020611fc082611db7565b604051611fcd8282611d8a565b83815260059390931b8501820192828101915089841115611fed57600080fd5b948201945b838610156120125761200386611c7b565b82529482019490820190611ff2565b9650508601359250508082111561202857600080fd5b5061203585828601611ddb565b9150509250929050565b600081518084526020808501945080840160005b8381101561206f57815187529582019590820190600101612053565b509495945050505050565b602081526000611cf4602083018461203f565b6000806000606084860312156120a257600080fd5b6120ab84611c7b565b9250602084013567ffffffffffffffff808211156120c857600080fd5b6120d487838801611ddb565b935060408601359150808211156120ea57600080fd5b506120f786828701611ddb565b9150509250925092565b6000806040838503121561211457600080fd5b82359150602083013567ffffffffffffffff81111561213257600080fd5b8301601f8101851361214357600080fd5b61203585823560208401611e4c565b6000806000806080858703121561216857600080fd5b61217185611c7b565b93506020850135925060408501359150606085013567ffffffffffffffff81111561219b57600080fd5b6121a787828801611eaa565b91505092959194509250565b80358015158114611c9257600080fd5b600080604083850312156121d657600080fd5b6121df83611c7b565b91506121ed602084016121b3565b90509250929050565b60006020828403121561220857600080fd5b611cf4826121b3565b6000806000806080858703121561222757600080fd5b61223085611c7b565b9350602085013567ffffffffffffffff8082111561224d57600080fd5b61225988838901611ddb565b9450604087013591508082111561226f57600080fd5b61227b88838901611ddb565b9350606087013591508082111561229157600080fd5b506121a787828801611eaa565b6000806000606084860312156122b357600080fd5b6122bc84611c7b565b95602085013595506040909401359392505050565b600080604083850312156122e457600080fd5b6122ed83611c7b565b91506121ed60208401611c7b565b600080600080600060a0868803121561231357600080fd5b61231c86611c7b565b945061232a60208701611c7b565b93506040860135925060608601359150608086013567ffffffffffffffff81111561235457600080fd5b611f6788828901611eaa565b60006020828403121561237257600080fd5b611cf482611c7b565b600181811c9082168061238f57607f821691505b602082108114156123b057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156123f6576123f66123cc565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b6000821982111561248e5761248e6123cc565b500190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60408152600061257d604083018561203f565b828103602084015261258f818561203f565b95945050505050565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6001600160a01b0386811682528516602082015260a06040820181905260009061268c9083018661203f565b828103606084015261269e818661203f565b905082810360808401526126b28185611cfb565b98975050505050505050565b6000602082840312156126d057600080fd5b8151611cf481611cc1565b600060033d11156126f45760046000803e5060005160e01c5b90565b600060443d10156127055790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561273557505050505090565b828501915081518181111561274d5750505050505090565b843d87010160208285010111156127675750505050505090565b61277660208286010187611d8a565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061280390830184611cfb565b979650505050505050565b600082821015612820576128206123cc565b50039056fea2646970667358221220d055163ce283d16484f9ea05ed4f9e78a1c47264af3aa79d3e0074b237245e3a64736f6c634300080a0033
Deployed ByteCode Sourcemap
42228:3377:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25737:231;;;;;;:::i;:::-;;:::i;:::-;;;597:25:1;;;585:2;570:18;25737:231:0;;;;;;;;24760:310;;;;;;:::i;:::-;;:::i;:::-;;;1184:14:1;;1177:22;1159:41;;1147:2;1132:18;24760:310:0;1019:187:1;42326:18:0;;;:::i;:::-;;;;;;;:::i;42493:39::-;;;;;;;;;;;;44852:117;;;;;;:::i;:::-;;:::i;27676:442::-;;;;;;:::i;:::-;;:::i;:::-;;26134:524;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;40176:122::-;;;;;;:::i;:::-;40233:4;40054:16;;;:12;:16;;;;;;-1:-1:-1;;;40176:122:0;43935:744;;;;;;:::i;:::-;;:::i;44977:117::-;;;;;;:::i;:::-;;:::i;41795:353::-;;;;;;:::i;:::-;;:::i;5365:103::-;;;:::i;42731:249::-;;;;;;:::i;:::-;;:::i;45102:90::-;;;;;;:::i;:::-;;:::i;42456:30::-;;;;;;;;;4714:87;4787:6;;4714:87;;-1:-1:-1;;;;;4787:6:0;;;8845:51:1;;8833:2;8818:18;4714:87:0;8699:203:1;42351:20:0;;;:::i;26731:155::-;;;;;;:::i;:::-;;:::i;45200:103::-;;;;;;:::i;:::-;;:::i;42988:376::-;;;;;;:::i;:::-;;:::i;39965:113::-;;;;;;:::i;:::-;40027:7;40054:16;;;:12;:16;;;;;;;39965:113;43372:555;;;;;;:::i;:::-;;:::i;44687:87::-;;;;;;:::i;:::-;;:::i;26958:168::-;;;;;;:::i;:::-;-1:-1:-1;;;;;27081:27:0;;;27057:4;27081:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;26958:168;27198:401;;;;;;:::i;:::-;;:::i;5623:201::-;;;;;;:::i;:::-;;:::i;41466:321::-;;;;;;:::i;:::-;;:::i;25737:231::-;25823:7;-1:-1:-1;;;;;25851:21:0;;25843:77;;;;-1:-1:-1;;;25843:77:0;;11985:2:1;25843:77:0;;;11967:21:1;12024:2;12004:18;;;11997:30;12063:34;12043:18;;;12036:62;-1:-1:-1;;;12114:18:1;;;12107:41;12165:19;;25843:77:0;;;;;;;;;-1:-1:-1;25938:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;25938:22:0;;;;;;;;;;;;25737:231::o;24760:310::-;24862:4;-1:-1:-1;;;;;;24899:41:0;;-1:-1:-1;;;24899:41:0;;:110;;-1:-1:-1;;;;;;;24957:52:0;;-1:-1:-1;;;24957:52:0;24899:110;:163;;;-1:-1:-1;;;;;;;;;;16224:40:0;;;25026:36;24879:183;24760:310;-1:-1:-1;;24760:310:0:o;42326:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44852:117::-;44946:14;;;;:5;:14;;;;;44938:23;;44912:13;;44946:14;44938:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44852:117;;;:::o;27676:442::-;-1:-1:-1;;;;;27909:20:0;;3518:10;27909:20;;:60;;-1:-1:-1;27933:36:0;27950:4;3518:10;26958:168;:::i;27933:36::-;27887:160;;;;-1:-1:-1;;;27887:160:0;;12782:2:1;27887:160:0;;;12764:21:1;12821:2;12801:18;;;12794:30;12860:34;12840:18;;;12833:62;-1:-1:-1;;;12911:18:1;;;12904:48;12969:19;;27887:160:0;12580:414:1;27887:160:0;28058:52;28081:4;28087:2;28091:3;28096:7;28105:4;28058:22;:52::i;:::-;27676:442;;;;;:::o;26134:524::-;26290:16;26351:3;:10;26332:8;:15;:29;26324:83;;;;-1:-1:-1;;;26324:83:0;;13201:2:1;26324:83:0;;;13183:21:1;13240:2;13220:18;;;13213:30;13279:34;13259:18;;;13252:62;-1:-1:-1;;;13330:18:1;;;13323:39;13379:19;;26324:83:0;12999:405:1;26324:83:0;26420:30;26467:8;:15;26453:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26453:30:0;;26420:63;;26501:9;26496:122;26520:8;:15;26516:1;:19;26496:122;;;26576:30;26586:8;26595:1;26586:11;;;;;;;;:::i;:::-;;;;;;;26599:3;26603:1;26599:6;;;;;;;;:::i;:::-;;;;;;;26576:9;:30::i;:::-;26557:13;26571:1;26557:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;26537:3;;;:::i;:::-;;;26496:122;;;-1:-1:-1;26637:13:0;26134:524;-1:-1:-1;;;26134:524:0:o;43935:744::-;1812:1;2410:7;;:19;;2402:63;;;;-1:-1:-1;;;2402:63:0;;14015:2:1;2402:63:0;;;13997:21:1;14054:2;14034:18;;;14027:30;14093:33;14073:18;;;14066:61;14144:18;;2402:63:0;13813:355:1;2402:63:0;1812:1;2543:7;:18;44065:19:::1;::::0;::::1;::::0;::::1;;;44061:376;;;-1:-1:-1::0;;;;;44138:20:0;::::1;3518:10:::0;44138:20:::1;::::0;:60:::1;;-1:-1:-1::0;44162:36:0::1;44179:4:::0;3518:10;26958:168;:::i;44162:36::-:1;44108:170;;;::::0;-1:-1:-1;;;44108:170:0;;14375:2:1;44108:170:0::1;::::0;::::1;14357:21:1::0;14414:2;14394:18;;;14387:30;14453:33;14433:18;;;14426:61;14504:18;;44108:170:0::1;14173:355:1::0;44108:170:0::1;44061:376;;;-1:-1:-1::0;;;;;44352:20:0;::::1;3518:10:::0;44352:20:::1;44344:73;;;::::0;-1:-1:-1;;;44344:73:0;;14735:2:1;44344:73:0::1;::::0;::::1;14717:21:1::0;14774:2;14754:18;;;14747:30;-1:-1:-1;;;14793:18:1;;;14786:49;14852:18;;44344:73:0::1;14533:343:1::0;44344:73:0::1;44456:6;44451:217;44472:3;:10;44468:1;:14;44451:217;;;44541:4;44546:1;44541:7;;;;;;;;:::i;:::-;;;;;;;44515:23;44525:4;44531:3;44535:1;44531:6;;;;;;;;:::i;44515:23::-;:33;44507:42;;;::::0;::::1;;44568:28;44574:4;44580:3;44584:1;44580:6;;;;;;;;:::i;:::-;;;;;;;44588:4;44593:1;44588:7;;;;;;;;:::i;:::-;;;;;;;44568:5;:28::i;:::-;44630:4;-1:-1:-1::0;;;;;44620:32:0::1;;44636:3;44640:1;44636:6;;;;;;;;:::i;:::-;;;;;;;44644:4;44649:1;44644:7;;;;;;;;:::i;:::-;;;;;;;44620:32;;;;;;15055:25:1::0;;;15111:2;15096:18;;15089:34;15043:2;15028:18;;14881:248;44620:32:0::1;;;;;;;;44484:3:::0;::::1;::::0;::::1;:::i;:::-;;;;44451:217;;;-1:-1:-1::0;;1768:1:0;2722:7;:22;-1:-1:-1;;43935:744:0:o;44977:117::-;4787:6;;-1:-1:-1;;;;;4787:6:0;3518:10;4934:23;4926:68;;;;-1:-1:-1;;;4926:68:0;;;;;;;:::i;:::-;45064:14:::1;::::0;;;:5:::1;:14;::::0;;;;;;;:22;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;44977:117:::0;;:::o;41795:353::-;-1:-1:-1;;;;;41960:23:0;;3518:10;41960:23;;:66;;-1:-1:-1;41987:39:0;42004:7;3518:10;26958:168;:::i;41987:39::-;41938:157;;;;-1:-1:-1;;;41938:157:0;;;;;;;:::i;:::-;42108:32;42119:7;42128:3;42133:6;42108:10;:32::i;5365:103::-;4787:6;;-1:-1:-1;;;;;4787:6:0;3518:10;4934:23;4926:68;;;;-1:-1:-1;;;4926:68:0;;;;;;;:::i;:::-;5430:30:::1;5457:1;5430:18;:30::i;:::-;5365:103::o:0;42731:249::-;4787:6;;-1:-1:-1;;;;;4787:6:0;3518:10;4934:23;4926:68;;;;-1:-1:-1;;;4926:68:0;;;;;;;:::i;:::-;42867:10:::1;::::0;::::1;;42866:11;42858:20;;;::::0;::::1;;42925:8;::::0;40027:7;40054:16;;;:12;:16;;;;;;42897:24:::1;::::0;:6;:24:::1;:::i;:::-;:36;;42889:45;;;::::0;::::1;;42945:27;42951:2;42955;42959:6;42967:4;42945:5;:27::i;:::-;42731:249:::0;;;;:::o;45102:90::-;4787:6;;-1:-1:-1;;;;;4787:6:0;3518:10;4934:23;4926:68;;;;-1:-1:-1;;;4926:68:0;;;;;;;:::i;:::-;45167:8:::1;:17:::0;45102:90::o;42351:20::-;;;;;;;:::i;26731:155::-;26826:52;3518:10;26859:8;26869;26826:18;:52::i;:::-;26731:155;;:::o;45200:103::-;4787:6;;-1:-1:-1;;;;;4787:6:0;3518:10;4934:23;4926:68;;;;-1:-1:-1;;;4926:68:0;;;;;;;:::i;:::-;45268:19:::1;:27:::0;;;::::1;;;;-1:-1:-1::0;;45268:27:0;;::::1;::::0;;;::::1;::::0;;45200:103::o;42988:376::-;4787:6;;-1:-1:-1;;;;;4787:6:0;3518:10;4934:23;4926:68;;;;-1:-1:-1;;;4926:68:0;;;;;;;:::i;:::-;43147:10:::1;::::0;::::1;;43146:11;43138:20;;;::::0;::::1;;43174:9;43169:133;43193:4;:11;43189:1;:15;43169:133;;;43281:8;;43257:20;43269:4;43274:1;43269:7;;;;;;;;:::i;:::-;;;;;;;40027::::0;40054:16;;;:12;:16;;;;;;;39965:113;43257:20:::1;43243:8;43252:1;43243:11;;;;;;;;:::i;:::-;;;;;;;:34;;;;:::i;:::-;:46;;43235:55;;;::::0;::::1;;43206:3:::0;::::1;::::0;::::1;:::i;:::-;;;;43169:133;;;;43318:38;43329:3;43334:4;43340:8;43350:5;43318:10;:38::i;43372:555::-:0;1812:1;2410:7;;:19;;2402:63;;;;-1:-1:-1;;;2402:63:0;;14015:2:1;2402:63:0;;;13997:21:1;14054:2;14034:18;;;14027:30;14093:33;14073:18;;;14066:61;14144:18;;2402:63:0;13813:355:1;2402:63:0;1812:1;2543:7;:18;43483:19:::1;::::0;::::1;::::0;::::1;;;43479:302;;;-1:-1:-1::0;;;;;43540:20:0;::::1;3518:10:::0;43540:20:::1;::::0;:60:::1;;-1:-1:-1::0;43564:36:0::1;43581:4:::0;3518:10;26958:168;:::i;43564:36::-:1;43518:142;;;::::0;-1:-1:-1;;;43518:142:0;;14375:2:1;43518:142:0::1;::::0;::::1;14357:21:1::0;14414:2;14394:18;;;14387:30;14453:33;14433:18;;;14426:61;14504:18;;43518:142:0::1;14173:355:1::0;43518:142:0::1;43479:302;;;-1:-1:-1::0;;;;;43712:20:0;::::1;3518:10:::0;43712:20:::1;43704:65;;;::::0;-1:-1:-1;;;43704:65:0;;14735:2:1;43704:65:0::1;::::0;::::1;14717:21:1::0;14774:2;14754:18;;;14747:30;-1:-1:-1;;;14793:18:1;;;14786:49;14852:18;;43704:65:0::1;14533:343:1::0;43704:65:0::1;43833:6;43811:19;43821:4;43827:2;43811:9;:19::i;:::-;:28;43803:37;;;::::0;::::1;;43853:23;43859:4;43865:2;43869:6;43853:5;:23::i;:::-;43892:27;::::0;;15055:25:1;;;15111:2;15096:18;;15089:34;;;-1:-1:-1;;;;;43892:27:0;::::1;::::0;::::1;::::0;15028:18:1;43892:27:0::1;;;;;;;-1:-1:-1::0;;1768:1:0;2722:7;:22;-1:-1:-1;43372:555:0:o;44687:87::-;4787:6;;-1:-1:-1;;;;;4787:6:0;3518:10;4934:23;4926:68;;;;-1:-1:-1;;;4926:68:0;;;;;;;:::i;:::-;44748:10:::1;:18:::0;;-1:-1:-1;;44748:18:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44687:87::o;27198:401::-;-1:-1:-1;;;;;27406:20:0;;3518:10;27406:20;;:60;;-1:-1:-1;27430:36:0;27447:4;3518:10;26958:168;:::i;27430:36::-;27384:151;;;;-1:-1:-1;;;27384:151:0;;;;;;;:::i;:::-;27546:45;27564:4;27570:2;27574;27578:6;27586:4;27546:17;:45::i;5623:201::-;4787:6;;-1:-1:-1;;;;;4787:6:0;3518:10;4934:23;4926:68;;;;-1:-1:-1;;;4926:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5712:22:0;::::1;5704:73;;;::::0;-1:-1:-1;;;5704:73:0;;16240:2:1;5704:73:0::1;::::0;::::1;16222:21:1::0;16279:2;16259:18;;;16252:30;16318:34;16298:18;;;16291:62;-1:-1:-1;;;16369:18:1;;;16362:36;16415:19;;5704:73:0::1;16038:402:1::0;5704:73:0::1;5788:28;5807:8;5788:18;:28::i;:::-;5623:201:::0;:::o;41466:321::-;-1:-1:-1;;;;;41606:23:0;;3518:10;41606:23;;:66;;-1:-1:-1;41633:39:0;41650:7;3518:10;26958:168;:::i;41633:39::-;41584:157;;;;-1:-1:-1;;;41584:157:0;;;;;;;:::i;:::-;41754:25;41760:7;41769:2;41773:5;41754;:25::i;29760:1074::-;29987:7;:14;29973:3;:10;:28;29965:81;;;;-1:-1:-1;;;29965:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30065:16:0;;30057:66;;;;-1:-1:-1;;;30057:66:0;;;;;;;:::i;:::-;3518:10;30180:60;3518:10;30211:4;30217:2;30221:3;30226:7;30235:4;30180:20;:60::i;:::-;30258:9;30253:421;30277:3;:10;30273:1;:14;30253:421;;;30309:10;30322:3;30326:1;30322:6;;;;;;;;:::i;:::-;;;;;;;30309:19;;30343:14;30360:7;30368:1;30360:10;;;;;;;;:::i;:::-;;;;;;;;;;;;30387:19;30409:13;;;;;;;;;;-1:-1:-1;;;;;30409:19:0;;;;;;;;;;;;30360:10;;-1:-1:-1;30451:21:0;;;;30443:76;;;;-1:-1:-1;;;30443:76:0;;;;;;;:::i;:::-;30563:9;:13;;;;;;;;;;;-1:-1:-1;;;;;30563:19:0;;;;;;;;;;30585:20;;;30563:42;;30635:17;;;;;;;:27;;30585:20;;30563:9;30635:27;;30585:20;;30635:27;:::i;:::-;;;;;;;;30294:380;;;30289:3;;;;:::i;:::-;;;30253:421;;;;30721:2;-1:-1:-1;;;;;30691:47:0;30715:4;-1:-1:-1;;;;;30691:47:0;30705:8;-1:-1:-1;;;;;30691:47:0;;30725:3;30730:7;30691:47;;;;;;;:::i;:::-;;;;;;;;30751:75;30787:8;30797:4;30803:2;30807:3;30812:7;30821:4;30751:35;:75::i;:::-;29954:880;29760:1074;;;;;:::o;34062:648::-;-1:-1:-1;;;;;34189:18:0;;34181:66;;;;-1:-1:-1;;;34181:66:0;;;;;;;:::i;:::-;3518:10;34304:102;3518:10;34335:4;34260:16;34353:21;34371:2;34353:17;:21::i;:::-;34376:25;34394:6;34376:17;:25::i;:::-;34304:102;;;;;;;;;;;;:20;:102::i;:::-;34419:19;34441:13;;;;;;;;;;;-1:-1:-1;;;;;34441:19:0;;;;;;;;;;34479:21;;;;34471:70;;;;-1:-1:-1;;;34471:70:0;;;;;;;:::i;:::-;34577:9;:13;;;;;;;;;;;-1:-1:-1;;;;;34577:19:0;;;;;;;;;;;;34599:20;;;34577:42;;34648:54;;15055:25:1;;;15096:18;;;15089:34;;;34577:19:0;;34648:54;;;;;;15028:18:1;34648:54:0;;;;;;;34170:540;;34062:648;;;:::o;34913:891::-;-1:-1:-1;;;;;35065:18:0;;35057:66;;;;-1:-1:-1;;;35057:66:0;;;;;;;:::i;:::-;35156:7;:14;35142:3;:10;:28;35134:81;;;;-1:-1:-1;;;35134:81:0;;;;;;;:::i;:::-;35228:16;3518:10;35228:31;;35272:66;35293:8;35303:4;35317:1;35321:3;35326:7;35272:66;;;;;;;;;;;;:20;:66::i;:::-;35356:9;35351:373;35375:3;:10;35371:1;:14;35351:373;;;35407:10;35420:3;35424:1;35420:6;;;;;;;;:::i;:::-;;;;;;;35407:19;;35441:14;35458:7;35466:1;35458:10;;;;;;;;:::i;:::-;;;;;;;;;;;;35485:19;35507:13;;;;;;;;;;-1:-1:-1;;;;;35507:19:0;;;;;;;;;;;;35458:10;;-1:-1:-1;35549:21:0;;;;35541:70;;;;-1:-1:-1;;;35541:70:0;;;;;;;:::i;:::-;35655:9;:13;;;;;;;;;;;-1:-1:-1;;;;;35655:19:0;;;;;;;;;;35677:20;;35655:42;;35387:3;;;;:::i;:::-;;;;35351:373;;;;35779:1;-1:-1:-1;;;;;35741:55:0;35765:4;-1:-1:-1;;;;;35741:55:0;35755:8;-1:-1:-1;;;;;35741:55:0;;35783:3;35788:7;35741:55;;;;;;;:::i;:::-;;;;;;;;35046:758;34913:891;;;:::o;5984:191::-;6077:6;;;-1:-1:-1;;;;;6094:17:0;;;-1:-1:-1;;;;;;6094:17:0;;;;;;;6127:40;;6077:6;;;6094:17;6077:6;;6127:40;;6058:16;;6127:40;6047:128;5984:191;:::o;32152:569::-;-1:-1:-1;;;;;32305:16:0;;32297:62;;;;-1:-1:-1;;;32297:62:0;;;;;;;:::i;:::-;3518:10;32416:102;3518:10;32372:16;32459:2;32463:21;32481:2;32463:17;:21::i;:::-;32486:25;32504:6;32486:17;:25::i;:::-;32513:4;32416:20;:102::i;:::-;32531:9;:13;;;;;;;;;;;-1:-1:-1;;;;;32531:17:0;;;;;;;;;:27;;32552:6;;32531:9;:27;;32552:6;;32531:27;:::i;:::-;;;;-1:-1:-1;;32574:52:0;;;15055:25:1;;;15111:2;15096:18;;15089:34;;;-1:-1:-1;;;;;32574:52:0;;;;32607:1;;32574:52;;;;;;15028:18:1;32574:52:0;;;;;;;32639:74;32670:8;32688:1;32692:2;32696;32700:6;32708:4;32639:30;:74::i;35946:331::-;36101:8;-1:-1:-1;;;;;36092:17:0;:5;-1:-1:-1;;;;;36092:17:0;;;36084:71;;;;-1:-1:-1;;;36084:71:0;;19554:2:1;36084:71:0;;;19536:21:1;19593:2;19573:18;;;19566:30;19632:34;19612:18;;;19605:62;-1:-1:-1;;;19683:18:1;;;19676:39;19732:19;;36084:71:0;19352:405:1;36084:71:0;-1:-1:-1;;;;;36166:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;36166:46:0;;;;;;;;;;36228:41;;1159::1;;;36228::0;;1132:18:1;36228:41:0;;;;;;;35946:331;;;:::o;33077:735::-;-1:-1:-1;;;;;33255:16:0;;33247:62;;;;-1:-1:-1;;;33247:62:0;;;;;;;:::i;:::-;33342:7;:14;33328:3;:10;:28;33320:81;;;;-1:-1:-1;;;33320:81:0;;;;;;;:::i;:::-;3518:10;33458:66;3518:10;33414:16;33501:2;33505:3;33510:7;33519:4;33458:20;:66::i;:::-;33542:9;33537:103;33561:3;:10;33557:1;:14;33537:103;;;33618:7;33626:1;33618:10;;;;;;;;:::i;:::-;;;;;;;33593:9;:17;33603:3;33607:1;33603:6;;;;;;;;:::i;:::-;;;;;;;33593:17;;;;;;;;;;;:21;33611:2;-1:-1:-1;;;;;33593:21:0;-1:-1:-1;;;;;33593:21:0;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;33573:3:0;;-1:-1:-1;33573:3:0;;;:::i;:::-;;;;33537:103;;;;33693:2;-1:-1:-1;;;;;33657:53:0;33689:1;-1:-1:-1;;;;;33657:53:0;33671:8;-1:-1:-1;;;;;33657:53:0;;33697:3;33702:7;33657:53;;;;;;;:::i;:::-;;;;;;;;33723:81;33759:8;33777:1;33781:2;33785:3;33790:7;33799:4;33723:35;:81::i;28582:820::-;-1:-1:-1;;;;;28770:16:0;;28762:66;;;;-1:-1:-1;;;28762:66:0;;;;;;;:::i;:::-;3518:10;28885:96;3518:10;28916:4;28922:2;28926:21;28944:2;28926:17;:21::i;28885:96::-;28994:19;29016:13;;;;;;;;;;;-1:-1:-1;;;;;29016:19:0;;;;;;;;;;29054:21;;;;29046:76;;;;-1:-1:-1;;;29046:76:0;;;;;;;:::i;:::-;29158:9;:13;;;;;;;;;;;-1:-1:-1;;;;;29158:19:0;;;;;;;;;;29180:20;;;29158:42;;29222:17;;;;;;;:27;;29180:20;;29158:9;29222:27;;29180:20;;29222:27;:::i;:::-;;;;-1:-1:-1;;29267:46:0;;;15055:25:1;;;15111:2;15096:18;;15089:34;;;-1:-1:-1;;;;;29267:46:0;;;;;;;;;;;;;;15028:18:1;29267:46:0;;;;;;;29326:68;29357:8;29367:4;29373:2;29377;29381:6;29389:4;29326:30;:68::i;:::-;28751:651;;28582:820;;;;;:::o;45311:291::-;45528:66;45555:8;45565:4;45571:2;45575:3;45580:7;45589:4;45528:26;:66::i;38214:813::-;-1:-1:-1;;;;;38454:13:0;;7325:20;7373:8;38450:570;;38490:79;;-1:-1:-1;;;38490:79:0;;-1:-1:-1;;;;;38490:43:0;;;;;:79;;38534:8;;38544:4;;38550:3;;38555:7;;38564:4;;38490:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38490:79:0;;;;;;;;-1:-1:-1;;38490:79:0;;;;;;;;;;;;:::i;:::-;;;38486:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38882:6;38875:14;;-1:-1:-1;;;38875:14:0;;;;;;;;:::i;38486:523::-;;;38931:62;;-1:-1:-1;;;38931:62:0;;21910:2:1;38931:62:0;;;21892:21:1;21949:2;21929:18;;;21922:30;21988:34;21968:18;;;21961:62;-1:-1:-1;;;22039:18:1;;;22032:50;22099:19;;38931:62:0;21708:416:1;38486:523:0;-1:-1:-1;;;;;;38651:60:0;;-1:-1:-1;;;38651:60:0;38647:159;;38736:50;;-1:-1:-1;;;38736:50:0;;;;;;;:::i;39035:198::-;39155:16;;;39169:1;39155:16;;;;;;;;;39101;;39130:22;;39155:16;;;;;;;;;;;;-1:-1:-1;39155:16:0;39130:41;;39193:7;39182:5;39188:1;39182:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;39220:5;39035:198;-1:-1:-1;;39035:198:0:o;37462:744::-;-1:-1:-1;;;;;37677:13:0;;7325:20;7373:8;37673:526;;37713:72;;-1:-1:-1;;;37713:72:0;;-1:-1:-1;;;;;37713:38:0;;;;;:72;;37752:8;;37762:4;;37768:2;;37772:6;;37780:4;;37713:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37713:72:0;;;;;;;;-1:-1:-1;;37713:72:0;;;;;;;;;;;;:::i;:::-;;;37709:479;;;;:::i;:::-;-1:-1:-1;;;;;;37835:55:0;;-1:-1:-1;;;37835:55:0;37831:154;;37915:50;;-1:-1:-1;;;37915:50:0;;;;;;;:::i;40373:655::-;-1:-1:-1;;;;;40695:18:0;;40691:160;;40735:9;40730:110;40754:3;:10;40750:1;:14;40730:110;;;40814:7;40822:1;40814:10;;;;;;;;:::i;:::-;;;;;;;40790:12;:20;40803:3;40807:1;40803:6;;;;;;;;:::i;:::-;;;;;;;40790:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;40766:3:0;;-1:-1:-1;40766:3:0;;:::i;:::-;;;40730:110;;;;40691:160;-1:-1:-1;;;;;40867:16:0;;40863:158;;40905:9;40900:110;40924:3;:10;40920:1;:14;40900:110;;;40984:7;40992:1;40984:10;;;;;;;;:::i;:::-;;;;;;;40960:12;:20;40973:3;40977:1;40973:6;;;;;;;;:::i;:::-;;;;;;;40960:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;40936:3:0;;-1:-1:-1;40936:3:0;;:::i;:::-;;;40900:110;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:254::-;260:6;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;360:29;379:9;360:29;:::i;:::-;350:39;436:2;421:18;;;;408:32;;-1:-1:-1;;;192:254:1:o;633:131::-;-1:-1:-1;;;;;;707:32:1;;697:43;;687:71;;754:1;751;744:12;769:245;827:6;880:2;868:9;859:7;855:23;851:32;848:52;;;896:1;893;886:12;848:52;935:9;922:23;954:30;978:5;954:30;:::i;:::-;1003:5;769:245;-1:-1:-1;;;769:245:1:o;1211:472::-;1253:3;1291:5;1285:12;1318:6;1313:3;1306:19;1343:1;1353:162;1367:6;1364:1;1361:13;1353:162;;;1429:4;1485:13;;;1481:22;;1475:29;1457:11;;;1453:20;;1446:59;1382:12;1353:162;;;1533:6;1530:1;1527:13;1524:87;;;1599:1;1592:4;1583:6;1578:3;1574:16;1570:27;1563:38;1524:87;-1:-1:-1;1665:2:1;1644:15;-1:-1:-1;;1640:29:1;1631:39;;;;1672:4;1627:50;;1211:472;-1:-1:-1;;1211:472:1:o;1688:220::-;1837:2;1826:9;1819:21;1800:4;1857:45;1898:2;1887:9;1883:18;1875:6;1857:45;:::i;1913:180::-;1972:6;2025:2;2013:9;2004:7;2000:23;1996:32;1993:52;;;2041:1;2038;2031:12;1993:52;-1:-1:-1;2064:23:1;;1913:180;-1:-1:-1;1913:180:1:o;2098:127::-;2159:10;2154:3;2150:20;2147:1;2140:31;2190:4;2187:1;2180:15;2214:4;2211:1;2204:15;2230:249;2340:2;2321:13;;-1:-1:-1;;2317:27:1;2305:40;;2375:18;2360:34;;2396:22;;;2357:62;2354:88;;;2422:18;;:::i;:::-;2458:2;2451:22;-1:-1:-1;;2230:249:1:o;2484:183::-;2544:4;2577:18;2569:6;2566:30;2563:56;;;2599:18;;:::i;:::-;-1:-1:-1;2644:1:1;2640:14;2656:4;2636:25;;2484:183::o;2672:724::-;2726:5;2779:3;2772:4;2764:6;2760:17;2756:27;2746:55;;2797:1;2794;2787:12;2746:55;2833:6;2820:20;2859:4;2882:43;2922:2;2882:43;:::i;:::-;2954:2;2948:9;2966:31;2994:2;2986:6;2966:31;:::i;:::-;3032:18;;;3124:1;3120:10;;;;3108:23;;3104:32;;;3066:15;;;;-1:-1:-1;3148:15:1;;;3145:35;;;3176:1;3173;3166:12;3145:35;3212:2;3204:6;3200:15;3224:142;3240:6;3235:3;3232:15;3224:142;;;3306:17;;3294:30;;3344:12;;;;3257;;3224:142;;;-1:-1:-1;3384:6:1;2672:724;-1:-1:-1;;;;;;2672:724:1:o;3401:468::-;3465:5;3499:18;3491:6;3488:30;3485:56;;;3521:18;;:::i;:::-;3570:2;3564:9;3582:69;3639:2;3618:15;;-1:-1:-1;;3614:29:1;3645:4;3610:40;3564:9;3582:69;:::i;:::-;3669:6;3660:15;;3699:6;3691;3684:22;3739:3;3730:6;3725:3;3721:16;3718:25;3715:45;;;3756:1;3753;3746:12;3715:45;3806:6;3801:3;3794:4;3786:6;3782:17;3769:44;3861:1;3854:4;3845:6;3837;3833:19;3829:30;3822:41;;3401:468;;;;;:::o;3874:220::-;3916:5;3969:3;3962:4;3954:6;3950:17;3946:27;3936:55;;3987:1;3984;3977:12;3936:55;4009:79;4084:3;4075:6;4062:20;4055:4;4047:6;4043:17;4009:79;:::i;4099:943::-;4253:6;4261;4269;4277;4285;4338:3;4326:9;4317:7;4313:23;4309:33;4306:53;;;4355:1;4352;4345:12;4306:53;4378:29;4397:9;4378:29;:::i;:::-;4368:39;;4426:38;4460:2;4449:9;4445:18;4426:38;:::i;:::-;4416:48;;4515:2;4504:9;4500:18;4487:32;4538:18;4579:2;4571:6;4568:14;4565:34;;;4595:1;4592;4585:12;4565:34;4618:61;4671:7;4662:6;4651:9;4647:22;4618:61;:::i;:::-;4608:71;;4732:2;4721:9;4717:18;4704:32;4688:48;;4761:2;4751:8;4748:16;4745:36;;;4777:1;4774;4767:12;4745:36;4800:63;4855:7;4844:8;4833:9;4829:24;4800:63;:::i;:::-;4790:73;;4916:3;4905:9;4901:19;4888:33;4872:49;;4946:2;4936:8;4933:16;4930:36;;;4962:1;4959;4952:12;4930:36;;4985:51;5028:7;5017:8;5006:9;5002:24;4985:51;:::i;:::-;4975:61;;;4099:943;;;;;;;;:::o;5047:1208::-;5165:6;5173;5226:2;5214:9;5205:7;5201:23;5197:32;5194:52;;;5242:1;5239;5232:12;5194:52;5282:9;5269:23;5311:18;5352:2;5344:6;5341:14;5338:34;;;5368:1;5365;5358:12;5338:34;5406:6;5395:9;5391:22;5381:32;;5451:7;5444:4;5440:2;5436:13;5432:27;5422:55;;5473:1;5470;5463:12;5422:55;5509:2;5496:16;5531:4;5554:43;5594:2;5554:43;:::i;:::-;5626:2;5620:9;5638:31;5666:2;5658:6;5638:31;:::i;:::-;5704:18;;;5792:1;5788:10;;;;5780:19;;5776:28;;;5738:15;;;;-1:-1:-1;5816:19:1;;;5813:39;;;5848:1;5845;5838:12;5813:39;5872:11;;;;5892:148;5908:6;5903:3;5900:15;5892:148;;;5974:23;5993:3;5974:23;:::i;:::-;5962:36;;5925:12;;;;6018;;;;5892:148;;;6059:6;-1:-1:-1;;6103:18:1;;6090:32;;-1:-1:-1;;6134:16:1;;;6131:36;;;6163:1;6160;6153:12;6131:36;;6186:63;6241:7;6230:8;6219:9;6215:24;6186:63;:::i;:::-;6176:73;;;5047:1208;;;;;:::o;6260:435::-;6313:3;6351:5;6345:12;6378:6;6373:3;6366:19;6404:4;6433:2;6428:3;6424:12;6417:19;;6470:2;6463:5;6459:14;6491:1;6501:169;6515:6;6512:1;6509:13;6501:169;;;6576:13;;6564:26;;6610:12;;;;6645:15;;;;6537:1;6530:9;6501:169;;;-1:-1:-1;6686:3:1;;6260:435;-1:-1:-1;;;;;6260:435:1:o;6700:261::-;6879:2;6868:9;6861:21;6842:4;6899:56;6951:2;6940:9;6936:18;6928:6;6899:56;:::i;6966:669::-;7093:6;7101;7109;7162:2;7150:9;7141:7;7137:23;7133:32;7130:52;;;7178:1;7175;7168:12;7130:52;7201:29;7220:9;7201:29;:::i;:::-;7191:39;;7281:2;7270:9;7266:18;7253:32;7304:18;7345:2;7337:6;7334:14;7331:34;;;7361:1;7358;7351:12;7331:34;7384:61;7437:7;7428:6;7417:9;7413:22;7384:61;:::i;:::-;7374:71;;7498:2;7487:9;7483:18;7470:32;7454:48;;7527:2;7517:8;7514:16;7511:36;;;7543:1;7540;7533:12;7511:36;;7566:63;7621:7;7610:8;7599:9;7595:24;7566:63;:::i;:::-;7556:73;;;6966:669;;;;;:::o;7640:518::-;7718:6;7726;7779:2;7767:9;7758:7;7754:23;7750:32;7747:52;;;7795:1;7792;7785:12;7747:52;7831:9;7818:23;7808:33;;7892:2;7881:9;7877:18;7864:32;7919:18;7911:6;7908:30;7905:50;;;7951:1;7948;7941:12;7905:50;7974:22;;8027:4;8019:13;;8015:27;-1:-1:-1;8005:55:1;;8056:1;8053;8046:12;8005:55;8079:73;8144:7;8139:2;8126:16;8121:2;8117;8113:11;8079:73;:::i;8163:531::-;8258:6;8266;8274;8282;8335:3;8323:9;8314:7;8310:23;8306:33;8303:53;;;8352:1;8349;8342:12;8303:53;8375:29;8394:9;8375:29;:::i;:::-;8365:39;;8451:2;8440:9;8436:18;8423:32;8413:42;;8502:2;8491:9;8487:18;8474:32;8464:42;;8557:2;8546:9;8542:18;8529:32;8584:18;8576:6;8573:30;8570:50;;;8616:1;8613;8606:12;8570:50;8639:49;8680:7;8671:6;8660:9;8656:22;8639:49;:::i;:::-;8629:59;;;8163:531;;;;;;;:::o;8907:160::-;8972:20;;9028:13;;9021:21;9011:32;;9001:60;;9057:1;9054;9047:12;9072:254;9137:6;9145;9198:2;9186:9;9177:7;9173:23;9169:32;9166:52;;;9214:1;9211;9204:12;9166:52;9237:29;9256:9;9237:29;:::i;:::-;9227:39;;9285:35;9316:2;9305:9;9301:18;9285:35;:::i;:::-;9275:45;;9072:254;;;;;:::o;9331:180::-;9387:6;9440:2;9428:9;9419:7;9415:23;9411:32;9408:52;;;9456:1;9453;9446:12;9408:52;9479:26;9495:9;9479:26;:::i;9516:868::-;9661:6;9669;9677;9685;9738:3;9726:9;9717:7;9713:23;9709:33;9706:53;;;9755:1;9752;9745:12;9706:53;9778:29;9797:9;9778:29;:::i;:::-;9768:39;;9858:2;9847:9;9843:18;9830:32;9881:18;9922:2;9914:6;9911:14;9908:34;;;9938:1;9935;9928:12;9908:34;9961:61;10014:7;10005:6;9994:9;9990:22;9961:61;:::i;:::-;9951:71;;10075:2;10064:9;10060:18;10047:32;10031:48;;10104:2;10094:8;10091:16;10088:36;;;10120:1;10117;10110:12;10088:36;10143:63;10198:7;10187:8;10176:9;10172:24;10143:63;:::i;:::-;10133:73;;10259:2;10248:9;10244:18;10231:32;10215:48;;10288:2;10278:8;10275:16;10272:36;;;10304:1;10301;10294:12;10272:36;;10327:51;10370:7;10359:8;10348:9;10344:24;10327:51;:::i;10389:322::-;10466:6;10474;10482;10535:2;10523:9;10514:7;10510:23;10506:32;10503:52;;;10551:1;10548;10541:12;10503:52;10574:29;10593:9;10574:29;:::i;:::-;10564:39;10650:2;10635:18;;10622:32;;-1:-1:-1;10701:2:1;10686:18;;;10673:32;;10389:322;-1:-1:-1;;;10389:322:1:o;10716:260::-;10784:6;10792;10845:2;10833:9;10824:7;10820:23;10816:32;10813:52;;;10861:1;10858;10851:12;10813:52;10884:29;10903:9;10884:29;:::i;:::-;10874:39;;10932:38;10966:2;10955:9;10951:18;10932:38;:::i;10981:606::-;11085:6;11093;11101;11109;11117;11170:3;11158:9;11149:7;11145:23;11141:33;11138:53;;;11187:1;11184;11177:12;11138:53;11210:29;11229:9;11210:29;:::i;:::-;11200:39;;11258:38;11292:2;11281:9;11277:18;11258:38;:::i;:::-;11248:48;;11343:2;11332:9;11328:18;11315:32;11305:42;;11394:2;11383:9;11379:18;11366:32;11356:42;;11449:3;11438:9;11434:19;11421:33;11477:18;11469:6;11466:30;11463:50;;;11509:1;11506;11499:12;11463:50;11532:49;11573:7;11564:6;11553:9;11549:22;11532:49;:::i;11592:186::-;11651:6;11704:2;11692:9;11683:7;11679:23;11675:32;11672:52;;;11720:1;11717;11710:12;11672:52;11743:29;11762:9;11743:29;:::i;12195:380::-;12274:1;12270:12;;;;12317;;;12338:61;;12392:4;12384:6;12380:17;12370:27;;12338:61;12445:2;12437:6;12434:14;12414:18;12411:38;12408:161;;;12491:10;12486:3;12482:20;12479:1;12472:31;12526:4;12523:1;12516:15;12554:4;12551:1;12544:15;12408:161;;12195:380;;;:::o;13409:127::-;13470:10;13465:3;13461:20;13458:1;13451:31;13501:4;13498:1;13491:15;13525:4;13522:1;13515:15;13541:127;13602:10;13597:3;13593:20;13590:1;13583:31;13633:4;13630:1;13623:15;13657:4;13654:1;13647:15;13673:135;13712:3;-1:-1:-1;;13733:17:1;;13730:43;;;13753:18;;:::i;:::-;-1:-1:-1;13800:1:1;13789:13;;13673:135::o;15134:356::-;15336:2;15318:21;;;15355:18;;;15348:30;15414:34;15409:2;15394:18;;15387:62;15481:2;15466:18;;15134:356::o;15495:405::-;15697:2;15679:21;;;15736:2;15716:18;;;15709:30;15775:34;15770:2;15755:18;;15748:62;-1:-1:-1;;;15841:2:1;15826:18;;15819:39;15890:3;15875:19;;15495:405::o;15905:128::-;15945:3;15976:1;15972:6;15969:1;15966:13;15963:39;;;15982:18;;:::i;:::-;-1:-1:-1;16018:9:1;;15905:128::o;16445:404::-;16647:2;16629:21;;;16686:2;16666:18;;;16659:30;16725:34;16720:2;16705:18;;16698:62;-1:-1:-1;;;16791:2:1;16776:18;;16769:38;16839:3;16824:19;;16445:404::o;16854:401::-;17056:2;17038:21;;;17095:2;17075:18;;;17068:30;17134:34;17129:2;17114:18;;17107:62;-1:-1:-1;;;17200:2:1;17185:18;;17178:35;17245:3;17230:19;;16854:401::o;17260:406::-;17462:2;17444:21;;;17501:2;17481:18;;;17474:30;17540:34;17535:2;17520:18;;17513:62;-1:-1:-1;;;17606:2:1;17591:18;;17584:40;17656:3;17641:19;;17260:406::o;17671:465::-;17928:2;17917:9;17910:21;17891:4;17954:56;18006:2;17995:9;17991:18;17983:6;17954:56;:::i;:::-;18058:9;18050:6;18046:22;18041:2;18030:9;18026:18;18019:50;18086:44;18123:6;18115;18086:44;:::i;:::-;18078:52;17671:465;-1:-1:-1;;;;;17671:465:1:o;18141:399::-;18343:2;18325:21;;;18382:2;18362:18;;;18355:30;18421:34;18416:2;18401:18;;18394:62;-1:-1:-1;;;18487:2:1;18472:18;;18465:33;18530:3;18515:19;;18141:399::o;18545:400::-;18747:2;18729:21;;;18786:2;18766:18;;;18759:30;18825:34;18820:2;18805:18;;18798:62;-1:-1:-1;;;18891:2:1;18876:18;;18869:34;18935:3;18920:19;;18545:400::o;18950:397::-;19152:2;19134:21;;;19191:2;19171:18;;;19164:30;19230:34;19225:2;19210:18;;19203:62;-1:-1:-1;;;19296:2:1;19281:18;;19274:31;19337:3;19322:19;;18950:397::o;19762:827::-;-1:-1:-1;;;;;20159:15:1;;;20141:34;;20211:15;;20206:2;20191:18;;20184:43;20121:3;20258:2;20243:18;;20236:31;;;20084:4;;20290:57;;20327:19;;20319:6;20290:57;:::i;:::-;20395:9;20387:6;20383:22;20378:2;20367:9;20363:18;20356:50;20429:44;20466:6;20458;20429:44;:::i;:::-;20415:58;;20522:9;20514:6;20510:22;20504:3;20493:9;20489:19;20482:51;20550:33;20576:6;20568;20550:33;:::i;:::-;20542:41;19762:827;-1:-1:-1;;;;;;;;19762:827:1:o;20594:249::-;20663:6;20716:2;20704:9;20695:7;20691:23;20687:32;20684:52;;;20732:1;20729;20722:12;20684:52;20764:9;20758:16;20783:30;20807:5;20783:30;:::i;20848:179::-;20883:3;20925:1;20907:16;20904:23;20901:120;;;20971:1;20968;20965;20950:23;-1:-1:-1;21008:1:1;21002:8;20997:3;20993:18;20901:120;20848:179;:::o;21032:671::-;21071:3;21113:4;21095:16;21092:26;21089:39;;;21032:671;:::o;21089:39::-;21155:2;21149:9;-1:-1:-1;;21220:16:1;21216:25;;21213:1;21149:9;21192:50;21271:4;21265:11;21295:16;21330:18;21401:2;21394:4;21386:6;21382:17;21379:25;21374:2;21366:6;21363:14;21360:45;21357:58;;;21408:5;;;;;21032:671;:::o;21357:58::-;21445:6;21439:4;21435:17;21424:28;;21481:3;21475:10;21508:2;21500:6;21497:14;21494:27;;;21514:5;;;;;;21032:671;:::o;21494:27::-;21598:2;21579:16;21573:4;21569:27;21565:36;21558:4;21549:6;21544:3;21540:16;21536:27;21533:69;21530:82;;;21605:5;;;;;;21032:671;:::o;21530:82::-;21621:57;21672:4;21663:6;21655;21651:19;21647:30;21641:4;21621:57;:::i;:::-;-1:-1:-1;21694:3:1;;21032:671;-1:-1:-1;;;;;21032:671:1:o;22129:404::-;22331:2;22313:21;;;22370:2;22350:18;;;22343:30;22409:34;22404:2;22389:18;;22382:62;-1:-1:-1;;;22475:2:1;22460:18;;22453:38;22523:3;22508:19;;22129:404::o;22538:561::-;-1:-1:-1;;;;;22835:15:1;;;22817:34;;22887:15;;22882:2;22867:18;;22860:43;22934:2;22919:18;;22912:34;;;22977:2;22962:18;;22955:34;;;22797:3;23020;23005:19;;22998:32;;;22760:4;;23047:46;;23073:19;;23065:6;23047:46;:::i;:::-;23039:54;22538:561;-1:-1:-1;;;;;;;22538:561:1:o;23104:125::-;23144:4;23172:1;23169;23166:8;23163:34;;;23177:18;;:::i;:::-;-1:-1:-1;23214:9:1;;23104:125::o
Swarm Source
ipfs://d055163ce283d16484f9ea05ed4f9e78a1c47264af3aa79d3e0074b237245e3a
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.