ERC-1155
Overview
Max Total Supply
0
Holders
1,915
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
PlaySquidArt
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-10-14 */ // SPDX-License-Identifier: MIT 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); } 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; } } 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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } 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; // solhint-disable-next-line no-inline-assembly 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } 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; } 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); } pragma solidity ^0.8.0; /** * _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); } 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 { require(_msgSender() != operator, "ERC1155: setting approval status for self"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_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(to != address(0), "ERC1155: transfer to the zero address"); require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); 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"); _balances[id][from] = fromBalance - amount; _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, 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(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); 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"); _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 `account`. * * Emits a {TransferSingle} event. * * Requirements: * * - `account` cannot be the zero address. * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual { require(account != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][account] += amount; emit TransferSingle(operator, address(0), account, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), account, 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 (uint 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 `account` * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens of token type `id`. */ function _burn(address account, uint256 id, uint256 amount) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 accountBalance = _balances[id][account]; require(accountBalance >= amount, "ERC1155: burn amount exceeds balance"); _balances[id][account] = accountBalance - amount; emit TransferSingle(operator, account, 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 account, uint256[] memory ids, uint256[] memory amounts) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), ids, amounts, ""); for (uint i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 accountBalance = _balances[id][account]; require(accountBalance >= amount, "ERC1155: burn amount exceeds balance"); _balances[id][account] = accountBalance - amount; } emit TransferBatch(operator, account, address(0), ids, amounts); } /** * @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(to).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(to).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; } } 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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } abstract contract ContextMixin { function msgSender() internal view returns (address payable sender) { if (msg.sender == address(this)) { bytes memory array = msg.data; uint256 index = msg.data.length; assembly { // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those. sender := and( mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff ) } } else { sender = payable(msg.sender); } return sender; } } pragma solidity >=0.4.22 <0.9.0; contract PlaySquidArt is ERC1155, ContextMixin, Ownable { constructor() ERC1155( "https://playsquidnft.com/art/{id}" ) { } function mint(address _receiver, uint256 artId, uint256 amount) public onlyOwner { _mint(_receiver, artId, amount, ""); } function mint_multiple(address[] memory receiversArray, uint256 artId, uint256 amount) public onlyOwner { for(uint i = 0; i < receiversArray.length; i++) { _mint(receiversArray[i], artId, amount, ""); } } /** * Override isApprovedForAll to auto-approve OS's proxy contract */ function isApprovedForAll(address _owner,address _operator) public override view returns (bool isOperator) { // if OpenSea's ERC1155 Proxy Address is detected, auto-return true if (_operator == address(0x207Fa8Df3a17D96Ca7EA4f2893fcdCb78a304101)) { return true; } // otherwise, use the default ERC1155.isApprovedForAll() return ERC1155.isApprovedForAll(_owner, _operator); } function withdraw(uint256 amount) public onlyOwner { payable(msg.sender).transfer(amount); } /** * This is used instead of msg.sender as transactions won't be sent by the original token owner, but by OpenSea. */ function _msgSender() internal override view returns (address sender) { return ContextMixin.msgSender(); } }
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"},{"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":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"artId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"receiversArray","type":"address[]"},{"internalType":"uint256","name":"artId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint_multiple","outputs":[],"stateMutability":"nonpayable","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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405180606001604052806021815260200162003462602191396200003d81620000f560201b60201c565b506000620000506200011160201b60201c565b905080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620002f5565b80600290805190602001906200010d929190620001e0565b5050565b6000620001286200012d60201b620014161760201c565b905090565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415620001d957600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff818301511692505050620001dd565b3390505b90565b828054620001ee9062000290565b90600052602060002090601f0160209004810192826200021257600085556200025e565b82601f106200022d57805160ff19168380011785556200025e565b828001600101855582156200025e579182015b828111156200025d57825182559160200191906001019062000240565b5b5090506200026d919062000271565b5090565b5b808211156200028c57600081600090555060010162000272565b5090565b60006002820490506001821680620002a957607f821691505b60208210811415620002c057620002bf620002c6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61315d80620003056000396000f3fe608060405234801561001057600080fd5b50600436106100e95760003560e01c8063715018a61161008c578063a22cb46511610066578063a22cb46514610246578063e985e9c514610262578063f242432a14610292578063f2fde38b146102ae576100e9565b8063715018a6146102025780638da5cb5b1461020c5780639e8c21a11461022a576100e9565b8063156e29f6116100c8578063156e29f61461017e5780632e1a7d4d1461019a5780632eb2c2d6146101b65780634e1273f4146101d2576100e9565b8062fdd58e146100ee57806301ffc9a71461011e5780630e89341c1461014e575b600080fd5b61010860048036038101906101039190611ff5565b6102ca565b60405161011591906127f4565b60405180910390f35b6101386004803603810190610133919061216f565b610393565b6040516101459190612617565b60405180910390f35b610168600480360381019061016391906121c9565b610475565b6040516101759190612632565b60405180910390f35b61019860048036038101906101939190612035565b610509565b005b6101b460048036038101906101af91906121c9565b6105a5565b005b6101d060048036038101906101cb9190611e4f565b61066b565b005b6101ec60048036038101906101e79190612088565b610a15565b6040516101f991906125be565b60405180910390f35b61020a610b2e565b005b610214610c6b565b60405161022191906124e1565b60405180910390f35b610244600480360381019061023f9190612100565b610c95565b005b610260600480360381019061025b9190611fb5565b610d6b565b005b61027c60048036038101906102779190611e0f565b610eec565b6040516102899190612617565b60405180910390f35b6102ac60048036038101906102a79190611f1e565b610f52565b005b6102c860048036038101906102c39190611de2565b61126a565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561033b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033290612694565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061045e57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061046e575061046d826114c7565b5b9050919050565b60606002805461048490612a97565b80601f01602080910402602001604051908101604052809291908181526020018280546104b090612a97565b80156104fd5780601f106104d2576101008083540402835291602001916104fd565b820191906000526020600020905b8154815290600101906020018083116104e057829003601f168201915b50505050509050919050565b610511611531565b73ffffffffffffffffffffffffffffffffffffffff1661052f610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614610585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057c90612754565b60405180910390fd5b6105a083838360405180602001604052806000815250611540565b505050565b6105ad611531565b73ffffffffffffffffffffffffffffffffffffffff166105cb610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614610621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061890612754565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610667573d6000803e3d6000fd5b5050565b81518351146106af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a6906127b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561071f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610716906126f4565b60405180910390fd5b610727611531565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061076d575061076c85610767611531565b610eec565b5b6107ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a390612714565b60405180910390fd5b60006107b6611531565b90506107c68187878787876116d6565b60005b84518110156109805760008582815181106107e7576107e6612ba1565b5b60200260200101519050600085838151811061080657610805612ba1565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156108a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089e90612734565b60405180910390fd5b81816108b391906129ad565b60008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109659190612957565b925050819055505050508061097990612afa565b90506107c9565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516109f79291906125e0565b60405180910390a4610a0d8187878787876116de565b505050505050565b60608151835114610a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5290612794565b60405180910390fd5b6000835167ffffffffffffffff811115610a7857610a77612bd0565b5b604051908082528060200260200182016040528015610aa65781602001602082028036833780820191505090505b50905060005b8451811015610b2357610af3858281518110610acb57610aca612ba1565b5b6020026020010151858381518110610ae657610ae5612ba1565b5b60200260200101516102ca565b828281518110610b0657610b05612ba1565b5b60200260200101818152505080610b1c90612afa565b9050610aac565b508091505092915050565b610b36611531565b73ffffffffffffffffffffffffffffffffffffffff16610b54610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614610baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba190612754565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610c9d611531565b73ffffffffffffffffffffffffffffffffffffffff16610cbb610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614610d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0890612754565b60405180910390fd5b60005b8351811015610d6557610d52848281518110610d3357610d32612ba1565b5b6020026020010151848460405180602001604052806000815250611540565b8080610d5d90612afa565b915050610d14565b50505050565b8173ffffffffffffffffffffffffffffffffffffffff16610d8a611531565b73ffffffffffffffffffffffffffffffffffffffff161415610de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd890612774565b60405180910390fd5b8060016000610dee611531565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610e9b611531565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610ee09190612617565b60405180910390a35050565b600073207fa8df3a17d96ca7ea4f2893fcdcb78a30410173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f3f5760019050610f4c565b610f4983836118c5565b90505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb9906126f4565b60405180910390fd5b610fca611531565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611010575061100f8561100a611531565b610eec565b5b61104f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611046906126d4565b60405180910390fd5b6000611059611531565b905061107981878761106a88611959565b61107388611959565b876116d6565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110790612734565b60405180910390fd5b838161111c91906129ad565b60008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111ce9190612957565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62888860405161124b92919061280f565b60405180910390a46112618288888888886119d3565b50505050505050565b611272611531565b73ffffffffffffffffffffffffffffffffffffffff16611290610c6b565b73ffffffffffffffffffffffffffffffffffffffff16146112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd90612754565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134d906126b4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156114c057600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff8183015116925050506114c4565b3390505b90565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600061153b611416565b905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156115b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a7906127d4565b60405180910390fd5b60006115ba611531565b90506115db816000876115cc88611959565b6115d588611959565b876116d6565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461163a9190612957565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516116b892919061280f565b60405180910390a46116cf816000878787876119d3565b5050505050565b505050505050565b6116fd8473ffffffffffffffffffffffffffffffffffffffff16611bba565b156118bd578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016117439594939291906124fc565b602060405180830381600087803b15801561175d57600080fd5b505af192505050801561178e57506040513d601f19601f8201168201806040525081019061178b919061219c565b60015b6118345761179a612bff565b806308c379a014156117f757506117af613035565b806117ba57506117f9565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ee9190612632565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182b90612654565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146118bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b290612674565b60405180910390fd5b505b505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606000600167ffffffffffffffff81111561197857611977612bd0565b5b6040519080825280602002602001820160405280156119a65781602001602082028036833780820191505090505b50905082816000815181106119be576119bd612ba1565b5b60200260200101818152505080915050919050565b6119f28473ffffffffffffffffffffffffffffffffffffffff16611bba565b15611bb2578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611a38959493929190612564565b602060405180830381600087803b158015611a5257600080fd5b505af1925050508015611a8357506040513d601f19601f82011682018060405250810190611a80919061219c565b60015b611b2957611a8f612bff565b806308c379a01415611aec5750611aa4613035565b80611aaf5750611aee565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae39190612632565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2090612654565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba790612674565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b6000611be0611bdb8461285d565b612838565b90508083825260208201905082856020860282011115611c0357611c02612c26565b5b60005b85811015611c335781611c198882611cef565b845260208401935060208301925050600181019050611c06565b5050509392505050565b6000611c50611c4b84612889565b612838565b90508083825260208201905082856020860282011115611c7357611c72612c26565b5b60005b85811015611ca35781611c898882611dcd565b845260208401935060208301925050600181019050611c76565b5050509392505050565b6000611cc0611cbb846128b5565b612838565b905082815260208101848484011115611cdc57611cdb612c2b565b5b611ce7848285612a55565b509392505050565b600081359050611cfe816130cb565b92915050565b600082601f830112611d1957611d18612c21565b5b8135611d29848260208601611bcd565b91505092915050565b600082601f830112611d4757611d46612c21565b5b8135611d57848260208601611c3d565b91505092915050565b600081359050611d6f816130e2565b92915050565b600081359050611d84816130f9565b92915050565b600081519050611d99816130f9565b92915050565b600082601f830112611db457611db3612c21565b5b8135611dc4848260208601611cad565b91505092915050565b600081359050611ddc81613110565b92915050565b600060208284031215611df857611df7612c35565b5b6000611e0684828501611cef565b91505092915050565b60008060408385031215611e2657611e25612c35565b5b6000611e3485828601611cef565b9250506020611e4585828601611cef565b9150509250929050565b600080600080600060a08688031215611e6b57611e6a612c35565b5b6000611e7988828901611cef565b9550506020611e8a88828901611cef565b945050604086013567ffffffffffffffff811115611eab57611eaa612c30565b5b611eb788828901611d32565b935050606086013567ffffffffffffffff811115611ed857611ed7612c30565b5b611ee488828901611d32565b925050608086013567ffffffffffffffff811115611f0557611f04612c30565b5b611f1188828901611d9f565b9150509295509295909350565b600080600080600060a08688031215611f3a57611f39612c35565b5b6000611f4888828901611cef565b9550506020611f5988828901611cef565b9450506040611f6a88828901611dcd565b9350506060611f7b88828901611dcd565b925050608086013567ffffffffffffffff811115611f9c57611f9b612c30565b5b611fa888828901611d9f565b9150509295509295909350565b60008060408385031215611fcc57611fcb612c35565b5b6000611fda85828601611cef565b9250506020611feb85828601611d60565b9150509250929050565b6000806040838503121561200c5761200b612c35565b5b600061201a85828601611cef565b925050602061202b85828601611dcd565b9150509250929050565b60008060006060848603121561204e5761204d612c35565b5b600061205c86828701611cef565b935050602061206d86828701611dcd565b925050604061207e86828701611dcd565b9150509250925092565b6000806040838503121561209f5761209e612c35565b5b600083013567ffffffffffffffff8111156120bd576120bc612c30565b5b6120c985828601611d04565b925050602083013567ffffffffffffffff8111156120ea576120e9612c30565b5b6120f685828601611d32565b9150509250929050565b60008060006060848603121561211957612118612c35565b5b600084013567ffffffffffffffff81111561213757612136612c30565b5b61214386828701611d04565b935050602061215486828701611dcd565b925050604061216586828701611dcd565b9150509250925092565b60006020828403121561218557612184612c35565b5b600061219384828501611d75565b91505092915050565b6000602082840312156121b2576121b1612c35565b5b60006121c084828501611d8a565b91505092915050565b6000602082840312156121df576121de612c35565b5b60006121ed84828501611dcd565b91505092915050565b600061220283836124c3565b60208301905092915050565b612217816129e1565b82525050565b6000612228826128f6565b6122328185612924565b935061223d836128e6565b8060005b8381101561226e57815161225588826121f6565b975061226083612917565b925050600181019050612241565b5085935050505092915050565b612284816129f3565b82525050565b600061229582612901565b61229f8185612935565b93506122af818560208601612a64565b6122b881612c3a565b840191505092915050565b60006122ce8261290c565b6122d88185612946565b93506122e8818560208601612a64565b6122f181612c3a565b840191505092915050565b6000612309603483612946565b915061231482612c58565b604082019050919050565b600061232c602883612946565b915061233782612ca7565b604082019050919050565b600061234f602b83612946565b915061235a82612cf6565b604082019050919050565b6000612372602683612946565b915061237d82612d45565b604082019050919050565b6000612395602983612946565b91506123a082612d94565b604082019050919050565b60006123b8602583612946565b91506123c382612de3565b604082019050919050565b60006123db603283612946565b91506123e682612e32565b604082019050919050565b60006123fe602a83612946565b915061240982612e81565b604082019050919050565b6000612421602083612946565b915061242c82612ed0565b602082019050919050565b6000612444602983612946565b915061244f82612ef9565b604082019050919050565b6000612467602983612946565b915061247282612f48565b604082019050919050565b600061248a602883612946565b915061249582612f97565b604082019050919050565b60006124ad602183612946565b91506124b882612fe6565b604082019050919050565b6124cc81612a4b565b82525050565b6124db81612a4b565b82525050565b60006020820190506124f6600083018461220e565b92915050565b600060a082019050612511600083018861220e565b61251e602083018761220e565b8181036040830152612530818661221d565b90508181036060830152612544818561221d565b90508181036080830152612558818461228a565b90509695505050505050565b600060a082019050612579600083018861220e565b612586602083018761220e565b61259360408301866124d2565b6125a060608301856124d2565b81810360808301526125b2818461228a565b90509695505050505050565b600060208201905081810360008301526125d8818461221d565b905092915050565b600060408201905081810360008301526125fa818561221d565b9050818103602083015261260e818461221d565b90509392505050565b600060208201905061262c600083018461227b565b92915050565b6000602082019050818103600083015261264c81846122c3565b905092915050565b6000602082019050818103600083015261266d816122fc565b9050919050565b6000602082019050818103600083015261268d8161231f565b9050919050565b600060208201905081810360008301526126ad81612342565b9050919050565b600060208201905081810360008301526126cd81612365565b9050919050565b600060208201905081810360008301526126ed81612388565b9050919050565b6000602082019050818103600083015261270d816123ab565b9050919050565b6000602082019050818103600083015261272d816123ce565b9050919050565b6000602082019050818103600083015261274d816123f1565b9050919050565b6000602082019050818103600083015261276d81612414565b9050919050565b6000602082019050818103600083015261278d81612437565b9050919050565b600060208201905081810360008301526127ad8161245a565b9050919050565b600060208201905081810360008301526127cd8161247d565b9050919050565b600060208201905081810360008301526127ed816124a0565b9050919050565b600060208201905061280960008301846124d2565b92915050565b600060408201905061282460008301856124d2565b61283160208301846124d2565b9392505050565b6000612842612853565b905061284e8282612ac9565b919050565b6000604051905090565b600067ffffffffffffffff82111561287857612877612bd0565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156128a4576128a3612bd0565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156128d0576128cf612bd0565b5b6128d982612c3a565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061296282612a4b565b915061296d83612a4b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156129a2576129a1612b43565b5b828201905092915050565b60006129b882612a4b565b91506129c383612a4b565b9250828210156129d6576129d5612b43565b5b828203905092915050565b60006129ec82612a2b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612a82578082015181840152602081019050612a67565b83811115612a91576000848401525b50505050565b60006002820490506001821680612aaf57607f821691505b60208210811415612ac357612ac2612b72565b5b50919050565b612ad282612c3a565b810181811067ffffffffffffffff82111715612af157612af0612bd0565b5b80604052505050565b6000612b0582612a4b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612b3857612b37612b43565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115612c1e5760046000803e612c1b600051612c4b565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613045576130c8565b61304d612853565b60043d036004823e80513d602482011167ffffffffffffffff821117156130755750506130c8565b808201805167ffffffffffffffff81111561309357505050506130c8565b80602083010160043d0385018111156130b05750505050506130c8565b6130bf82602001850186612ac9565b82955050505050505b90565b6130d4816129e1565b81146130df57600080fd5b50565b6130eb816129f3565b81146130f657600080fd5b50565b613102816129ff565b811461310d57600080fd5b50565b61311981612a4b565b811461312457600080fd5b5056fea26469706673582212203843a0bb8b13b2c27bd977f227ffef37ea01ad3253338ea883cfbf9e84d1e2a764736f6c6343000807003368747470733a2f2f706c617973717569646e66742e636f6d2f6172742f7b69647d
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100e95760003560e01c8063715018a61161008c578063a22cb46511610066578063a22cb46514610246578063e985e9c514610262578063f242432a14610292578063f2fde38b146102ae576100e9565b8063715018a6146102025780638da5cb5b1461020c5780639e8c21a11461022a576100e9565b8063156e29f6116100c8578063156e29f61461017e5780632e1a7d4d1461019a5780632eb2c2d6146101b65780634e1273f4146101d2576100e9565b8062fdd58e146100ee57806301ffc9a71461011e5780630e89341c1461014e575b600080fd5b61010860048036038101906101039190611ff5565b6102ca565b60405161011591906127f4565b60405180910390f35b6101386004803603810190610133919061216f565b610393565b6040516101459190612617565b60405180910390f35b610168600480360381019061016391906121c9565b610475565b6040516101759190612632565b60405180910390f35b61019860048036038101906101939190612035565b610509565b005b6101b460048036038101906101af91906121c9565b6105a5565b005b6101d060048036038101906101cb9190611e4f565b61066b565b005b6101ec60048036038101906101e79190612088565b610a15565b6040516101f991906125be565b60405180910390f35b61020a610b2e565b005b610214610c6b565b60405161022191906124e1565b60405180910390f35b610244600480360381019061023f9190612100565b610c95565b005b610260600480360381019061025b9190611fb5565b610d6b565b005b61027c60048036038101906102779190611e0f565b610eec565b6040516102899190612617565b60405180910390f35b6102ac60048036038101906102a79190611f1e565b610f52565b005b6102c860048036038101906102c39190611de2565b61126a565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561033b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033290612694565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061045e57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061046e575061046d826114c7565b5b9050919050565b60606002805461048490612a97565b80601f01602080910402602001604051908101604052809291908181526020018280546104b090612a97565b80156104fd5780601f106104d2576101008083540402835291602001916104fd565b820191906000526020600020905b8154815290600101906020018083116104e057829003601f168201915b50505050509050919050565b610511611531565b73ffffffffffffffffffffffffffffffffffffffff1661052f610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614610585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057c90612754565b60405180910390fd5b6105a083838360405180602001604052806000815250611540565b505050565b6105ad611531565b73ffffffffffffffffffffffffffffffffffffffff166105cb610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614610621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061890612754565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610667573d6000803e3d6000fd5b5050565b81518351146106af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a6906127b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561071f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610716906126f4565b60405180910390fd5b610727611531565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061076d575061076c85610767611531565b610eec565b5b6107ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a390612714565b60405180910390fd5b60006107b6611531565b90506107c68187878787876116d6565b60005b84518110156109805760008582815181106107e7576107e6612ba1565b5b60200260200101519050600085838151811061080657610805612ba1565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156108a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089e90612734565b60405180910390fd5b81816108b391906129ad565b60008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109659190612957565b925050819055505050508061097990612afa565b90506107c9565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516109f79291906125e0565b60405180910390a4610a0d8187878787876116de565b505050505050565b60608151835114610a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5290612794565b60405180910390fd5b6000835167ffffffffffffffff811115610a7857610a77612bd0565b5b604051908082528060200260200182016040528015610aa65781602001602082028036833780820191505090505b50905060005b8451811015610b2357610af3858281518110610acb57610aca612ba1565b5b6020026020010151858381518110610ae657610ae5612ba1565b5b60200260200101516102ca565b828281518110610b0657610b05612ba1565b5b60200260200101818152505080610b1c90612afa565b9050610aac565b508091505092915050565b610b36611531565b73ffffffffffffffffffffffffffffffffffffffff16610b54610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614610baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba190612754565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610c9d611531565b73ffffffffffffffffffffffffffffffffffffffff16610cbb610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614610d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0890612754565b60405180910390fd5b60005b8351811015610d6557610d52848281518110610d3357610d32612ba1565b5b6020026020010151848460405180602001604052806000815250611540565b8080610d5d90612afa565b915050610d14565b50505050565b8173ffffffffffffffffffffffffffffffffffffffff16610d8a611531565b73ffffffffffffffffffffffffffffffffffffffff161415610de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd890612774565b60405180910390fd5b8060016000610dee611531565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610e9b611531565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610ee09190612617565b60405180910390a35050565b600073207fa8df3a17d96ca7ea4f2893fcdcb78a30410173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f3f5760019050610f4c565b610f4983836118c5565b90505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb9906126f4565b60405180910390fd5b610fca611531565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611010575061100f8561100a611531565b610eec565b5b61104f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611046906126d4565b60405180910390fd5b6000611059611531565b905061107981878761106a88611959565b61107388611959565b876116d6565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110790612734565b60405180910390fd5b838161111c91906129ad565b60008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111ce9190612957565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62888860405161124b92919061280f565b60405180910390a46112618288888888886119d3565b50505050505050565b611272611531565b73ffffffffffffffffffffffffffffffffffffffff16611290610c6b565b73ffffffffffffffffffffffffffffffffffffffff16146112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd90612754565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134d906126b4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156114c057600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff8183015116925050506114c4565b3390505b90565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600061153b611416565b905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156115b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a7906127d4565b60405180910390fd5b60006115ba611531565b90506115db816000876115cc88611959565b6115d588611959565b876116d6565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461163a9190612957565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516116b892919061280f565b60405180910390a46116cf816000878787876119d3565b5050505050565b505050505050565b6116fd8473ffffffffffffffffffffffffffffffffffffffff16611bba565b156118bd578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016117439594939291906124fc565b602060405180830381600087803b15801561175d57600080fd5b505af192505050801561178e57506040513d601f19601f8201168201806040525081019061178b919061219c565b60015b6118345761179a612bff565b806308c379a014156117f757506117af613035565b806117ba57506117f9565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ee9190612632565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182b90612654565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146118bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b290612674565b60405180910390fd5b505b505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606000600167ffffffffffffffff81111561197857611977612bd0565b5b6040519080825280602002602001820160405280156119a65781602001602082028036833780820191505090505b50905082816000815181106119be576119bd612ba1565b5b60200260200101818152505080915050919050565b6119f28473ffffffffffffffffffffffffffffffffffffffff16611bba565b15611bb2578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611a38959493929190612564565b602060405180830381600087803b158015611a5257600080fd5b505af1925050508015611a8357506040513d601f19601f82011682018060405250810190611a80919061219c565b60015b611b2957611a8f612bff565b806308c379a01415611aec5750611aa4613035565b80611aaf5750611aee565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae39190612632565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2090612654565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba790612674565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b6000611be0611bdb8461285d565b612838565b90508083825260208201905082856020860282011115611c0357611c02612c26565b5b60005b85811015611c335781611c198882611cef565b845260208401935060208301925050600181019050611c06565b5050509392505050565b6000611c50611c4b84612889565b612838565b90508083825260208201905082856020860282011115611c7357611c72612c26565b5b60005b85811015611ca35781611c898882611dcd565b845260208401935060208301925050600181019050611c76565b5050509392505050565b6000611cc0611cbb846128b5565b612838565b905082815260208101848484011115611cdc57611cdb612c2b565b5b611ce7848285612a55565b509392505050565b600081359050611cfe816130cb565b92915050565b600082601f830112611d1957611d18612c21565b5b8135611d29848260208601611bcd565b91505092915050565b600082601f830112611d4757611d46612c21565b5b8135611d57848260208601611c3d565b91505092915050565b600081359050611d6f816130e2565b92915050565b600081359050611d84816130f9565b92915050565b600081519050611d99816130f9565b92915050565b600082601f830112611db457611db3612c21565b5b8135611dc4848260208601611cad565b91505092915050565b600081359050611ddc81613110565b92915050565b600060208284031215611df857611df7612c35565b5b6000611e0684828501611cef565b91505092915050565b60008060408385031215611e2657611e25612c35565b5b6000611e3485828601611cef565b9250506020611e4585828601611cef565b9150509250929050565b600080600080600060a08688031215611e6b57611e6a612c35565b5b6000611e7988828901611cef565b9550506020611e8a88828901611cef565b945050604086013567ffffffffffffffff811115611eab57611eaa612c30565b5b611eb788828901611d32565b935050606086013567ffffffffffffffff811115611ed857611ed7612c30565b5b611ee488828901611d32565b925050608086013567ffffffffffffffff811115611f0557611f04612c30565b5b611f1188828901611d9f565b9150509295509295909350565b600080600080600060a08688031215611f3a57611f39612c35565b5b6000611f4888828901611cef565b9550506020611f5988828901611cef565b9450506040611f6a88828901611dcd565b9350506060611f7b88828901611dcd565b925050608086013567ffffffffffffffff811115611f9c57611f9b612c30565b5b611fa888828901611d9f565b9150509295509295909350565b60008060408385031215611fcc57611fcb612c35565b5b6000611fda85828601611cef565b9250506020611feb85828601611d60565b9150509250929050565b6000806040838503121561200c5761200b612c35565b5b600061201a85828601611cef565b925050602061202b85828601611dcd565b9150509250929050565b60008060006060848603121561204e5761204d612c35565b5b600061205c86828701611cef565b935050602061206d86828701611dcd565b925050604061207e86828701611dcd565b9150509250925092565b6000806040838503121561209f5761209e612c35565b5b600083013567ffffffffffffffff8111156120bd576120bc612c30565b5b6120c985828601611d04565b925050602083013567ffffffffffffffff8111156120ea576120e9612c30565b5b6120f685828601611d32565b9150509250929050565b60008060006060848603121561211957612118612c35565b5b600084013567ffffffffffffffff81111561213757612136612c30565b5b61214386828701611d04565b935050602061215486828701611dcd565b925050604061216586828701611dcd565b9150509250925092565b60006020828403121561218557612184612c35565b5b600061219384828501611d75565b91505092915050565b6000602082840312156121b2576121b1612c35565b5b60006121c084828501611d8a565b91505092915050565b6000602082840312156121df576121de612c35565b5b60006121ed84828501611dcd565b91505092915050565b600061220283836124c3565b60208301905092915050565b612217816129e1565b82525050565b6000612228826128f6565b6122328185612924565b935061223d836128e6565b8060005b8381101561226e57815161225588826121f6565b975061226083612917565b925050600181019050612241565b5085935050505092915050565b612284816129f3565b82525050565b600061229582612901565b61229f8185612935565b93506122af818560208601612a64565b6122b881612c3a565b840191505092915050565b60006122ce8261290c565b6122d88185612946565b93506122e8818560208601612a64565b6122f181612c3a565b840191505092915050565b6000612309603483612946565b915061231482612c58565b604082019050919050565b600061232c602883612946565b915061233782612ca7565b604082019050919050565b600061234f602b83612946565b915061235a82612cf6565b604082019050919050565b6000612372602683612946565b915061237d82612d45565b604082019050919050565b6000612395602983612946565b91506123a082612d94565b604082019050919050565b60006123b8602583612946565b91506123c382612de3565b604082019050919050565b60006123db603283612946565b91506123e682612e32565b604082019050919050565b60006123fe602a83612946565b915061240982612e81565b604082019050919050565b6000612421602083612946565b915061242c82612ed0565b602082019050919050565b6000612444602983612946565b915061244f82612ef9565b604082019050919050565b6000612467602983612946565b915061247282612f48565b604082019050919050565b600061248a602883612946565b915061249582612f97565b604082019050919050565b60006124ad602183612946565b91506124b882612fe6565b604082019050919050565b6124cc81612a4b565b82525050565b6124db81612a4b565b82525050565b60006020820190506124f6600083018461220e565b92915050565b600060a082019050612511600083018861220e565b61251e602083018761220e565b8181036040830152612530818661221d565b90508181036060830152612544818561221d565b90508181036080830152612558818461228a565b90509695505050505050565b600060a082019050612579600083018861220e565b612586602083018761220e565b61259360408301866124d2565b6125a060608301856124d2565b81810360808301526125b2818461228a565b90509695505050505050565b600060208201905081810360008301526125d8818461221d565b905092915050565b600060408201905081810360008301526125fa818561221d565b9050818103602083015261260e818461221d565b90509392505050565b600060208201905061262c600083018461227b565b92915050565b6000602082019050818103600083015261264c81846122c3565b905092915050565b6000602082019050818103600083015261266d816122fc565b9050919050565b6000602082019050818103600083015261268d8161231f565b9050919050565b600060208201905081810360008301526126ad81612342565b9050919050565b600060208201905081810360008301526126cd81612365565b9050919050565b600060208201905081810360008301526126ed81612388565b9050919050565b6000602082019050818103600083015261270d816123ab565b9050919050565b6000602082019050818103600083015261272d816123ce565b9050919050565b6000602082019050818103600083015261274d816123f1565b9050919050565b6000602082019050818103600083015261276d81612414565b9050919050565b6000602082019050818103600083015261278d81612437565b9050919050565b600060208201905081810360008301526127ad8161245a565b9050919050565b600060208201905081810360008301526127cd8161247d565b9050919050565b600060208201905081810360008301526127ed816124a0565b9050919050565b600060208201905061280960008301846124d2565b92915050565b600060408201905061282460008301856124d2565b61283160208301846124d2565b9392505050565b6000612842612853565b905061284e8282612ac9565b919050565b6000604051905090565b600067ffffffffffffffff82111561287857612877612bd0565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156128a4576128a3612bd0565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156128d0576128cf612bd0565b5b6128d982612c3a565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061296282612a4b565b915061296d83612a4b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156129a2576129a1612b43565b5b828201905092915050565b60006129b882612a4b565b91506129c383612a4b565b9250828210156129d6576129d5612b43565b5b828203905092915050565b60006129ec82612a2b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612a82578082015181840152602081019050612a67565b83811115612a91576000848401525b50505050565b60006002820490506001821680612aaf57607f821691505b60208210811415612ac357612ac2612b72565b5b50919050565b612ad282612c3a565b810181811067ffffffffffffffff82111715612af157612af0612bd0565b5b80604052505050565b6000612b0582612a4b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612b3857612b37612b43565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115612c1e5760046000803e612c1b600051612c4b565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613045576130c8565b61304d612853565b60043d036004823e80513d602482011167ffffffffffffffff821117156130755750506130c8565b808201805167ffffffffffffffff81111561309357505050506130c8565b80602083010160043d0385018111156130b05750505050506130c8565b6130bf82602001850186612ac9565b82955050505050505b90565b6130d4816129e1565b81146130df57600080fd5b50565b6130eb816129f3565b81146130f657600080fd5b50565b613102816129ff565b811461310d57600080fd5b50565b61311981612a4b565b811461312457600080fd5b5056fea26469706673582212203843a0bb8b13b2c27bd977f227ffef37ea01ad3253338ea883cfbf9e84d1e2a764736f6c63430008070033
Deployed Bytecode Sourcemap
34050:1497:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19296:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18332:297;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19040:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34228:135;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35159:106;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21999:1239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19693:549;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32755:148;;;:::i;:::-;;32104:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34375:240;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20315:311;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34711:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20938:984;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33058:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19296:231;19382:7;19429:1;19410:21;;:7;:21;;;;19402:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;19497:9;:13;19507:2;19497:13;;;;;;;;;;;:22;19511:7;19497:22;;;;;;;;;;;;;;;;19490:29;;19296:231;;;;:::o;18332:297::-;18434:4;18473:26;18458:41;;;:11;:41;;;;:110;;;;18531:37;18516:52;;;:11;:52;;;;18458:110;:163;;;;18585:36;18609:11;18585:23;:36::i;:::-;18458:163;18451:170;;18332:297;;;:::o;19040:105::-;19100:13;19133:4;19126:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19040:105;;;:::o;34228:135::-;32335:12;:10;:12::i;:::-;32324:23;;:7;:5;:7::i;:::-;:23;;;32316:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34320:35:::1;34326:9;34337:5;34344:6;34320:35;;;;;;;;;;;::::0;:5:::1;:35::i;:::-;34228:135:::0;;;:::o;35159:106::-;32335:12;:10;:12::i;:::-;32324:23;;:7;:5;:7::i;:::-;:23;;;32316:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35229:10:::1;35221:28;;:36;35250:6;35221:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;35159:106:::0;:::o;21999:1239::-;22264:7;:14;22250:3;:10;:28;22242:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;22356:1;22342:16;;:2;:16;;;;22334:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;22441:12;:10;:12::i;:::-;22433:20;;:4;:20;;;:60;;;;22457:36;22474:4;22480:12;:10;:12::i;:::-;22457:16;:36::i;:::-;22433:60;22411:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;22584:16;22603:12;:10;:12::i;:::-;22584:31;;22628:60;22649:8;22659:4;22665:2;22669:3;22674:7;22683:4;22628:20;:60::i;:::-;22706:9;22701:377;22725:3;:10;22721:1;:14;22701:377;;;22757:10;22770:3;22774:1;22770:6;;;;;;;;:::i;:::-;;;;;;;;22757:19;;22791:14;22808:7;22816:1;22808:10;;;;;;;;:::i;:::-;;;;;;;;22791:27;;22835:19;22857:9;:13;22867:2;22857:13;;;;;;;;;;;:19;22871:4;22857:19;;;;;;;;;;;;;;;;22835:41;;22914:6;22899:11;:21;;22891:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23018:6;23004:11;:20;;;;:::i;:::-;22982:9;:13;22992:2;22982:13;;;;;;;;;;;:19;22996:4;22982:19;;;;;;;;;;;;;;;:42;;;;23060:6;23039:9;:13;23049:2;23039:13;;;;;;;;;;;:17;23053:2;23039:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;22742:336;;;22737:3;;;;:::i;:::-;;;22701:377;;;;23125:2;23095:47;;23119:4;23095:47;;23109:8;23095:47;;;23129:3;23134:7;23095:47;;;;;;;:::i;:::-;;;;;;;;23155:75;23191:8;23201:4;23207:2;23211:3;23216:7;23225:4;23155:35;:75::i;:::-;22231:1007;21999:1239;;;;;:::o;19693:549::-;19874:16;19935:3;:10;19916:8;:15;:29;19908:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;20004:30;20051:8;:15;20037:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20004:63;;20085:9;20080:122;20104:8;:15;20100:1;:19;20080:122;;;20160:30;20170:8;20179:1;20170:11;;;;;;;;:::i;:::-;;;;;;;;20183:3;20187:1;20183:6;;;;;;;;:::i;:::-;;;;;;;;20160:9;:30::i;:::-;20141:13;20155:1;20141:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;20121:3;;;;:::i;:::-;;;20080:122;;;;20221:13;20214:20;;;19693:549;;;;:::o;32755:148::-;32335:12;:10;:12::i;:::-;32324:23;;:7;:5;:7::i;:::-;:23;;;32316:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32862:1:::1;32825:40;;32846:6;;;;;;;;;;;32825:40;;;;;;;;;;;;32893:1;32876:6;;:19;;;;;;;;;;;;;;;;;;32755:148::o:0;32104:87::-;32150:7;32177:6;;;;;;;;;;;32170:13;;32104:87;:::o;34375:240::-;32335:12;:10;:12::i;:::-;32324:23;;:7;:5;:7::i;:::-;:23;;;32316:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34494:6:::1;34490:118;34510:14;:21;34506:1;:25;34490:118;;;34553:43;34559:14;34574:1;34559:17;;;;;;;;:::i;:::-;;;;;;;;34578:5;34585:6;34553:43;;;;;;;;;;;::::0;:5:::1;:43::i;:::-;34533:3;;;;;:::i;:::-;;;;34490:118;;;;34375:240:::0;;;:::o;20315:311::-;20434:8;20418:24;;:12;:10;:12::i;:::-;:24;;;;20410:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;20546:8;20501:18;:32;20520:12;:10;:12::i;:::-;20501:32;;;;;;;;;;;;;;;:42;20534:8;20501:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;20599:8;20570:48;;20585:12;:10;:12::i;:::-;20570:48;;;20609:8;20570:48;;;;;;:::i;:::-;;;;;;;;20315:311;;:::o;34711:436::-;34801:15;34930:42;34909:64;;:9;:64;;;34905:108;;;34997:4;34990:11;;;;34905:108;35096:43;35121:6;35129:9;35096:24;:43::i;:::-;35089:50;;34711:436;;;;;:::o;20938:984::-;21178:1;21164:16;;:2;:16;;;;21156:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;21263:12;:10;:12::i;:::-;21255:20;;:4;:20;;;:60;;;;21279:36;21296:4;21302:12;:10;:12::i;:::-;21279:16;:36::i;:::-;21255:60;21233:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;21397:16;21416:12;:10;:12::i;:::-;21397:31;;21441:96;21462:8;21472:4;21478:2;21482:21;21500:2;21482:17;:21::i;:::-;21505:25;21523:6;21505:17;:25::i;:::-;21532:4;21441:20;:96::i;:::-;21550:19;21572:9;:13;21582:2;21572:13;;;;;;;;;;;:19;21586:4;21572:19;;;;;;;;;;;;;;;;21550:41;;21625:6;21610:11;:21;;21602:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;21725:6;21711:11;:20;;;;:::i;:::-;21689:9;:13;21699:2;21689:13;;;;;;;;;;;:19;21703:4;21689:19;;;;;;;;;;;;;;;:42;;;;21763:6;21742:9;:13;21752:2;21742:13;;;;;;;;;;;:17;21756:2;21742:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;21818:2;21787:46;;21812:4;21787:46;;21802:8;21787:46;;;21822:2;21826:6;21787:46;;;;;;;:::i;:::-;;;;;;;;21846:68;21877:8;21887:4;21893:2;21897;21901:6;21909:4;21846:30;:68::i;:::-;21145:777;;20938:984;;;;;:::o;33058:244::-;32335:12;:10;:12::i;:::-;32324:23;;:7;:5;:7::i;:::-;:23;;;32316:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33167:1:::1;33147:22;;:8;:22;;;;33139:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33257:8;33228:38;;33249:6;;;;;;;;;;;33228:38;;;;;;;;;;;;33286:8;33277:6;;:17;;;;;;;;;;;;;;;;;;33058:244:::0;:::o;33353:650::-;33424:22;33490:4;33468:27;;:10;:27;;;33464:508;;;33512:18;33533:8;;33512:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33556:13;33572:8;;:15;;33556:31;;33824:42;33794:5;33787;33783:17;33777:24;33751:134;33741:144;;33611:289;;33464:508;;;33949:10;33932:28;;33464:508;33353:650;:::o;1537:157::-;1622:4;1661:25;1646:40;;;:11;:40;;;;1639:47;;1537:157;;;:::o;35419:125::-;35473:14;35512:24;:22;:24::i;:::-;35505:31;;35419:125;:::o;24571:556::-;24705:1;24686:21;;:7;:21;;;;24678:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24758:16;24777:12;:10;:12::i;:::-;24758:31;;24802:107;24823:8;24841:1;24845:7;24854:21;24872:2;24854:17;:21::i;:::-;24877:25;24895:6;24877:17;:25::i;:::-;24904:4;24802:20;:107::i;:::-;24948:6;24922:9;:13;24932:2;24922:13;;;;;;;;;;;:22;24936:7;24922:22;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;25007:7;24970:57;;25003:1;24970:57;;24985:8;24970:57;;;25016:2;25020:6;24970:57;;;;;;;:::i;:::-;;;;;;;;25040:79;25071:8;25089:1;25093:7;25102:2;25106:6;25114:4;25040:30;:79::i;:::-;24667:460;24571:556;;;;:::o;29032:245::-;;;;;;;:::o;30055:799::-;30309:15;:2;:13;;;:15::i;:::-;30305:542;;;30362:2;30345:43;;;30389:8;30399:4;30405:3;30410:7;30419:4;30345:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30341:495;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;30709:6;30702:14;;;;;;;;;;;:::i;:::-;;;;;;;;30341:495;;;30758:62;;;;;;;;;;:::i;:::-;;;;;;;;30341:495;30486:52;;;30474:64;;;:8;:64;;;;30470:163;;30563:50;;;;;;;;;;:::i;:::-;;;;;;;;30470:163;30425:223;30305:542;30055:799;;;;;;:::o;20698:168::-;20797:4;20821:18;:27;20840:7;20821:27;;;;;;;;;;;;;;;:37;20849:8;20821:37;;;;;;;;;;;;;;;;;;;;;;;;;20814:44;;20698:168;;;;:::o;30862:198::-;30928:16;30957:22;30996:1;30982:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30957:41;;31020:7;31009:5;31015:1;31009:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;31047:5;31040:12;;;30862:198;;;:::o;29285:762::-;29514:15;:2;:13;;;:15::i;:::-;29510:530;;;29567:2;29550:38;;;29589:8;29599:4;29605:2;29609:6;29617:4;29550:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;29546:483;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;29902:6;29895:14;;;;;;;;;;;:::i;:::-;;;;;;;;29546:483;;;29951:62;;;;;;;;;;:::i;:::-;;;;;;;;29546:483;29684:47;;;29672:59;;;:8;:59;;;;29668:158;;29756:50;;;;;;;;;;:::i;:::-;;;;;;;;29668:158;29623:218;29510:530;29285:762;;;;;;:::o;3319:422::-;3379:4;3587:12;3698:7;3686:20;3678:28;;3732:1;3725:4;:8;3718:15;;;3319:422;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:139::-;1959:5;1997:6;1984:20;1975:29;;2013:33;2040:5;2013:33;:::i;:::-;1913:139;;;;:::o;2075:370::-;2146:5;2195:3;2188:4;2180:6;2176:17;2172:27;2162:122;;2203:79;;:::i;:::-;2162:122;2320:6;2307:20;2345:94;2435:3;2427:6;2420:4;2412:6;2408:17;2345:94;:::i;:::-;2336:103;;2152:293;2075:370;;;;:::o;2468:::-;2539:5;2588:3;2581:4;2573:6;2569:17;2565:27;2555:122;;2596:79;;:::i;:::-;2555:122;2713:6;2700:20;2738:94;2828:3;2820:6;2813:4;2805:6;2801:17;2738:94;:::i;:::-;2729:103;;2545:293;2468:370;;;;:::o;2844:133::-;2887:5;2925:6;2912:20;2903:29;;2941:30;2965:5;2941:30;:::i;:::-;2844:133;;;;:::o;2983:137::-;3028:5;3066:6;3053:20;3044:29;;3082:32;3108:5;3082:32;:::i;:::-;2983:137;;;;:::o;3126:141::-;3182:5;3213:6;3207:13;3198:22;;3229:32;3255:5;3229:32;:::i;:::-;3126:141;;;;:::o;3286:338::-;3341:5;3390:3;3383:4;3375:6;3371:17;3367:27;3357:122;;3398:79;;:::i;:::-;3357:122;3515:6;3502:20;3540:78;3614:3;3606:6;3599:4;3591:6;3587:17;3540:78;:::i;:::-;3531:87;;3347:277;3286:338;;;;:::o;3630:139::-;3676:5;3714:6;3701:20;3692:29;;3730:33;3757:5;3730:33;:::i;:::-;3630:139;;;;:::o;3775:329::-;3834:6;3883:2;3871:9;3862:7;3858:23;3854:32;3851:119;;;3889:79;;:::i;:::-;3851:119;4009:1;4034:53;4079:7;4070:6;4059:9;4055:22;4034:53;:::i;:::-;4024:63;;3980:117;3775:329;;;;:::o;4110:474::-;4178:6;4186;4235:2;4223:9;4214:7;4210:23;4206:32;4203:119;;;4241:79;;:::i;:::-;4203:119;4361:1;4386:53;4431:7;4422:6;4411:9;4407:22;4386:53;:::i;:::-;4376:63;;4332:117;4488:2;4514:53;4559:7;4550:6;4539:9;4535:22;4514:53;:::i;:::-;4504:63;;4459:118;4110:474;;;;;:::o;4590:1509::-;4744:6;4752;4760;4768;4776;4825:3;4813:9;4804:7;4800:23;4796:33;4793:120;;;4832:79;;:::i;:::-;4793:120;4952:1;4977:53;5022:7;5013:6;5002:9;4998:22;4977:53;:::i;:::-;4967:63;;4923:117;5079:2;5105:53;5150:7;5141:6;5130:9;5126:22;5105:53;:::i;:::-;5095:63;;5050:118;5235:2;5224:9;5220:18;5207:32;5266:18;5258:6;5255:30;5252:117;;;5288:79;;:::i;:::-;5252:117;5393:78;5463:7;5454:6;5443:9;5439:22;5393:78;:::i;:::-;5383:88;;5178:303;5548:2;5537:9;5533:18;5520:32;5579:18;5571:6;5568:30;5565:117;;;5601:79;;:::i;:::-;5565:117;5706:78;5776:7;5767:6;5756:9;5752:22;5706:78;:::i;:::-;5696:88;;5491:303;5861:3;5850:9;5846:19;5833:33;5893:18;5885:6;5882:30;5879:117;;;5915:79;;:::i;:::-;5879:117;6020:62;6074:7;6065:6;6054:9;6050:22;6020:62;:::i;:::-;6010:72;;5804:288;4590:1509;;;;;;;;:::o;6105:1089::-;6209:6;6217;6225;6233;6241;6290:3;6278:9;6269:7;6265:23;6261:33;6258:120;;;6297:79;;:::i;:::-;6258:120;6417:1;6442:53;6487:7;6478:6;6467:9;6463:22;6442:53;:::i;:::-;6432:63;;6388:117;6544:2;6570:53;6615:7;6606:6;6595:9;6591:22;6570:53;:::i;:::-;6560:63;;6515:118;6672:2;6698:53;6743:7;6734:6;6723:9;6719:22;6698:53;:::i;:::-;6688:63;;6643:118;6800:2;6826:53;6871:7;6862:6;6851:9;6847:22;6826:53;:::i;:::-;6816:63;;6771:118;6956:3;6945:9;6941:19;6928:33;6988:18;6980:6;6977:30;6974:117;;;7010:79;;:::i;:::-;6974:117;7115:62;7169:7;7160:6;7149:9;7145:22;7115:62;:::i;:::-;7105:72;;6899:288;6105:1089;;;;;;;;:::o;7200:468::-;7265:6;7273;7322:2;7310:9;7301:7;7297:23;7293:32;7290:119;;;7328:79;;:::i;:::-;7290:119;7448:1;7473:53;7518:7;7509:6;7498:9;7494:22;7473:53;:::i;:::-;7463:63;;7419:117;7575:2;7601:50;7643:7;7634:6;7623:9;7619:22;7601:50;:::i;:::-;7591:60;;7546:115;7200:468;;;;;:::o;7674:474::-;7742:6;7750;7799:2;7787:9;7778:7;7774:23;7770:32;7767:119;;;7805:79;;:::i;:::-;7767:119;7925:1;7950:53;7995:7;7986:6;7975:9;7971:22;7950:53;:::i;:::-;7940:63;;7896:117;8052:2;8078:53;8123:7;8114:6;8103:9;8099:22;8078:53;:::i;:::-;8068:63;;8023:118;7674:474;;;;;:::o;8154:619::-;8231:6;8239;8247;8296:2;8284:9;8275:7;8271:23;8267:32;8264:119;;;8302:79;;:::i;:::-;8264:119;8422:1;8447:53;8492:7;8483:6;8472:9;8468:22;8447:53;:::i;:::-;8437:63;;8393:117;8549:2;8575:53;8620:7;8611:6;8600:9;8596:22;8575:53;:::i;:::-;8565:63;;8520:118;8677:2;8703:53;8748:7;8739:6;8728:9;8724:22;8703:53;:::i;:::-;8693:63;;8648:118;8154:619;;;;;:::o;8779:894::-;8897:6;8905;8954:2;8942:9;8933:7;8929:23;8925:32;8922:119;;;8960:79;;:::i;:::-;8922:119;9108:1;9097:9;9093:17;9080:31;9138:18;9130:6;9127:30;9124:117;;;9160:79;;:::i;:::-;9124:117;9265:78;9335:7;9326:6;9315:9;9311:22;9265:78;:::i;:::-;9255:88;;9051:302;9420:2;9409:9;9405:18;9392:32;9451:18;9443:6;9440:30;9437:117;;;9473:79;;:::i;:::-;9437:117;9578:78;9648:7;9639:6;9628:9;9624:22;9578:78;:::i;:::-;9568:88;;9363:303;8779:894;;;;;:::o;9679:829::-;9781:6;9789;9797;9846:2;9834:9;9825:7;9821:23;9817:32;9814:119;;;9852:79;;:::i;:::-;9814:119;10000:1;9989:9;9985:17;9972:31;10030:18;10022:6;10019:30;10016:117;;;10052:79;;:::i;:::-;10016:117;10157:78;10227:7;10218:6;10207:9;10203:22;10157:78;:::i;:::-;10147:88;;9943:302;10284:2;10310:53;10355:7;10346:6;10335:9;10331:22;10310:53;:::i;:::-;10300:63;;10255:118;10412:2;10438:53;10483:7;10474:6;10463:9;10459:22;10438:53;:::i;:::-;10428:63;;10383:118;9679:829;;;;;:::o;10514:327::-;10572:6;10621:2;10609:9;10600:7;10596:23;10592:32;10589:119;;;10627:79;;:::i;:::-;10589:119;10747:1;10772:52;10816:7;10807:6;10796:9;10792:22;10772:52;:::i;:::-;10762:62;;10718:116;10514:327;;;;:::o;10847:349::-;10916:6;10965:2;10953:9;10944:7;10940:23;10936:32;10933:119;;;10971:79;;:::i;:::-;10933:119;11091:1;11116:63;11171:7;11162:6;11151:9;11147:22;11116:63;:::i;:::-;11106:73;;11062:127;10847:349;;;;:::o;11202:329::-;11261:6;11310:2;11298:9;11289:7;11285:23;11281:32;11278:119;;;11316:79;;:::i;:::-;11278:119;11436:1;11461:53;11506:7;11497:6;11486:9;11482:22;11461:53;:::i;:::-;11451:63;;11407:117;11202:329;;;;:::o;11537:179::-;11606:10;11627:46;11669:3;11661:6;11627:46;:::i;:::-;11705:4;11700:3;11696:14;11682:28;;11537:179;;;;:::o;11722:118::-;11809:24;11827:5;11809:24;:::i;:::-;11804:3;11797:37;11722:118;;:::o;11876:732::-;11995:3;12024:54;12072:5;12024:54;:::i;:::-;12094:86;12173:6;12168:3;12094:86;:::i;:::-;12087:93;;12204:56;12254:5;12204:56;:::i;:::-;12283:7;12314:1;12299:284;12324:6;12321:1;12318:13;12299:284;;;12400:6;12394:13;12427:63;12486:3;12471:13;12427:63;:::i;:::-;12420:70;;12513:60;12566:6;12513:60;:::i;:::-;12503:70;;12359:224;12346:1;12343;12339:9;12334:14;;12299:284;;;12303:14;12599:3;12592:10;;12000:608;;;11876:732;;;;:::o;12614:109::-;12695:21;12710:5;12695:21;:::i;:::-;12690:3;12683:34;12614:109;;:::o;12729:360::-;12815:3;12843:38;12875:5;12843:38;:::i;:::-;12897:70;12960:6;12955:3;12897:70;:::i;:::-;12890:77;;12976:52;13021:6;13016:3;13009:4;13002:5;12998:16;12976:52;:::i;:::-;13053:29;13075:6;13053:29;:::i;:::-;13048:3;13044:39;13037:46;;12819:270;12729:360;;;;:::o;13095:364::-;13183:3;13211:39;13244:5;13211:39;:::i;:::-;13266:71;13330:6;13325:3;13266:71;:::i;:::-;13259:78;;13346:52;13391:6;13386:3;13379:4;13372:5;13368:16;13346:52;:::i;:::-;13423:29;13445:6;13423:29;:::i;:::-;13418:3;13414:39;13407:46;;13187:272;13095:364;;;;:::o;13465:366::-;13607:3;13628:67;13692:2;13687:3;13628:67;:::i;:::-;13621:74;;13704:93;13793:3;13704:93;:::i;:::-;13822:2;13817:3;13813:12;13806:19;;13465:366;;;:::o;13837:::-;13979:3;14000:67;14064:2;14059:3;14000:67;:::i;:::-;13993:74;;14076:93;14165:3;14076:93;:::i;:::-;14194:2;14189:3;14185:12;14178:19;;13837:366;;;:::o;14209:::-;14351:3;14372:67;14436:2;14431:3;14372:67;:::i;:::-;14365:74;;14448:93;14537:3;14448:93;:::i;:::-;14566:2;14561:3;14557:12;14550:19;;14209:366;;;:::o;14581:::-;14723:3;14744:67;14808:2;14803:3;14744:67;:::i;:::-;14737:74;;14820:93;14909:3;14820:93;:::i;:::-;14938:2;14933:3;14929:12;14922:19;;14581:366;;;:::o;14953:::-;15095:3;15116:67;15180:2;15175:3;15116:67;:::i;:::-;15109:74;;15192:93;15281:3;15192:93;:::i;:::-;15310:2;15305:3;15301:12;15294:19;;14953:366;;;:::o;15325:::-;15467:3;15488:67;15552:2;15547:3;15488:67;:::i;:::-;15481:74;;15564:93;15653:3;15564:93;:::i;:::-;15682:2;15677:3;15673:12;15666:19;;15325:366;;;:::o;15697:::-;15839:3;15860:67;15924:2;15919:3;15860:67;:::i;:::-;15853:74;;15936:93;16025:3;15936:93;:::i;:::-;16054:2;16049:3;16045:12;16038:19;;15697:366;;;:::o;16069:::-;16211:3;16232:67;16296:2;16291:3;16232:67;:::i;:::-;16225:74;;16308:93;16397:3;16308:93;:::i;:::-;16426:2;16421:3;16417:12;16410:19;;16069:366;;;:::o;16441:::-;16583:3;16604:67;16668:2;16663:3;16604:67;:::i;:::-;16597:74;;16680:93;16769:3;16680:93;:::i;:::-;16798:2;16793:3;16789:12;16782:19;;16441:366;;;:::o;16813:::-;16955:3;16976:67;17040:2;17035:3;16976:67;:::i;:::-;16969:74;;17052:93;17141:3;17052:93;:::i;:::-;17170:2;17165:3;17161:12;17154:19;;16813:366;;;:::o;17185:::-;17327:3;17348:67;17412:2;17407:3;17348:67;:::i;:::-;17341:74;;17424:93;17513:3;17424:93;:::i;:::-;17542:2;17537:3;17533:12;17526:19;;17185:366;;;:::o;17557:::-;17699:3;17720:67;17784:2;17779:3;17720:67;:::i;:::-;17713:74;;17796:93;17885:3;17796:93;:::i;:::-;17914:2;17909:3;17905:12;17898:19;;17557:366;;;:::o;17929:::-;18071:3;18092:67;18156:2;18151:3;18092:67;:::i;:::-;18085:74;;18168:93;18257:3;18168:93;:::i;:::-;18286:2;18281:3;18277:12;18270:19;;17929:366;;;:::o;18301:108::-;18378:24;18396:5;18378:24;:::i;:::-;18373:3;18366:37;18301:108;;:::o;18415:118::-;18502:24;18520:5;18502:24;:::i;:::-;18497:3;18490:37;18415:118;;:::o;18539:222::-;18632:4;18670:2;18659:9;18655:18;18647:26;;18683:71;18751:1;18740:9;18736:17;18727:6;18683:71;:::i;:::-;18539:222;;;;:::o;18767:1053::-;19090:4;19128:3;19117:9;19113:19;19105:27;;19142:71;19210:1;19199:9;19195:17;19186:6;19142:71;:::i;:::-;19223:72;19291:2;19280:9;19276:18;19267:6;19223:72;:::i;:::-;19342:9;19336:4;19332:20;19327:2;19316:9;19312:18;19305:48;19370:108;19473:4;19464:6;19370:108;:::i;:::-;19362:116;;19525:9;19519:4;19515:20;19510:2;19499:9;19495:18;19488:48;19553:108;19656:4;19647:6;19553:108;:::i;:::-;19545:116;;19709:9;19703:4;19699:20;19693:3;19682:9;19678:19;19671:49;19737:76;19808:4;19799:6;19737:76;:::i;:::-;19729:84;;18767:1053;;;;;;;;:::o;19826:751::-;20049:4;20087:3;20076:9;20072:19;20064:27;;20101:71;20169:1;20158:9;20154:17;20145:6;20101:71;:::i;:::-;20182:72;20250:2;20239:9;20235:18;20226:6;20182:72;:::i;:::-;20264;20332:2;20321:9;20317:18;20308:6;20264:72;:::i;:::-;20346;20414:2;20403:9;20399:18;20390:6;20346:72;:::i;:::-;20466:9;20460:4;20456:20;20450:3;20439:9;20435:19;20428:49;20494:76;20565:4;20556:6;20494:76;:::i;:::-;20486:84;;19826:751;;;;;;;;:::o;20583:373::-;20726:4;20764:2;20753:9;20749:18;20741:26;;20813:9;20807:4;20803:20;20799:1;20788:9;20784:17;20777:47;20841:108;20944:4;20935:6;20841:108;:::i;:::-;20833:116;;20583:373;;;;:::o;20962:634::-;21183:4;21221:2;21210:9;21206:18;21198:26;;21270:9;21264:4;21260:20;21256:1;21245:9;21241:17;21234:47;21298:108;21401:4;21392:6;21298:108;:::i;:::-;21290:116;;21453:9;21447:4;21443:20;21438:2;21427:9;21423:18;21416:48;21481:108;21584:4;21575:6;21481:108;:::i;:::-;21473:116;;20962:634;;;;;:::o;21602:210::-;21689:4;21727:2;21716:9;21712:18;21704:26;;21740:65;21802:1;21791:9;21787:17;21778:6;21740:65;:::i;:::-;21602:210;;;;:::o;21818:313::-;21931:4;21969:2;21958:9;21954:18;21946:26;;22018:9;22012:4;22008:20;22004:1;21993:9;21989:17;21982:47;22046:78;22119:4;22110:6;22046:78;:::i;:::-;22038:86;;21818:313;;;;:::o;22137:419::-;22303:4;22341:2;22330:9;22326:18;22318:26;;22390:9;22384:4;22380:20;22376:1;22365:9;22361:17;22354:47;22418:131;22544:4;22418:131;:::i;:::-;22410:139;;22137:419;;;:::o;22562:::-;22728:4;22766:2;22755:9;22751:18;22743:26;;22815:9;22809:4;22805:20;22801:1;22790:9;22786:17;22779:47;22843:131;22969:4;22843:131;:::i;:::-;22835:139;;22562:419;;;:::o;22987:::-;23153:4;23191:2;23180:9;23176:18;23168:26;;23240:9;23234:4;23230:20;23226:1;23215:9;23211:17;23204:47;23268:131;23394:4;23268:131;:::i;:::-;23260:139;;22987:419;;;:::o;23412:::-;23578:4;23616:2;23605:9;23601:18;23593:26;;23665:9;23659:4;23655:20;23651:1;23640:9;23636:17;23629:47;23693:131;23819:4;23693:131;:::i;:::-;23685:139;;23412:419;;;:::o;23837:::-;24003:4;24041:2;24030:9;24026:18;24018:26;;24090:9;24084:4;24080:20;24076:1;24065:9;24061:17;24054:47;24118:131;24244:4;24118:131;:::i;:::-;24110:139;;23837:419;;;:::o;24262:::-;24428:4;24466:2;24455:9;24451:18;24443:26;;24515:9;24509:4;24505:20;24501:1;24490:9;24486:17;24479:47;24543:131;24669:4;24543:131;:::i;:::-;24535:139;;24262:419;;;:::o;24687:::-;24853:4;24891:2;24880:9;24876:18;24868:26;;24940:9;24934:4;24930:20;24926:1;24915:9;24911:17;24904:47;24968:131;25094:4;24968:131;:::i;:::-;24960:139;;24687:419;;;:::o;25112:::-;25278:4;25316:2;25305:9;25301:18;25293:26;;25365:9;25359:4;25355:20;25351:1;25340:9;25336:17;25329:47;25393:131;25519:4;25393:131;:::i;:::-;25385:139;;25112:419;;;:::o;25537:::-;25703:4;25741:2;25730:9;25726:18;25718:26;;25790:9;25784:4;25780:20;25776:1;25765:9;25761:17;25754:47;25818:131;25944:4;25818:131;:::i;:::-;25810:139;;25537:419;;;:::o;25962:::-;26128:4;26166:2;26155:9;26151:18;26143:26;;26215:9;26209:4;26205:20;26201:1;26190:9;26186:17;26179:47;26243:131;26369:4;26243:131;:::i;:::-;26235:139;;25962:419;;;:::o;26387:::-;26553:4;26591:2;26580:9;26576:18;26568:26;;26640:9;26634:4;26630:20;26626:1;26615:9;26611:17;26604:47;26668:131;26794:4;26668:131;:::i;:::-;26660:139;;26387:419;;;:::o;26812:::-;26978:4;27016:2;27005:9;27001:18;26993:26;;27065:9;27059:4;27055:20;27051:1;27040:9;27036:17;27029:47;27093:131;27219:4;27093:131;:::i;:::-;27085:139;;26812:419;;;:::o;27237:::-;27403:4;27441:2;27430:9;27426:18;27418:26;;27490:9;27484:4;27480:20;27476:1;27465:9;27461:17;27454:47;27518:131;27644:4;27518:131;:::i;:::-;27510:139;;27237:419;;;:::o;27662:222::-;27755:4;27793:2;27782:9;27778:18;27770:26;;27806:71;27874:1;27863:9;27859:17;27850:6;27806:71;:::i;:::-;27662:222;;;;:::o;27890:332::-;28011:4;28049:2;28038:9;28034:18;28026:26;;28062:71;28130:1;28119:9;28115:17;28106:6;28062:71;:::i;:::-;28143:72;28211:2;28200:9;28196:18;28187:6;28143:72;:::i;:::-;27890:332;;;;;:::o;28228:129::-;28262:6;28289:20;;:::i;:::-;28279:30;;28318:33;28346:4;28338:6;28318:33;:::i;:::-;28228:129;;;:::o;28363:75::-;28396:6;28429:2;28423:9;28413:19;;28363:75;:::o;28444:311::-;28521:4;28611:18;28603:6;28600:30;28597:56;;;28633:18;;:::i;:::-;28597:56;28683:4;28675:6;28671:17;28663:25;;28743:4;28737;28733:15;28725:23;;28444:311;;;:::o;28761:::-;28838:4;28928:18;28920:6;28917:30;28914:56;;;28950:18;;:::i;:::-;28914:56;29000:4;28992:6;28988:17;28980:25;;29060:4;29054;29050:15;29042:23;;28761:311;;;:::o;29078:307::-;29139:4;29229:18;29221:6;29218:30;29215:56;;;29251:18;;:::i;:::-;29215:56;29289:29;29311:6;29289:29;:::i;:::-;29281:37;;29373:4;29367;29363:15;29355:23;;29078:307;;;:::o;29391:132::-;29458:4;29481:3;29473:11;;29511:4;29506:3;29502:14;29494:22;;29391:132;;;:::o;29529:114::-;29596:6;29630:5;29624:12;29614:22;;29529:114;;;:::o;29649:98::-;29700:6;29734:5;29728:12;29718:22;;29649:98;;;:::o;29753:99::-;29805:6;29839:5;29833:12;29823:22;;29753:99;;;:::o;29858:113::-;29928:4;29960;29955:3;29951:14;29943:22;;29858:113;;;:::o;29977:184::-;30076:11;30110:6;30105:3;30098:19;30150:4;30145:3;30141:14;30126:29;;29977:184;;;;:::o;30167:168::-;30250:11;30284:6;30279:3;30272:19;30324:4;30319:3;30315:14;30300:29;;30167:168;;;;:::o;30341:169::-;30425:11;30459:6;30454:3;30447:19;30499:4;30494:3;30490:14;30475:29;;30341:169;;;;:::o;30516:305::-;30556:3;30575:20;30593:1;30575:20;:::i;:::-;30570:25;;30609:20;30627:1;30609:20;:::i;:::-;30604:25;;30763:1;30695:66;30691:74;30688:1;30685:81;30682:107;;;30769:18;;:::i;:::-;30682:107;30813:1;30810;30806:9;30799:16;;30516:305;;;;:::o;30827:191::-;30867:4;30887:20;30905:1;30887:20;:::i;:::-;30882:25;;30921:20;30939:1;30921:20;:::i;:::-;30916:25;;30960:1;30957;30954:8;30951:34;;;30965:18;;:::i;:::-;30951:34;31010:1;31007;31003:9;30995:17;;30827:191;;;;:::o;31024:96::-;31061:7;31090:24;31108:5;31090:24;:::i;:::-;31079:35;;31024:96;;;:::o;31126:90::-;31160:7;31203:5;31196:13;31189:21;31178:32;;31126:90;;;:::o;31222:149::-;31258:7;31298:66;31291:5;31287:78;31276:89;;31222:149;;;:::o;31377:126::-;31414:7;31454:42;31447:5;31443:54;31432:65;;31377:126;;;:::o;31509:77::-;31546:7;31575:5;31564:16;;31509:77;;;:::o;31592:154::-;31676:6;31671:3;31666;31653:30;31738:1;31729:6;31724:3;31720:16;31713:27;31592:154;;;:::o;31752:307::-;31820:1;31830:113;31844:6;31841:1;31838:13;31830:113;;;31929:1;31924:3;31920:11;31914:18;31910:1;31905:3;31901:11;31894:39;31866:2;31863:1;31859:10;31854:15;;31830:113;;;31961:6;31958:1;31955:13;31952:101;;;32041:1;32032:6;32027:3;32023:16;32016:27;31952:101;31801:258;31752:307;;;:::o;32065:320::-;32109:6;32146:1;32140:4;32136:12;32126:22;;32193:1;32187:4;32183:12;32214:18;32204:81;;32270:4;32262:6;32258:17;32248:27;;32204:81;32332:2;32324:6;32321:14;32301:18;32298:38;32295:84;;;32351:18;;:::i;:::-;32295:84;32116:269;32065:320;;;:::o;32391:281::-;32474:27;32496:4;32474:27;:::i;:::-;32466:6;32462:40;32604:6;32592:10;32589:22;32568:18;32556:10;32553:34;32550:62;32547:88;;;32615:18;;:::i;:::-;32547:88;32655:10;32651:2;32644:22;32434:238;32391:281;;:::o;32678:233::-;32717:3;32740:24;32758:5;32740:24;:::i;:::-;32731:33;;32786:66;32779:5;32776:77;32773:103;;;32856:18;;:::i;:::-;32773:103;32903:1;32896:5;32892:13;32885:20;;32678:233;;;:::o;32917:180::-;32965:77;32962:1;32955:88;33062:4;33059:1;33052:15;33086:4;33083:1;33076:15;33103:180;33151:77;33148:1;33141:88;33248:4;33245:1;33238:15;33272:4;33269:1;33262:15;33289:180;33337:77;33334:1;33327:88;33434:4;33431:1;33424:15;33458:4;33455:1;33448:15;33475:180;33523:77;33520:1;33513:88;33620:4;33617:1;33610:15;33644:4;33641:1;33634:15;33661:183;33696:3;33734:1;33716:16;33713:23;33710:128;;;33772:1;33769;33766;33751:23;33794:34;33825:1;33819:8;33794:34;:::i;:::-;33787:41;;33710:128;33661:183;:::o;33850:117::-;33959:1;33956;33949:12;33973:117;34082:1;34079;34072:12;34096:117;34205:1;34202;34195:12;34219:117;34328:1;34325;34318:12;34342:117;34451:1;34448;34441:12;34465:102;34506:6;34557:2;34553:7;34548:2;34541:5;34537:14;34533:28;34523:38;;34465:102;;;:::o;34573:106::-;34617:8;34666:5;34661:3;34657:15;34636:36;;34573:106;;;:::o;34685:239::-;34825:34;34821:1;34813:6;34809:14;34802:58;34894:22;34889:2;34881:6;34877:15;34870:47;34685:239;:::o;34930:227::-;35070:34;35066:1;35058:6;35054:14;35047:58;35139:10;35134:2;35126:6;35122:15;35115:35;34930:227;:::o;35163:230::-;35303:34;35299:1;35291:6;35287:14;35280:58;35372:13;35367:2;35359:6;35355:15;35348:38;35163:230;:::o;35399:225::-;35539:34;35535:1;35527:6;35523:14;35516:58;35608:8;35603:2;35595:6;35591:15;35584:33;35399:225;:::o;35630:228::-;35770:34;35766:1;35758:6;35754:14;35747:58;35839:11;35834:2;35826:6;35822:15;35815:36;35630:228;:::o;35864:224::-;36004:34;36000:1;35992:6;35988:14;35981:58;36073:7;36068:2;36060:6;36056:15;36049:32;35864:224;:::o;36094:237::-;36234:34;36230:1;36222:6;36218:14;36211:58;36303:20;36298:2;36290:6;36286:15;36279:45;36094:237;:::o;36337:229::-;36477:34;36473:1;36465:6;36461:14;36454:58;36546:12;36541:2;36533:6;36529:15;36522:37;36337:229;:::o;36572:182::-;36712:34;36708:1;36700:6;36696:14;36689:58;36572:182;:::o;36760:228::-;36900:34;36896:1;36888:6;36884:14;36877:58;36969:11;36964:2;36956:6;36952:15;36945:36;36760:228;:::o;36994:::-;37134:34;37130:1;37122:6;37118:14;37111:58;37203:11;37198:2;37190:6;37186:15;37179:36;36994:228;:::o;37228:227::-;37368:34;37364:1;37356:6;37352:14;37345:58;37437:10;37432:2;37424:6;37420:15;37413:35;37228:227;:::o;37461:220::-;37601:34;37597:1;37589:6;37585:14;37578:58;37670:3;37665:2;37657:6;37653:15;37646:28;37461:220;:::o;37687:711::-;37726:3;37764:4;37746:16;37743:26;37740:39;;;37772:5;;37740:39;37801:20;;:::i;:::-;37876:1;37858:16;37854:24;37851:1;37845:4;37830:49;37909:4;37903:11;38008:16;38001:4;37993:6;37989:17;37986:39;37953:18;37945:6;37942:30;37926:113;37923:146;;;38054:5;;;;37923:146;38100:6;38094:4;38090:17;38136:3;38130:10;38163:18;38155:6;38152:30;38149:43;;;38185:5;;;;;;38149:43;38233:6;38226:4;38221:3;38217:14;38213:27;38292:1;38274:16;38270:24;38264:4;38260:35;38255:3;38252:44;38249:57;;;38299:5;;;;;;;38249:57;38316;38364:6;38358:4;38354:17;38346:6;38342:30;38336:4;38316:57;:::i;:::-;38389:3;38382:10;;37730:668;;;;;37687:711;;:::o;38404:122::-;38477:24;38495:5;38477:24;:::i;:::-;38470:5;38467:35;38457:63;;38516:1;38513;38506:12;38457:63;38404:122;:::o;38532:116::-;38602:21;38617:5;38602:21;:::i;:::-;38595:5;38592:32;38582:60;;38638:1;38635;38628:12;38582:60;38532:116;:::o;38654:120::-;38726:23;38743:5;38726:23;:::i;:::-;38719:5;38716:34;38706:62;;38764:1;38761;38754:12;38706:62;38654:120;:::o;38780:122::-;38853:24;38871:5;38853:24;:::i;:::-;38846:5;38843:35;38833:63;;38892:1;38889;38882:12;38833:63;38780:122;:::o
Swarm Source
ipfs://3843a0bb8b13b2c27bd977f227ffef37ea01ad3253338ea883cfbf9e84d1e2a7
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.