ERC-1155
Overview
Max Total Supply
1,888 HBB
Holders
461
Total Transfers
-
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
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
HeartbreakBears
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-04 */ // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.0 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.0 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/security/Pausable.sol // OpenZeppelin Contracts v4.4.0 (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts v4.4.0 (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts v4.4.0 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.0 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: contracts/ERC1155.sol pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) internal _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( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `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 (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `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"); unchecked { _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 (uint256 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"); unchecked { _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 ) internal { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: contracts/HeartbreakBears.sol pragma solidity ^0.8.2; contract HeartbreakBears is ERC1155, Ownable, Pausable, ReentrancyGuard { constructor() ERC1155("") { name = "Heartbreak Bear Official"; symbol = "HBB"; notRevealedUri = "ipfs://QmabicvNRx8nh7fZNV35tmsSfvsFBffHxdXGNJjsb3Sos2/1.json"; } // Reveal - https://ipfs.io/ipfs/QmTNASKD9Y1NM81fC2rcqtv9wak87cmMjVjronrbLJReva/ string public name; string public symbol; uint256 public tokenCount; string public baseUri; uint256 public cost = 0.06 ether; uint256 public maxMintAmount = 5; // uint256 public nftPerAddressLimit = 3; bool public revealed = false; string public notRevealedUri; bool public onlyWhitelisted = true; address[] public whitelistedAddresses; uint256 public nftsAvailable = 1888; function _mintChecks(uint256 amount) private { require( tokenCount + amount <= nftsAvailable, "No NFTs available for minting" ); if (msg.sender != owner()) { if (onlyWhitelisted == true) { require(isWhitelisted(msg.sender), "User is not whitelisted"); } require(msg.value >= cost * amount, "Insufficient funds"); } } // ADD AIRDROPS Function function airdrop(address[] memory accounts) public nonReentrant whenNotPaused onlyOwner { require( tokenCount + accounts.length <= nftsAvailable, "No NFTs available for minting" ); tokenCount += 1; for (uint256 i = tokenCount; i < tokenCount + accounts.length; i++) { address account = accounts[i - tokenCount]; _balances[i][account] += 1; emit TransferSingle(msg.sender, address(0), account, i, 1); _doSafeTransferAcceptanceCheck(msg.sender, address(0), account, i, 1, ""); } tokenCount += accounts.length - 1; } function mintBatch(uint256 amount) public payable nonReentrant returns(uint256 id) { require(amount > 0 && amount <= maxMintAmount, "Invalid mint amount"); _mintChecks(amount); if (amount > 1) { return _mintBatchV2(amount); } else { return _mintV2(); } } function mint() public payable nonReentrant { _mintChecks(1); _mintV2(); } function _mintV2() private whenNotPaused returns(uint256 id) { require(msg.sender != address(0), "ERC1155: mint to the zero address"); tokenCount += 1; _balances[tokenCount][msg.sender] += 1; emit TransferSingle(msg.sender, address(0), msg.sender, tokenCount, 1); _doSafeTransferAcceptanceCheck( msg.sender, address(0), msg.sender, tokenCount, 1, "" ); return tokenCount; } function _mintBatchV2(uint256 amount) private whenNotPaused returns(uint256 id) { require(msg.sender != address(0), "ERC1155: mint to the zero address"); tokenCount += 1; for (uint256 i = tokenCount; i < tokenCount + amount; i++) { _mint(msg.sender, i, 1, ""); } tokenCount += amount - 1; return tokenCount; // Here we just return the last tokenId } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function reveal(string memory _baseUri) public onlyOwner { baseUri = _baseUri; revealed = true; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseUri = _newBaseURI; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function toggleOnlyWhitelisted() public onlyOwner { if(onlyWhitelisted) { onlyWhitelisted = false; } else { onlyWhitelisted = true; } } function setNftsAvailable(uint256 _newAmountAvailable) public onlyOwner { nftsAvailable = _newAmountAvailable; } function isWhitelisted(address _user) public view returns (bool) { for (uint256 i = 0; i < whitelistedAddresses.length; i++) { if (whitelistedAddresses[i] == _user) { return true; } } return false; } function setWhitelistUsers(address[] calldata _users) public onlyOwner { delete whitelistedAddresses; whitelistedAddresses = _users; } function uri(uint256 _tokenId) public view override returns (string memory) { if (revealed == false) { return notRevealedUri; } else { return string( abi.encodePacked( baseUri, Strings.toString(_tokenId), ".json" ) ); } } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } function burn( address account, uint256 id, uint256 value ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burn(account, id, value); } function burnBatch( address account, uint256[] memory ids, uint256[] memory values ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burnBatch(account, ids, values); } function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal override whenNotPaused { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); } function withdraw() public payable onlyOwner { (bool os, ) = payable( owner() ).call{ value: address(this).balance }(""); require(os); // ============================================================================= } }
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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintBatch","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftsAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseUri","type":"string"}],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmountAvailable","type":"uint256"}],"name":"setNftsAvailable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"setWhitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405266d529ae9e8600006009556005600a55600b805460ff19908116909155600d80549091166001179055610760600f553480156200004057600080fd5b506040805160208101909152600081526200005b8162000124565b5062000067336200013d565b6003805460ff60a01b1916905560016004556040805180820190915260188082527f4865617274627265616b2042656172204f6666696369616c00000000000000006020909201918252620000bf916005916200018f565b506040805180820190915260038082526224212160e91b6020909201918252620000ec916006916200018f565b506040518060600160405280603c8152602001620032bc603c913980516200011d91600c916020909101906200018f565b5062000272565b8051620001399060029060208401906200018f565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200019d9062000235565b90600052602060002090601f016020900481019282620001c157600085556200020c565b82601f10620001dc57805160ff19168380011785556200020c565b828001600101855582156200020c579182015b828111156200020c578251825591602001919060010190620001ef565b506200021a9291506200021e565b5090565b5b808211156200021a57600081556001016200021f565b600181811c908216806200024a57607f821691505b602082108114156200026c57634e487b7160e01b600052602260045260246000fd5b50919050565b61303a80620002826000396000f3fe60806040526004361061023a5760003560e01c806355f804b31161012e5780639c70b512116100ab578063e985e9c51161006f578063e985e9c514610626578063f242432a1461066f578063f2c4ce1e1461068f578063f2fde38b146106af578063f5298aca146106cf57600080fd5b80639c70b512146105a05780639f181b5e146105ba578063a07c0e45146105d0578063a22cb465146105e6578063ba4e5c491461060657600080fd5b80637f00c7a6116100f25780637f00c7a61461050f5780638456cb591461052f5780638da5cb5b1461054457806395d89b41146105765780639abc83201461058b57600080fd5b806355f804b31461047b5780635c975abb1461049b5780636b20c454146104ba578063715018a6146104da578063729ad39e146104ef57600080fd5b80632beab4b7116101bc57806344a0d68a1161018057806344a0d68a146103d45780634c261247146103f45780634d360fb6146104145780634e1273f414610434578063518302271461046157600080fd5b80632beab4b7146103575780632eb2c2d6146103775780633af32abf146103975780633ccfd60b146103b75780633f4ba83a146103bf57600080fd5b80631249c58b116102035780631249c58b146102f957806313faede61461030357806314c791a61461031957806320e409b41461032e578063239c70ae1461034157600080fd5b8062fdd58e1461023f57806301ffc9a71461027257806306fdde03146102a2578063081c8c44146102c45780630e89341c146102d9575b600080fd5b34801561024b57600080fd5b5061025f61025a366004612692565b6106ef565b6040519081526020015b60405180910390f35b34801561027e57600080fd5b5061029261028d3660046127fa565b610786565b6040519015158152602001610269565b3480156102ae57600080fd5b506102b76107d8565b6040516102699190612aae565b3480156102d057600080fd5b506102b7610866565b3480156102e557600080fd5b506102b76102f436600461287c565b610873565b610301610949565b005b34801561030f57600080fd5b5061025f60095481565b34801561032557600080fd5b5061030161098b565b61025f61033c36600461287c565b6109dc565b34801561034d57600080fd5b5061025f600a5481565b34801561036357600080fd5b506103016103723660046126ef565b610a8d565b34801561038357600080fd5b506103016103923660046124d6565b610ad4565b3480156103a357600080fd5b506102926103b2366004612488565b610b6b565b610301610bd5565b3480156103cb57600080fd5b50610301610c73565b3480156103e057600080fd5b506103016103ef36600461287c565b610ca5565b34801561040057600080fd5b5061030161040f366004612834565b610cd4565b34801561042057600080fd5b5061030161042f36600461287c565b610d22565b34801561044057600080fd5b5061045461044f366004612797565b610d51565b6040516102699190612a76565b34801561046d57600080fd5b50600b546102929060ff1681565b34801561048757600080fd5b50610301610496366004612834565b610e7a565b3480156104a757600080fd5b50600354600160a01b900460ff16610292565b3480156104c657600080fd5b506103016104d53660046125e3565b610ebb565b3480156104e657600080fd5b50610301610efe565b3480156104fb57600080fd5b5061030161050a366004612763565b610f32565b34801561051b57600080fd5b5061030161052a36600461287c565b61113c565b34801561053b57600080fd5b5061030161116b565b34801561055057600080fd5b506003546001600160a01b03165b6040516001600160a01b039091168152602001610269565b34801561058257600080fd5b506102b761119d565b34801561059757600080fd5b506102b76111aa565b3480156105ac57600080fd5b50600d546102929060ff1681565b3480156105c657600080fd5b5061025f60075481565b3480156105dc57600080fd5b5061025f600f5481565b3480156105f257600080fd5b50610301610601366004612656565b6111b7565b34801561061257600080fd5b5061055e61062136600461287c565b61128e565b34801561063257600080fd5b506102926106413660046124a3565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561067b57600080fd5b5061030161068a36600461257f565b6112b8565b34801561069b57600080fd5b506103016106aa366004612834565b6112fd565b3480156106bb57600080fd5b506103016106ca366004612488565b61133a565b3480156106db57600080fd5b506103016106ea3660046126bc565b6113d2565b60006001600160a01b0383166107605760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806107b757506001600160e01b031982166303a24d0760e21b145b806107d257506301ffc9a760e01b6001600160e01b03198316145b92915050565b600580546107e590612e3c565b80601f016020809104026020016040519081016040528092919081815260200182805461081190612e3c565b801561085e5780601f106108335761010080835404028352916020019161085e565b820191906000526020600020905b81548152906001019060200180831161084157829003601f168201915b505050505081565b600c80546107e590612e3c565b600b5460609060ff1661091257600c805461088d90612e3c565b80601f01602080910402602001604051908101604052809291908181526020018280546108b990612e3c565b80156109065780601f106108db57610100808354040283529160200191610906565b820191906000526020600020905b8154815290600101906020018083116108e957829003601f168201915b50505050509050919050565b600861091d83611415565b60405160200161092e929190612918565b6040516020818303038152906040529050919050565b919050565b6002600454141561096c5760405162461bcd60e51b815260040161075790612d50565b600260045561097b600161151a565b610983611642565b506001600455565b6003546001600160a01b031633146109b55760405162461bcd60e51b815260040161075790612c92565b600d5460ff16156109cc57600d805460ff19169055565b600d805460ff191660011790555b565b600060026004541415610a015760405162461bcd60e51b815260040161075790612d50565b60026004558115801590610a175750600a548211155b610a595760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b5a5b9d08185b5bdd5b9d606a1b6044820152606401610757565b610a628261151a565b6001821115610a7b57610a748261172e565b9050610a83565b610a74611642565b6001600455919050565b6003546001600160a01b03163314610ab75760405162461bcd60e51b815260040161075790612c92565b610ac3600e60006121fb565b610acf600e8383612219565b505050565b6001600160a01b038516331480610af05750610af08533610641565b610b575760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610757565b610b648585858585611802565b5050505050565b6000805b600e54811015610bcc57826001600160a01b0316600e8281548110610b9657610b96612efe565b6000918252602090912001546001600160a01b03161415610bba5750600192915050565b80610bc481612ea3565b915050610b6f565b50600092915050565b6003546001600160a01b03163314610bff5760405162461bcd60e51b815260040161075790612c92565b6000610c136003546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610c5d576040519150601f19603f3d011682016040523d82523d6000602084013e610c62565b606091505b5050905080610c7057600080fd5b50565b6003546001600160a01b03163314610c9d5760405162461bcd60e51b815260040161075790612c92565b6109da6119ac565b6003546001600160a01b03163314610ccf5760405162461bcd60e51b815260040161075790612c92565b600955565b6003546001600160a01b03163314610cfe5760405162461bcd60e51b815260040161075790612c92565b8051610d1190600890602084019061227c565b5050600b805460ff19166001179055565b6003546001600160a01b03163314610d4c5760405162461bcd60e51b815260040161075790612c92565b600f55565b60608151835114610db65760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610757565b600083516001600160401b03811115610dd157610dd1612f14565b604051908082528060200260200182016040528015610dfa578160200160208202803683370190505b50905060005b8451811015610e7257610e45858281518110610e1e57610e1e612efe565b6020026020010151858381518110610e3857610e38612efe565b60200260200101516106ef565b828281518110610e5757610e57612efe565b6020908102919091010152610e6b81612ea3565b9050610e00565b509392505050565b6003546001600160a01b03163314610ea45760405162461bcd60e51b815260040161075790612c92565b8051610eb790600890602084019061227c565b5050565b6001600160a01b038316331480610ed75750610ed78333610641565b610ef35760405162461bcd60e51b815260040161075790612b4d565b610acf838383611a49565b6003546001600160a01b03163314610f285760405162461bcd60e51b815260040161075790612c92565b6109da6000611bd7565b60026004541415610f555760405162461bcd60e51b815260040161075790612d50565b6002600455600354600160a01b900460ff1615610f845760405162461bcd60e51b815260040161075790612b96565b6003546001600160a01b03163314610fae5760405162461bcd60e51b815260040161075790612c92565b600f548151600754610fc09190612daa565b111561100e5760405162461bcd60e51b815260206004820152601d60248201527f4e6f204e46547320617661696c61626c6520666f72206d696e74696e670000006044820152606401610757565b6001600760008282546110219190612daa565b90915550506007545b81516007546110399190612daa565b81101561110f57600082600754836110519190612df5565b8151811061106157611061612efe565b602090810291909101810151600084815280835260408082206001600160a01b0384168352909352918220805491935060019290916110a1908490612daa565b909155505060408051838152600160208201526001600160a01b038316916000913391600080516020612fe5833981519152910160405180910390a46110fc3360008385600160405180602001604052806000815250611c29565b508061110781612ea3565b91505061102a565b506001815161111e9190612df5565b6007600082825461112f9190612daa565b9091555050600160045550565b6003546001600160a01b031633146111665760405162461bcd60e51b815260040161075790612c92565b600a55565b6003546001600160a01b031633146111955760405162461bcd60e51b815260040161075790612c92565b6109da611d9d565b600680546107e590612e3c565b600880546107e590612e3c565b336001600160a01b03831614156112225760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610757565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600e818154811061129e57600080fd5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b0385163314806112d457506112d48533610641565b6112f05760405162461bcd60e51b815260040161075790612b4d565b610b648585858585611e02565b6003546001600160a01b031633146113275760405162461bcd60e51b815260040161075790612c92565b8051610eb790600c90602084019061227c565b6003546001600160a01b031633146113645760405162461bcd60e51b815260040161075790612c92565b6001600160a01b0381166113c95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610757565b610c7081611bd7565b6001600160a01b0383163314806113ee57506113ee8333610641565b61140a5760405162461bcd60e51b815260040161075790612b4d565b610acf838383611f13565b6060816114395750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611463578061144d81612ea3565b915061145c9050600a83612dc2565b915061143d565b6000816001600160401b0381111561147d5761147d612f14565b6040519080825280601f01601f1916602001820160405280156114a7576020820181803683370190505b5090505b8415611512576114bc600183612df5565b91506114c9600a86612ebe565b6114d4906030612daa565b60f81b8183815181106114e9576114e9612efe565b60200101906001600160f81b031916908160001a90535061150b600a86612dc2565b94506114ab565b949350505050565b600f548160075461152b9190612daa565b11156115795760405162461bcd60e51b815260206004820152601d60248201527f4e6f204e46547320617661696c61626c6520666f72206d696e74696e670000006044820152606401610757565b6003546001600160a01b03163314610c7057600d5460ff161515600114156115f0576115a433610b6b565b6115f05760405162461bcd60e51b815260206004820152601760248201527f55736572206973206e6f742077686974656c69737465640000000000000000006044820152606401610757565b806009546115fe9190612dd6565b341015610c705760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b6044820152606401610757565b600354600090600160a01b900460ff161561166f5760405162461bcd60e51b815260040161075790612b96565b3361168c5760405162461bcd60e51b815260040161075790612d0f565b60016007600082825461169f9190612daa565b909155505060075460009081526020818152604080832033845290915281208054600192906116cf908490612daa565b9091555050600754604080519182526001602083015233916000918391600080516020612fe5833981519152910160405180910390a461172633600033600754600160405180602001604052806000815250611c29565b506007545b90565b600354600090600160a01b900460ff161561175b5760405162461bcd60e51b815260040161075790612b96565b336117785760405162461bcd60e51b815260040161075790612d0f565b60016007600082825461178b9190612daa565b90915550506007545b826007546117a29190612daa565b8110156117d7576117c53382600160405180602001604052806000815250612002565b806117cf81612ea3565b915050611794565b506117e3600183612df5565b600760008282546117f49190612daa565b909155505060075492915050565b81518351146118235760405162461bcd60e51b815260040161075790612cc7565b6001600160a01b0384166118495760405162461bcd60e51b815260040161075790612bc0565b336118588187878787876120b7565b60005b845181101561193e57600085828151811061187857611878612efe565b60200260200101519050600085838151811061189657611896612efe565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156118e65760405162461bcd60e51b815260040161075790612c48565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290611923908490612daa565b925050819055505050508061193790612ea3565b905061185b565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161198e929190612a89565b60405180910390a46119a48187878787876120e6565b505050505050565b600354600160a01b900460ff166119fc5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610757565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038316611a6f5760405162461bcd60e51b815260040161075790612c05565b8051825114611a905760405162461bcd60e51b815260040161075790612cc7565b6000339050611ab3818560008686604051806020016040528060008152506120b7565b60005b8351811015611b78576000848281518110611ad357611ad3612efe565b602002602001015190506000848381518110611af157611af1612efe565b602090810291909101810151600084815280835260408082206001600160a01b038c168352909352919091205490915081811015611b415760405162461bcd60e51b815260040161075790612b09565b6000928352602083815260408085206001600160a01b038b1686529091529092209103905580611b7081612ea3565b915050611ab6565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611bc9929190612a89565b60405180910390a450505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0384163b156119a45760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611c6d9089908990889088908890600401612a31565b602060405180830381600087803b158015611c8757600080fd5b505af1925050508015611cb7575060408051601f3d908101601f19168201909252611cb491810190612817565b60015b611d6457611cc3612f2a565b806308c379a01415611cfd5750611cd8612f45565b80611ce35750611cff565b8060405162461bcd60e51b81526004016107579190612aae565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610757565b6001600160e01b0319811663f23a6e6160e01b14611d945760405162461bcd60e51b815260040161075790612ac1565b50505050505050565b600354600160a01b900460ff1615611dc75760405162461bcd60e51b815260040161075790612b96565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a2c3390565b6001600160a01b038416611e285760405162461bcd60e51b815260040161075790612bc0565b33611e47818787611e38886121b0565b611e41886121b0565b876120b7565b6000848152602081815260408083206001600160a01b038a16845290915290205483811015611e885760405162461bcd60e51b815260040161075790612c48565b6000858152602081815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290611ec5908490612daa565b909155505060408051868152602081018690526001600160a01b03808916928a82169291861691600080516020612fe5833981519152910160405180910390a4611d94828888888888611c29565b6001600160a01b038316611f395760405162461bcd60e51b815260040161075790612c05565b33611f6881856000611f4a876121b0565b611f53876121b0565b604051806020016040528060008152506120b7565b6000838152602081815260408083206001600160a01b038816845290915290205482811015611fa95760405162461bcd60e51b815260040161075790612b09565b6000848152602081815260408083206001600160a01b0389811680865291845282852088870390558251898152938401889052909290861691600080516020612fe5833981519152910160405180910390a45050505050565b6001600160a01b0384166120285760405162461bcd60e51b815260040161075790612d0f565b3361203981600087611e38886121b0565b6000848152602081815260408083206001600160a01b038916845290915281208054859290612069908490612daa565b909155505060408051858152602081018590526001600160a01b038088169260009291851691600080516020612fe5833981519152910160405180910390a4610b6481600087878787611c29565b600354600160a01b900460ff16156120e15760405162461bcd60e51b815260040161075790612b96565b6119a4565b6001600160a01b0384163b156119a45760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061212a90899089908890889088906004016129d3565b602060405180830381600087803b15801561214457600080fd5b505af1925050508015612174575060408051601f3d908101601f1916820190925261217191810190612817565b60015b61218057611cc3612f2a565b6001600160e01b0319811663bc197c8160e01b14611d945760405162461bcd60e51b815260040161075790612ac1565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106121ea576121ea612efe565b602090810291909101015292915050565b5080546000825590600052602060002090810190610c7091906122f0565b82805482825590600052602060002090810192821561226c579160200282015b8281111561226c5781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190612239565b506122789291506122f0565b5090565b82805461228890612e3c565b90600052602060002090601f0160209004810192826122aa576000855561226c565b82601f106122c357805160ff191683800117855561226c565b8280016001018555821561226c579182015b8281111561226c5782518255916020019190600101906122d5565b5b8082111561227857600081556001016122f1565b60006001600160401b0383111561231e5761231e612f14565b604051612335601f8501601f191660200182612e77565b80915083815284848401111561234a57600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461094457600080fd5b600082601f83011261238a57600080fd5b8135602061239782612d87565b6040516123a48282612e77565b8381528281019150858301600585901b870184018810156123c457600080fd5b60005b858110156123ea576123d882612362565b845292840192908401906001016123c7565b5090979650505050505050565b600082601f83011261240857600080fd5b8135602061241582612d87565b6040516124228282612e77565b8381528281019150858301600585901b8701840188101561244257600080fd5b60005b858110156123ea57813584529284019290840190600101612445565b600082601f83011261247257600080fd5b61248183833560208501612305565b9392505050565b60006020828403121561249a57600080fd5b61248182612362565b600080604083850312156124b657600080fd5b6124bf83612362565b91506124cd60208401612362565b90509250929050565b600080600080600060a086880312156124ee57600080fd5b6124f786612362565b945061250560208701612362565b935060408601356001600160401b038082111561252157600080fd5b61252d89838a016123f7565b9450606088013591508082111561254357600080fd5b61254f89838a016123f7565b9350608088013591508082111561256557600080fd5b5061257288828901612461565b9150509295509295909350565b600080600080600060a0868803121561259757600080fd5b6125a086612362565b94506125ae60208701612362565b9350604086013592506060860135915060808601356001600160401b038111156125d757600080fd5b61257288828901612461565b6000806000606084860312156125f857600080fd5b61260184612362565b925060208401356001600160401b038082111561261d57600080fd5b612629878388016123f7565b9350604086013591508082111561263f57600080fd5b5061264c868287016123f7565b9150509250925092565b6000806040838503121561266957600080fd5b61267283612362565b91506020830135801515811461268757600080fd5b809150509250929050565b600080604083850312156126a557600080fd5b6126ae83612362565b946020939093013593505050565b6000806000606084860312156126d157600080fd5b6126da84612362565b95602085013595506040909401359392505050565b6000806020838503121561270257600080fd5b82356001600160401b038082111561271957600080fd5b818501915085601f83011261272d57600080fd5b81358181111561273c57600080fd5b8660208260051b850101111561275157600080fd5b60209290920196919550909350505050565b60006020828403121561277557600080fd5b81356001600160401b0381111561278b57600080fd5b61151284828501612379565b600080604083850312156127aa57600080fd5b82356001600160401b03808211156127c157600080fd5b6127cd86838701612379565b935060208501359150808211156127e357600080fd5b506127f0858286016123f7565b9150509250929050565b60006020828403121561280c57600080fd5b813561248181612fce565b60006020828403121561282957600080fd5b815161248181612fce565b60006020828403121561284657600080fd5b81356001600160401b0381111561285c57600080fd5b8201601f8101841361286d57600080fd5b61151284823560208401612305565b60006020828403121561288e57600080fd5b5035919050565b600081518084526020808501945080840160005b838110156128c5578151875295820195908201906001016128a9565b509495945050505050565b600081518084526128e8816020860160208601612e0c565b601f01601f19169290920160200192915050565b6000815161290e818560208601612e0c565b9290920192915050565b600080845481600182811c91508083168061293457607f831692505b602080841082141561295457634e487b7160e01b86526022600452602486fd5b8180156129685760018114612979576129a6565b60ff198616895284890196506129a6565b60008b81526020902060005b8681101561299e5781548b820152908501908301612985565b505084890196505b5050505050506129ca6129b982866128fc565b64173539b7b760d91b815260050190565b95945050505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906129ff90830186612895565b8281036060840152612a118186612895565b90508281036080840152612a2581856128d0565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612a6b908301846128d0565b979650505050505050565b6020815260006124816020830184612895565b604081526000612a9c6040830185612895565b82810360208401526129ca8185612895565b60208152600061248160208301846128d0565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60006001600160401b03821115612da057612da0612f14565b5060051b60200190565b60008219821115612dbd57612dbd612ed2565b500190565b600082612dd157612dd1612ee8565b500490565b6000816000190483118215151615612df057612df0612ed2565b500290565b600082821015612e0757612e07612ed2565b500390565b60005b83811015612e27578181015183820152602001612e0f565b83811115612e36576000848401525b50505050565b600181811c90821680612e5057607f821691505b60208210811415612e7157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b0381118282101715612e9c57612e9c612f14565b6040525050565b6000600019821415612eb757612eb7612ed2565b5060010190565b600082612ecd57612ecd612ee8565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561172b5760046000803e5060005160e01c90565b600060443d1015612f535790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715612f8257505050505090565b8285019150815181811115612f9a5750505050505090565b843d8701016020828501011115612fb45750505050505090565b612fc360208286010187612e77565b509095945050505050565b6001600160e01b031981168114610c7057600080fdfec3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62a264697066735822122055d717297ae3db92eaa21f53fa39df455f6fab999442f836efeef530117b290864736f6c63430008070033697066733a2f2f516d61626963764e5278386e6837665a4e563335746d73536676734642666648786458474e4a6a736233536f73322f312e6a736f6e
Deployed Bytecode
0x60806040526004361061023a5760003560e01c806355f804b31161012e5780639c70b512116100ab578063e985e9c51161006f578063e985e9c514610626578063f242432a1461066f578063f2c4ce1e1461068f578063f2fde38b146106af578063f5298aca146106cf57600080fd5b80639c70b512146105a05780639f181b5e146105ba578063a07c0e45146105d0578063a22cb465146105e6578063ba4e5c491461060657600080fd5b80637f00c7a6116100f25780637f00c7a61461050f5780638456cb591461052f5780638da5cb5b1461054457806395d89b41146105765780639abc83201461058b57600080fd5b806355f804b31461047b5780635c975abb1461049b5780636b20c454146104ba578063715018a6146104da578063729ad39e146104ef57600080fd5b80632beab4b7116101bc57806344a0d68a1161018057806344a0d68a146103d45780634c261247146103f45780634d360fb6146104145780634e1273f414610434578063518302271461046157600080fd5b80632beab4b7146103575780632eb2c2d6146103775780633af32abf146103975780633ccfd60b146103b75780633f4ba83a146103bf57600080fd5b80631249c58b116102035780631249c58b146102f957806313faede61461030357806314c791a61461031957806320e409b41461032e578063239c70ae1461034157600080fd5b8062fdd58e1461023f57806301ffc9a71461027257806306fdde03146102a2578063081c8c44146102c45780630e89341c146102d9575b600080fd5b34801561024b57600080fd5b5061025f61025a366004612692565b6106ef565b6040519081526020015b60405180910390f35b34801561027e57600080fd5b5061029261028d3660046127fa565b610786565b6040519015158152602001610269565b3480156102ae57600080fd5b506102b76107d8565b6040516102699190612aae565b3480156102d057600080fd5b506102b7610866565b3480156102e557600080fd5b506102b76102f436600461287c565b610873565b610301610949565b005b34801561030f57600080fd5b5061025f60095481565b34801561032557600080fd5b5061030161098b565b61025f61033c36600461287c565b6109dc565b34801561034d57600080fd5b5061025f600a5481565b34801561036357600080fd5b506103016103723660046126ef565b610a8d565b34801561038357600080fd5b506103016103923660046124d6565b610ad4565b3480156103a357600080fd5b506102926103b2366004612488565b610b6b565b610301610bd5565b3480156103cb57600080fd5b50610301610c73565b3480156103e057600080fd5b506103016103ef36600461287c565b610ca5565b34801561040057600080fd5b5061030161040f366004612834565b610cd4565b34801561042057600080fd5b5061030161042f36600461287c565b610d22565b34801561044057600080fd5b5061045461044f366004612797565b610d51565b6040516102699190612a76565b34801561046d57600080fd5b50600b546102929060ff1681565b34801561048757600080fd5b50610301610496366004612834565b610e7a565b3480156104a757600080fd5b50600354600160a01b900460ff16610292565b3480156104c657600080fd5b506103016104d53660046125e3565b610ebb565b3480156104e657600080fd5b50610301610efe565b3480156104fb57600080fd5b5061030161050a366004612763565b610f32565b34801561051b57600080fd5b5061030161052a36600461287c565b61113c565b34801561053b57600080fd5b5061030161116b565b34801561055057600080fd5b506003546001600160a01b03165b6040516001600160a01b039091168152602001610269565b34801561058257600080fd5b506102b761119d565b34801561059757600080fd5b506102b76111aa565b3480156105ac57600080fd5b50600d546102929060ff1681565b3480156105c657600080fd5b5061025f60075481565b3480156105dc57600080fd5b5061025f600f5481565b3480156105f257600080fd5b50610301610601366004612656565b6111b7565b34801561061257600080fd5b5061055e61062136600461287c565b61128e565b34801561063257600080fd5b506102926106413660046124a3565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561067b57600080fd5b5061030161068a36600461257f565b6112b8565b34801561069b57600080fd5b506103016106aa366004612834565b6112fd565b3480156106bb57600080fd5b506103016106ca366004612488565b61133a565b3480156106db57600080fd5b506103016106ea3660046126bc565b6113d2565b60006001600160a01b0383166107605760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806107b757506001600160e01b031982166303a24d0760e21b145b806107d257506301ffc9a760e01b6001600160e01b03198316145b92915050565b600580546107e590612e3c565b80601f016020809104026020016040519081016040528092919081815260200182805461081190612e3c565b801561085e5780601f106108335761010080835404028352916020019161085e565b820191906000526020600020905b81548152906001019060200180831161084157829003601f168201915b505050505081565b600c80546107e590612e3c565b600b5460609060ff1661091257600c805461088d90612e3c565b80601f01602080910402602001604051908101604052809291908181526020018280546108b990612e3c565b80156109065780601f106108db57610100808354040283529160200191610906565b820191906000526020600020905b8154815290600101906020018083116108e957829003601f168201915b50505050509050919050565b600861091d83611415565b60405160200161092e929190612918565b6040516020818303038152906040529050919050565b919050565b6002600454141561096c5760405162461bcd60e51b815260040161075790612d50565b600260045561097b600161151a565b610983611642565b506001600455565b6003546001600160a01b031633146109b55760405162461bcd60e51b815260040161075790612c92565b600d5460ff16156109cc57600d805460ff19169055565b600d805460ff191660011790555b565b600060026004541415610a015760405162461bcd60e51b815260040161075790612d50565b60026004558115801590610a175750600a548211155b610a595760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b5a5b9d08185b5bdd5b9d606a1b6044820152606401610757565b610a628261151a565b6001821115610a7b57610a748261172e565b9050610a83565b610a74611642565b6001600455919050565b6003546001600160a01b03163314610ab75760405162461bcd60e51b815260040161075790612c92565b610ac3600e60006121fb565b610acf600e8383612219565b505050565b6001600160a01b038516331480610af05750610af08533610641565b610b575760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610757565b610b648585858585611802565b5050505050565b6000805b600e54811015610bcc57826001600160a01b0316600e8281548110610b9657610b96612efe565b6000918252602090912001546001600160a01b03161415610bba5750600192915050565b80610bc481612ea3565b915050610b6f565b50600092915050565b6003546001600160a01b03163314610bff5760405162461bcd60e51b815260040161075790612c92565b6000610c136003546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610c5d576040519150601f19603f3d011682016040523d82523d6000602084013e610c62565b606091505b5050905080610c7057600080fd5b50565b6003546001600160a01b03163314610c9d5760405162461bcd60e51b815260040161075790612c92565b6109da6119ac565b6003546001600160a01b03163314610ccf5760405162461bcd60e51b815260040161075790612c92565b600955565b6003546001600160a01b03163314610cfe5760405162461bcd60e51b815260040161075790612c92565b8051610d1190600890602084019061227c565b5050600b805460ff19166001179055565b6003546001600160a01b03163314610d4c5760405162461bcd60e51b815260040161075790612c92565b600f55565b60608151835114610db65760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610757565b600083516001600160401b03811115610dd157610dd1612f14565b604051908082528060200260200182016040528015610dfa578160200160208202803683370190505b50905060005b8451811015610e7257610e45858281518110610e1e57610e1e612efe565b6020026020010151858381518110610e3857610e38612efe565b60200260200101516106ef565b828281518110610e5757610e57612efe565b6020908102919091010152610e6b81612ea3565b9050610e00565b509392505050565b6003546001600160a01b03163314610ea45760405162461bcd60e51b815260040161075790612c92565b8051610eb790600890602084019061227c565b5050565b6001600160a01b038316331480610ed75750610ed78333610641565b610ef35760405162461bcd60e51b815260040161075790612b4d565b610acf838383611a49565b6003546001600160a01b03163314610f285760405162461bcd60e51b815260040161075790612c92565b6109da6000611bd7565b60026004541415610f555760405162461bcd60e51b815260040161075790612d50565b6002600455600354600160a01b900460ff1615610f845760405162461bcd60e51b815260040161075790612b96565b6003546001600160a01b03163314610fae5760405162461bcd60e51b815260040161075790612c92565b600f548151600754610fc09190612daa565b111561100e5760405162461bcd60e51b815260206004820152601d60248201527f4e6f204e46547320617661696c61626c6520666f72206d696e74696e670000006044820152606401610757565b6001600760008282546110219190612daa565b90915550506007545b81516007546110399190612daa565b81101561110f57600082600754836110519190612df5565b8151811061106157611061612efe565b602090810291909101810151600084815280835260408082206001600160a01b0384168352909352918220805491935060019290916110a1908490612daa565b909155505060408051838152600160208201526001600160a01b038316916000913391600080516020612fe5833981519152910160405180910390a46110fc3360008385600160405180602001604052806000815250611c29565b508061110781612ea3565b91505061102a565b506001815161111e9190612df5565b6007600082825461112f9190612daa565b9091555050600160045550565b6003546001600160a01b031633146111665760405162461bcd60e51b815260040161075790612c92565b600a55565b6003546001600160a01b031633146111955760405162461bcd60e51b815260040161075790612c92565b6109da611d9d565b600680546107e590612e3c565b600880546107e590612e3c565b336001600160a01b03831614156112225760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610757565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600e818154811061129e57600080fd5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b0385163314806112d457506112d48533610641565b6112f05760405162461bcd60e51b815260040161075790612b4d565b610b648585858585611e02565b6003546001600160a01b031633146113275760405162461bcd60e51b815260040161075790612c92565b8051610eb790600c90602084019061227c565b6003546001600160a01b031633146113645760405162461bcd60e51b815260040161075790612c92565b6001600160a01b0381166113c95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610757565b610c7081611bd7565b6001600160a01b0383163314806113ee57506113ee8333610641565b61140a5760405162461bcd60e51b815260040161075790612b4d565b610acf838383611f13565b6060816114395750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611463578061144d81612ea3565b915061145c9050600a83612dc2565b915061143d565b6000816001600160401b0381111561147d5761147d612f14565b6040519080825280601f01601f1916602001820160405280156114a7576020820181803683370190505b5090505b8415611512576114bc600183612df5565b91506114c9600a86612ebe565b6114d4906030612daa565b60f81b8183815181106114e9576114e9612efe565b60200101906001600160f81b031916908160001a90535061150b600a86612dc2565b94506114ab565b949350505050565b600f548160075461152b9190612daa565b11156115795760405162461bcd60e51b815260206004820152601d60248201527f4e6f204e46547320617661696c61626c6520666f72206d696e74696e670000006044820152606401610757565b6003546001600160a01b03163314610c7057600d5460ff161515600114156115f0576115a433610b6b565b6115f05760405162461bcd60e51b815260206004820152601760248201527f55736572206973206e6f742077686974656c69737465640000000000000000006044820152606401610757565b806009546115fe9190612dd6565b341015610c705760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b6044820152606401610757565b600354600090600160a01b900460ff161561166f5760405162461bcd60e51b815260040161075790612b96565b3361168c5760405162461bcd60e51b815260040161075790612d0f565b60016007600082825461169f9190612daa565b909155505060075460009081526020818152604080832033845290915281208054600192906116cf908490612daa565b9091555050600754604080519182526001602083015233916000918391600080516020612fe5833981519152910160405180910390a461172633600033600754600160405180602001604052806000815250611c29565b506007545b90565b600354600090600160a01b900460ff161561175b5760405162461bcd60e51b815260040161075790612b96565b336117785760405162461bcd60e51b815260040161075790612d0f565b60016007600082825461178b9190612daa565b90915550506007545b826007546117a29190612daa565b8110156117d7576117c53382600160405180602001604052806000815250612002565b806117cf81612ea3565b915050611794565b506117e3600183612df5565b600760008282546117f49190612daa565b909155505060075492915050565b81518351146118235760405162461bcd60e51b815260040161075790612cc7565b6001600160a01b0384166118495760405162461bcd60e51b815260040161075790612bc0565b336118588187878787876120b7565b60005b845181101561193e57600085828151811061187857611878612efe565b60200260200101519050600085838151811061189657611896612efe565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156118e65760405162461bcd60e51b815260040161075790612c48565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290611923908490612daa565b925050819055505050508061193790612ea3565b905061185b565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161198e929190612a89565b60405180910390a46119a48187878787876120e6565b505050505050565b600354600160a01b900460ff166119fc5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610757565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038316611a6f5760405162461bcd60e51b815260040161075790612c05565b8051825114611a905760405162461bcd60e51b815260040161075790612cc7565b6000339050611ab3818560008686604051806020016040528060008152506120b7565b60005b8351811015611b78576000848281518110611ad357611ad3612efe565b602002602001015190506000848381518110611af157611af1612efe565b602090810291909101810151600084815280835260408082206001600160a01b038c168352909352919091205490915081811015611b415760405162461bcd60e51b815260040161075790612b09565b6000928352602083815260408085206001600160a01b038b1686529091529092209103905580611b7081612ea3565b915050611ab6565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611bc9929190612a89565b60405180910390a450505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0384163b156119a45760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611c6d9089908990889088908890600401612a31565b602060405180830381600087803b158015611c8757600080fd5b505af1925050508015611cb7575060408051601f3d908101601f19168201909252611cb491810190612817565b60015b611d6457611cc3612f2a565b806308c379a01415611cfd5750611cd8612f45565b80611ce35750611cff565b8060405162461bcd60e51b81526004016107579190612aae565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610757565b6001600160e01b0319811663f23a6e6160e01b14611d945760405162461bcd60e51b815260040161075790612ac1565b50505050505050565b600354600160a01b900460ff1615611dc75760405162461bcd60e51b815260040161075790612b96565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a2c3390565b6001600160a01b038416611e285760405162461bcd60e51b815260040161075790612bc0565b33611e47818787611e38886121b0565b611e41886121b0565b876120b7565b6000848152602081815260408083206001600160a01b038a16845290915290205483811015611e885760405162461bcd60e51b815260040161075790612c48565b6000858152602081815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290611ec5908490612daa565b909155505060408051868152602081018690526001600160a01b03808916928a82169291861691600080516020612fe5833981519152910160405180910390a4611d94828888888888611c29565b6001600160a01b038316611f395760405162461bcd60e51b815260040161075790612c05565b33611f6881856000611f4a876121b0565b611f53876121b0565b604051806020016040528060008152506120b7565b6000838152602081815260408083206001600160a01b038816845290915290205482811015611fa95760405162461bcd60e51b815260040161075790612b09565b6000848152602081815260408083206001600160a01b0389811680865291845282852088870390558251898152938401889052909290861691600080516020612fe5833981519152910160405180910390a45050505050565b6001600160a01b0384166120285760405162461bcd60e51b815260040161075790612d0f565b3361203981600087611e38886121b0565b6000848152602081815260408083206001600160a01b038916845290915281208054859290612069908490612daa565b909155505060408051858152602081018590526001600160a01b038088169260009291851691600080516020612fe5833981519152910160405180910390a4610b6481600087878787611c29565b600354600160a01b900460ff16156120e15760405162461bcd60e51b815260040161075790612b96565b6119a4565b6001600160a01b0384163b156119a45760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061212a90899089908890889088906004016129d3565b602060405180830381600087803b15801561214457600080fd5b505af1925050508015612174575060408051601f3d908101601f1916820190925261217191810190612817565b60015b61218057611cc3612f2a565b6001600160e01b0319811663bc197c8160e01b14611d945760405162461bcd60e51b815260040161075790612ac1565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106121ea576121ea612efe565b602090810291909101015292915050565b5080546000825590600052602060002090810190610c7091906122f0565b82805482825590600052602060002090810192821561226c579160200282015b8281111561226c5781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190612239565b506122789291506122f0565b5090565b82805461228890612e3c565b90600052602060002090601f0160209004810192826122aa576000855561226c565b82601f106122c357805160ff191683800117855561226c565b8280016001018555821561226c579182015b8281111561226c5782518255916020019190600101906122d5565b5b8082111561227857600081556001016122f1565b60006001600160401b0383111561231e5761231e612f14565b604051612335601f8501601f191660200182612e77565b80915083815284848401111561234a57600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461094457600080fd5b600082601f83011261238a57600080fd5b8135602061239782612d87565b6040516123a48282612e77565b8381528281019150858301600585901b870184018810156123c457600080fd5b60005b858110156123ea576123d882612362565b845292840192908401906001016123c7565b5090979650505050505050565b600082601f83011261240857600080fd5b8135602061241582612d87565b6040516124228282612e77565b8381528281019150858301600585901b8701840188101561244257600080fd5b60005b858110156123ea57813584529284019290840190600101612445565b600082601f83011261247257600080fd5b61248183833560208501612305565b9392505050565b60006020828403121561249a57600080fd5b61248182612362565b600080604083850312156124b657600080fd5b6124bf83612362565b91506124cd60208401612362565b90509250929050565b600080600080600060a086880312156124ee57600080fd5b6124f786612362565b945061250560208701612362565b935060408601356001600160401b038082111561252157600080fd5b61252d89838a016123f7565b9450606088013591508082111561254357600080fd5b61254f89838a016123f7565b9350608088013591508082111561256557600080fd5b5061257288828901612461565b9150509295509295909350565b600080600080600060a0868803121561259757600080fd5b6125a086612362565b94506125ae60208701612362565b9350604086013592506060860135915060808601356001600160401b038111156125d757600080fd5b61257288828901612461565b6000806000606084860312156125f857600080fd5b61260184612362565b925060208401356001600160401b038082111561261d57600080fd5b612629878388016123f7565b9350604086013591508082111561263f57600080fd5b5061264c868287016123f7565b9150509250925092565b6000806040838503121561266957600080fd5b61267283612362565b91506020830135801515811461268757600080fd5b809150509250929050565b600080604083850312156126a557600080fd5b6126ae83612362565b946020939093013593505050565b6000806000606084860312156126d157600080fd5b6126da84612362565b95602085013595506040909401359392505050565b6000806020838503121561270257600080fd5b82356001600160401b038082111561271957600080fd5b818501915085601f83011261272d57600080fd5b81358181111561273c57600080fd5b8660208260051b850101111561275157600080fd5b60209290920196919550909350505050565b60006020828403121561277557600080fd5b81356001600160401b0381111561278b57600080fd5b61151284828501612379565b600080604083850312156127aa57600080fd5b82356001600160401b03808211156127c157600080fd5b6127cd86838701612379565b935060208501359150808211156127e357600080fd5b506127f0858286016123f7565b9150509250929050565b60006020828403121561280c57600080fd5b813561248181612fce565b60006020828403121561282957600080fd5b815161248181612fce565b60006020828403121561284657600080fd5b81356001600160401b0381111561285c57600080fd5b8201601f8101841361286d57600080fd5b61151284823560208401612305565b60006020828403121561288e57600080fd5b5035919050565b600081518084526020808501945080840160005b838110156128c5578151875295820195908201906001016128a9565b509495945050505050565b600081518084526128e8816020860160208601612e0c565b601f01601f19169290920160200192915050565b6000815161290e818560208601612e0c565b9290920192915050565b600080845481600182811c91508083168061293457607f831692505b602080841082141561295457634e487b7160e01b86526022600452602486fd5b8180156129685760018114612979576129a6565b60ff198616895284890196506129a6565b60008b81526020902060005b8681101561299e5781548b820152908501908301612985565b505084890196505b5050505050506129ca6129b982866128fc565b64173539b7b760d91b815260050190565b95945050505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906129ff90830186612895565b8281036060840152612a118186612895565b90508281036080840152612a2581856128d0565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612a6b908301846128d0565b979650505050505050565b6020815260006124816020830184612895565b604081526000612a9c6040830185612895565b82810360208401526129ca8185612895565b60208152600061248160208301846128d0565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60006001600160401b03821115612da057612da0612f14565b5060051b60200190565b60008219821115612dbd57612dbd612ed2565b500190565b600082612dd157612dd1612ee8565b500490565b6000816000190483118215151615612df057612df0612ed2565b500290565b600082821015612e0757612e07612ed2565b500390565b60005b83811015612e27578181015183820152602001612e0f565b83811115612e36576000848401525b50505050565b600181811c90821680612e5057607f821691505b60208210811415612e7157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b0381118282101715612e9c57612e9c612f14565b6040525050565b6000600019821415612eb757612eb7612ed2565b5060010190565b600082612ecd57612ecd612ee8565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561172b5760046000803e5060005160e01c90565b600060443d1015612f535790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715612f8257505050505090565b8285019150815181811115612f9a5750505050505090565b843d8701016020828501011115612fb45750505050505090565b612fc360208286010187612e77565b509095945050505050565b6001600160e01b031981168114610c7057600080fdfec3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62a264697066735822122055d717297ae3db92eaa21f53fa39df455f6fab999442f836efeef530117b290864736f6c63430008070033
Deployed Bytecode Sourcemap
43469:6647:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30090:231;;;;;;;;;;-1:-1:-1;30090:231:0;;;;;:::i;:::-;;:::i;:::-;;;22703:25:1;;;22691:2;22676:18;30090:231:0;;;;;;;;29113:310;;;;;;;;;;-1:-1:-1;29113:310:0;;;;;:::i;:::-;;:::i;:::-;;;13751:14:1;;13744:22;13726:41;;13714:2;13699:18;29113:310:0;13586:187:1;43844:18:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;44116:28::-;;;;;;;;;;;;;:::i;48226:471::-;;;;;;;;;;-1:-1:-1;48226:471:0;;;;;:::i;:::-;;:::i;45763:97::-;;;:::i;:::-;;43956:32;;;;;;;;;;;;;;;;47434:203;;;;;;;;;;;;;:::i;45423:332::-;;;;;;:::i;:::-;;:::i;43995:32::-;;;;;;;;;;;;;;;;48061:157;;;;;;;;;;-1:-1:-1;48061:157:0;;;;;:::i;:::-;;:::i;32185:442::-;;;;;;;;;;-1:-1:-1;32185:442:0;;;;;:::i;:::-;;:::i;47779:274::-;;;;;;;;;;-1:-1:-1;47779:274:0;;;;;:::i;:::-;;:::i;49864:249::-;;;:::i;48774:65::-;;;;;;;;;;;;;:::i;46836:86::-;;;;;;;;;;-1:-1:-1;46836:86:0;;;;;:::i;:::-;;:::i;47060:120::-;;;;;;;;;;-1:-1:-1;47060:120:0;;;;;:::i;:::-;;:::i;47645:126::-;;;;;;;;;;-1:-1:-1;47645:126:0;;;;;:::i;:::-;;:::i;30487:524::-;;;;;;;;;;-1:-1:-1;30487:524:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;44081:28::-;;;;;;;;;;-1:-1:-1;44081:28:0;;;;;;;;47188:104;;;;;;;;;;-1:-1:-1;47188:104:0;;;;;:::i;:::-;;:::i;6908:86::-;;;;;;;;;;-1:-1:-1;6979:7:0;;-1:-1:-1;;;6979:7:0;;;;6908:86;;49176:353;;;;;;;;;;-1:-1:-1;49176:353:0;;;;;:::i;:::-;;:::i;9807:103::-;;;;;;;;;;;;;:::i;44759:656::-;;;;;;;;;;-1:-1:-1;44759:656:0;;;;;:::i;:::-;;:::i;46930:122::-;;;;;;;;;;-1:-1:-1;46930:122:0;;;;;:::i;:::-;;:::i;48705:61::-;;;;;;;;;;;;;:::i;9156:87::-;;;;;;;;;;-1:-1:-1;9229:6:0;;-1:-1:-1;;;;;9229:6:0;9156:87;;;-1:-1:-1;;;;;11410:32:1;;;11392:51;;11380:2;11365:18;9156:87:0;11246:203:1;43869:20:0;;;;;;;;;;;;;:::i;43928:21::-;;;;;;;;;;;;;:::i;44151:34::-;;;;;;;;;;-1:-1:-1;44151:34:0;;;;;;;;43896:25;;;;;;;;;;;;;;;;44236:35;;;;;;;;;;;;;;;;31084:311;;;;;;;;;;-1:-1:-1;31084:311:0;;;;;:::i;:::-;;:::i;44192:37::-;;;;;;;;;;-1:-1:-1;44192:37:0;;;;;:::i;:::-;;:::i;31467:168::-;;;;;;;;;;-1:-1:-1;31467:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;31590:27:0;;;31566:4;31590:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;31467:168;31707:401;;;;;;;;;;-1:-1:-1;31707:401:0;;;;;:::i;:::-;;:::i;47300:126::-;;;;;;;;;;-1:-1:-1;47300:126:0;;;;;:::i;:::-;;:::i;10065:201::-;;;;;;;;;;-1:-1:-1;10065:201:0;;;;;:::i;:::-;;:::i;48847:321::-;;;;;;;;;;-1:-1:-1;48847:321:0;;;;;:::i;:::-;;:::i;30090:231::-;30176:7;-1:-1:-1;;;;;30204:21:0;;30196:77;;;;-1:-1:-1;;;30196:77:0;;15383:2:1;30196:77:0;;;15365:21:1;15422:2;15402:18;;;15395:30;15461:34;15441:18;;;15434:62;-1:-1:-1;;;15512:18:1;;;15505:41;15563:19;;30196:77:0;;;;;;;;;-1:-1:-1;30291:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;30291:22:0;;;;;;;;;;;;30090:231::o;29113:310::-;29215:4;-1:-1:-1;;;;;;29252:41:0;;-1:-1:-1;;;29252:41:0;;:110;;-1:-1:-1;;;;;;;29310:52:0;;-1:-1:-1;;;29310:52:0;29252:110;:163;;;-1:-1:-1;;;;;;;;;;20666:40:0;;;29379:36;29232:183;29113:310;-1:-1:-1;;29113:310:0:o;43844:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44116:28::-;;;;;;;:::i;48226:471::-;48358:8;;48323:13;;48358:8;;48354:336;;48399:14;48392:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48226:471;;;:::o;48354:336::-;48542:7;48576:26;48593:8;48576:16;:26::i;:::-;48499:160;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48446:232;;48226:471;;;:::o;48354:336::-;48226:471;;;:::o;45763:97::-;1812:1;2410:7;;:19;;2402:63;;;;-1:-1:-1;;;2402:63:0;;;;;;;:::i;:::-;1812:1;2543:7;:18;45818:14:::1;45830:1;45818:11;:14::i;:::-;45843:9;:7;:9::i;:::-;-1:-1:-1::0;1768:1:0;2722:7;:22;45763:97::o;47434:203::-;9229:6;;-1:-1:-1;;;;;9229:6:0;5642:10;9376:23;9368:68;;;;-1:-1:-1;;;9368:68:0;;;;;;;:::i;:::-;47498:15:::1;::::0;::::1;;47495:125;;;47530:15;:23:::0;;-1:-1:-1;;47530:23:0::1;::::0;;47434:203::o;47495:125::-:1;47586:15;:22:::0;;-1:-1:-1;;47586:22:0::1;47604:4;47586:22;::::0;;47495:125:::1;47434:203::o:0;45423:332::-;45494:10;1812:1;2410:7;;:19;;2402:63;;;;-1:-1:-1;;;2402:63:0;;;;;;;:::i;:::-;1812:1;2543:7;:18;45525:10;;;;;:37:::1;;;45549:13;;45539:6;:23;;45525:37;45517:69;;;::::0;-1:-1:-1;;;45517:69:0;;20062:2:1;45517:69:0::1;::::0;::::1;20044:21:1::0;20101:2;20081:18;;;20074:30;-1:-1:-1;;;20120:18:1;;;20113:49;20179:18;;45517:69:0::1;19860:343:1::0;45517:69:0::1;45599:19;45611:6;45599:11;:19::i;:::-;45642:1;45633:6;:10;45629:119;;;45667:20;45680:6;45667:12;:20::i;:::-;45660:27;;;;45629:119;45727:9;:7;:9::i;45629:119::-;1768:1:::0;2722:7;:22;45423:332;;-1:-1:-1;45423:332:0:o;48061:157::-;9229:6;;-1:-1:-1;;;;;9229:6:0;5642:10;9376:23;9368:68;;;;-1:-1:-1;;;9368:68:0;;;;;;;:::i;:::-;48143:27:::1;48150:20;;48143:27;:::i;:::-;48181:29;:20;48204:6:::0;;48181:29:::1;:::i;:::-;;48061:157:::0;;:::o;32185:442::-;-1:-1:-1;;;;;32418:20:0;;5642:10;32418:20;;:60;;-1:-1:-1;32442:36:0;32459:4;5642:10;31467:168;:::i;32442:36::-;32396:160;;;;-1:-1:-1;;;32396:160:0;;18467:2:1;32396:160:0;;;18449:21:1;18506:2;18486:18;;;18479:30;18545:34;18525:18;;;18518:62;-1:-1:-1;;;18596:18:1;;;18589:48;18654:19;;32396:160:0;18265:414:1;32396:160:0;32567:52;32590:4;32596:2;32600:3;32605:7;32614:4;32567:22;:52::i;:::-;32185:442;;;;;:::o;47779:274::-;47838:4;;47855:168;47879:20;:27;47875:31;;47855:168;;;47959:5;-1:-1:-1;;;;;47932:32:0;:20;47953:1;47932:23;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;47932:23:0;:32;47928:84;;;-1:-1:-1;47992:4:0;;47779:274;-1:-1:-1;;47779:274:0:o;47928:84::-;47908:3;;;;:::i;:::-;;;;47855:168;;;-1:-1:-1;48040:5:0;;47779:274;-1:-1:-1;;47779:274:0:o;49864:249::-;9229:6;;-1:-1:-1;;;;;9229:6:0;5642:10;9376:23;9368:68;;;;-1:-1:-1;;;9368:68:0;;;;;;;:::i;:::-;49921:7:::1;49943;9229:6:::0;;-1:-1:-1;;;;;9229:6:0;;9156:87;49943:7:::1;-1:-1:-1::0;;;;;49934:23:0::1;49966:21;49934:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49920:73;;;50012:2;50004:11;;;::::0;::::1;;49909:204;49864:249::o:0;48774:65::-;9229:6;;-1:-1:-1;;;;;9229:6:0;5642:10;9376:23;9368:68;;;;-1:-1:-1;;;9368:68:0;;;;;;;:::i;:::-;48821:10:::1;:8;:10::i;46836:86::-:0;9229:6;;-1:-1:-1;;;;;9229:6:0;5642:10;9376:23;9368:68;;;;-1:-1:-1;;;9368:68:0;;;;;;;:::i;:::-;46899:4:::1;:15:::0;46836:86::o;47060:120::-;9229:6;;-1:-1:-1;;;;;9229:6:0;5642:10;9376:23;9368:68;;;;-1:-1:-1;;;9368:68:0;;;;;;;:::i;:::-;47128:18;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;47157:8:0::1;:15:::0;;-1:-1:-1;;47157:15:0::1;47168:4;47157:15;::::0;;47060:120::o;47645:126::-;9229:6;;-1:-1:-1;;;;;9229:6:0;5642:10;9376:23;9368:68;;;;-1:-1:-1;;;9368:68:0;;;;;;;:::i;:::-;47728:13:::1;:35:::0;47645:126::o;30487:524::-;30643:16;30704:3;:10;30685:8;:15;:29;30677:83;;;;-1:-1:-1;;;30677:83:0;;21178:2:1;30677:83:0;;;21160:21:1;21217:2;21197:18;;;21190:30;21256:34;21236:18;;;21229:62;-1:-1:-1;;;21307:18:1;;;21300:39;21356:19;;30677:83:0;20976:405:1;30677:83:0;30773:30;30820:8;:15;-1:-1:-1;;;;;30806:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30806:30:0;;30773:63;;30854:9;30849:122;30873:8;:15;30869:1;:19;30849:122;;;30929:30;30939:8;30948:1;30939:11;;;;;;;;:::i;:::-;;;;;;;30952:3;30956:1;30952:6;;;;;;;;:::i;:::-;;;;;;;30929:9;:30::i;:::-;30910:13;30924:1;30910:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;30890:3;;;:::i;:::-;;;30849:122;;;-1:-1:-1;30990:13:0;30487:524;-1:-1:-1;;;30487:524:0:o;47188:104::-;9229:6;;-1:-1:-1;;;;;9229:6:0;5642:10;9376:23;9368:68;;;;-1:-1:-1;;;9368:68:0;;;;;;;:::i;:::-;47263:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;47188:104:::0;:::o;49176:353::-;-1:-1:-1;;;;;49341:23:0;;5642:10;49341:23;;:66;;-1:-1:-1;49368:39:0;49385:7;5642:10;31467:168;:::i;49368:39::-;49319:157;;;;-1:-1:-1;;;49319:157:0;;;;;;;:::i;:::-;49489:32;49500:7;49509:3;49514:6;49489:10;:32::i;9807:103::-;9229:6;;-1:-1:-1;;;;;9229:6:0;5642:10;9376:23;9368:68;;;;-1:-1:-1;;;9368:68:0;;;;;;;:::i;:::-;9872:30:::1;9899:1;9872:18;:30::i;44759:656::-:0;1812:1;2410:7;;:19;;2402:63;;;;-1:-1:-1;;;2402:63:0;;;;;;;:::i;:::-;1812:1;2543:7;:18;6979:7;;-1:-1:-1;;;6979:7:0;;;;7233:9:::1;7225:38;;;;-1:-1:-1::0;;;7225:38:0::1;;;;;;;:::i;:::-;9229:6:::0;;-1:-1:-1;;;;;9229:6:0;5642:10;9376:23:::2;9368:68;;;;-1:-1:-1::0;;;9368:68:0::2;;;;;;;:::i;:::-;44912:13:::3;;44893:8;:15;44880:10;;:28;;;;:::i;:::-;:45;;44858:124;;;::::0;-1:-1:-1;;;44858:124:0;;20410:2:1;44858:124:0::3;::::0;::::3;20392:21:1::0;20449:2;20429:18;;;20422:30;20488:31;20468:18;;;20461:59;20537:18;;44858:124:0::3;20208:353:1::0;44858:124:0::3;45009:1;44995:10;;:15;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;45038:10:0::3;::::0;45021:339:::3;45067:8;:15;45054:10;;:28;;;;:::i;:::-;45050:1;:32;45021:339;;;45104:15;45122:8;45135:10;;45131:1;:14;;;;:::i;:::-;45122:24;;;;;;;;:::i;:::-;;::::0;;::::3;::::0;;;;;;;45161:9:::3;:12:::0;;;;;;;;;;-1:-1:-1;;;;;45161:21:0;::::3;::::0;;;;;;;;:26;;45122:24;;-1:-1:-1;45186:1:0::3;::::0;45161:21;;:26:::3;::::0;45186:1;;45161:26:::3;:::i;:::-;::::0;;;-1:-1:-1;;45207:53:0::3;::::0;;22921:25:1;;;45258:1:0::3;22977:2:1::0;22962:18;;22955:34;-1:-1:-1;;;;;45207:53:0;::::3;::::0;45242:1:::3;::::0;45222:10:::3;::::0;-1:-1:-1;;;;;;;;;;;45207:53:0;22894:18:1;45207:53:0::3;;;;;;;45275:73;45306:10;45326:1;45330:7;45339:1;45342;45275:73;;;;;;;;;;;::::0;:30:::3;:73::i;:::-;-1:-1:-1::0;45084:3:0;::::3;::::0;::::3;:::i;:::-;;;;45021:339;;;;45404:1;45386:8;:15;:19;;;;:::i;:::-;45372:10;;:33;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;1768:1:0;2722:7;:22;-1:-1:-1;44759:656:0:o;46930:122::-;9229:6;;-1:-1:-1;;;;;9229:6:0;5642:10;9376:23;9368:68;;;;-1:-1:-1;;;9368:68:0;;;;;;;:::i;:::-;47011:13:::1;:33:::0;46930:122::o;48705:61::-;9229:6;;-1:-1:-1;;;;;9229:6:0;5642:10;9376:23;9368:68;;;;-1:-1:-1;;;9368:68:0;;;;;;;:::i;:::-;48750:8:::1;:6;:8::i;43869:20::-:0;;;;;;;:::i;43928:21::-;;;;;;;:::i;31084:311::-;5642:10;-1:-1:-1;;;;;31187:24:0;;;;31179:78;;;;-1:-1:-1;;;31179:78:0;;20768:2:1;31179:78:0;;;20750:21:1;20807:2;20787:18;;;20780:30;20846:34;20826:18;;;20819:62;-1:-1:-1;;;20897:18:1;;;20890:39;20946:19;;31179:78:0;20566:405:1;31179:78:0;5642:10;31270:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;31270:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;31270:53:0;;;;;;;;;;31339:48;;13726:41:1;;;31270:42:0;;5642:10;31339:48;;13699:18:1;31339:48:0;;;;;;;31084:311;;:::o;44192:37::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44192:37:0;;-1:-1:-1;44192:37:0;:::o;31707:401::-;-1:-1:-1;;;;;31915:20:0;;5642:10;31915:20;;:60;;-1:-1:-1;31939:36:0;31956:4;5642:10;31467:168;:::i;31939:36::-;31893:151;;;;-1:-1:-1;;;31893:151:0;;;;;;;:::i;:::-;32055:45;32073:4;32079:2;32083;32087:6;32095:4;32055:17;:45::i;47300:126::-;9229:6;;-1:-1:-1;;;;;9229:6:0;5642:10;9376:23;9368:68;;;;-1:-1:-1;;;9368:68:0;;;;;;;:::i;:::-;47386:32;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;10065:201::-:0;9229:6;;-1:-1:-1;;;;;9229:6:0;5642:10;9376:23;9368:68;;;;-1:-1:-1;;;9368:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10154:22:0;::::1;10146:73;;;::::0;-1:-1:-1;;;10146:73:0;;15795:2:1;10146:73:0::1;::::0;::::1;15777:21:1::0;15834:2;15814:18;;;15807:30;15873:34;15853:18;;;15846:62;-1:-1:-1;;;15924:18:1;;;15917:36;15970:19;;10146:73:0::1;15593:402:1::0;10146:73:0::1;10230:28;10249:8;10230:18;:28::i;48847:321::-:0;-1:-1:-1;;;;;48987:23:0;;5642:10;48987:23;;:66;;-1:-1:-1;49014:39:0;49031:7;5642:10;31467:168;:::i;49014:39::-;48965:157;;;;-1:-1:-1;;;48965:157:0;;;;;;;:::i;:::-;49135:25;49141:7;49150:2;49154:5;49135;:25::i;3124:723::-;3180:13;3401:10;3397:53;;-1:-1:-1;;3428:10:0;;;;;;;;;;;;-1:-1:-1;;;3428:10:0;;;;;3124:723::o;3397:53::-;3475:5;3460:12;3516:78;3523:9;;3516:78;;3549:8;;;;:::i;:::-;;-1:-1:-1;3572:10:0;;-1:-1:-1;3580:2:0;3572:10;;:::i;:::-;;;3516:78;;;3604:19;3636:6;-1:-1:-1;;;;;3626:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3626:17:0;;3604:39;;3654:154;3661:10;;3654:154;;3688:11;3698:1;3688:11;;:::i;:::-;;-1:-1:-1;3757:10:0;3765:2;3757:5;:10;:::i;:::-;3744:24;;:2;:24;:::i;:::-;3731:39;;3714:6;3721;3714:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;3714:56:0;;;;;;;;-1:-1:-1;3785:11:0;3794:2;3785:11;;:::i;:::-;;;3654:154;;;3832:6;3124:723;-1:-1:-1;;;;3124:723:0:o;44280:441::-;44381:13;;44371:6;44358:10;;:19;;;;:::i;:::-;:36;;44336:115;;;;-1:-1:-1;;;44336:115:0;;20410:2:1;44336:115:0;;;20392:21:1;20449:2;20429:18;;;20422:30;20488:31;20468:18;;;20461:59;20537:18;;44336:115:0;20208:353:1;44336:115:0;9229:6;;-1:-1:-1;;;;;9229:6:0;44468:10;:21;44464:250;;44510:15;;;;:23;;:15;:23;44506:125;;;44562:25;44576:10;44562:13;:25::i;:::-;44554:61;;;;-1:-1:-1;;;44554:61:0;;17709:2:1;44554:61:0;;;17691:21:1;17748:2;17728:18;;;17721:30;17787:25;17767:18;;;17760:53;17830:18;;44554:61:0;17507:347:1;44554:61:0;44673:6;44666:4;;:13;;;;:::i;:::-;44653:9;:26;;44645:57;;;;-1:-1:-1;;;44645:57:0;;17017:2:1;44645:57:0;;;16999:21:1;17056:2;17036:18;;;17029:30;-1:-1:-1;;;17075:18:1;;;17068:48;17133:18;;44645:57:0;16815:342:1;45868:523:0;6979:7;;45917:10;;-1:-1:-1;;;6979:7:0;;;;7233:9;7225:38;;;;-1:-1:-1;;;7225:38:0;;;;;;;:::i;:::-;45948:10:::1;45940:70;;;;-1:-1:-1::0;;;45940:70:0::1;;;;;;;:::i;:::-;46037:1;46023:10;;:15;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;46059:10:0::1;::::0;46049:9:::1;:21:::0;;;::::1;::::0;;;;;;;46071:10:::1;46049:33:::0;;;;;;;:38;;46086:1:::1;::::0;46049:9;:38:::1;::::0;46086:1;;46049:38:::1;:::i;:::-;::::0;;;-1:-1:-1;;46154:10:0::1;::::0;46103:65:::1;::::0;;22921:25:1;;;46166:1:0::1;22977:2:1::0;22962:18;;22955:34;46142:10:0::1;::::0;46138:1:::1;::::0;46142:10;;-1:-1:-1;;;;;;;;;;;46103:65:0;22894:18:1;46103:65:0::1;;;;;;;46181:174;46226:10;46259:1;46276:10;46301;;46326:1;46181:174;;;;;;;;;;;::::0;:30:::1;:174::i;:::-;-1:-1:-1::0;46373:10:0::1;::::0;7274:1:::1;45868:523:::0;:::o;46399:429::-;6979:7;;46467:10;;-1:-1:-1;;;6979:7:0;;;;7233:9;7225:38;;;;-1:-1:-1;;;7225:38:0;;;;;;;:::i;:::-;46498:10:::1;46490:70;;;;-1:-1:-1::0;;;46490:70:0::1;;;;;;;:::i;:::-;46587:1;46573:10;;:15;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;46618:10:0::1;::::0;46601:113:::1;46647:6;46634:10;;:19;;;;:::i;:::-;46630:1;:23;46601:113;;;46675:27;46681:10;46693:1;46696;46675:27;;;;;;;;;;;::::0;:5:::1;:27::i;:::-;46655:3:::0;::::1;::::0;::::1;:::i;:::-;;;;46601:113;;;-1:-1:-1::0;46740:10:0::1;46749:1;46740:6:::0;:10:::1;:::i;:::-;46726;;:24;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;46770:10:0::1;::::0;;46399:429;-1:-1:-1;;46399:429:0:o;34269:1074::-;34496:7;:14;34482:3;:10;:28;34474:81;;;;-1:-1:-1;;;34474:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34574:16:0;;34566:66;;;;-1:-1:-1;;;34566:66:0;;;;;;;:::i;:::-;5642:10;34689:60;5642:10;34720:4;34726:2;34730:3;34735:7;34744:4;34689:20;:60::i;:::-;34767:9;34762:421;34786:3;:10;34782:1;:14;34762:421;;;34818:10;34831:3;34835:1;34831:6;;;;;;;;:::i;:::-;;;;;;;34818:19;;34852:14;34869:7;34877:1;34869:10;;;;;;;;:::i;:::-;;;;;;;;;;;;34896:19;34918:13;;;;;;;;;;-1:-1:-1;;;;;34918:19:0;;;;;;;;;;;;34869:10;;-1:-1:-1;34960:21:0;;;;34952:76;;;;-1:-1:-1;;;34952:76:0;;;;;;;:::i;:::-;35072:9;:13;;;;;;;;;;;-1:-1:-1;;;;;35072:19:0;;;;;;;;;;35094:20;;;35072:42;;35144:17;;;;;;;:27;;35094:20;;35072:9;35144:27;;35094:20;;35144:27;:::i;:::-;;;;;;;;34803:380;;;34798:3;;;;:::i;:::-;;;34762:421;;;;35230:2;-1:-1:-1;;;;;35200:47:0;35224:4;-1:-1:-1;;;;;35200:47:0;35214:8;-1:-1:-1;;;;;35200:47:0;;35234:3;35239:7;35200:47;;;;;;;:::i;:::-;;;;;;;;35260:75;35296:8;35306:4;35312:2;35316:3;35321:7;35330:4;35260:35;:75::i;:::-;34463:880;34269:1074;;;;;:::o;7967:120::-;6979:7;;-1:-1:-1;;;6979:7:0;;;;7503:41;;;;-1:-1:-1;;;7503:41:0;;15034:2:1;7503:41:0;;;15016:21:1;15073:2;15053:18;;;15046:30;-1:-1:-1;;;15092:18:1;;;15085:50;15152:18;;7503:41:0;14832:344:1;7503:41:0;8026:7:::1;:15:::0;;-1:-1:-1;;;;8026:15:0::1;::::0;;8057:22:::1;5642:10:::0;8066:12:::1;8057:22;::::0;-1:-1:-1;;;;;11410:32:1;;;11392:51;;11380:2;11365:18;8057:22:0::1;;;;;;;7967:120::o:0;39503:918::-;-1:-1:-1;;;;;39658:21:0;;39650:69;;;;-1:-1:-1;;;39650:69:0;;;;;;;:::i;:::-;39752:7;:14;39738:3;:10;:28;39730:81;;;;-1:-1:-1;;;39730:81:0;;;;;;;:::i;:::-;39824:16;5642:10;39824:31;;39868:69;39889:8;39899:7;39916:1;39920:3;39925:7;39868:69;;;;;;;;;;;;:20;:69::i;:::-;39955:9;39950:388;39974:3;:10;39970:1;:14;39950:388;;;40006:10;40019:3;40023:1;40019:6;;;;;;;;:::i;:::-;;;;;;;40006:19;;40040:14;40057:7;40065:1;40057:10;;;;;;;;:::i;:::-;;;;;;;;;;;;40084:22;40109:13;;;;;;;;;;-1:-1:-1;;;;;40109:22:0;;;;;;;;;;;;40057:10;;-1:-1:-1;40154:24:0;;;;40146:73;;;;-1:-1:-1;;;40146:73:0;;;;;;;:::i;:::-;40263:9;:13;;;;;;;;;;;-1:-1:-1;;;;;40263:22:0;;;;;;;;;;40288:23;;40263:48;;39986:3;;;;:::i;:::-;;;;39950:388;;;;40396:1;-1:-1:-1;;;;;40355:58:0;40379:7;-1:-1:-1;;;;;40355:58:0;40369:8;-1:-1:-1;;;;;40355:58:0;;40400:3;40405:7;40355:58;;;;;;;:::i;:::-;;;;;;;;39639:782;39503:918;;;:::o;10426:191::-;10519:6;;;-1:-1:-1;;;;;10536:17:0;;;-1:-1:-1;;;;;;10536:17:0;;;;;;;10569:40;;10519:6;;;10536:17;10519:6;;10569:40;;10500:16;;10569:40;10489:128;10426:191;:::o;41606:745::-;-1:-1:-1;;;;;41822:13:0;;11767:20;11815:8;41818:526;;41858:72;;-1:-1:-1;;;41858:72:0;;-1:-1:-1;;;;;41858:38:0;;;;;:72;;41897:8;;41907:4;;41913:2;;41917:6;;41925:4;;41858:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41858:72:0;;;;;;;;-1:-1:-1;;41858:72:0;;;;;;;;;;;;:::i;:::-;;;41854:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;42206:6;42199:14;;-1:-1:-1;;;42199:14:0;;;;;;;;:::i;41854:479::-;;;42255:62;;-1:-1:-1;;;42255:62:0;;14204:2:1;42255:62:0;;;14186:21:1;14243:2;14223:18;;;14216:30;14282:34;14262:18;;;14255:62;-1:-1:-1;;;14333:18:1;;;14326:50;14393:19;;42255:62:0;14002:416:1;41854:479:0;-1:-1:-1;;;;;;41980:55:0;;-1:-1:-1;;;41980:55:0;41976:154;;42060:50;;-1:-1:-1;;;42060:50:0;;;;;;;:::i;41976:154::-;41931:214;41606:745;;;;;;:::o;7708:118::-;6979:7;;-1:-1:-1;;;6979:7:0;;;;7233:9;7225:38;;;;-1:-1:-1;;;7225:38:0;;;;;;;:::i;:::-;7768:7:::1;:14:::0;;-1:-1:-1;;;;7768:14:0::1;-1:-1:-1::0;;;7768:14:0::1;::::0;;7798:20:::1;7805:12;5642:10:::0;;5562:98;33091:820;-1:-1:-1;;;;;33279:16:0;;33271:66;;;;-1:-1:-1;;;33271:66:0;;;;;;;:::i;:::-;5642:10;33394:96;5642:10;33425:4;33431:2;33435:21;33453:2;33435:17;:21::i;:::-;33458:25;33476:6;33458:17;:25::i;:::-;33485:4;33394:20;:96::i;:::-;33503:19;33525:13;;;;;;;;;;;-1:-1:-1;;;;;33525:19:0;;;;;;;;;;33563:21;;;;33555:76;;;;-1:-1:-1;;;33555:76:0;;;;;;;:::i;:::-;33667:9;:13;;;;;;;;;;;-1:-1:-1;;;;;33667:19:0;;;;;;;;;;33689:20;;;33667:42;;33731:17;;;;;;;:27;;33689:20;;33667:9;33731:27;;33689:20;;33731:27;:::i;:::-;;;;-1:-1:-1;;33776:46:0;;;22921:25:1;;;22977:2;22962:18;;22955:34;;;-1:-1:-1;;;;;33776:46:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;33776:46:0;22894:18:1;33776:46:0;;;;;;;33835:68;33866:8;33876:4;33882:2;33886;33890:6;33898:4;33835:30;:68::i;38625:675::-;-1:-1:-1;;;;;38755:21:0;;38747:69;;;;-1:-1:-1;;;38747:69:0;;;;;;;:::i;:::-;5642:10;38873:105;5642:10;38904:7;38829:16;38925:21;38943:2;38925:17;:21::i;:::-;38948:25;38966:6;38948:17;:25::i;:::-;38873:105;;;;;;;;;;;;:20;:105::i;:::-;38991:22;39016:13;;;;;;;;;;;-1:-1:-1;;;;;39016:22:0;;;;;;;;;;39057:24;;;;39049:73;;;;-1:-1:-1;;;39049:73:0;;;;;;;:::i;:::-;39158:9;:13;;;;;;;;;;;-1:-1:-1;;;;;39158:22:0;;;;;;;;;;;;39183:23;;;39158:48;;39235:57;;22921:25:1;;;22962:18;;;22955:34;;;39158:22:0;;39235:57;;;;-1:-1:-1;;;;;;;;;;;39235:57:0;22894:18:1;39235:57:0;;;;;;;38736:564;;38625:675;;;:::o;36676:599::-;-1:-1:-1;;;;;36834:21:0;;36826:67;;;;-1:-1:-1;;;36826:67:0;;;;;;;:::i;:::-;5642:10;36950:107;5642:10;36906:16;36993:7;37002:21;37020:2;37002:17;:21::i;36950:107::-;37070:9;:13;;;;;;;;;;;-1:-1:-1;;;;;37070:22:0;;;;;;;;;:32;;37096:6;;37070:9;:32;;37096:6;;37070:32;:::i;:::-;;;;-1:-1:-1;;37118:57:0;;;22921:25:1;;;22977:2;22962:18;;22955:34;;;-1:-1:-1;;;;;37118:57:0;;;;37151:1;;37118:57;;;;-1:-1:-1;;;;;;;;;;;37118:57:0;22894:18:1;37118:57:0;;;;;;;37188:79;37219:8;37237:1;37241:7;37250:2;37254:6;37262:4;37188:30;:79::i;49537:319::-;6979:7;;-1:-1:-1;;;6979:7:0;;;;7233:9;7225:38;;;;-1:-1:-1;;;7225:38:0;;;;;;;:::i;:::-;49782:66:::1;34269:1074:::0;42359:814;-1:-1:-1;;;;;42600:13:0;;11767:20;11815:8;42596:570;;42636:79;;-1:-1:-1;;;42636:79:0;;-1:-1:-1;;;;;42636:43:0;;;;;:79;;42680:8;;42690:4;;42696:3;;42701:7;;42710:4;;42636:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42636:79:0;;;;;;;;-1:-1:-1;;42636:79:0;;;;;;;;;;;;:::i;:::-;;;42632:523;;;;:::i;:::-;-1:-1:-1;;;;;;42797:60:0;;-1:-1:-1;;;42797:60:0;42793:159;;42882:50;;-1:-1:-1;;;42882:50:0;;;;;;;:::i;43181:198::-;43301:16;;;43315:1;43301:16;;;;;;;;;43247;;43276:22;;43301:16;;;;;;;;;;;;-1:-1:-1;43301:16:0;43276:41;;43339:7;43328:5;43334:1;43328:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;43366:5;43181:198;-1:-1:-1;;43181:198:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:468:1;78:5;-1:-1:-1;;;;;104:6:1;101:30;98:56;;;134:18;;:::i;:::-;183:2;177:9;195:69;252:2;231:15;;-1:-1:-1;;227:29:1;258:4;223:40;177:9;195:69;:::i;:::-;282:6;273:15;;312:6;304;297:22;352:3;343:6;338:3;334:16;331:25;328:45;;;369:1;366;359:12;328:45;419:6;414:3;407:4;399:6;395:17;382:44;474:1;467:4;458:6;450;446:19;442:30;435:41;;14:468;;;;;:::o;487:173::-;555:20;;-1:-1:-1;;;;;604:31:1;;594:42;;584:70;;650:1;647;640:12;665:741;719:5;772:3;765:4;757:6;753:17;749:27;739:55;;790:1;787;780:12;739:55;826:6;813:20;852:4;875:43;915:2;875:43;:::i;:::-;947:2;941:9;959:31;987:2;979:6;959:31;:::i;:::-;1025:18;;;1059:15;;;;-1:-1:-1;1094:15:1;;;1144:1;1140:10;;;1128:23;;1124:32;;1121:41;-1:-1:-1;1118:61:1;;;1175:1;1172;1165:12;1118:61;1197:1;1207:169;1221:2;1218:1;1215:9;1207:169;;;1278:23;1297:3;1278:23;:::i;:::-;1266:36;;1322:12;;;;1354;;;;1239:1;1232:9;1207:169;;;-1:-1:-1;1394:6:1;;665:741;-1:-1:-1;;;;;;;665:741:1:o;1411:735::-;1465:5;1518:3;1511:4;1503:6;1499:17;1495:27;1485:55;;1536:1;1533;1526:12;1485:55;1572:6;1559:20;1598:4;1621:43;1661:2;1621:43;:::i;:::-;1693:2;1687:9;1705:31;1733:2;1725:6;1705:31;:::i;:::-;1771:18;;;1805:15;;;;-1:-1:-1;1840:15:1;;;1890:1;1886:10;;;1874:23;;1870:32;;1867:41;-1:-1:-1;1864:61:1;;;1921:1;1918;1911:12;1864:61;1943:1;1953:163;1967:2;1964:1;1961:9;1953:163;;;2024:17;;2012:30;;2062:12;;;;2094;;;;1985:1;1978:9;1953:163;;2151:220;2193:5;2246:3;2239:4;2231:6;2227:17;2223:27;2213:55;;2264:1;2261;2254:12;2213:55;2286:79;2361:3;2352:6;2339:20;2332:4;2324:6;2320:17;2286:79;:::i;:::-;2277:88;2151:220;-1:-1:-1;;;2151:220:1:o;2376:186::-;2435:6;2488:2;2476:9;2467:7;2463:23;2459:32;2456:52;;;2504:1;2501;2494:12;2456:52;2527:29;2546:9;2527:29;:::i;2567:260::-;2635:6;2643;2696:2;2684:9;2675:7;2671:23;2667:32;2664:52;;;2712:1;2709;2702:12;2664:52;2735:29;2754:9;2735:29;:::i;:::-;2725:39;;2783:38;2817:2;2806:9;2802:18;2783:38;:::i;:::-;2773:48;;2567:260;;;;;:::o;2832:943::-;2986:6;2994;3002;3010;3018;3071:3;3059:9;3050:7;3046:23;3042:33;3039:53;;;3088:1;3085;3078:12;3039:53;3111:29;3130:9;3111:29;:::i;:::-;3101:39;;3159:38;3193:2;3182:9;3178:18;3159:38;:::i;:::-;3149:48;;3248:2;3237:9;3233:18;3220:32;-1:-1:-1;;;;;3312:2:1;3304:6;3301:14;3298:34;;;3328:1;3325;3318:12;3298:34;3351:61;3404:7;3395:6;3384:9;3380:22;3351:61;:::i;:::-;3341:71;;3465:2;3454:9;3450:18;3437:32;3421:48;;3494:2;3484:8;3481:16;3478:36;;;3510:1;3507;3500:12;3478:36;3533:63;3588:7;3577:8;3566:9;3562:24;3533:63;:::i;:::-;3523:73;;3649:3;3638:9;3634:19;3621:33;3605:49;;3679:2;3669:8;3666:16;3663:36;;;3695:1;3692;3685:12;3663:36;;3718:51;3761:7;3750:8;3739:9;3735:24;3718:51;:::i;:::-;3708:61;;;2832:943;;;;;;;;:::o;3780:606::-;3884:6;3892;3900;3908;3916;3969:3;3957:9;3948:7;3944:23;3940:33;3937:53;;;3986:1;3983;3976:12;3937:53;4009:29;4028:9;4009:29;:::i;:::-;3999:39;;4057:38;4091:2;4080:9;4076:18;4057:38;:::i;:::-;4047:48;;4142:2;4131:9;4127:18;4114:32;4104:42;;4193:2;4182:9;4178:18;4165:32;4155:42;;4248:3;4237:9;4233:19;4220:33;-1:-1:-1;;;;;4268:6:1;4265:30;4262:50;;;4308:1;4305;4298:12;4262:50;4331:49;4372:7;4363:6;4352:9;4348:22;4331:49;:::i;4391:669::-;4518:6;4526;4534;4587:2;4575:9;4566:7;4562:23;4558:32;4555:52;;;4603:1;4600;4593:12;4555:52;4626:29;4645:9;4626:29;:::i;:::-;4616:39;;4706:2;4695:9;4691:18;4678:32;-1:-1:-1;;;;;4770:2:1;4762:6;4759:14;4756:34;;;4786:1;4783;4776:12;4756:34;4809:61;4862:7;4853:6;4842:9;4838:22;4809:61;:::i;:::-;4799:71;;4923:2;4912:9;4908:18;4895:32;4879:48;;4952:2;4942:8;4939:16;4936:36;;;4968:1;4965;4958:12;4936:36;;4991:63;5046:7;5035:8;5024:9;5020:24;4991:63;:::i;:::-;4981:73;;;4391:669;;;;;:::o;5065:347::-;5130:6;5138;5191:2;5179:9;5170:7;5166:23;5162:32;5159:52;;;5207:1;5204;5197:12;5159:52;5230:29;5249:9;5230:29;:::i;:::-;5220:39;;5309:2;5298:9;5294:18;5281:32;5356:5;5349:13;5342:21;5335:5;5332:32;5322:60;;5378:1;5375;5368:12;5322:60;5401:5;5391:15;;;5065:347;;;;;:::o;5417:254::-;5485:6;5493;5546:2;5534:9;5525:7;5521:23;5517:32;5514:52;;;5562:1;5559;5552:12;5514:52;5585:29;5604:9;5585:29;:::i;:::-;5575:39;5661:2;5646:18;;;;5633:32;;-1:-1:-1;;;5417:254:1:o;5676:322::-;5753:6;5761;5769;5822:2;5810:9;5801:7;5797:23;5793:32;5790:52;;;5838:1;5835;5828:12;5790:52;5861:29;5880:9;5861:29;:::i;:::-;5851:39;5937:2;5922:18;;5909:32;;-1:-1:-1;5988:2:1;5973:18;;;5960:32;;5676:322;-1:-1:-1;;;5676:322:1:o;6003:615::-;6089:6;6097;6150:2;6138:9;6129:7;6125:23;6121:32;6118:52;;;6166:1;6163;6156:12;6118:52;6206:9;6193:23;-1:-1:-1;;;;;6276:2:1;6268:6;6265:14;6262:34;;;6292:1;6289;6282:12;6262:34;6330:6;6319:9;6315:22;6305:32;;6375:7;6368:4;6364:2;6360:13;6356:27;6346:55;;6397:1;6394;6387:12;6346:55;6437:2;6424:16;6463:2;6455:6;6452:14;6449:34;;;6479:1;6476;6469:12;6449:34;6532:7;6527:2;6517:6;6514:1;6510:14;6506:2;6502:23;6498:32;6495:45;6492:65;;;6553:1;6550;6543:12;6492:65;6584:2;6576:11;;;;;6606:6;;-1:-1:-1;6003:615:1;;-1:-1:-1;;;;6003:615:1:o;6623:348::-;6707:6;6760:2;6748:9;6739:7;6735:23;6731:32;6728:52;;;6776:1;6773;6766:12;6728:52;6816:9;6803:23;-1:-1:-1;;;;;6841:6:1;6838:30;6835:50;;;6881:1;6878;6871:12;6835:50;6904:61;6957:7;6948:6;6937:9;6933:22;6904:61;:::i;6976:595::-;7094:6;7102;7155:2;7143:9;7134:7;7130:23;7126:32;7123:52;;;7171:1;7168;7161:12;7123:52;7211:9;7198:23;-1:-1:-1;;;;;7281:2:1;7273:6;7270:14;7267:34;;;7297:1;7294;7287:12;7267:34;7320:61;7373:7;7364:6;7353:9;7349:22;7320:61;:::i;:::-;7310:71;;7434:2;7423:9;7419:18;7406:32;7390:48;;7463:2;7453:8;7450:16;7447:36;;;7479:1;7476;7469:12;7447:36;;7502:63;7557:7;7546:8;7535:9;7531:24;7502:63;:::i;:::-;7492:73;;;6976:595;;;;;:::o;7576:245::-;7634:6;7687:2;7675:9;7666:7;7662:23;7658:32;7655:52;;;7703:1;7700;7693:12;7655:52;7742:9;7729:23;7761:30;7785:5;7761:30;:::i;7826:249::-;7895:6;7948:2;7936:9;7927:7;7923:23;7919:32;7916:52;;;7964:1;7961;7954:12;7916:52;7996:9;7990:16;8015:30;8039:5;8015:30;:::i;8080:450::-;8149:6;8202:2;8190:9;8181:7;8177:23;8173:32;8170:52;;;8218:1;8215;8208:12;8170:52;8258:9;8245:23;-1:-1:-1;;;;;8283:6:1;8280:30;8277:50;;;8323:1;8320;8313:12;8277:50;8346:22;;8399:4;8391:13;;8387:27;-1:-1:-1;8377:55:1;;8428:1;8425;8418:12;8377:55;8451:73;8516:7;8511:2;8498:16;8493:2;8489;8485:11;8451:73;:::i;8535:180::-;8594:6;8647:2;8635:9;8626:7;8622:23;8618:32;8615:52;;;8663:1;8660;8653:12;8615:52;-1:-1:-1;8686:23:1;;8535:180;-1:-1:-1;8535:180:1:o;8720:435::-;8773:3;8811:5;8805:12;8838:6;8833:3;8826:19;8864:4;8893:2;8888:3;8884:12;8877:19;;8930:2;8923:5;8919:14;8951:1;8961:169;8975:6;8972:1;8969:13;8961:169;;;9036:13;;9024:26;;9070:12;;;;9105:15;;;;8997:1;8990:9;8961:169;;;-1:-1:-1;9146:3:1;;8720:435;-1:-1:-1;;;;;8720:435:1:o;9160:257::-;9201:3;9239:5;9233:12;9266:6;9261:3;9254:19;9282:63;9338:6;9331:4;9326:3;9322:14;9315:4;9308:5;9304:16;9282:63;:::i;:::-;9399:2;9378:15;-1:-1:-1;;9374:29:1;9365:39;;;;9406:4;9361:50;;9160:257;-1:-1:-1;;9160:257:1:o;9422:185::-;9464:3;9502:5;9496:12;9517:52;9562:6;9557:3;9550:4;9543:5;9539:16;9517:52;:::i;:::-;9585:16;;;;;9422:185;-1:-1:-1;;9422:185:1:o;9730:1301::-;10007:3;10036:1;10069:6;10063:13;10099:3;10121:1;10149:9;10145:2;10141:18;10131:28;;10209:2;10198:9;10194:18;10231;10221:61;;10275:4;10267:6;10263:17;10253:27;;10221:61;10301:2;10349;10341:6;10338:14;10318:18;10315:38;10312:165;;;-1:-1:-1;;;10376:33:1;;10432:4;10429:1;10422:15;10462:4;10383:3;10450:17;10312:165;10493:18;10520:104;;;;10638:1;10633:320;;;;10486:467;;10520:104;-1:-1:-1;;10553:24:1;;10541:37;;10598:16;;;;-1:-1:-1;10520:104:1;;10633:320;23514:1;23507:14;;;23551:4;23538:18;;10728:1;10742:165;10756:6;10753:1;10750:13;10742:165;;;10834:14;;10821:11;;;10814:35;10877:16;;;;10771:10;;10742:165;;;10746:3;;10936:6;10931:3;10927:16;10920:23;;10486:467;;;;;;;10969:56;10994:30;11020:3;11012:6;10994:30;:::i;:::-;-1:-1:-1;;;9672:20:1;;9717:1;9708:11;;9612:113;10969:56;10962:63;9730:1301;-1:-1:-1;;;;;9730:1301:1:o;11454:826::-;-1:-1:-1;;;;;11851:15:1;;;11833:34;;11903:15;;11898:2;11883:18;;11876:43;11813:3;11950:2;11935:18;;11928:31;;;11776:4;;11982:57;;12019:19;;12011:6;11982:57;:::i;:::-;12087:9;12079:6;12075:22;12070:2;12059:9;12055:18;12048:50;12121:44;12158:6;12150;12121:44;:::i;:::-;12107:58;;12214:9;12206:6;12202:22;12196:3;12185:9;12181:19;12174:51;12242:32;12267:6;12259;12242:32;:::i;:::-;12234:40;11454:826;-1:-1:-1;;;;;;;;11454:826:1:o;12285:560::-;-1:-1:-1;;;;;12582:15:1;;;12564:34;;12634:15;;12629:2;12614:18;;12607:43;12681:2;12666:18;;12659:34;;;12724:2;12709:18;;12702:34;;;12544:3;12767;12752:19;;12745:32;;;12507:4;;12794:45;;12819:19;;12811:6;12794:45;:::i;:::-;12786:53;12285:560;-1:-1:-1;;;;;;;12285:560:1:o;12850:261::-;13029:2;13018:9;13011:21;12992:4;13049:56;13101:2;13090:9;13086:18;13078:6;13049:56;:::i;13116:465::-;13373:2;13362:9;13355:21;13336:4;13399:56;13451:2;13440:9;13436:18;13428:6;13399:56;:::i;:::-;13503:9;13495:6;13491:22;13486:2;13475:9;13471:18;13464:50;13531:44;13568:6;13560;13531:44;:::i;13778:219::-;13927:2;13916:9;13909:21;13890:4;13947:44;13987:2;13976:9;13972:18;13964:6;13947:44;:::i;14423:404::-;14625:2;14607:21;;;14664:2;14644:18;;;14637:30;14703:34;14698:2;14683:18;;14676:62;-1:-1:-1;;;14769:2:1;14754:18;;14747:38;14817:3;14802:19;;14423:404::o;16000:400::-;16202:2;16184:21;;;16241:2;16221:18;;;16214:30;16280:34;16275:2;16260:18;;16253:62;-1:-1:-1;;;16346:2:1;16331:18;;16324:34;16390:3;16375:19;;16000:400::o;16405:405::-;16607:2;16589:21;;;16646:2;16626:18;;;16619:30;16685:34;16680:2;16665:18;;16658:62;-1:-1:-1;;;16751:2:1;16736:18;;16729:39;16800:3;16785:19;;16405:405::o;17162:340::-;17364:2;17346:21;;;17403:2;17383:18;;;17376:30;-1:-1:-1;;;17437:2:1;17422:18;;17415:46;17493:2;17478:18;;17162:340::o;17859:401::-;18061:2;18043:21;;;18100:2;18080:18;;;18073:30;18139:34;18134:2;18119:18;;18112:62;-1:-1:-1;;;18205:2:1;18190:18;;18183:35;18250:3;18235:19;;17859:401::o;18684:399::-;18886:2;18868:21;;;18925:2;18905:18;;;18898:30;18964:34;18959:2;18944:18;;18937:62;-1:-1:-1;;;19030:2:1;19015:18;;19008:33;19073:3;19058:19;;18684:399::o;19088:406::-;19290:2;19272:21;;;19329:2;19309:18;;;19302:30;19368:34;19363:2;19348:18;;19341:62;-1:-1:-1;;;19434:2:1;19419:18;;19412:40;19484:3;19469:19;;19088:406::o;19499:356::-;19701:2;19683:21;;;19720:18;;;19713:30;19779:34;19774:2;19759:18;;19752:62;19846:2;19831:18;;19499:356::o;21386:404::-;21588:2;21570:21;;;21627:2;21607:18;;;21600:30;21666:34;21661:2;21646:18;;21639:62;-1:-1:-1;;;21732:2:1;21717:18;;21710:38;21780:3;21765:19;;21386:404::o;21795:397::-;21997:2;21979:21;;;22036:2;22016:18;;;22009:30;22075:34;22070:2;22055:18;;22048:62;-1:-1:-1;;;22141:2:1;22126:18;;22119:31;22182:3;22167:19;;21795:397::o;22197:355::-;22399:2;22381:21;;;22438:2;22418:18;;;22411:30;22477:33;22472:2;22457:18;;22450:61;22543:2;22528:18;;22197:355::o;23253:183::-;23313:4;-1:-1:-1;;;;;23338:6:1;23335:30;23332:56;;;23368:18;;:::i;:::-;-1:-1:-1;23413:1:1;23409:14;23425:4;23405:25;;23253:183::o;23567:128::-;23607:3;23638:1;23634:6;23631:1;23628:13;23625:39;;;23644:18;;:::i;:::-;-1:-1:-1;23680:9:1;;23567:128::o;23700:120::-;23740:1;23766;23756:35;;23771:18;;:::i;:::-;-1:-1:-1;23805:9:1;;23700:120::o;23825:168::-;23865:7;23931:1;23927;23923:6;23919:14;23916:1;23913:21;23908:1;23901:9;23894:17;23890:45;23887:71;;;23938:18;;:::i;:::-;-1:-1:-1;23978:9:1;;23825:168::o;23998:125::-;24038:4;24066:1;24063;24060:8;24057:34;;;24071:18;;:::i;:::-;-1:-1:-1;24108:9:1;;23998:125::o;24128:258::-;24200:1;24210:113;24224:6;24221:1;24218:13;24210:113;;;24300:11;;;24294:18;24281:11;;;24274:39;24246:2;24239:10;24210:113;;;24341:6;24338:1;24335:13;24332:48;;;24376:1;24367:6;24362:3;24358:16;24351:27;24332:48;;24128:258;;;:::o;24391:380::-;24470:1;24466:12;;;;24513;;;24534:61;;24588:4;24580:6;24576:17;24566:27;;24534:61;24641:2;24633:6;24630:14;24610:18;24607:38;24604:161;;;24687:10;24682:3;24678:20;24675:1;24668:31;24722:4;24719:1;24712:15;24750:4;24747:1;24740:15;24604:161;;24391:380;;;:::o;24776:249::-;24886:2;24867:13;;-1:-1:-1;;24863:27:1;24851:40;;-1:-1:-1;;;;;24906:34:1;;24942:22;;;24903:62;24900:88;;;24968:18;;:::i;:::-;25004:2;24997:22;-1:-1:-1;;24776:249:1:o;25030:135::-;25069:3;-1:-1:-1;;25090:17:1;;25087:43;;;25110:18;;:::i;:::-;-1:-1:-1;25157:1:1;25146:13;;25030:135::o;25170:112::-;25202:1;25228;25218:35;;25233:18;;:::i;:::-;-1:-1:-1;25267:9:1;;25170:112::o;25287:127::-;25348:10;25343:3;25339:20;25336:1;25329:31;25379:4;25376:1;25369:15;25403:4;25400:1;25393:15;25419:127;25480:10;25475:3;25471:20;25468:1;25461:31;25511:4;25508:1;25501:15;25535:4;25532:1;25525:15;25551:127;25612:10;25607:3;25603:20;25600:1;25593:31;25643:4;25640:1;25633:15;25667:4;25664:1;25657:15;25683:127;25744:10;25739:3;25735:20;25732:1;25725:31;25775:4;25772:1;25765:15;25799:4;25796:1;25789:15;25815:179;25850:3;25892:1;25874:16;25871:23;25868:120;;;25938:1;25935;25932;25917:23;-1:-1:-1;25975:1:1;25969:8;25964:3;25960:18;25815:179;:::o;25999:671::-;26038:3;26080:4;26062:16;26059:26;26056:39;;;25999:671;:::o;26056:39::-;26122:2;26116:9;-1:-1:-1;;26187:16:1;26183:25;;26180:1;26116:9;26159:50;26238:4;26232:11;26262:16;-1:-1:-1;;;;;26368:2:1;26361:4;26353:6;26349:17;26346:25;26341:2;26333:6;26330:14;26327:45;26324:58;;;26375:5;;;;;25999:671;:::o;26324:58::-;26412:6;26406:4;26402:17;26391:28;;26448:3;26442:10;26475:2;26467:6;26464:14;26461:27;;;26481:5;;;;;;25999:671;:::o;26461:27::-;26565:2;26546:16;26540:4;26536:27;26532:36;26525:4;26516:6;26511:3;26507:16;26503:27;26500:69;26497:82;;;26572:5;;;;;;25999:671;:::o;26497:82::-;26588:57;26639:4;26630:6;26622;26618:19;26614:30;26608:4;26588:57;:::i;:::-;-1:-1:-1;26661:3:1;;25999:671;-1:-1:-1;;;;;25999:671:1:o;26675:131::-;-1:-1:-1;;;;;;26749:32:1;;26739:43;;26729:71;;26796:1;26793;26786:12
Swarm Source
ipfs://55d717297ae3db92eaa21f53fa39df455f6fab999442f836efeef530117b2908
Loading...
Loading
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.