ERC-721
Overview
Max Total Supply
154 BAGL
Holders
97
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 BAGLLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
EverythingIsEverything
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-13 */ // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (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.1 (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.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/Base64.sol pragma solidity ^0.8.0; /// [MIT License] /// @title Base64 /// @notice Provides a function for encoding some bytes in base64 /// @author Brecht Devos <[email protected]> library Base64 { bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /// @notice Encodes some bytes to the base64 representation function encode(bytes memory data) internal pure returns (string memory) { uint256 len = data.length; if (len == 0) return ""; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((len + 2) / 3); // Add some extra buffer at the end bytes memory result = new bytes(encodedLen + 32); bytes memory table = TABLE; assembly { let tablePtr := add(table, 1) let resultPtr := add(result, 32) for { let i := 0 } lt(i, len) { } { i := add(i, 3) let input := and(mload(add(data, i)), 0xffffff) let out := mload(add(tablePtr, and(shr(18, input), 0x3F))) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF)) out := shl(224, out) mstore(resultPtr, out) resultPtr := add(resultPtr, 4) } switch mod(len, 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } mstore(result, encodedLen) } return string(result); } } // File: contracts/BagelMap.sol //SPDX-License-Identifier: Unlicense pragma solidity ^0.8.0; contract EverythingIsEverything is ERC721Enumerable, Ownable, ReentrancyGuard { uint256 public constant maxTokens = 203; uint256 public tokenPrice = 0.1 ether; //0.1 ether uint16[] private _storeScores = [0,350,425,375,450,400,225,375,350,450,475,400,400,450,350,350,400,275,400,325,475,175,425,350,400,400,350,225,450,375,425,250,350,400,400,225,425,425,325,400,375,325,350,375,375,400,400,425,375,425,400,425,375,350,400,375,375,325,375,450,425,375,300,400,400,375,400,375,350,325,375,500,350,375,375,375,375,250,325,475,400,400,450,400,425,375,450,400,375,400,400,475,425,400,400,400,275,425,375,400,450,425,425,400,375,450,400,450,400,400,400,400,475,400,400,450,350,400,400,375,400,350,400,350,375,450,350,450,375,325,400,400,425,225,250,350,375,350,400,400,425,300,400,400,350,400,375,425,200,350,350,300,450,400,400,350,350,425,450,375,400,425,375,400,450,425,425,425,400,425,350,475,0,400,375,300,375,425,425,425,375,425,400,350,300,400,425,350,375,375,450,375,350,400,400,475,400,350,375,375,375,400,350]; uint16[] private _spreadScores = [0,375,425,325,350,400,225,375,325,400,400,350,375,425,350,350,425,350,400,375,400,225,450,350,400,300,325,375,375,375,425,300,300,400,325,250,350,450,375,350,325,300,350,350,400,425,400,375,400,425,400,400,400,425,425,350,400,350,400,375,400,350,250,450,400,400,400,425,300,400,350,350,300,300,425,400,350,150,250,400,425,400,425,350,400,350,425,375,350,400,400,375,400,400,425,350,300,300,375,400,450,450,400,400,425,450,450,425,400,450,375,450,425,350,450,375,225,375,400,325,425,350,400,300,400,450,250,425,300,325,425,400,400,300,250,350,375,350,375,425,400,300,375,325,325,350,325,425,100,400,375,250,400,375,400,350,300,325,475,350,450,400,375,425,450,300,450,325,325,425,300,325,350,450,400,350,350,450,425,350,375,400,450,375,250,475,475,425,300,425,350,400,300,375,400,400,350,325,425,0,300,400,350]; uint16[] private _bagelScores = [0,375,425,350,400,400,300,375,325,425,400,325,375,350,250,400,425,350,400,350,425,225,425,325,450,325,325,325,400,375,425,250,300,425,350,325,375,475,350,350,325,325,325,375,400,400,350,325,375,400,425,375,400,350,425,375,350,350,425,375,425,350,250,450,400,375,400,400,250,325,350,350,350,325,425,400,350,175,275,400,375,375,425,350,400,375,450,375,325,375,400,375,400,450,400,375,200,325,400,400,450,400,400,400,375,450,425,450,425,450,325,450,400,225,475,400,200,425,400,350,425,325,400,350,400,475,275,425,325,300,425,350,400,400,250,350,325,225,375,425,400,300,375,325,325,325,325,450,200,400,375,300,400,425,400,375,275,375,500,325,425,400,375,425,450,325,425,325,375,450,300,300,200,425,425,300,325,425,400,375,400,375,475,350,275,375,450,425,350,375,325,425,275,400,375,425,350,275,375,375,300,400,350]; uint16[] private _totalScores = [0,367,425,350,400,400,250,375,333,425,425,358,383,408,317,367,417,325,400,350,433,208,433,342,417,342,333,308,408,375,425,267,317,408,358,267,383,450,350,367,342,317,342,367,392,408,383,375,383,417,408,400,392,375,417,367,375,342,400,400,417,358,267,433,400,383,400,400,300,350,358,400,333,333,408,392,383,192,425,425,283,392,433,367,408,367,442,383,350,392,400,408,408,417,408,367,258,350,383,400,450,283,408,400,392,450,425,442,408,433,367,433,433,325,442,408,258,400,400,325,417,342,400,333,392,458,292,433,333,317,425,383,408,308,250,350,358,308,383,417,408,300,383,350,333,358,342,433,167,383,367,417,417,400,400,358,308,375,475,350,425,408,375,417,450,350,433,358,375,433,317,367,275,425,400,317,350,433,400,383,383,400,442,358,275,417,450,400,342,392,375,400,308,392,392,433,367,317,392,375,325,400,350]; string private _uriPrefix; bool public mintingEnabled; bytes public constant GENESIS_DATA = hex"000000000000000000000000000000000000055555540000000016b79fb5000000005fdbf6fd400000016dbf799f50000005f779fbffd40000179ffe7f66e400001dedefddbbf500005f7fffffffbd00017fefb77afded0005f7e6ffffdfe7401feffffd577fbb401dfbffb5057e7f501ffb7ad401bbfed01e76d7d0057fffd01ebfffd057f677901fff7ed57de7bfd017efbfb6fdbff7d007ff77f79ffe7e5005fb7edfef797f4001bfbf7e79befd40017fe7a7be7bf500006feffafff7f4000057f7efedddd4000005ff79fbff500000015f7fdef94000000017f7af5500000000055555400000000000000000000000000000000000000000000000000000"; mapping(address => uint256) private reserveMintCountsRemaining; struct SVGCursor { uint8 x; uint8 y; string color1; string color2; string color3; string color4; } struct BagelReviewScores { uint16 bagelScore; uint16 storeScore; uint16 spreadScore; uint16 totalScore; } constructor() ERC721("EverythingIsEverything", "BAGL") Ownable() { mintingEnabled = true; _uriPrefix = 'ipfs://QmXH8rci4gDah33goNRDYafMGDXY2AQaCo35WPCVpgpC18/'; _mint(_msgSender(), totalSupply()); //Mint genesis bagel to Creator allocateReserveMint(0xcE64bA0c1A72Eb7734A03AE006Fb82f06DcFdddE, 1); allocateReserveMint(0xB1b3751834646fb999EDd18CA62C69663071cF43, 1); allocateReserveMint(0x79270159B890B492150980fB7a130958B2740fE6, 1); allocateReserveMint(0x1dB9fA416F92355da29e50340D45E92f76D3AA9e, 5); } function setUriPrefix(string memory uriPrefix) external onlyOwner { _uriPrefix = uriPrefix; } function setMintingEnabled(bool newMintingEnabled) external onlyOwner { mintingEnabled = newMintingEnabled; } function _baseURI() override internal view virtual returns (string memory) { return _uriPrefix; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); return ERC721.tokenURI(tokenId); } function getBagelReviewScores(uint256 tokenId) public view virtual returns (BagelReviewScores memory) { require(_exists(tokenId), "BagelReview query for nonexistent token"); BagelReviewScores memory scores; scores.bagelScore = _bagelScores[tokenId]; scores.spreadScore = _spreadScores[tokenId]; scores.storeScore = _storeScores[tokenId]; scores.totalScore = _totalScores[tokenId]; return scores; } function mint(uint256 count) external payable nonReentrant { require(mintingEnabled, "minting is not enabled"); require(count > 0 && count <= 5, "invalid bagel count"); require(totalSupply() + count <= maxTokens, "all bagels claimed"); require(msg.value == count * tokenPrice, "send 0.1 ETH per bagel to mint"); require(msg.sender == tx.origin, "Contracts may not mint"); for(uint256 i = 0; i < count; i++) { _mint(_msgSender(), totalSupply()); } } function allocateReserveMint(address addr, uint256 count) public onlyOwner nonReentrant { reserveMintCountsRemaining[addr] = count; } function getNumReserveMints(address addr) public view returns (uint256) { return reserveMintCountsRemaining[addr]; } function reserveMint(uint256 count) public nonReentrant { require(count > 0, "invalid bagel count"); require(reserveMintCountsRemaining[msg.sender] >= count, "Cannot mint this many reserved bagels"); require(totalSupply() + count <= maxTokens, "all bagels claimed"); for(uint256 i = 0; i < count; i++) { _mint(_msgSender(), totalSupply()); } reserveMintCountsRemaining[msg.sender] -= count; } function withdraw() public onlyOwner { (bool success,) = msg.sender.call{value : address(this).balance}(''); require(success, "Withdraw Failed"); } function pixelStr(string[32] memory lookup, SVGCursor memory pos) internal pure returns (string memory) { return string(abi.encodePacked( "<rect fill='", pos.color1, "' x='", lookup[pos.x], "' y='", lookup[pos.y], "'/>", "<rect fill='", pos.color2, "' x='", lookup[pos.x + 1], "' y='", lookup[pos.y], "'/>", string(abi.encodePacked( "<rect fill='", pos.color3, "' x='", lookup[pos.x + 2], "' y='", lookup[pos.y], "'/>", "<rect fill='", pos.color4, "' x='", lookup[pos.x + 3], "' y='", lookup[pos.y], "'/>" )) )); } function colorIndex(bytes1 aByte, uint8 index) public pure returns (uint8) { if (index == 0) { return uint8(aByte) >> 6; } else if (index == 1) { return uint8(aByte) >> 4 & 3; } else if (index == 2) { return uint8(aByte) >> 2 & 3; } return uint8(aByte) & 3; } function getGenesisSvg() public pure returns (string memory) { SVGCursor memory cursor; string[32] memory lookup = [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31" ]; string[4] memory GENESIS_COLORS = [ '#fcb11b', '#3e2515', '#fae6ba', '#e9904e' ]; string memory svgString = "<svg version='1.1' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg' shape-rendering='crispEdges'>"; string[8] memory pixels; for(uint i = 0; i < 256; i += 8) { cursor.color1 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i], 0)]; cursor.color2 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i], 1)]; cursor.color3 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i], 2)]; cursor.color4 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i], 3)]; pixels[0] = pixelStr(lookup, cursor); cursor.x += 4; cursor.color1 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 1], 0)]; cursor.color2 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 1], 1)]; cursor.color3 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 1], 2)]; cursor.color4 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 1], 3)]; pixels[1] = pixelStr(lookup, cursor); cursor.x += 4; cursor.color1 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 2], 0)]; cursor.color2 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 2], 1)]; cursor.color3 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 2], 2)]; cursor.color4 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 2], 3)]; pixels[2] = pixelStr(lookup, cursor); cursor.x += 4; cursor.color1 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 3], 0)]; cursor.color2 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 3], 1)]; cursor.color3 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 3], 2)]; cursor.color4 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 3], 3)]; pixels[3] = pixelStr(lookup, cursor); cursor.x += 4; cursor.color1 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 4], 0)]; cursor.color2 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 4], 1)]; cursor.color3 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 4], 2)]; cursor.color4 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 4], 3)]; pixels[4] = pixelStr(lookup, cursor); cursor.x += 4; cursor.color1 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 5], 0)]; cursor.color2 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 5], 1)]; cursor.color3 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 5], 2)]; cursor.color4 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 5], 3)]; pixels[5] = pixelStr(lookup, cursor); cursor.x += 4; cursor.color1 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 6], 0)]; cursor.color2 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 6], 1)]; cursor.color3 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 6], 2)]; cursor.color4 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 6], 3)]; pixels[6] = pixelStr(lookup, cursor); cursor.x += 4; cursor.color1 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 7], 0)]; cursor.color2 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 7], 1)]; cursor.color3 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 7], 2)]; cursor.color4 = GENESIS_COLORS[colorIndex(GENESIS_DATA[i + 7], 3)]; pixels[7] = pixelStr(lookup, cursor); cursor.x += 4; svgString = string(abi.encodePacked(svgString, pixels[0], pixels[1], pixels[2], pixels[3], pixels[4], pixels[5], pixels[6], pixels[7])); if(cursor.x >= 32) { cursor.x = 0; cursor.y += 1; } } return string(abi.encodePacked(svgString, "<style>rect{width:1px;height:1px;}</style></svg>")); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"GENESIS_DATA","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"allocateReserveMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes1","name":"aByte","type":"bytes1"},{"internalType":"uint8","name":"index","type":"uint8"}],"name":"colorIndex","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getBagelReviewScores","outputs":[{"components":[{"internalType":"uint16","name":"bagelScore","type":"uint16"},{"internalType":"uint16","name":"storeScore","type":"uint16"},{"internalType":"uint16","name":"spreadScore","type":"uint16"},{"internalType":"uint16","name":"totalScore","type":"uint16"}],"internalType":"struct EverythingIsEverything.BagelReviewScores","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGenesisSvg","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getNumReserveMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"reserveMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","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":"bool","name":"newMintingEnabled","type":"bool"}],"name":"setMintingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
67016345785d8a0000600c556119e06040526000608081815261015e60a08190526101a960c081905261017760e08190526101c261010081905261019061012081905260e16101408190526101608490526101808690526101a08390526101db6101c08190526101e08390526102008390526102208490526102408790526102608790526102808390526101136102a08190526102c08490526101456102e081905261030083905260af610320526103408890526103608990526103808590526103a08590526103c08990526103e084905261040086905261042087905261044088905260fa6104608190526104808a90526104a08690526104c08690526104e08590526105008990526105208990526105408290526105608690526105808890526105a08290526105c08a90526105e08890526106008890526106208690526106408690526106608990526106808890526106a08990526106c08690526106e08990526107008890526107208a90526107408690526107608890526107808890526107a08290526107c08890526107e087905261080089905261082088905261012c6108408190526108608790526108808790526108a08990526108c08790526108e08990526109008b90526109208390526109408990526101f4610960526109808b90526109a08990526109c08990526109e0899052610a00899052610a20829052610a40839052610a60859052610a80879052610aa0879052610ac0889052610ae0879052610b008a9052610b20899052610b40889052610b60879052610b80899052610ba0879052610bc0879052610be0859052610c008a9052610c20879052610c40879052610c60879052610c8093909352610ca0899052610cc0889052610ce0869052610d00879052610d20899052610d40899052610d60869052610d80889052610da0879052610dc0869052610de0879052610e00869052610e20869052610e40869052610e60869052610e80849052610ea0869052610ec0869052610ee0879052610f008a9052610f20869052610f40869052610f60889052610f80869052610fa08a9052610fc0869052610fe08a90526110008890526110208790526110408a90526110608790526110808890526110a0919091526110c08590526110e085905261110088905261112093909352611140929092526111608790526111808590526111a08790526111c08390526111e08390526112008690526112208290526112408390526112608390526112808790526112a08390526112c08590526112e086905260c8611300526113208790526113408790526113608290526113808490526113a08390526113c08390526113e08790526114008790526114208690526114408490526114608590526114808390526114a08690526114c08590526114e08390526115008490526115208690526115408690526115608690526115808390526115a08690526115c08790526115e0819052611600989098526116208290526116408490526116608190526116808490526116a08590526116c08590526116e0859052611700849052611720859052611740829052611760869052611780526117a08190526117c0939093526117e0849052611800829052611820829052611840526118608190526118808390526118a08290526118c08290526118e094909452611900819052611920829052611940849052611960849052611980939093526119a0929092526119c0919091526200050790600d9060cb620022df565b5060408051611960810182526000808252610177602083018190526101a99383018490526101456060840181905261015e6080850181905261019060a0860181905260e160c0870181905260e08701859052610100870184905261012087018290526101408701829052610160870183905261018087018590526101a087018890526101c087018390526101e08701839052610200870188905261022087018390526102408701829052610260870185905261028087018290526102a087018190526101c26102c088018190526102e08801849052610300880183905261012c61032089018190526103408901869052610360890187905261038089018790526103a089018790526103c089018a90526103e0890181905261040089018190526104208901849052610440890186905260fa6104608a018190526104808a018690526104a08a018390526104c08a018890526104e08a018690526105008a018790526105208a018290526105408a018690526105608a018690526105808a018590526105a08a018b90526105c08a018590526105e08a018890526106008a018590526106208a018b90526106408a018590526106608a018590526106808a018590526106a08a018b90526106c08a018b90526106e08a018690526107008a018590526107208a018690526107408a018590526107608a018890526107808a018590526107a08a018690526107c08a018190526107e08a018390526108008a018590526108208a018590526108408a018590526108608a018b90526108808a018290526108a08a018590526108c08a018690526108e08a018690526109008a018290526109208a018290526109408a018b90526109608a018590526109808a0186905260966109a08b01526109c08a018190526109e08a01859052610a008a018b9052610a208a01859052610a408a018b9052610a608a01869052610a808a01859052610aa08a01869052610ac08a018b9052610ae08a01889052610b008a01869052610b208a01859052610b408a01859052610b608a01889052610b808a01859052610ba08a01859052610bc08a018b9052610be08a01869052610c008a01829052610c208a01829052610c408a01889052610c608a01859052610c808a01839052610ca08a01839052610cc08a01859052610ce08a01859052610d008a018b9052610d208a01839052610d408a01839052610d608a018b9052610d808a01859052610da08a01839052610dc08a01889052610de08a01839052610e008a018b9052610e208a01869052610e408a01839052610e608a01889052610e808a0193909352610ea08901879052610ec08901849052610ee08901869052610f0089018a9052610f208901859052610f408901849052610f608901819052610f808901849052610fa08901829052610fc08901839052610fe089018a90526110008901819052611020890186905261104089018a9052611060890184905261108089018490526110a089018190526110c089018390526110e0890185905261110089018790526111208901859052611140890187905261116089018a905261118089018490526111a089018190526111c089018790526111e0890186905261120089018690526112208901859052611240890186905261126089018a905260646112808a01526112a089018490526112c089018790526112e08901839052611300890184905261132089018790526113408901849052611360890185905261138089018190526113a089018690526101db6113c08a018190526113e08a018690526114008a018390526114208a018590526114408a018890526114608a018b90526114808a018390526114a08a018290526114c08a018390526114e08a018790526115008a018790526115208a018b90526115408a018290526115608a018790526115808a018690526115a08a018390526115c08a018590526115e08a018690526116008a018690526116208a018390526116408a018b90526116608a018690526116808a018890526116a08a018590526116c08a01929092526116e089018790526117008901929092526117208801819052611740880152611760870188905261178087018190526117a087018890526117c087018390526117e0870182905261180087018190526118208701949094526118408601819052611860860181905261188086018290526118a08601929092526118c08501959095526118e084019290925261190083015261192082015261194081019190915262000b8e90600e9060cb620022df565b50604080516119608101825260008152610177602082018190526101a992820183905261015e606083018190526101906080840181905260a0840181905261012c60c0850181905260e08501849052610145610100860181905261012086018790526101408601839052610160860181905261018086018590526101a0860184905260fa6101c087018190526101e087018490526102008701889052610220870185905261024087018490526102608701859052610280870188905260e16102a088018190526102c088018990526102e088018390526101c2610300890181905261032089018490526103408901849052610360890184905261038089018690526103a089018890526103c089018a90526103e08901839052610400890185905261042089018a90526104408901879052610460890184905261048089018890526101db6104a08a018190526104c08a018890526104e08a018890526105008a018590526105208a018590526105408a018590526105608a018990526105808a018790526105a08a018790526105c08a018890526105e08a018590526106008a018990526106208a018790526106408a018b90526106608a018990526106808a018790526106a08a018890526106c08a018b90526106e08a018990526107008a018890526107208a018890526107408a018b90526107608a018990526107808a018b90526107a08a018890526107c08a018490526107e08a018290526108008a018790526108208a018990526108408a018790526108608a018790526108808a018490526108a08a018590526108c08a018890526108e08a018890526109008a018890526109208a018590526109408a018b90526109608a018790526109808a0188905260af6109a08b01526101136109c08b018190526109e08b01889052610a008b018a9052610a208b018a9052610a408b018c9052610a608b01899052610a808b01889052610aa08b018a9052610ac08b01839052610ae08b018a9052610b008b01869052610b208b018a9052610b408b01889052610b608b018a9052610b808b01889052610ba08b01839052610bc08b01889052610be08b018a905260c8610c008c01819052610c208c01879052610c408c01899052610c608c01899052610c808c01849052610ca08c01899052610cc08c01899052610ce08c01899052610d008c018b9052610d208c01849052610d408c018d9052610d608c01849052610d808c018d9052610da08c01849052610dc08c01879052610de08c01849052610e008c01899052610e208c01859052610e408c01839052610e608c01899052610e808c01819052610ea08c018d9052610ec08c01899052610ee08c018a9052610f008c018d9052610f208c01879052610f408c01899052610f608c018a9052610f808c01899052610fa08c01839052610fc08c01829052610fe08c018d90526110008c018790526110208c018890526110408c018d90526110608c018a90526110808c018990526110a08c018990526110c08c01959095526110e08b018990526111008b018690526111208b01939093526111408a018990526111608a018b90526111808a018790526111a08a018690526111c08a018990526111e08a018590526112008a018590526112208a018590526112408a018590526112608a018290526112808a018490526112a08a018790526112c08a018990526112e08a018690526113008a018790526113208a018b90526113408a018790526113608a018990526113808a018390526113a08a018990526101f46113c08b01526113e08a018590526114008a018b90526114208a018790526114408a018990526114608a018b90526114808a018290526114a08a018590526114c08a018b90526114e08a018590526115008a018990526115208a018290526115408a018690526115608a018690526115808a01939093526115a089018a90526115c089018a90526115e08901859052611600890184905261162089018a90526116408901869052611660890188905261168089018690526116a089018890526116c08901929092526116e0880186905261170088018190526117208801879052611740880191909152611760870188905261178087018590526117a087018690526117c08701919091526117e0860187905261180086018190526118208601839052611840860185905261186086019690965261188085018390526118a08501959095526118c084018390526118e08401929092526119008301939093526119208201526119408101919091526200122190600f9060cb620022df565b50604051806119600160405280600061ffff16815260200161016f61ffff1681526020016101a961ffff16815260200161015e61ffff16815260200161019061ffff16815260200161019061ffff16815260200160fa61ffff16815260200161017761ffff16815260200161014d61ffff1681526020016101a961ffff1681526020016101a961ffff16815260200161016661ffff16815260200161017f61ffff16815260200161019861ffff16815260200161013d61ffff16815260200161016f61ffff1681526020016101a161ffff16815260200161014561ffff16815260200161019061ffff16815260200161015e61ffff1681526020016101b161ffff16815260200160d061ffff1681526020016101b161ffff16815260200161015661ffff1681526020016101a161ffff16815260200161015661ffff16815260200161014d61ffff16815260200161013461ffff16815260200161019861ffff16815260200161017761ffff1681526020016101a961ffff16815260200161010b61ffff16815260200161013d61ffff16815260200161019861ffff16815260200161016661ffff16815260200161010b61ffff16815260200161017f61ffff1681526020016101c261ffff16815260200161015e61ffff16815260200161016f61ffff16815260200161015661ffff16815260200161013d61ffff16815260200161015661ffff16815260200161016f61ffff16815260200161018861ffff16815260200161019861ffff16815260200161017f61ffff16815260200161017761ffff16815260200161017f61ffff1681526020016101a161ffff16815260200161019861ffff16815260200161019061ffff16815260200161018861ffff16815260200161017761ffff1681526020016101a161ffff16815260200161016f61ffff16815260200161017761ffff16815260200161015661ffff16815260200161019061ffff16815260200161019061ffff1681526020016101a161ffff16815260200161016661ffff16815260200161010b61ffff1681526020016101b161ffff16815260200161019061ffff16815260200161017f61ffff16815260200161019061ffff16815260200161019061ffff16815260200161012c61ffff16815260200161015e61ffff16815260200161016661ffff16815260200161019061ffff16815260200161014d61ffff16815260200161014d61ffff16815260200161019861ffff16815260200161018861ffff16815260200161017f61ffff16815260200160c061ffff1681526020016101a961ffff1681526020016101a961ffff16815260200161011b61ffff16815260200161018861ffff1681526020016101b161ffff16815260200161016f61ffff16815260200161019861ffff16815260200161016f61ffff1681526020016101ba61ffff16815260200161017f61ffff16815260200161015e61ffff16815260200161018861ffff16815260200161019061ffff16815260200161019861ffff16815260200161019861ffff1681526020016101a161ffff16815260200161019861ffff16815260200161016f61ffff16815260200161010261ffff16815260200161015e61ffff16815260200161017f61ffff16815260200161019061ffff1681526020016101c261ffff16815260200161011b61ffff16815260200161019861ffff16815260200161019061ffff16815260200161018861ffff1681526020016101c261ffff1681526020016101a961ffff1681526020016101ba61ffff16815260200161019861ffff1681526020016101b161ffff16815260200161016f61ffff1681526020016101b161ffff1681526020016101b161ffff16815260200161014561ffff1681526020016101ba61ffff16815260200161019861ffff16815260200161010261ffff16815260200161019061ffff16815260200161019061ffff16815260200161014561ffff1681526020016101a161ffff16815260200161015661ffff16815260200161019061ffff16815260200161014d61ffff16815260200161018861ffff1681526020016101ca61ffff16815260200161012461ffff1681526020016101b161ffff16815260200161014d61ffff16815260200161013d61ffff1681526020016101a961ffff16815260200161017f61ffff16815260200161019861ffff16815260200161013461ffff16815260200160fa61ffff16815260200161015e61ffff16815260200161016661ffff16815260200161013461ffff16815260200161017f61ffff1681526020016101a161ffff16815260200161019861ffff16815260200161012c61ffff16815260200161017f61ffff16815260200161015e61ffff16815260200161014d61ffff16815260200161016661ffff16815260200161015661ffff1681526020016101b161ffff16815260200160a761ffff16815260200161017f61ffff16815260200161016f61ffff1681526020016101a161ffff1681526020016101a161ffff16815260200161019061ffff16815260200161019061ffff16815260200161016661ffff16815260200161013461ffff16815260200161017761ffff1681526020016101db61ffff16815260200161015e61ffff1681526020016101a961ffff16815260200161019861ffff16815260200161017761ffff1681526020016101a161ffff1681526020016101c261ffff16815260200161015e61ffff1681526020016101b161ffff16815260200161016661ffff16815260200161017761ffff1681526020016101b161ffff16815260200161013d61ffff16815260200161016f61ffff16815260200161011361ffff1681526020016101a961ffff16815260200161019061ffff16815260200161013d61ffff16815260200161015e61ffff1681526020016101b161ffff16815260200161019061ffff16815260200161017f61ffff16815260200161017f61ffff16815260200161019061ffff1681526020016101ba61ffff16815260200161016661ffff16815260200161011361ffff1681526020016101a161ffff1681526020016101c261ffff16815260200161019061ffff16815260200161015661ffff16815260200161018861ffff16815260200161017761ffff16815260200161019061ffff16815260200161013461ffff16815260200161018861ffff16815260200161018861ffff1681526020016101b161ffff16815260200161016f61ffff16815260200161013d61ffff16815260200161018861ffff16815260200161017761ffff16815260200161014561ffff16815260200161019061ffff16815260200161015e61ffff1681525060109060cb62001bbc929190620022df565b5034801562001bca57600080fd5b50604080518082018252601681527f45766572797468696e67497345766572797468696e6700000000000000000000602080830191825283518085019094526004845263109051d360e21b90840152815191929162001c2c916000916200238f565b50805162001c429060019060208401906200238f565b50505062001c5f62001c5962001d3b60201b60201c565b62001d3f565b6001600b8190556012805460ff19169091179055604080516060810190915260368082526200611d6020830139805162001ca2916011916020909101906200238f565b5062001cb13360085462001d91565b62001cd273ce64ba0c1a72eb7734a03ae006fb82f06dcfddde600162001eeb565b62001cf373b1b3751834646fb999edd18ca62c69663071cf43600162001eeb565b62001d147379270159b890b492150980fb7a130958b2740fe6600162001eeb565b62001d35731db9fa416f92355da29e50340d45e92f76d3aa9e600562001eeb565b620024d7565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821662001ded5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064015b60405180910390fd5b6000818152600260205260409020546001600160a01b03161562001e545760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640162001de4565b62001e626000838362001fbd565b6001600160a01b038216600090815260036020526040812080546001929062001e8d90849062002423565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600a546001600160a01b0316331462001f475760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162001de4565b6002600b54141562001f9c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640162001de4565b6001600160a01b039091166000908152601360205260409020556001600b55565b62001fd58383836200207360201b620008cc1760201c565b6001600160a01b03831662002033576200202d81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b62002059565b816001600160a01b0316836001600160a01b03161462002059576200205983826200209e565b6001600160a01b038216620020785762002073816200214b565b505050565b826001600160a01b0316826001600160a01b031614620020735762002073828262002205565b60006001620020b8846200225660201b62000d8d1760201c565b620020c491906200243e565b60008381526007602052604090205490915080821462002118576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906200215f906001906200243e565b600083815260096020526040812054600880549394509092849081106200218a576200218a620024c1565b906000526020600020015490508060088381548110620021ae57620021ae620024c1565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480620021e957620021e9620024ab565b6001900381819060005260206000200160009055905550505050565b60006200221d836200225660201b62000d8d1760201c565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b60006001600160a01b038216620022c35760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840162001de4565b506001600160a01b031660009081526003602052604090205490565b82805482825590600052602060002090600f016010900481019282156200237d5791602002820160005b838211156200234b57835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030262002309565b80156200237b5782816101000a81549061ffff02191690556002016020816001010492830192600103026200234b565b505b506200238b9291506200240c565b5090565b8280546200239d9062002458565b90600052602060002090601f016020900481019282620023c157600085556200237d565b82601f10620023dc57805160ff19168380011785556200237d565b828001600101855582156200237d579182015b828111156200237d578251825591602001919060010190620023ef565b5b808211156200238b57600081556001016200240d565b6000821982111562002439576200243962002495565b500190565b60008282101562002453576200245362002495565b500390565b600181811c908216806200246d57607f821691505b602082108114156200248f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b613c3680620024e76000396000f3fe6080604052600436106101ee5760003560e01c80637ec4a6591161010d578063ba228998116100a0578063cc01d87a1161006f578063cc01d87a146105c9578063ceca3c9d146105de578063e8315742146105f3578063e985e9c514610608578063f2fde38b1461065157600080fd5b8063ba228998146104f5578063bcf8c6a914610553578063c708c6c714610573578063c87b56dd146105a957600080fd5b80639fd6db12116100dc5780639fd6db1214610488578063a0712d68146104a2578063a22cb465146104b5578063b88d4fde146104d557600080fd5b80637ec4a6591461041f5780637ff9b5961461043f5780638da5cb5b1461045557806395d89b411461047357600080fd5b80633ccfd60b11610185578063536d9e6211610154578063536d9e62146103985780636352211e146103ca57806370a08231146103ea578063715018a61461040a57600080fd5b80633ccfd60b1461032357806342842e0e146103385780634ea3871a146103585780634f6ccce71461037857600080fd5b80631342ff4c116101c15780631342ff4c146102a457806318160ddd146102c457806323b872dd146102e35780632f745c591461030357600080fd5b806301ffc9a7146101f357806306fdde0314610228578063081812fc1461024a578063095ea7b314610282575b600080fd5b3480156101ff57600080fd5b5061021361020e366004613341565b610671565b60405190151581526020015b60405180910390f35b34801561023457600080fd5b5061023d61069c565b60405161021f9190613787565b34801561025657600080fd5b5061026a6102653660046133c4565b61072e565b6040516001600160a01b03909116815260200161021f565b34801561028e57600080fd5b506102a261029d3660046132b0565b6107bb565b005b3480156102b057600080fd5b506102a26102bf3660046133c4565b6108d1565b3480156102d057600080fd5b506008545b60405190815260200161021f565b3480156102ef57600080fd5b506102a26102fe3660046131ce565b610a59565b34801561030f57600080fd5b506102d561031e3660046132b0565b610a8a565b34801561032f57600080fd5b506102a2610b20565b34801561034457600080fd5b506102a26103533660046131ce565b610bd7565b34801561036457600080fd5b506102a26103733660046132da565b610bf2565b34801561038457600080fd5b506102d56103933660046133c4565b610c2f565b3480156103a457600080fd5b506103b86103b33660046132f5565b610cc2565b60405160ff909116815260200161021f565b3480156103d657600080fd5b5061026a6103e53660046133c4565b610d16565b3480156103f657600080fd5b506102d5610405366004613180565b610d8d565b34801561041657600080fd5b506102a2610e14565b34801561042b57600080fd5b506102a261043a36600461337b565b610e4a565b34801561044b57600080fd5b506102d5600c5481565b34801561046157600080fd5b50600a546001600160a01b031661026a565b34801561047f57600080fd5b5061023d610e8b565b34801561049457600080fd5b506012546102139060ff1681565b6102a26104b03660046133c4565b610e9a565b3480156104c157600080fd5b506102a26104d0366004613286565b61108b565b3480156104e157600080fd5b506102a26104f036600461320a565b611096565b34801561050157600080fd5b506105156105103660046133c4565b6110ce565b60405161021f9190815161ffff9081168252602080840151821690830152604080840151821690830152606092830151169181019190915260800190565b34801561055f57600080fd5b506102a261056e3660046132b0565b611278565b34801561057f57600080fd5b506102d561058e366004613180565b6001600160a01b031660009081526013602052604090205490565b3480156105b557600080fd5b5061023d6105c43660046133c4565b6112e6565b3480156105d557600080fd5b5061023d611316565b3480156105ea57600080fd5b5061023d612312565b3480156105ff57600080fd5b506102d560cb81565b34801561061457600080fd5b5061021361062336600461319b565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561065d57600080fd5b506102a261066c366004613180565b612331565b60006001600160e01b0319821663780e9d6360e01b14806106965750610696826123c9565b92915050565b6060600080546106ab906139ab565b80601f01602080910402602001604051908101604052809291908181526020018280546106d7906139ab565b80156107245780601f106106f957610100808354040283529160200191610724565b820191906000526020600020905b81548152906001019060200180831161070757829003601f168201915b5050505050905090565b600061073982612419565b61079f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006107c682610d16565b9050806001600160a01b0316836001600160a01b031614156108345760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610796565b336001600160a01b038216148061085057506108508133610623565b6108c25760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610796565b6108cc8383612436565b505050565b6002600b5414156108f45760405162461bcd60e51b8152600401610796906138c1565b6002600b558061093c5760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a5908189859d95b0818dbdd5b9d606a1b6044820152606401610796565b336000908152601360205260409020548111156109a95760405162461bcd60e51b815260206004820152602560248201527f43616e6e6f74206d696e742074686973206d616e7920726573657276656420626044820152646167656c7360d81b6064820152608401610796565b60cb816109b560085490565b6109bf91906138f8565b1115610a025760405162461bcd60e51b8152602060048201526012602482015271185b1b08189859d95b1cc818db185a5b595960721b6044820152606401610796565b60005b81811015610a2c57610a1a335b6008546124a4565b80610a24816139e6565b915050610a05565b503360009081526013602052604081208054839290610a4c908490613968565b90915550506001600b5550565b610a6333826125e3565b610a7f5760405162461bcd60e51b815260040161079690613870565b6108cc8383836126cd565b6000610a9583610d8d565b8210610af75760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610796565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610b4a5760405162461bcd60e51b8152600401610796906137ec565b604051600090339047908381818185875af1925050503d8060008114610b8c576040519150601f19603f3d011682016040523d82523d6000602084013e610b91565b606091505b5050905080610bd45760405162461bcd60e51b815260206004820152600f60248201526e15da5d1a191c985dc811985a5b1959608a1b6044820152606401610796565b50565b6108cc83838360405180602001604052806000815250611096565b600a546001600160a01b03163314610c1c5760405162461bcd60e51b8152600401610796906137ec565b6012805460ff1916911515919091179055565b6000610c3a60085490565b8210610c9d5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610796565b60088281548110610cb057610cb0613a57565b90600052602060002001549050919050565b600060ff8216610cd7575060fe82901c610696565b8160ff1660011415610cf15750600360fc83901c16610696565b8160ff1660021415610d0b5750600360fa83901c16610696565b505060f81c60031690565b6000818152600260205260408120546001600160a01b0316806106965760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610796565b60006001600160a01b038216610df85760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610796565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b03163314610e3e5760405162461bcd60e51b8152600401610796906137ec565b610e486000612874565b565b600a546001600160a01b03163314610e745760405162461bcd60e51b8152600401610796906137ec565b8051610e8790601190602084019061301d565b5050565b6060600180546106ab906139ab565b6002600b541415610ebd5760405162461bcd60e51b8152600401610796906138c1565b6002600b5560125460ff16610f0d5760405162461bcd60e51b81526020600482015260166024820152751b5a5b9d1a5b99c81a5cc81b9bdd08195b98589b195960521b6044820152606401610796565b600081118015610f1e575060058111155b610f605760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a5908189859d95b0818dbdd5b9d606a1b6044820152606401610796565b60cb81610f6c60085490565b610f7691906138f8565b1115610fb95760405162461bcd60e51b8152602060048201526012602482015271185b1b08189859d95b1cc818db185a5b595960721b6044820152606401610796565b600c54610fc69082613949565b34146110145760405162461bcd60e51b815260206004820152601e60248201527f73656e6420302e31204554482070657220626167656c20746f206d696e7400006044820152606401610796565b33321461105c5760405162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9858dd1cc81b585e481b9bdd081b5a5b9d60521b6044820152606401610796565b60005b818110156110825761107033610a12565b8061107a816139e6565b91505061105f565b50506001600b55565b610e873383836128c6565b6110a033836125e3565b6110bc5760405162461bcd60e51b815260040161079690613870565b6110c884848484612995565b50505050565b6040805160808101825260008082526020820181905291810182905260608101919091526110fb82612419565b6111575760405162461bcd60e51b815260206004820152602760248201527f426167656c52657669657720717565727920666f72206e6f6e6578697374656e6044820152663a103a37b5b2b760c91b6064820152608401610796565b604080516080810182526000808252602082018190529181018290526060810191909152600f838154811061118e5761118e613a57565b60009182526020909120601082040154600f9091166002026101000a900461ffff168152600e8054849081106111c6576111c6613a57565b60009182526020909120601082040154600f9091166002026101000a900461ffff166040820152600d80548490811061120157611201613a57565b90600052602060002090601091828204019190066002029054906101000a900461ffff16816020019061ffff16908161ffff16815250506010838154811061124b5761124b613a57565b60009182526020909120601082040154600f9091166002026101000a900461ffff16606082015292915050565b600a546001600160a01b031633146112a25760405162461bcd60e51b8152600401610796906137ec565b6002600b5414156112c55760405162461bcd60e51b8152600401610796906138c1565b6001600160a01b039091166000908152601360205260409020556001600b55565b60606112f182612419565b61130d5760405162461bcd60e51b815260040161079690613821565b610696826129c8565b6040805160c08082018352600080835260208084018290526060848601819052808501819052608080860182905260a080870183905287516104408101895260016104008201818152600360fc1b61042084015282528951808b018b52818152603160f81b81880152828701528951808b018b52818152601960f91b81880152828b01528951808b018b52818152603360f81b81880152828601528951808b018b52818152600d60fa1b81880152828501528951808b018b52818152603560f81b81880152828401528951808b018b52818152601b60f91b81880152828901528951808b018b52818152603760f81b8188015260e08301528951808b018b52818152600760fb1b818801526101008301528951808b018b52908152603960f81b818701526101208201528851808a018a52600280825261031360f41b828801526101408301919091528951808b018b5281815261313160f01b818801526101608301528951808b018b5281815261189960f11b818801526101808301528951808b018b5281815261313360f01b818801526101a08301528951808b018b52818152610c4d60f21b818801526101c08301528951808b018b5281815261313560f01b818801526101e08301528951808b018b5281815261189b60f11b818801526102008301528951808b018b5281815261313760f01b818801526102208301528951808b018b5281815261062760f31b818801526102408301528951808b018b5281815261313960f01b818801526102608301528951808b018b5281815261032360f41b818801526102808301528951808b018b5281815261323160f01b818801526102a08301528951808b018b5281815261191960f11b818801526102c08301528951808b018b5281815261323360f01b818801526102e08301528951808b018b52818152610c8d60f21b818801526103008301528951808b018b5281815261323560f01b818801526103208301528951808b018b5281815261191b60f11b818801526103408301528951808b018b5281815261323760f01b818801526103608301528951808b018b5281815261064760f31b818801526103808301528951808b018b5281815261323960f01b818801526103a08301528951808b018b5281815261033360f41b818801526103c08301528951808b018b5290815261333160f01b818701526103e08201528851968701895260079287018381526611b331b11898b160c91b8884015287528851808a018a52838152662333653235313560c81b81870152878601528851808a018a52838152662366616536626160c81b81870152878a01528851808a018a52928352662365393930346560c81b838601528684019290925287519081019097526067808852919690949392909190613a9a9083013990506117226130a1565b60005b6101008110156122e757836117766040518061012001604052806101008152602001613b016101009139838151811061176057611760613a57565b01602001516001600160f81b0319166000610cc2565b60ff166004811061178957611789613a57565b60200201518660400181905250836117dd6040518061012001604052806101008152602001613b01610100913983815181106117c7576117c7613a57565b01602001516001600160f81b0319166001610cc2565b60ff16600481106117f0576117f0613a57565b60200201518660600181905250836118446040518061012001604052806101008152602001613b016101009139838151811061182e5761182e613a57565b01602001516001600160f81b0319166002610cc2565b60ff166004811061185757611857613a57565b60200201518660800181905250836118ab6040518061012001604052806101008152602001613b016101009139838151811061189557611895613a57565b01602001516001600160f81b0319166003610cc2565b60ff16600481106118be576118be613a57565b602002015160a08701526118d28587612a4b565b8252855160049087906118e6908390613910565b60ff16905250604080516101208101909152610100808252859161192791613b0160208301396119178460016138f8565b8151811061176057611760613a57565b60ff166004811061193a5761193a613a57565b60200201518660400181905250836119826040518061012001604052806101008152602001613b0161010091396119728460016138f8565b815181106117c7576117c7613a57565b60ff166004811061199557611995613a57565b60200201518660600181905250836119dd6040518061012001604052806101008152602001613b0161010091396119cd8460016138f8565b8151811061182e5761182e613a57565b60ff16600481106119f0576119f0613a57565b6020020151866080018190525083611a386040518061012001604052806101008152602001613b016101009139611a288460016138f8565b8151811061189557611895613a57565b60ff1660048110611a4b57611a4b613a57565b602002015160a0870152611a5f8587612a4b565b602083015285516004908790611a76908390613910565b60ff169052506040805161012081019091526101008082528591611aa791613b0160208301396119178460026138f8565b60ff1660048110611aba57611aba613a57565b6020020151866040018190525083611af26040518061012001604052806101008152602001613b0161010091396119728460026138f8565b60ff1660048110611b0557611b05613a57565b6020020151866060018190525083611b3d6040518061012001604052806101008152602001613b0161010091396119cd8460026138f8565b60ff1660048110611b5057611b50613a57565b6020020151866080018190525083611b886040518061012001604052806101008152602001613b016101009139611a288460026138f8565b60ff1660048110611b9b57611b9b613a57565b602002015160a0870152611baf8587612a4b565b604083015285516004908790611bc6908390613910565b60ff169052506040805161012081019091526101008082528591611bf791613b0160208301396119178460036138f8565b60ff1660048110611c0a57611c0a613a57565b6020020151866040018190525083611c426040518061012001604052806101008152602001613b0161010091396119728460036138f8565b60ff1660048110611c5557611c55613a57565b6020020151866060018190525083611c8d6040518061012001604052806101008152602001613b0161010091396119cd8460036138f8565b60ff1660048110611ca057611ca0613a57565b6020020151866080018190525083611cd86040518061012001604052806101008152602001613b016101009139611a288460036138f8565b60ff1660048110611ceb57611ceb613a57565b602002015160a0870152611cff8587612a4b565b606083015285516004908790611d16908390613910565b60ff169052506040805161012081019091526101008082528591611d4791613b0160208301396119178460046138f8565b60ff1660048110611d5a57611d5a613a57565b6020020151866040018190525083611d926040518061012001604052806101008152602001613b0161010091396119728460046138f8565b60ff1660048110611da557611da5613a57565b6020020151866060018190525083611ddd6040518061012001604052806101008152602001613b0161010091396119cd8460046138f8565b60ff1660048110611df057611df0613a57565b6020020151866080018190525083611e286040518061012001604052806101008152602001613b016101009139611a288460046138f8565b60ff1660048110611e3b57611e3b613a57565b602002015160a0870152611e4f8587612a4b565b608083015285516004908790611e66908390613910565b60ff169052506040805161012081019091526101008082528591611e9791613b0160208301396119178460056138f8565b60ff1660048110611eaa57611eaa613a57565b6020020151866040018190525083611ee26040518061012001604052806101008152602001613b0161010091396119728460056138f8565b60ff1660048110611ef557611ef5613a57565b6020020151866060018190525083611f2d6040518061012001604052806101008152602001613b0161010091396119cd8460056138f8565b60ff1660048110611f4057611f40613a57565b6020020151866080018190525083611f786040518061012001604052806101008152602001613b016101009139611a288460056138f8565b60ff1660048110611f8b57611f8b613a57565b602002015160a0870152611f9f8587612a4b565b60a083015285516004908790611fb6908390613910565b60ff169052506040805161012081019091526101008082528591611fe791613b0160208301396119178460066138f8565b60ff1660048110611ffa57611ffa613a57565b60200201518660400181905250836120326040518061012001604052806101008152602001613b0161010091396119728460066138f8565b60ff166004811061204557612045613a57565b602002015186606001819052508361207d6040518061012001604052806101008152602001613b0161010091396119cd8460066138f8565b60ff166004811061209057612090613a57565b60200201518660800181905250836120c86040518061012001604052806101008152602001613b016101009139611a288460066138f8565b60ff16600481106120db576120db613a57565b602002015160a08701526120ef8587612a4b565b60c083015285516004908790612106908390613910565b60ff16905250604080516101208101909152610100808252859161213791613b0160208301396119178460076138f8565b60ff166004811061214a5761214a613a57565b60200201518660400181905250836121826040518061012001604052806101008152602001613b0161010091396119728460076138f8565b60ff166004811061219557612195613a57565b60200201518660600181905250836121cd6040518061012001604052806101008152602001613b0161010091396119cd8460076138f8565b60ff16600481106121e0576121e0613a57565b60200201518660800181905250836122186040518061012001604052806101008152602001613b016101009139611a288460076138f8565b60ff166004811061222b5761222b613a57565b602002015160a087015261223f8587612a4b565b60e083015285516004908790612256908390613910565b60ff1690525081516020808401516040808601516060870151608088015160a089015160c08a015160e08b01519551612295998d999098979101613454565b60405160208183030381529060405292506020866000015160ff16106122d55760008652602086018051600191906122ce908390613910565b60ff169052505b6122e06008826138f8565b9050611725565b50816040516020016122f99190613514565b6040516020818303038152906040529550505050505090565b6040518061012001604052806101008152602001613b01610100913981565b600a546001600160a01b0316331461235b5760405162461bcd60e51b8152600401610796906137ec565b6001600160a01b0381166123c05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610796565b610bd481612874565b60006001600160e01b031982166380ac58cd60e01b14806123fa57506001600160e01b03198216635b5e139f60e01b145b8061069657506301ffc9a760e01b6001600160e01b0319831614610696565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061246b82610d16565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6001600160a01b0382166124fa5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610796565b61250381612419565b156125505760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610796565b61255c60008383612bbb565b6001600160a01b03821660009081526003602052604081208054600192906125859084906138f8565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006125ee82612419565b61264f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610796565b600061265a83610d16565b9050806001600160a01b0316846001600160a01b031614806126955750836001600160a01b031661268a8461072e565b6001600160a01b0316145b806126c557506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166126e082610d16565b6001600160a01b0316146127445760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610796565b6001600160a01b0382166127a65760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610796565b6127b1838383612bbb565b6127bc600082612436565b6001600160a01b03831660009081526003602052604081208054600192906127e5908490613968565b90915550506001600160a01b03821660009081526003602052604081208054600192906128139084906138f8565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156129285760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610796565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6129a08484846126cd565b6129ac84848484612c73565b6110c85760405162461bcd60e51b81526004016107969061379a565b60606129d382612419565b6129ef5760405162461bcd60e51b815260040161079690613821565b60006129f9612d80565b90506000815111612a195760405180602001604052806000815250612a44565b80612a2384612d8f565b604051602001612a34929190613425565b6040516020818303038152906040525b9392505050565b6060816040015183836000015160ff1660208110612a6b57612a6b613a57565b602002015184846020015160ff1660208110612a8957612a89613a57565b6020020151606085015185518790612aa2906001613910565b60ff1660208110612ab557612ab5613a57565b602002015187876020015160ff1660208110612ad357612ad3613a57565b6020020151608088015188518a90612aec906002613910565b60ff1660208110612aff57612aff613a57565b60200201518a8a6020015160ff1660208110612b1d57612b1d613a57565b602002015160a08b01518b518d90612b36906003613910565b60ff1660208110612b4957612b49613a57565b60200201518d8d6020015160ff1660208110612b6757612b67613a57565b6020020151604051602001612b819695949392919061356e565b60408051601f1981840301815290829052612ba497969594939291602001613666565b604051602081830303815290604052905092915050565b6001600160a01b038316612c1657612c1181600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612c39565b816001600160a01b0316836001600160a01b031614612c3957612c398382612e8d565b6001600160a01b038216612c50576108cc81612f2a565b826001600160a01b0316826001600160a01b0316146108cc576108cc8282612fd9565b60006001600160a01b0384163b15612d7557604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612cb790339089908890889060040161374a565b602060405180830381600087803b158015612cd157600080fd5b505af1925050508015612d01575060408051601f3d908101601f19168201909252612cfe9181019061335e565b60015b612d5b573d808015612d2f576040519150601f19603f3d011682016040523d82523d6000602084013e612d34565b606091505b508051612d535760405162461bcd60e51b81526004016107969061379a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506126c5565b506001949350505050565b6060601180546106ab906139ab565b606081612db35750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612ddd5780612dc7816139e6565b9150612dd69050600a83613935565b9150612db7565b60008167ffffffffffffffff811115612df857612df8613a6d565b6040519080825280601f01601f191660200182016040528015612e22576020820181803683370190505b5090505b84156126c557612e37600183613968565b9150612e44600a86613a01565b612e4f9060306138f8565b60f81b818381518110612e6457612e64613a57565b60200101906001600160f81b031916908160001a905350612e86600a86613935565b9450612e26565b60006001612e9a84610d8d565b612ea49190613968565b600083815260076020526040902054909150808214612ef7576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612f3c90600190613968565b60008381526009602052604081205460088054939450909284908110612f6457612f64613a57565b906000526020600020015490508060088381548110612f8557612f85613a57565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612fbd57612fbd613a41565b6001900381819060005260206000200160009055905550505050565b6000612fe483610d8d565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054613029906139ab565b90600052602060002090601f01602090048101928261304b5760008555613091565b82601f1061306457805160ff1916838001178555613091565b82800160010185558215613091579182015b82811115613091578251825591602001919060010190613076565b5061309d9291506130c9565b5090565b6040518061010001604052806008905b60608152602001906001900390816130b15790505090565b5b8082111561309d57600081556001016130ca565b600067ffffffffffffffff808411156130f9576130f9613a6d565b604051601f8501601f19908116603f0116810190828211818310171561312157613121613a6d565b8160405280935085815286868601111561313a57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461316b57600080fd5b919050565b8035801515811461316b57600080fd5b60006020828403121561319257600080fd5b612a4482613154565b600080604083850312156131ae57600080fd5b6131b783613154565b91506131c560208401613154565b90509250929050565b6000806000606084860312156131e357600080fd5b6131ec84613154565b92506131fa60208501613154565b9150604084013590509250925092565b6000806000806080858703121561322057600080fd5b61322985613154565b935061323760208601613154565b925060408501359150606085013567ffffffffffffffff81111561325a57600080fd5b8501601f8101871361326b57600080fd5b61327a878235602084016130de565b91505092959194509250565b6000806040838503121561329957600080fd5b6132a283613154565b91506131c560208401613170565b600080604083850312156132c357600080fd5b6132cc83613154565b946020939093013593505050565b6000602082840312156132ec57600080fd5b612a4482613170565b6000806040838503121561330857600080fd5b82356001600160f81b03198116811461332057600080fd5b9150602083013560ff8116811461333657600080fd5b809150509250929050565b60006020828403121561335357600080fd5b8135612a4481613a83565b60006020828403121561337057600080fd5b8151612a4481613a83565b60006020828403121561338d57600080fd5b813567ffffffffffffffff8111156133a457600080fd5b8201601f810184136133b557600080fd5b6126c5848235602084016130de565b6000602082840312156133d657600080fd5b5035919050565b600081518084526133f581602086016020860161397f565b601f01601f19169290920160200192915050565b6000815161341b81856020860161397f565b9290920192915050565b6000835161343781846020880161397f565b83519083019061344b81836020880161397f565b01949350505050565b60008a51613466818460208f0161397f565b8a516134788183860160208f0161397f565b8a51918401019061348d818360208e0161397f565b89519101906134a0818360208d0161397f565b88516134b28183850160208d0161397f565b88519290910101906134c8818360208b0161397f565b86516134da8183850160208b0161397f565b86519290910101906134f081836020890161397f565b8451613502818385016020890161397f565b9101019b9a5050505050505050505050565b6000825161352681846020870161397f565b7f3c7374796c653e726563747b77696474683a3170783b6865696768743a3170789201918252506f1dbe9e17b9ba3cb6329f1e17b9bb339f60811b6020820152603001919050565b60006b3c726563742066696c6c3d2760a01b808352885161359681600c860160208d0161397f565b8084019050642720783d2760d81b80600c83015289516135bd816011850160208e0161397f565b642720793d2760d81b6011939091019283015288516135e3816016850160208d0161397f565b8083019250506213979f60e91b601683015282601983015287519250613610836025840160208b0161397f565b8282019250806025840152505061365961364a613644613633602a850189613409565b642720793d2760d81b815260050190565b86613409565b6213979f60e91b815260030190565b9998505050505050505050565b60006b3c726563742066696c6c3d2760a01b808352895161368e81600c860160208e0161397f565b642720783d2760d81b600c9185019182015289516136b3816011840160208e0161397f565b642720793d2760d81b6011929091019182015288516136d9816016840160208d0161397f565b8082019150506213979f60e91b601682015281601982015287519150613706826025830160208b0161397f565b61373b61364461364a61373561363361372f602588880101642720783d2760d81b815260050190565b8c613409565b89613409565b9b9a5050505050505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061377d908301846133dd565b9695505050505050565b602081526000612a4460208301846133dd565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000821982111561390b5761390b613a15565b500190565b600060ff821660ff84168060ff0382111561392d5761392d613a15565b019392505050565b60008261394457613944613a2b565b500490565b600081600019048311821515161561396357613963613a15565b500290565b60008282101561397a5761397a613a15565b500390565b60005b8381101561399a578181015183820152602001613982565b838111156110c85750506000910152565b600181811c908216806139bf57607f821691505b602082108114156139e057634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156139fa576139fa613a15565b5060010190565b600082613a1057613a10613a2b565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610bd457600080fdfe3c7376672076657273696f6e3d27312e31272076696577426f783d273020302033322033322720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f737667272073686170652d72656e646572696e673d2763726973704564676573273e000000000000000000000000000000000000055555540000000016b79fb5000000005fdbf6fd400000016dbf799f50000005f779fbffd40000179ffe7f66e400001dedefddbbf500005f7fffffffbd00017fefb77afded0005f7e6ffffdfe7401feffffd577fbb401dfbffb5057e7f501ffb7ad401bbfed01e76d7d0057fffd01ebfffd057f677901fff7ed57de7bfd017efbfb6fdbff7d007ff77f79ffe7e5005fb7edfef797f4001bfbf7e79befd40017fe7a7be7bf500006feffafff7f4000057f7efedddd4000005ff79fbff500000015f7fdef94000000017f7af5500000000055555400000000000000000000000000000000000000000000000000000a2646970667358221220a9fefcaa0b4ff098224a61ab175fc18f1f3dcf93853f472d8b45308169a45c1464736f6c63430008070033697066733a2f2f516d58483872636934674461683333676f4e52445961664d4744585932415161436f3335575043567067704331382f
Deployed Bytecode
0x6080604052600436106101ee5760003560e01c80637ec4a6591161010d578063ba228998116100a0578063cc01d87a1161006f578063cc01d87a146105c9578063ceca3c9d146105de578063e8315742146105f3578063e985e9c514610608578063f2fde38b1461065157600080fd5b8063ba228998146104f5578063bcf8c6a914610553578063c708c6c714610573578063c87b56dd146105a957600080fd5b80639fd6db12116100dc5780639fd6db1214610488578063a0712d68146104a2578063a22cb465146104b5578063b88d4fde146104d557600080fd5b80637ec4a6591461041f5780637ff9b5961461043f5780638da5cb5b1461045557806395d89b411461047357600080fd5b80633ccfd60b11610185578063536d9e6211610154578063536d9e62146103985780636352211e146103ca57806370a08231146103ea578063715018a61461040a57600080fd5b80633ccfd60b1461032357806342842e0e146103385780634ea3871a146103585780634f6ccce71461037857600080fd5b80631342ff4c116101c15780631342ff4c146102a457806318160ddd146102c457806323b872dd146102e35780632f745c591461030357600080fd5b806301ffc9a7146101f357806306fdde0314610228578063081812fc1461024a578063095ea7b314610282575b600080fd5b3480156101ff57600080fd5b5061021361020e366004613341565b610671565b60405190151581526020015b60405180910390f35b34801561023457600080fd5b5061023d61069c565b60405161021f9190613787565b34801561025657600080fd5b5061026a6102653660046133c4565b61072e565b6040516001600160a01b03909116815260200161021f565b34801561028e57600080fd5b506102a261029d3660046132b0565b6107bb565b005b3480156102b057600080fd5b506102a26102bf3660046133c4565b6108d1565b3480156102d057600080fd5b506008545b60405190815260200161021f565b3480156102ef57600080fd5b506102a26102fe3660046131ce565b610a59565b34801561030f57600080fd5b506102d561031e3660046132b0565b610a8a565b34801561032f57600080fd5b506102a2610b20565b34801561034457600080fd5b506102a26103533660046131ce565b610bd7565b34801561036457600080fd5b506102a26103733660046132da565b610bf2565b34801561038457600080fd5b506102d56103933660046133c4565b610c2f565b3480156103a457600080fd5b506103b86103b33660046132f5565b610cc2565b60405160ff909116815260200161021f565b3480156103d657600080fd5b5061026a6103e53660046133c4565b610d16565b3480156103f657600080fd5b506102d5610405366004613180565b610d8d565b34801561041657600080fd5b506102a2610e14565b34801561042b57600080fd5b506102a261043a36600461337b565b610e4a565b34801561044b57600080fd5b506102d5600c5481565b34801561046157600080fd5b50600a546001600160a01b031661026a565b34801561047f57600080fd5b5061023d610e8b565b34801561049457600080fd5b506012546102139060ff1681565b6102a26104b03660046133c4565b610e9a565b3480156104c157600080fd5b506102a26104d0366004613286565b61108b565b3480156104e157600080fd5b506102a26104f036600461320a565b611096565b34801561050157600080fd5b506105156105103660046133c4565b6110ce565b60405161021f9190815161ffff9081168252602080840151821690830152604080840151821690830152606092830151169181019190915260800190565b34801561055f57600080fd5b506102a261056e3660046132b0565b611278565b34801561057f57600080fd5b506102d561058e366004613180565b6001600160a01b031660009081526013602052604090205490565b3480156105b557600080fd5b5061023d6105c43660046133c4565b6112e6565b3480156105d557600080fd5b5061023d611316565b3480156105ea57600080fd5b5061023d612312565b3480156105ff57600080fd5b506102d560cb81565b34801561061457600080fd5b5061021361062336600461319b565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561065d57600080fd5b506102a261066c366004613180565b612331565b60006001600160e01b0319821663780e9d6360e01b14806106965750610696826123c9565b92915050565b6060600080546106ab906139ab565b80601f01602080910402602001604051908101604052809291908181526020018280546106d7906139ab565b80156107245780601f106106f957610100808354040283529160200191610724565b820191906000526020600020905b81548152906001019060200180831161070757829003601f168201915b5050505050905090565b600061073982612419565b61079f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006107c682610d16565b9050806001600160a01b0316836001600160a01b031614156108345760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610796565b336001600160a01b038216148061085057506108508133610623565b6108c25760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610796565b6108cc8383612436565b505050565b6002600b5414156108f45760405162461bcd60e51b8152600401610796906138c1565b6002600b558061093c5760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a5908189859d95b0818dbdd5b9d606a1b6044820152606401610796565b336000908152601360205260409020548111156109a95760405162461bcd60e51b815260206004820152602560248201527f43616e6e6f74206d696e742074686973206d616e7920726573657276656420626044820152646167656c7360d81b6064820152608401610796565b60cb816109b560085490565b6109bf91906138f8565b1115610a025760405162461bcd60e51b8152602060048201526012602482015271185b1b08189859d95b1cc818db185a5b595960721b6044820152606401610796565b60005b81811015610a2c57610a1a335b6008546124a4565b80610a24816139e6565b915050610a05565b503360009081526013602052604081208054839290610a4c908490613968565b90915550506001600b5550565b610a6333826125e3565b610a7f5760405162461bcd60e51b815260040161079690613870565b6108cc8383836126cd565b6000610a9583610d8d565b8210610af75760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610796565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610b4a5760405162461bcd60e51b8152600401610796906137ec565b604051600090339047908381818185875af1925050503d8060008114610b8c576040519150601f19603f3d011682016040523d82523d6000602084013e610b91565b606091505b5050905080610bd45760405162461bcd60e51b815260206004820152600f60248201526e15da5d1a191c985dc811985a5b1959608a1b6044820152606401610796565b50565b6108cc83838360405180602001604052806000815250611096565b600a546001600160a01b03163314610c1c5760405162461bcd60e51b8152600401610796906137ec565b6012805460ff1916911515919091179055565b6000610c3a60085490565b8210610c9d5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610796565b60088281548110610cb057610cb0613a57565b90600052602060002001549050919050565b600060ff8216610cd7575060fe82901c610696565b8160ff1660011415610cf15750600360fc83901c16610696565b8160ff1660021415610d0b5750600360fa83901c16610696565b505060f81c60031690565b6000818152600260205260408120546001600160a01b0316806106965760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610796565b60006001600160a01b038216610df85760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610796565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b03163314610e3e5760405162461bcd60e51b8152600401610796906137ec565b610e486000612874565b565b600a546001600160a01b03163314610e745760405162461bcd60e51b8152600401610796906137ec565b8051610e8790601190602084019061301d565b5050565b6060600180546106ab906139ab565b6002600b541415610ebd5760405162461bcd60e51b8152600401610796906138c1565b6002600b5560125460ff16610f0d5760405162461bcd60e51b81526020600482015260166024820152751b5a5b9d1a5b99c81a5cc81b9bdd08195b98589b195960521b6044820152606401610796565b600081118015610f1e575060058111155b610f605760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a5908189859d95b0818dbdd5b9d606a1b6044820152606401610796565b60cb81610f6c60085490565b610f7691906138f8565b1115610fb95760405162461bcd60e51b8152602060048201526012602482015271185b1b08189859d95b1cc818db185a5b595960721b6044820152606401610796565b600c54610fc69082613949565b34146110145760405162461bcd60e51b815260206004820152601e60248201527f73656e6420302e31204554482070657220626167656c20746f206d696e7400006044820152606401610796565b33321461105c5760405162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9858dd1cc81b585e481b9bdd081b5a5b9d60521b6044820152606401610796565b60005b818110156110825761107033610a12565b8061107a816139e6565b91505061105f565b50506001600b55565b610e873383836128c6565b6110a033836125e3565b6110bc5760405162461bcd60e51b815260040161079690613870565b6110c884848484612995565b50505050565b6040805160808101825260008082526020820181905291810182905260608101919091526110fb82612419565b6111575760405162461bcd60e51b815260206004820152602760248201527f426167656c52657669657720717565727920666f72206e6f6e6578697374656e6044820152663a103a37b5b2b760c91b6064820152608401610796565b604080516080810182526000808252602082018190529181018290526060810191909152600f838154811061118e5761118e613a57565b60009182526020909120601082040154600f9091166002026101000a900461ffff168152600e8054849081106111c6576111c6613a57565b60009182526020909120601082040154600f9091166002026101000a900461ffff166040820152600d80548490811061120157611201613a57565b90600052602060002090601091828204019190066002029054906101000a900461ffff16816020019061ffff16908161ffff16815250506010838154811061124b5761124b613a57565b60009182526020909120601082040154600f9091166002026101000a900461ffff16606082015292915050565b600a546001600160a01b031633146112a25760405162461bcd60e51b8152600401610796906137ec565b6002600b5414156112c55760405162461bcd60e51b8152600401610796906138c1565b6001600160a01b039091166000908152601360205260409020556001600b55565b60606112f182612419565b61130d5760405162461bcd60e51b815260040161079690613821565b610696826129c8565b6040805160c08082018352600080835260208084018290526060848601819052808501819052608080860182905260a080870183905287516104408101895260016104008201818152600360fc1b61042084015282528951808b018b52818152603160f81b81880152828701528951808b018b52818152601960f91b81880152828b01528951808b018b52818152603360f81b81880152828601528951808b018b52818152600d60fa1b81880152828501528951808b018b52818152603560f81b81880152828401528951808b018b52818152601b60f91b81880152828901528951808b018b52818152603760f81b8188015260e08301528951808b018b52818152600760fb1b818801526101008301528951808b018b52908152603960f81b818701526101208201528851808a018a52600280825261031360f41b828801526101408301919091528951808b018b5281815261313160f01b818801526101608301528951808b018b5281815261189960f11b818801526101808301528951808b018b5281815261313360f01b818801526101a08301528951808b018b52818152610c4d60f21b818801526101c08301528951808b018b5281815261313560f01b818801526101e08301528951808b018b5281815261189b60f11b818801526102008301528951808b018b5281815261313760f01b818801526102208301528951808b018b5281815261062760f31b818801526102408301528951808b018b5281815261313960f01b818801526102608301528951808b018b5281815261032360f41b818801526102808301528951808b018b5281815261323160f01b818801526102a08301528951808b018b5281815261191960f11b818801526102c08301528951808b018b5281815261323360f01b818801526102e08301528951808b018b52818152610c8d60f21b818801526103008301528951808b018b5281815261323560f01b818801526103208301528951808b018b5281815261191b60f11b818801526103408301528951808b018b5281815261323760f01b818801526103608301528951808b018b5281815261064760f31b818801526103808301528951808b018b5281815261323960f01b818801526103a08301528951808b018b5281815261033360f41b818801526103c08301528951808b018b5290815261333160f01b818701526103e08201528851968701895260079287018381526611b331b11898b160c91b8884015287528851808a018a52838152662333653235313560c81b81870152878601528851808a018a52838152662366616536626160c81b81870152878a01528851808a018a52928352662365393930346560c81b838601528684019290925287519081019097526067808852919690949392909190613a9a9083013990506117226130a1565b60005b6101008110156122e757836117766040518061012001604052806101008152602001613b016101009139838151811061176057611760613a57565b01602001516001600160f81b0319166000610cc2565b60ff166004811061178957611789613a57565b60200201518660400181905250836117dd6040518061012001604052806101008152602001613b01610100913983815181106117c7576117c7613a57565b01602001516001600160f81b0319166001610cc2565b60ff16600481106117f0576117f0613a57565b60200201518660600181905250836118446040518061012001604052806101008152602001613b016101009139838151811061182e5761182e613a57565b01602001516001600160f81b0319166002610cc2565b60ff166004811061185757611857613a57565b60200201518660800181905250836118ab6040518061012001604052806101008152602001613b016101009139838151811061189557611895613a57565b01602001516001600160f81b0319166003610cc2565b60ff16600481106118be576118be613a57565b602002015160a08701526118d28587612a4b565b8252855160049087906118e6908390613910565b60ff16905250604080516101208101909152610100808252859161192791613b0160208301396119178460016138f8565b8151811061176057611760613a57565b60ff166004811061193a5761193a613a57565b60200201518660400181905250836119826040518061012001604052806101008152602001613b0161010091396119728460016138f8565b815181106117c7576117c7613a57565b60ff166004811061199557611995613a57565b60200201518660600181905250836119dd6040518061012001604052806101008152602001613b0161010091396119cd8460016138f8565b8151811061182e5761182e613a57565b60ff16600481106119f0576119f0613a57565b6020020151866080018190525083611a386040518061012001604052806101008152602001613b016101009139611a288460016138f8565b8151811061189557611895613a57565b60ff1660048110611a4b57611a4b613a57565b602002015160a0870152611a5f8587612a4b565b602083015285516004908790611a76908390613910565b60ff169052506040805161012081019091526101008082528591611aa791613b0160208301396119178460026138f8565b60ff1660048110611aba57611aba613a57565b6020020151866040018190525083611af26040518061012001604052806101008152602001613b0161010091396119728460026138f8565b60ff1660048110611b0557611b05613a57565b6020020151866060018190525083611b3d6040518061012001604052806101008152602001613b0161010091396119cd8460026138f8565b60ff1660048110611b5057611b50613a57565b6020020151866080018190525083611b886040518061012001604052806101008152602001613b016101009139611a288460026138f8565b60ff1660048110611b9b57611b9b613a57565b602002015160a0870152611baf8587612a4b565b604083015285516004908790611bc6908390613910565b60ff169052506040805161012081019091526101008082528591611bf791613b0160208301396119178460036138f8565b60ff1660048110611c0a57611c0a613a57565b6020020151866040018190525083611c426040518061012001604052806101008152602001613b0161010091396119728460036138f8565b60ff1660048110611c5557611c55613a57565b6020020151866060018190525083611c8d6040518061012001604052806101008152602001613b0161010091396119cd8460036138f8565b60ff1660048110611ca057611ca0613a57565b6020020151866080018190525083611cd86040518061012001604052806101008152602001613b016101009139611a288460036138f8565b60ff1660048110611ceb57611ceb613a57565b602002015160a0870152611cff8587612a4b565b606083015285516004908790611d16908390613910565b60ff169052506040805161012081019091526101008082528591611d4791613b0160208301396119178460046138f8565b60ff1660048110611d5a57611d5a613a57565b6020020151866040018190525083611d926040518061012001604052806101008152602001613b0161010091396119728460046138f8565b60ff1660048110611da557611da5613a57565b6020020151866060018190525083611ddd6040518061012001604052806101008152602001613b0161010091396119cd8460046138f8565b60ff1660048110611df057611df0613a57565b6020020151866080018190525083611e286040518061012001604052806101008152602001613b016101009139611a288460046138f8565b60ff1660048110611e3b57611e3b613a57565b602002015160a0870152611e4f8587612a4b565b608083015285516004908790611e66908390613910565b60ff169052506040805161012081019091526101008082528591611e9791613b0160208301396119178460056138f8565b60ff1660048110611eaa57611eaa613a57565b6020020151866040018190525083611ee26040518061012001604052806101008152602001613b0161010091396119728460056138f8565b60ff1660048110611ef557611ef5613a57565b6020020151866060018190525083611f2d6040518061012001604052806101008152602001613b0161010091396119cd8460056138f8565b60ff1660048110611f4057611f40613a57565b6020020151866080018190525083611f786040518061012001604052806101008152602001613b016101009139611a288460056138f8565b60ff1660048110611f8b57611f8b613a57565b602002015160a0870152611f9f8587612a4b565b60a083015285516004908790611fb6908390613910565b60ff169052506040805161012081019091526101008082528591611fe791613b0160208301396119178460066138f8565b60ff1660048110611ffa57611ffa613a57565b60200201518660400181905250836120326040518061012001604052806101008152602001613b0161010091396119728460066138f8565b60ff166004811061204557612045613a57565b602002015186606001819052508361207d6040518061012001604052806101008152602001613b0161010091396119cd8460066138f8565b60ff166004811061209057612090613a57565b60200201518660800181905250836120c86040518061012001604052806101008152602001613b016101009139611a288460066138f8565b60ff16600481106120db576120db613a57565b602002015160a08701526120ef8587612a4b565b60c083015285516004908790612106908390613910565b60ff16905250604080516101208101909152610100808252859161213791613b0160208301396119178460076138f8565b60ff166004811061214a5761214a613a57565b60200201518660400181905250836121826040518061012001604052806101008152602001613b0161010091396119728460076138f8565b60ff166004811061219557612195613a57565b60200201518660600181905250836121cd6040518061012001604052806101008152602001613b0161010091396119cd8460076138f8565b60ff16600481106121e0576121e0613a57565b60200201518660800181905250836122186040518061012001604052806101008152602001613b016101009139611a288460076138f8565b60ff166004811061222b5761222b613a57565b602002015160a087015261223f8587612a4b565b60e083015285516004908790612256908390613910565b60ff1690525081516020808401516040808601516060870151608088015160a089015160c08a015160e08b01519551612295998d999098979101613454565b60405160208183030381529060405292506020866000015160ff16106122d55760008652602086018051600191906122ce908390613910565b60ff169052505b6122e06008826138f8565b9050611725565b50816040516020016122f99190613514565b6040516020818303038152906040529550505050505090565b6040518061012001604052806101008152602001613b01610100913981565b600a546001600160a01b0316331461235b5760405162461bcd60e51b8152600401610796906137ec565b6001600160a01b0381166123c05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610796565b610bd481612874565b60006001600160e01b031982166380ac58cd60e01b14806123fa57506001600160e01b03198216635b5e139f60e01b145b8061069657506301ffc9a760e01b6001600160e01b0319831614610696565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061246b82610d16565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6001600160a01b0382166124fa5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610796565b61250381612419565b156125505760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610796565b61255c60008383612bbb565b6001600160a01b03821660009081526003602052604081208054600192906125859084906138f8565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006125ee82612419565b61264f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610796565b600061265a83610d16565b9050806001600160a01b0316846001600160a01b031614806126955750836001600160a01b031661268a8461072e565b6001600160a01b0316145b806126c557506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166126e082610d16565b6001600160a01b0316146127445760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610796565b6001600160a01b0382166127a65760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610796565b6127b1838383612bbb565b6127bc600082612436565b6001600160a01b03831660009081526003602052604081208054600192906127e5908490613968565b90915550506001600160a01b03821660009081526003602052604081208054600192906128139084906138f8565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156129285760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610796565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6129a08484846126cd565b6129ac84848484612c73565b6110c85760405162461bcd60e51b81526004016107969061379a565b60606129d382612419565b6129ef5760405162461bcd60e51b815260040161079690613821565b60006129f9612d80565b90506000815111612a195760405180602001604052806000815250612a44565b80612a2384612d8f565b604051602001612a34929190613425565b6040516020818303038152906040525b9392505050565b6060816040015183836000015160ff1660208110612a6b57612a6b613a57565b602002015184846020015160ff1660208110612a8957612a89613a57565b6020020151606085015185518790612aa2906001613910565b60ff1660208110612ab557612ab5613a57565b602002015187876020015160ff1660208110612ad357612ad3613a57565b6020020151608088015188518a90612aec906002613910565b60ff1660208110612aff57612aff613a57565b60200201518a8a6020015160ff1660208110612b1d57612b1d613a57565b602002015160a08b01518b518d90612b36906003613910565b60ff1660208110612b4957612b49613a57565b60200201518d8d6020015160ff1660208110612b6757612b67613a57565b6020020151604051602001612b819695949392919061356e565b60408051601f1981840301815290829052612ba497969594939291602001613666565b604051602081830303815290604052905092915050565b6001600160a01b038316612c1657612c1181600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612c39565b816001600160a01b0316836001600160a01b031614612c3957612c398382612e8d565b6001600160a01b038216612c50576108cc81612f2a565b826001600160a01b0316826001600160a01b0316146108cc576108cc8282612fd9565b60006001600160a01b0384163b15612d7557604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612cb790339089908890889060040161374a565b602060405180830381600087803b158015612cd157600080fd5b505af1925050508015612d01575060408051601f3d908101601f19168201909252612cfe9181019061335e565b60015b612d5b573d808015612d2f576040519150601f19603f3d011682016040523d82523d6000602084013e612d34565b606091505b508051612d535760405162461bcd60e51b81526004016107969061379a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506126c5565b506001949350505050565b6060601180546106ab906139ab565b606081612db35750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612ddd5780612dc7816139e6565b9150612dd69050600a83613935565b9150612db7565b60008167ffffffffffffffff811115612df857612df8613a6d565b6040519080825280601f01601f191660200182016040528015612e22576020820181803683370190505b5090505b84156126c557612e37600183613968565b9150612e44600a86613a01565b612e4f9060306138f8565b60f81b818381518110612e6457612e64613a57565b60200101906001600160f81b031916908160001a905350612e86600a86613935565b9450612e26565b60006001612e9a84610d8d565b612ea49190613968565b600083815260076020526040902054909150808214612ef7576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612f3c90600190613968565b60008381526009602052604081205460088054939450909284908110612f6457612f64613a57565b906000526020600020015490508060088381548110612f8557612f85613a57565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612fbd57612fbd613a41565b6001900381819060005260206000200160009055905550505050565b6000612fe483610d8d565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054613029906139ab565b90600052602060002090601f01602090048101928261304b5760008555613091565b82601f1061306457805160ff1916838001178555613091565b82800160010185558215613091579182015b82811115613091578251825591602001919060010190613076565b5061309d9291506130c9565b5090565b6040518061010001604052806008905b60608152602001906001900390816130b15790505090565b5b8082111561309d57600081556001016130ca565b600067ffffffffffffffff808411156130f9576130f9613a6d565b604051601f8501601f19908116603f0116810190828211818310171561312157613121613a6d565b8160405280935085815286868601111561313a57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461316b57600080fd5b919050565b8035801515811461316b57600080fd5b60006020828403121561319257600080fd5b612a4482613154565b600080604083850312156131ae57600080fd5b6131b783613154565b91506131c560208401613154565b90509250929050565b6000806000606084860312156131e357600080fd5b6131ec84613154565b92506131fa60208501613154565b9150604084013590509250925092565b6000806000806080858703121561322057600080fd5b61322985613154565b935061323760208601613154565b925060408501359150606085013567ffffffffffffffff81111561325a57600080fd5b8501601f8101871361326b57600080fd5b61327a878235602084016130de565b91505092959194509250565b6000806040838503121561329957600080fd5b6132a283613154565b91506131c560208401613170565b600080604083850312156132c357600080fd5b6132cc83613154565b946020939093013593505050565b6000602082840312156132ec57600080fd5b612a4482613170565b6000806040838503121561330857600080fd5b82356001600160f81b03198116811461332057600080fd5b9150602083013560ff8116811461333657600080fd5b809150509250929050565b60006020828403121561335357600080fd5b8135612a4481613a83565b60006020828403121561337057600080fd5b8151612a4481613a83565b60006020828403121561338d57600080fd5b813567ffffffffffffffff8111156133a457600080fd5b8201601f810184136133b557600080fd5b6126c5848235602084016130de565b6000602082840312156133d657600080fd5b5035919050565b600081518084526133f581602086016020860161397f565b601f01601f19169290920160200192915050565b6000815161341b81856020860161397f565b9290920192915050565b6000835161343781846020880161397f565b83519083019061344b81836020880161397f565b01949350505050565b60008a51613466818460208f0161397f565b8a516134788183860160208f0161397f565b8a51918401019061348d818360208e0161397f565b89519101906134a0818360208d0161397f565b88516134b28183850160208d0161397f565b88519290910101906134c8818360208b0161397f565b86516134da8183850160208b0161397f565b86519290910101906134f081836020890161397f565b8451613502818385016020890161397f565b9101019b9a5050505050505050505050565b6000825161352681846020870161397f565b7f3c7374796c653e726563747b77696474683a3170783b6865696768743a3170789201918252506f1dbe9e17b9ba3cb6329f1e17b9bb339f60811b6020820152603001919050565b60006b3c726563742066696c6c3d2760a01b808352885161359681600c860160208d0161397f565b8084019050642720783d2760d81b80600c83015289516135bd816011850160208e0161397f565b642720793d2760d81b6011939091019283015288516135e3816016850160208d0161397f565b8083019250506213979f60e91b601683015282601983015287519250613610836025840160208b0161397f565b8282019250806025840152505061365961364a613644613633602a850189613409565b642720793d2760d81b815260050190565b86613409565b6213979f60e91b815260030190565b9998505050505050505050565b60006b3c726563742066696c6c3d2760a01b808352895161368e81600c860160208e0161397f565b642720783d2760d81b600c9185019182015289516136b3816011840160208e0161397f565b642720793d2760d81b6011929091019182015288516136d9816016840160208d0161397f565b8082019150506213979f60e91b601682015281601982015287519150613706826025830160208b0161397f565b61373b61364461364a61373561363361372f602588880101642720783d2760d81b815260050190565b8c613409565b89613409565b9b9a5050505050505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061377d908301846133dd565b9695505050505050565b602081526000612a4460208301846133dd565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000821982111561390b5761390b613a15565b500190565b600060ff821660ff84168060ff0382111561392d5761392d613a15565b019392505050565b60008261394457613944613a2b565b500490565b600081600019048311821515161561396357613963613a15565b500290565b60008282101561397a5761397a613a15565b500390565b60005b8381101561399a578181015183820152602001613982565b838111156110c85750506000910152565b600181811c908216806139bf57607f821691505b602082108114156139e057634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156139fa576139fa613a15565b5060010190565b600082613a1057613a10613a2b565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610bd457600080fdfe3c7376672076657273696f6e3d27312e31272076696577426f783d273020302033322033322720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f737667272073686170652d72656e646572696e673d2763726973704564676573273e000000000000000000000000000000000000055555540000000016b79fb5000000005fdbf6fd400000016dbf799f50000005f779fbffd40000179ffe7f66e400001dedefddbbf500005f7fffffffbd00017fefb77afded0005f7e6ffffdfe7401feffffd577fbb401dfbffb5057e7f501ffb7ad401bbfed01e76d7d0057fffd01ebfffd057f677901fff7ed57de7bfd017efbfb6fdbff7d007ff77f79ffe7e5005fb7edfef797f4001bfbf7e79befd40017fe7a7be7bf500006feffafff7f4000057f7efedddd4000005ff79fbff500000015f7fdef94000000017f7af5500000000055555400000000000000000000000000000000000000000000000000000a2646970667358221220a9fefcaa0b4ff098224a61ab175fc18f1f3dcf93853f472d8b45308169a45c1464736f6c63430008070033
Deployed Bytecode Sourcemap
50350:13169:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42073:224;;;;;;;;;;-1:-1:-1;42073:224:0;;;;;:::i;:::-;;:::i;:::-;;;13797:14:1;;13790:22;13772:41;;13760:2;13745:18;42073:224:0;;;;;;;;28893:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;30452:221::-;;;;;;;;;;-1:-1:-1;30452:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;13095:32:1;;;13077:51;;13065:2;13050:18;30452:221:0;12931:203:1;29975:411:0;;;;;;;;;;-1:-1:-1;29975:411:0;;;;;:::i;:::-;;:::i;:::-;;57489:466;;;;;;;;;;-1:-1:-1;57489:466:0;;;;;:::i;:::-;;:::i;42713:113::-;;;;;;;;;;-1:-1:-1;42801:10:0;:17;42713:113;;;25403:25:1;;;25391:2;25376:18;42713:113:0;25257:177:1;31202:339:0;;;;;;;;;;-1:-1:-1;31202:339:0;;;;;:::i;:::-;;:::i;42381:256::-;;;;;;;;;;-1:-1:-1;42381:256:0;;;;;:::i;:::-;;:::i;57964:170::-;;;;;;;;;;;;;:::i;31612:185::-;;;;;;;;;;-1:-1:-1;31612:185:0;;;;;:::i;:::-;;:::i;55675:128::-;;;;;;;;;;-1:-1:-1;55675:128:0;;;;;:::i;:::-;;:::i;42903:233::-;;;;;;;;;;-1:-1:-1;42903:233:0;;;;;:::i;:::-;;:::i;58775:362::-;;;;;;;;;;-1:-1:-1;58775:362:0;;;;;:::i;:::-;;:::i;:::-;;;25611:4:1;25599:17;;;25581:36;;25569:2;25554:18;58775:362:0;25439:184:1;28587:239:0;;;;;;;;;;-1:-1:-1;28587:239:0;;;;;:::i;:::-;;:::i;28317:208::-;;;;;;;;;;-1:-1:-1;28317:208:0;;;;;:::i;:::-;;:::i;7489:103::-;;;;;;;;;;;;;:::i;55555:112::-;;;;;;;;;;-1:-1:-1;55555:112:0;;;;;:::i;:::-;;:::i;50485:37::-;;;;;;;;;;;;;;;;6838:87;;;;;;;;;;-1:-1:-1;6911:6:0;;-1:-1:-1;;;;;6911:6:0;6838:87;;29062:104;;;;;;;;;;;;;:::i;53980:26::-;;;;;;;;;;-1:-1:-1;53980:26:0;;;;;;;;56657:531;;;;;;:::i;:::-;;:::i;30745:155::-;;;;;;;;;;-1:-1:-1;30745:155:0;;;;;:::i;:::-;;:::i;31868:328::-;;;;;;;;;;-1:-1:-1;31868:328:0;;;;;:::i;:::-;;:::i;56182:467::-;;;;;;;;;;-1:-1:-1;56182:467:0;;;;;:::i;:::-;;:::i;:::-;;;;;;25011:13:1;;24974:6;25007:22;;;24989:41;;25090:4;25078:17;;;25072:24;25068:33;;25046:20;;;25039:63;25162:4;25150:17;;;25144:24;25140:33;;25118:20;;;25111:63;25234:4;25222:17;;;25216:24;25212:33;25190:20;;;25183:63;;;;24951:3;24936:19;;24747:505;57196:147:0;;;;;;;;;;-1:-1:-1;57196:147:0;;;;;:::i;:::-;;:::i;57351:130::-;;;;;;;;;;-1:-1:-1;57351:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;57441:32:0;57414:7;57441:32;;;:26;:32;;;;;;;57351:130;55934:240;;;;;;;;;;-1:-1:-1;55934:240:0;;;;;:::i;:::-;;:::i;59145:4371::-;;;;;;;;;;;;;:::i;54015:554::-;;;;;;;;;;;;;:::i;50435:39::-;;;;;;;;;;;;50471:3;50435:39;;30971:164;;;;;;;;;;-1:-1:-1;30971:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;31092:25:0;;;31068:4;31092:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;30971:164;7747:201;;;;;;;;;;-1:-1:-1;7747:201:0;;;;;:::i;:::-;;:::i;42073:224::-;42175:4;-1:-1:-1;;;;;;42199:50:0;;-1:-1:-1;;;42199:50:0;;:90;;;42253:36;42277:11;42253:23;:36::i;:::-;42192:97;42073:224;-1:-1:-1;;42073:224:0:o;28893:100::-;28947:13;28980:5;28973:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28893:100;:::o;30452:221::-;30528:7;30556:16;30564:7;30556;:16::i;:::-;30548:73;;;;-1:-1:-1;;;30548:73:0;;20710:2:1;30548:73:0;;;20692:21:1;20749:2;20729:18;;;20722:30;20788:34;20768:18;;;20761:62;-1:-1:-1;;;20839:18:1;;;20832:42;20891:19;;30548:73:0;;;;;;;;;-1:-1:-1;30641:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;30641:24:0;;30452:221::o;29975:411::-;30056:13;30072:23;30087:7;30072:14;:23::i;:::-;30056:39;;30120:5;-1:-1:-1;;;;;30114:11:0;:2;-1:-1:-1;;;;;30114:11:0;;;30106:57;;;;-1:-1:-1;;;30106:57:0;;22599:2:1;30106:57:0;;;22581:21:1;22638:2;22618:18;;;22611:30;22677:34;22657:18;;;22650:62;-1:-1:-1;;;22728:18:1;;;22721:31;22769:19;;30106:57:0;22397:397:1;30106:57:0;5642:10;-1:-1:-1;;;;;30198:21:0;;;;:62;;-1:-1:-1;30223:37:0;30240:5;5642:10;30971:164;:::i;30223:37::-;30176:168;;;;-1:-1:-1;;;30176:168:0;;18397:2:1;30176:168:0;;;18379:21:1;18436:2;18416:18;;;18409:30;18475:34;18455:18;;;18448:62;18546:26;18526:18;;;18519:54;18590:19;;30176:168:0;18195:420:1;30176:168:0;30357:21;30366:2;30370:7;30357:8;:21::i;:::-;30045:341;29975:411;;:::o;57489:466::-;1812:1;2410:7;;:19;;2402:63;;;;-1:-1:-1;;;2402:63:0;;;;;;;:::i;:::-;1812:1;2543:7;:18;57564:9;57556:41:::1;;;::::0;-1:-1:-1;;;57556:41:0;;21484:2:1;57556:41:0::1;::::0;::::1;21466:21:1::0;21523:2;21503:18;;;21496:30;-1:-1:-1;;;21542:18:1;;;21535:49;21601:18;;57556:41:0::1;21282:343:1::0;57556:41:0::1;57643:10;57616:38;::::0;;;:26:::1;:38;::::0;;;;;:47;-1:-1:-1;57616:47:0::1;57608:97;;;::::0;-1:-1:-1;;;57608:97:0;;23832:2:1;57608:97:0::1;::::0;::::1;23814:21:1::0;23871:2;23851:18;;;23844:30;23910:34;23890:18;;;23883:62;-1:-1:-1;;;23961:18:1;;;23954:35;24006:19;;57608:97:0::1;23630:401:1::0;57608:97:0::1;50471:3;57740:5;57724:13;42801:10:::0;:17;;42713:113;57724:13:::1;:21;;;;:::i;:::-;:34;;57716:65;;;::::0;-1:-1:-1;;;57716:65:0;;20002:2:1;57716:65:0::1;::::0;::::1;19984:21:1::0;20041:2;20021:18;;;20014:30;-1:-1:-1;;;20060:18:1;;;20053:48;20118:18;;57716:65:0::1;19800:342:1::0;57716:65:0::1;57798:9;57794:96;57817:5;57813:1;:9;57794:96;;;57844:34;5642:10:::0;57850:12:::1;42801:10:::0;:17;57844:5:::1;:34::i;:::-;57824:3:::0;::::1;::::0;::::1;:::i;:::-;;;;57794:96;;;-1:-1:-1::0;57927:10:0::1;57900:38;::::0;;;:26:::1;:38;::::0;;;;:47;;57942:5;;57900:38;:47:::1;::::0;57942:5;;57900:47:::1;:::i;:::-;::::0;;;-1:-1:-1;;1768:1:0;2722:7;:22;-1:-1:-1;57489:466:0:o;31202:339::-;31397:41;5642:10;31430:7;31397:18;:41::i;:::-;31389:103;;;;-1:-1:-1;;;31389:103:0;;;;;;;:::i;:::-;31505:28;31515:4;31521:2;31525:7;31505:9;:28::i;42381:256::-;42478:7;42514:23;42531:5;42514:16;:23::i;:::-;42506:5;:31;42498:87;;;;-1:-1:-1;;;42498:87:0;;14472:2:1;42498:87:0;;;14454:21:1;14511:2;14491:18;;;14484:30;14550:34;14530:18;;;14523:62;-1:-1:-1;;;14601:18:1;;;14594:41;14652:19;;42498:87:0;14270:407:1;42498:87:0;-1:-1:-1;;;;;;42603:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;42381:256::o;57964:170::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;58030:50:::1;::::0;58013:12:::1;::::0;58030:10:::1;::::0;58054:21:::1;::::0;58013:12;58030:50;58013:12;58030:50;58054:21;58030:10;:50:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58012:68;;;58099:7;58091:35;;;::::0;-1:-1:-1;;;58091:35:0;;17232:2:1;58091:35:0::1;::::0;::::1;17214:21:1::0;17271:2;17251:18;;;17244:30;-1:-1:-1;;;17290:18:1;;;17283:45;17345:18;;58091:35:0::1;17030:339:1::0;58091:35:0::1;58001:133;57964:170::o:0;31612:185::-;31750:39;31767:4;31773:2;31777:7;31750:39;;;;;;;;;;;;:16;:39::i;55675:128::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;55761:14:::1;:34:::0;;-1:-1:-1;;55761:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;55675:128::o;42903:233::-;42978:7;43014:30;42801:10;:17;;42713:113;43014:30;43006:5;:38;42998:95;;;;-1:-1:-1;;;42998:95:0;;23419:2:1;42998:95:0;;;23401:21:1;23458:2;23438:18;;;23431:30;23497:34;23477:18;;;23470:62;-1:-1:-1;;;23548:18:1;;;23541:42;23600:19;;42998:95:0;23217:408:1;42998:95:0;43111:10;43122:5;43111:17;;;;;;;;:::i;:::-;;;;;;;;;43104:24;;42903:233;;;:::o;58775:362::-;58843:5;58865:10;;;58861:221;;-1:-1:-1;58899:17:0;;;;58892:24;;58861:221;58938:5;:10;;58947:1;58938:10;58934:148;;;-1:-1:-1;58992:1:0;58972:17;;;;:21;58965:28;;58934:148;59015:5;:10;;59024:1;59015:10;59011:71;;;-1:-1:-1;59069:1:0;59049:17;;;;:21;59042:28;;59011:71;-1:-1:-1;;59113:12:0;;59128:1;59113:16;;58775:362::o;28587:239::-;28659:7;28695:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28695:16:0;28730:19;28722:73;;;;-1:-1:-1;;;28722:73:0;;19233:2:1;28722:73:0;;;19215:21:1;19272:2;19252:18;;;19245:30;19311:34;19291:18;;;19284:62;-1:-1:-1;;;19362:18:1;;;19355:39;19411:19;;28722:73:0;19031:405:1;28317:208:0;28389:7;-1:-1:-1;;;;;28417:19:0;;28409:74;;;;-1:-1:-1;;;28409:74:0;;18822:2:1;28409:74:0;;;18804:21:1;18861:2;18841:18;;;18834:30;18900:34;18880:18;;;18873:62;-1:-1:-1;;;18951:18:1;;;18944:40;19001:19;;28409:74:0;18620:406:1;28409:74:0;-1:-1:-1;;;;;;28501:16:0;;;;;:9;:16;;;;;;;28317:208::o;7489:103::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;7554:30:::1;7581:1;7554:18;:30::i;:::-;7489:103::o:0;55555:112::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;55637:22;;::::1;::::0;:10:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;55555:112:::0;:::o;29062:104::-;29118:13;29151:7;29144:14;;;;;:::i;56657:531::-;1812:1;2410:7;;:19;;2402:63;;;;-1:-1:-1;;;2402:63:0;;;;;;;:::i;:::-;1812:1;2543:7;:18;56735:14:::1;::::0;::::1;;56727:49;;;::::0;-1:-1:-1;;;56727:49:0;;22248:2:1;56727:49:0::1;::::0;::::1;22230:21:1::0;22287:2;22267:18;;;22260:30;-1:-1:-1;;;22306:18:1;;;22299:52;22368:18;;56727:49:0::1;22046:346:1::0;56727:49:0::1;56803:1;56795:5;:9;:23;;;;;56817:1;56808:5;:10;;56795:23;56787:55;;;::::0;-1:-1:-1;;;56787:55:0;;21484:2:1;56787:55:0::1;::::0;::::1;21466:21:1::0;21523:2;21503:18;;;21496:30;-1:-1:-1;;;21542:18:1;;;21535:49;21601:18;;56787:55:0::1;21282:343:1::0;56787:55:0::1;50471:3;56877:5;56861:13;42801:10:::0;:17;;42713:113;56861:13:::1;:21;;;;:::i;:::-;:34;;56853:65;;;::::0;-1:-1:-1;;;56853:65:0;;20002:2:1;56853:65:0::1;::::0;::::1;19984:21:1::0;20041:2;20021:18;;;20014:30;-1:-1:-1;;;20060:18:1;;;20053:48;20118:18;;56853:65:0::1;19800:342:1::0;56853:65:0::1;56958:10;::::0;56950:18:::1;::::0;:5;:18:::1;:::i;:::-;56937:9;:31;56929:74;;;::::0;-1:-1:-1;;;56929:74:0;;19643:2:1;56929:74:0::1;::::0;::::1;19625:21:1::0;19682:2;19662:18;;;19655:30;19721:32;19701:18;;;19694:60;19771:18;;56929:74:0::1;19441:354:1::0;56929:74:0::1;57022:10;57036:9;57022:23;57014:58;;;::::0;-1:-1:-1;;;57014:58:0;;24598:2:1;57014:58:0::1;::::0;::::1;24580:21:1::0;24637:2;24617:18;;;24610:30;-1:-1:-1;;;24656:18:1;;;24649:52;24718:18;;57014:58:0::1;24396:346:1::0;57014:58:0::1;57089:9;57085:96;57108:5;57104:1;:9;57085:96;;;57135:34;5642:10:::0;57141:12:::1;5562:98:::0;57135:34:::1;57115:3:::0;::::1;::::0;::::1;:::i;:::-;;;;57085:96;;;-1:-1:-1::0;;1768:1:0;2722:7;:22;56657:531::o;30745:155::-;30840:52;5642:10;30873:8;30883;30840:18;:52::i;31868:328::-;32043:41;5642:10;32076:7;32043:18;:41::i;:::-;32035:103;;;;-1:-1:-1;;;32035:103:0;;;;;;;:::i;:::-;32149:39;32163:4;32169:2;32173:7;32182:5;32149:13;:39::i;:::-;31868:328;;;;:::o;56182:467::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56303:16:0;56311:7;56303;:16::i;:::-;56295:68;;;;-1:-1:-1;;;56295:68:0;;17989:2:1;56295:68:0;;;17971:21:1;18028:2;18008:18;;;18001:30;18067:34;18047:18;;;18040:62;-1:-1:-1;;;18118:18:1;;;18111:37;18165:19;;56295:68:0;17787:403:1;56295:68:0;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56438:12:0;56451:7;56438:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;56418:41;;56491:13;:22;;56505:7;;56491:22;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;56470:18;;;:43;56544:12;:21;;56557:7;;56544:21;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;56524:6;:17;;:41;;;;;;;;;;;56596:12;56609:7;56596:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;56576:17;;;:41;:17;:6;-1:-1:-1;;56182:467:0:o;57196:147::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;1812:1:::1;2410:7;;:19;;2402:63;;;;-1:-1:-1::0;;;2402:63:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;57295:32:0;;::::2;;::::0;;;:26:::2;:32;::::0;;;;:40;1768:1:::1;2543:7;2722:22:::0;57196:147::o;55934:240::-;56007:13;56042:16;56050:7;56042;:16::i;:::-;56034:76;;;;-1:-1:-1;;;56034:76:0;;;;;;;:::i;:::-;56142:24;56158:7;56142:15;:24::i;59145:4371::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;59191:13:0;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;59251:275:0;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;-1:-1:-1;;;59251:275:0;;;;;;;;;;;-1:-1:-1;;;59251:275:0;;;;-1:-1:-1;;;59251:275:0;59539:141;;;;;;;;;;;;;;-1:-1:-1;;;59539:141:0;;;;;;;;;;;;;;;;-1:-1:-1;;;59539:141:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59539:141:0;;;;-1:-1:-1;;;59539:141:0;;;;;;;;;;;-1:-1:-1;;;59539:141:0;;;;-1:-1:-1;;;59539:141:0;;;;59693:131;;;;;;;;;;;;59191:13;;59251:275;;59539:141;-1:-1:-1;59693:131:0;;;;;;;;;;59837:23;;:::i;:::-;59875:6;59871:3531;59891:3;59887:1;:7;59871:3531;;;59935:14;59950:30;59961:12;;;;;;;;;;;;;;;;;59974:1;59961:15;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;59961:15:0;59978:1;59950:10;:30::i;:::-;59935:46;;;;;;;;;:::i;:::-;;;;;59919:6;:13;;:62;;;;60012:14;60027:30;60038:12;;;;;;;;;;;;;;;;;60051:1;60038:15;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;60038:15:0;60055:1;60027:10;:30::i;:::-;60012:46;;;;;;;;;:::i;:::-;;;;;59996:6;:13;;:62;;;;60089:14;60104:30;60115:12;;;;;;;;;;;;;;;;;60128:1;60115:15;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;60115:15:0;60132:1;60104:10;:30::i;:::-;60089:46;;;;;;;;;:::i;:::-;;;;;60073:6;:13;;:62;;;;60166:14;60181:30;60192:12;;;;;;;;;;;;;;;;;60205:1;60192:15;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;60192:15:0;60209:1;60181:10;:30::i;:::-;60166:46;;;;;;;;;:::i;:::-;;;;;60150:13;;;:62;60239:24;60248:6;60150;60239:8;:24::i;:::-;60227:36;;60278:13;;60290:1;;60278:13;;;;60290:1;;60278:13;:::i;:::-;;;;;-1:-1:-1;60350:12:0;;;;;;;;;;;;;60324:14;;60339:34;;60350:12;;;;;60363:5;:1;60367;60363:5;:::i;:::-;60350:19;;;;;;;;:::i;60339:34::-;60324:50;;;;;;;;;:::i;:::-;;;;;60308:6;:13;;:66;;;;60405:14;60420:34;60431:12;;;;;;;;;;;;;;;;;60444:5;:1;60448;60444:5;:::i;:::-;60431:19;;;;;;;;:::i;60420:34::-;60405:50;;;;;;;;;:::i;:::-;;;;;60389:6;:13;;:66;;;;60486:14;60501:34;60512:12;;;;;;;;;;;;;;;;;60525:5;:1;60529;60525:5;:::i;:::-;60512:19;;;;;;;;:::i;60501:34::-;60486:50;;;;;;;;;:::i;:::-;;;;;60470:6;:13;;:66;;;;60567:14;60582:34;60593:12;;;;;;;;;;;;;;;;;60606:5;:1;60610;60606:5;:::i;:::-;60593:19;;;;;;;;:::i;60582:34::-;60567:50;;;;;;;;;:::i;:::-;;;;;60551:13;;;:66;60644:24;60653:6;60551;60644:8;:24::i;:::-;60632:9;;;:36;60683:13;;60695:1;;60683:13;;;;60695:1;;60683:13;:::i;:::-;;;;;-1:-1:-1;60755:12:0;;;;;;;;;;;;;60729:14;;60744:34;;60755:12;;;;;60768:5;:1;60772;60768:5;:::i;60744:34::-;60729:50;;;;;;;;;:::i;:::-;;;;;60713:6;:13;;:66;;;;60810:14;60825:34;60836:12;;;;;;;;;;;;;;;;;60849:5;:1;60853;60849:5;:::i;60825:34::-;60810:50;;;;;;;;;:::i;:::-;;;;;60794:6;:13;;:66;;;;60891:14;60906:34;60917:12;;;;;;;;;;;;;;;;;60930:5;:1;60934;60930:5;:::i;60906:34::-;60891:50;;;;;;;;;:::i;:::-;;;;;60875:6;:13;;:66;;;;60972:14;60987:34;60998:12;;;;;;;;;;;;;;;;;61011:5;:1;61015;61011:5;:::i;60987:34::-;60972:50;;;;;;;;;:::i;:::-;;;;;60956:13;;;:66;61049:24;61058:6;60956;61049:8;:24::i;:::-;61037:9;;;:36;61088:13;;61100:1;;61088:13;;;;61100:1;;61088:13;:::i;:::-;;;;;-1:-1:-1;61160:12:0;;;;;;;;;;;;;61134:14;;61149:34;;61160:12;;;;;61173:5;:1;61177;61173:5;:::i;61149:34::-;61134:50;;;;;;;;;:::i;:::-;;;;;61118:6;:13;;:66;;;;61215:14;61230:34;61241:12;;;;;;;;;;;;;;;;;61254:5;:1;61258;61254:5;:::i;61230:34::-;61215:50;;;;;;;;;:::i;:::-;;;;;61199:6;:13;;:66;;;;61296:14;61311:34;61322:12;;;;;;;;;;;;;;;;;61335:5;:1;61339;61335:5;:::i;61311:34::-;61296:50;;;;;;;;;:::i;:::-;;;;;61280:6;:13;;:66;;;;61377:14;61392:34;61403:12;;;;;;;;;;;;;;;;;61416:5;:1;61420;61416:5;:::i;61392:34::-;61377:50;;;;;;;;;:::i;:::-;;;;;61361:13;;;:66;61454:24;61463:6;61361;61454:8;:24::i;:::-;61442:9;;;:36;61493:13;;61505:1;;61493:13;;;;61505:1;;61493:13;:::i;:::-;;;;;-1:-1:-1;61565:12:0;;;;;;;;;;;;;61539:14;;61554:34;;61565:12;;;;;61578:5;:1;61582;61578:5;:::i;61554:34::-;61539:50;;;;;;;;;:::i;:::-;;;;;61523:6;:13;;:66;;;;61620:14;61635:34;61646:12;;;;;;;;;;;;;;;;;61659:5;:1;61663;61659:5;:::i;61635:34::-;61620:50;;;;;;;;;:::i;:::-;;;;;61604:6;:13;;:66;;;;61701:14;61716:34;61727:12;;;;;;;;;;;;;;;;;61740:5;:1;61744;61740:5;:::i;61716:34::-;61701:50;;;;;;;;;:::i;:::-;;;;;61685:6;:13;;:66;;;;61782:14;61797:34;61808:12;;;;;;;;;;;;;;;;;61821:5;:1;61825;61821:5;:::i;61797:34::-;61782:50;;;;;;;;;:::i;:::-;;;;;61766:13;;;:66;61859:24;61868:6;61766;61859:8;:24::i;:::-;61847:9;;;:36;61898:13;;61854:1;;61898:13;;;;61854:1;;61898:13;:::i;:::-;;;;;-1:-1:-1;61970:12:0;;;;;;;;;;;;;61944:14;;61959:34;;61970:12;;;;;61983:5;:1;61987;61983:5;:::i;61959:34::-;61944:50;;;;;;;;;:::i;:::-;;;;;61928:6;:13;;:66;;;;62025:14;62040:34;62051:12;;;;;;;;;;;;;;;;;62064:5;:1;62068;62064:5;:::i;62040:34::-;62025:50;;;;;;;;;:::i;:::-;;;;;62009:6;:13;;:66;;;;62106:14;62121:34;62132:12;;;;;;;;;;;;;;;;;62145:5;:1;62149;62145:5;:::i;62121:34::-;62106:50;;;;;;;;;:::i;:::-;;;;;62090:6;:13;;:66;;;;62187:14;62202:34;62213:12;;;;;;;;;;;;;;;;;62226:5;:1;62230;62226:5;:::i;62202:34::-;62187:50;;;;;;;;;:::i;:::-;;;;;62171:13;;;:66;62264:24;62273:6;62171;62264:8;:24::i;:::-;62252:9;;;:36;62303:13;;62315:1;;62303:13;;;;62315:1;;62303:13;:::i;:::-;;;;;-1:-1:-1;62375:12:0;;;;;;;;;;;;;62349:14;;62364:34;;62375:12;;;;;62388:5;:1;62392;62388:5;:::i;62364:34::-;62349:50;;;;;;;;;:::i;:::-;;;;;62333:6;:13;;:66;;;;62430:14;62445:34;62456:12;;;;;;;;;;;;;;;;;62469:5;:1;62473;62469:5;:::i;62445:34::-;62430:50;;;;;;;;;:::i;:::-;;;;;62414:6;:13;;:66;;;;62511:14;62526:34;62537:12;;;;;;;;;;;;;;;;;62550:5;:1;62554;62550:5;:::i;62526:34::-;62511:50;;;;;;;;;:::i;:::-;;;;;62495:6;:13;;:66;;;;62592:14;62607:34;62618:12;;;;;;;;;;;;;;;;;62631:5;:1;62635;62631:5;:::i;62607:34::-;62592:50;;;;;;;;;:::i;:::-;;;;;62576:13;;;:66;62669:24;62678:6;62576;62669:8;:24::i;:::-;62657:9;;;:36;62708:13;;62720:1;;62708:13;;;;62720:1;;62708:13;:::i;:::-;;;;;-1:-1:-1;62780:12:0;;;;;;;;;;;;;62754:14;;62769:34;;62780:12;;;;;62793:5;:1;62797;62793:5;:::i;62769:34::-;62754:50;;;;;;;;;:::i;:::-;;;;;62738:6;:13;;:66;;;;62835:14;62850:34;62861:12;;;;;;;;;;;;;;;;;62874:5;:1;62878;62874:5;:::i;62850:34::-;62835:50;;;;;;;;;:::i;:::-;;;;;62819:6;:13;;:66;;;;62916:14;62931:34;62942:12;;;;;;;;;;;;;;;;;62955:5;:1;62959;62955:5;:::i;62931:34::-;62916:50;;;;;;;;;:::i;:::-;;;;;62900:6;:13;;:66;;;;62997:14;63012:34;63023:12;;;;;;;;;;;;;;;;;63036:5;:1;63040;63036:5;:::i;63012:34::-;62997:50;;;;;;;;;:::i;:::-;;;;;62981:13;;;:66;63074:24;63083:6;62981;63074:8;:24::i;:::-;63062:9;;;:36;63113:13;;63125:1;;63113:13;;;;63125:1;;63113:13;:::i;:::-;;;;;-1:-1:-1;63190:9:0;;;63201;;;;63212;;;;;63223;;;;63234;;;;63245;;;;63256;;;;63267;;;;63162:115;;;;63179:9;;63190;;63201;63267;63162:115;;:::i;:::-;;;;;;;;;;;;;63143:135;;63308:2;63296:6;:8;;;:14;;;63293:98;;63342:1;63331:12;;63362:8;;;:13;;63374:1;;63362:8;:13;;63374:1;;63362:13;:::i;:::-;;;;;-1:-1:-1;63293:98:0;59896:6;59901:1;59896:6;;:::i;:::-;;;59871:3531;;;;63445:9;63428:79;;;;;;;;:::i;:::-;;;;;;;;;;;;;63414:94;;;;;;;59145:4371;:::o;54015:554::-;;;;;;;;;;;;;;;;;;;:::o;7747:201::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7836:22:0;::::1;7828:73;;;::::0;-1:-1:-1;;;7828:73:0;;15303:2:1;7828:73:0::1;::::0;::::1;15285:21:1::0;15342:2;15322:18;;;15315:30;15381:34;15361:18;;;15354:62;-1:-1:-1;;;15432:18:1;;;15425:36;15478:19;;7828:73:0::1;15101:402:1::0;7828:73:0::1;7912:28;7931:8;7912:18;:28::i;27948:305::-:0;28050:4;-1:-1:-1;;;;;;28087:40:0;;-1:-1:-1;;;28087:40:0;;:105;;-1:-1:-1;;;;;;;28144:48:0;;-1:-1:-1;;;28144:48:0;28087:105;:158;;;-1:-1:-1;;;;;;;;;;19731:40:0;;;28209:36;19622:157;33706:127;33771:4;33795:16;;;:7;:16;;;;;;-1:-1:-1;;;;;33795:16:0;:30;;;33706:127::o;37852:174::-;37927:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;37927:29:0;-1:-1:-1;;;;;37927:29:0;;;;;;;;:24;;37981:23;37927:24;37981:14;:23::i;:::-;-1:-1:-1;;;;;37972:46:0;;;;;;;;;;;37852:174;;:::o;35684:439::-;-1:-1:-1;;;;;35764:16:0;;35756:61;;;;-1:-1:-1;;;35756:61:0;;20349:2:1;35756:61:0;;;20331:21:1;;;20368:18;;;20361:30;20427:34;20407:18;;;20400:62;20479:18;;35756:61:0;20147:356:1;35756:61:0;35837:16;35845:7;35837;:16::i;:::-;35836:17;35828:58;;;;-1:-1:-1;;;35828:58:0;;16116:2:1;35828:58:0;;;16098:21:1;16155:2;16135:18;;;16128:30;16194;16174:18;;;16167:58;16242:18;;35828:58:0;15914:352:1;35828:58:0;35899:45;35928:1;35932:2;35936:7;35899:20;:45::i;:::-;-1:-1:-1;;;;;35957:13:0;;;;;;:9;:13;;;;;:18;;35974:1;;35957:13;:18;;35974:1;;35957:18;:::i;:::-;;;;-1:-1:-1;;35986:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;35986:21:0;-1:-1:-1;;;;;35986:21:0;;;;;;;;36025:33;;35986:16;;;36025:33;;35986:16;;36025:33;55637:22:::1;55555:112:::0;:::o;34000:348::-;34093:4;34118:16;34126:7;34118;:16::i;:::-;34110:73;;;;-1:-1:-1;;;34110:73:0;;17576:2:1;34110:73:0;;;17558:21:1;17615:2;17595:18;;;17588:30;17654:34;17634:18;;;17627:62;-1:-1:-1;;;17705:18:1;;;17698:42;17757:19;;34110:73:0;17374:408:1;34110:73:0;34194:13;34210:23;34225:7;34210:14;:23::i;:::-;34194:39;;34263:5;-1:-1:-1;;;;;34252:16:0;:7;-1:-1:-1;;;;;34252:16:0;;:51;;;;34296:7;-1:-1:-1;;;;;34272:31:0;:20;34284:7;34272:11;:20::i;:::-;-1:-1:-1;;;;;34272:31:0;;34252:51;:87;;;-1:-1:-1;;;;;;31092:25:0;;;31068:4;31092:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;34307:32;34244:96;34000:348;-1:-1:-1;;;;34000:348:0:o;37109:625::-;37268:4;-1:-1:-1;;;;;37241:31:0;:23;37256:7;37241:14;:23::i;:::-;-1:-1:-1;;;;;37241:31:0;;37233:81;;;;-1:-1:-1;;;37233:81:0;;15710:2:1;37233:81:0;;;15692:21:1;15749:2;15729:18;;;15722:30;15788:34;15768:18;;;15761:62;-1:-1:-1;;;15839:18:1;;;15832:35;15884:19;;37233:81:0;15508:401:1;37233:81:0;-1:-1:-1;;;;;37333:16:0;;37325:65;;;;-1:-1:-1;;;37325:65:0;;16473:2:1;37325:65:0;;;16455:21:1;16512:2;16492:18;;;16485:30;16551:34;16531:18;;;16524:62;-1:-1:-1;;;16602:18:1;;;16595:34;16646:19;;37325:65:0;16271:400:1;37325:65:0;37403:39;37424:4;37430:2;37434:7;37403:20;:39::i;:::-;37507:29;37524:1;37528:7;37507:8;:29::i;:::-;-1:-1:-1;;;;;37549:15:0;;;;;;:9;:15;;;;;:20;;37568:1;;37549:15;:20;;37568:1;;37549:20;:::i;:::-;;;;-1:-1:-1;;;;;;;37580:13:0;;;;;;:9;:13;;;;;:18;;37597:1;;37580:13;:18;;37597:1;;37580:18;:::i;:::-;;;;-1:-1:-1;;37609:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;37609:21:0;-1:-1:-1;;;;;37609:21:0;;;;;;;;;37648:27;;37609:16;;37648:27;;;;;;;30045:341;29975:411;;:::o;8108:191::-;8201:6;;;-1:-1:-1;;;;;8218:17:0;;;-1:-1:-1;;;;;;8218:17:0;;;;;;;8251:40;;8201:6;;;8218:17;8201:6;;8251:40;;8182:16;;8251:40;8171:128;8108:191;:::o;38168:315::-;38323:8;-1:-1:-1;;;;;38314:17:0;:5;-1:-1:-1;;;;;38314:17:0;;;38306:55;;;;-1:-1:-1;;;38306:55:0;;16878:2:1;38306:55:0;;;16860:21:1;16917:2;16897:18;;;16890:30;16956:27;16936:18;;;16929:55;17001:18;;38306:55:0;16676:349:1;38306:55:0;-1:-1:-1;;;;;38372:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;38372:46:0;;;;;;;;;;38434:41;;13772::1;;;38434::0;;13745:18:1;38434:41:0;;;;;;;38168:315;;;:::o;33078:::-;33235:28;33245:4;33251:2;33255:7;33235:9;:28::i;:::-;33282:48;33305:4;33311:2;33315:7;33324:5;33282:22;:48::i;:::-;33274:111;;;;-1:-1:-1;;;33274:111:0;;;;;;;:::i;29237:334::-;29310:13;29344:16;29352:7;29344;:16::i;:::-;29336:76;;;;-1:-1:-1;;;29336:76:0;;;;;;;:::i;:::-;29425:21;29449:10;:8;:10::i;:::-;29425:34;;29501:1;29483:7;29477:21;:25;:86;;;;;;;;;;;;;;;;;29529:7;29538:18;:7;:16;:18::i;:::-;29512:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29477:86;29470:93;29237:334;-1:-1:-1;;;29237:334:0:o;58142:625::-;58231:13;58318:3;:10;;;58339:6;58346:3;:5;;;58339:13;;;;;;;;;:::i;:::-;;;;;58363:6;58370:3;:5;;;58363:13;;;;;;;;;:::i;:::-;;;;;58415:10;;;;58443:5;;58436:6;;58443:9;;58451:1;58443:9;:::i;:::-;58436:17;;;;;;;;;:::i;:::-;;;;;58464:6;58471:3;:5;;;58464:13;;;;;;;;;:::i;:::-;;;;;58557:10;;;;58585:5;;58578:6;;58585:9;;58593:1;58585:9;:::i;:::-;58578:17;;;;;;;;;:::i;:::-;;;;;58606:6;58613:3;:5;;;58606:13;;;;;;;;;:::i;:::-;;;;;58662:10;;;;58690:5;;58683:6;;58690:9;;58698:1;58690:9;:::i;:::-;58683:17;;;;;;;;;:::i;:::-;;;;;58711:6;58718:3;:5;;;58711:13;;;;;;;;;:::i;:::-;;;;;58506:240;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;58506:240:0;;;;;;;;;;58271:487;;;;;;;;58506:240;58271:487;;:::i;:::-;;;;;;;;;;;;;58257:502;;58142:625;;;;:::o;43749:589::-;-1:-1:-1;;;;;43955:18:0;;43951:187;;43990:40;44022:7;45165:10;:17;;45138:24;;;;:15;:24;;;;;:44;;;45193:24;;;;;;;;;;;;45061:164;43990:40;43951:187;;;44060:2;-1:-1:-1;;;;;44052:10:0;:4;-1:-1:-1;;;;;44052:10:0;;44048:90;;44079:47;44112:4;44118:7;44079:32;:47::i;:::-;-1:-1:-1;;;;;44152:16:0;;44148:183;;44185:45;44222:7;44185:36;:45::i;44148:183::-;44258:4;-1:-1:-1;;;;;44252:10:0;:2;-1:-1:-1;;;;;44252:10:0;;44248:83;;44279:40;44307:2;44311:7;44279:27;:40::i;39048:799::-;39203:4;-1:-1:-1;;;;;39224:13:0;;9834:19;:23;39220:620;;39260:72;;-1:-1:-1;;;39260:72:0;;-1:-1:-1;;;;;39260:36:0;;;;;:72;;5642:10;;39311:4;;39317:7;;39326:5;;39260:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39260:72:0;;;;;;;;-1:-1:-1;;39260:72:0;;;;;;;;;;;;:::i;:::-;;;39256:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39502:13:0;;39498:272;;39545:60;;-1:-1:-1;;;39545:60:0;;;;;;;:::i;39498:272::-;39720:6;39714:13;39705:6;39701:2;39697:15;39690:38;39256:529;-1:-1:-1;;;;;;39383:51:0;-1:-1:-1;;;39383:51:0;;-1:-1:-1;39376:58:0;;39220:620;-1:-1:-1;39824:4:0;39048:799;;;;;;:::o;55815:111::-;55875:13;55908:10;55901:17;;;;;:::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;3626:17;;;;;;;;:::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;;45852:988;46118:22;46168:1;46143:22;46160:4;46143:16;:22::i;:::-;:26;;;;:::i;:::-;46180:18;46201:26;;;:17;:26;;;;;;46118:51;;-1:-1:-1;46334:28:0;;;46330:328;;-1:-1:-1;;;;;46401:18:0;;46379:19;46401:18;;;:12;:18;;;;;;;;:34;;;;;;;;;46452:30;;;;;;:44;;;46569:30;;:17;:30;;;;;:43;;;46330:328;-1:-1:-1;46754:26:0;;;;:17;:26;;;;;;;;46747:33;;;-1:-1:-1;;;;;46798:18:0;;;;;:12;:18;;;;;:34;;;;;;;46791:41;45852:988::o;47135:1079::-;47413:10;:17;47388:22;;47413:21;;47433:1;;47413:21;:::i;:::-;47445:18;47466:24;;;:15;:24;;;;;;47839:10;:26;;47388:46;;-1:-1:-1;47466:24:0;;47388:46;;47839:26;;;;;;:::i;:::-;;;;;;;;;47817:48;;47903:11;47878:10;47889;47878:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;47983:28;;;:15;:28;;;;;;;:41;;;48155:24;;;;;48148:31;48190:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;47206:1008;;;47135:1079;:::o;44639:221::-;44724:14;44741:20;44758:2;44741:16;:20::i;:::-;-1:-1:-1;;;;;44772:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;44817:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;44639:221:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:70;;813:1;810;803:12;747:70;650:173;;;:::o;828:160::-;893:20;;949:13;;942:21;932:32;;922:60;;978:1;975;968:12;993:186;1052:6;1105:2;1093:9;1084:7;1080:23;1076:32;1073:52;;;1121:1;1118;1111:12;1073:52;1144:29;1163:9;1144:29;:::i;1184:260::-;1252:6;1260;1313:2;1301:9;1292:7;1288:23;1284:32;1281:52;;;1329:1;1326;1319:12;1281:52;1352:29;1371:9;1352:29;:::i;:::-;1342:39;;1400:38;1434:2;1423:9;1419:18;1400:38;:::i;:::-;1390:48;;1184:260;;;;;:::o;1449:328::-;1526:6;1534;1542;1595:2;1583:9;1574:7;1570:23;1566:32;1563:52;;;1611:1;1608;1601:12;1563:52;1634:29;1653:9;1634:29;:::i;:::-;1624:39;;1682:38;1716:2;1705:9;1701:18;1682:38;:::i;:::-;1672:48;;1767:2;1756:9;1752:18;1739:32;1729:42;;1449:328;;;;;:::o;1782:666::-;1877:6;1885;1893;1901;1954:3;1942:9;1933:7;1929:23;1925:33;1922:53;;;1971:1;1968;1961:12;1922:53;1994:29;2013:9;1994:29;:::i;:::-;1984:39;;2042:38;2076:2;2065:9;2061:18;2042:38;:::i;:::-;2032:48;;2127:2;2116:9;2112:18;2099:32;2089:42;;2182:2;2171:9;2167:18;2154:32;2209:18;2201:6;2198:30;2195:50;;;2241:1;2238;2231:12;2195:50;2264:22;;2317:4;2309:13;;2305:27;-1:-1:-1;2295:55:1;;2346:1;2343;2336:12;2295:55;2369:73;2434:7;2429:2;2416:16;2411:2;2407;2403:11;2369:73;:::i;:::-;2359:83;;;1782:666;;;;;;;:::o;2453:254::-;2518:6;2526;2579:2;2567:9;2558:7;2554:23;2550:32;2547:52;;;2595:1;2592;2585:12;2547:52;2618:29;2637:9;2618:29;:::i;:::-;2608:39;;2666:35;2697:2;2686:9;2682:18;2666:35;:::i;2712:254::-;2780:6;2788;2841:2;2829:9;2820:7;2816:23;2812:32;2809:52;;;2857:1;2854;2847:12;2809:52;2880:29;2899:9;2880:29;:::i;:::-;2870:39;2956:2;2941:18;;;;2928:32;;-1:-1:-1;;;2712:254:1:o;2971:180::-;3027:6;3080:2;3068:9;3059:7;3055:23;3051:32;3048:52;;;3096:1;3093;3086:12;3048:52;3119:26;3135:9;3119:26;:::i;3156:444::-;3221:6;3229;3282:2;3270:9;3261:7;3257:23;3253:32;3250:52;;;3298:1;3295;3288:12;3250:52;3324:23;;-1:-1:-1;;;;;;3376:25:1;;3366:36;;3356:64;;3416:1;3413;3406:12;3356:64;3439:5;-1:-1:-1;3496:2:1;3481:18;;3468:32;3544:4;3531:18;;3519:31;;3509:59;;3564:1;3561;3554:12;3509:59;3587:7;3577:17;;;3156:444;;;;;:::o;3605:245::-;3663:6;3716:2;3704:9;3695:7;3691:23;3687:32;3684:52;;;3732:1;3729;3722:12;3684:52;3771:9;3758:23;3790:30;3814:5;3790:30;:::i;3855:249::-;3924:6;3977:2;3965:9;3956:7;3952:23;3948:32;3945:52;;;3993:1;3990;3983:12;3945:52;4025:9;4019:16;4044:30;4068:5;4044:30;:::i;4109:450::-;4178:6;4231:2;4219:9;4210:7;4206:23;4202:32;4199:52;;;4247:1;4244;4237:12;4199:52;4287:9;4274:23;4320:18;4312:6;4309:30;4306:50;;;4352:1;4349;4342:12;4306:50;4375:22;;4428:4;4420:13;;4416:27;-1:-1:-1;4406:55:1;;4457:1;4454;4447:12;4406:55;4480:73;4545:7;4540:2;4527:16;4522:2;4518;4514:11;4480:73;:::i;4564:180::-;4623:6;4676:2;4664:9;4655:7;4651:23;4647:32;4644:52;;;4692:1;4689;4682:12;4644:52;-1:-1:-1;4715:23:1;;4564:180;-1:-1:-1;4564:180:1:o;4749:257::-;4790:3;4828:5;4822:12;4855:6;4850:3;4843:19;4871:63;4927:6;4920:4;4915:3;4911:14;4904:4;4897:5;4893:16;4871:63;:::i;:::-;4988:2;4967:15;-1:-1:-1;;4963:29:1;4954:39;;;;4995:4;4950:50;;4749:257;-1:-1:-1;;4749:257:1:o;5011:185::-;5053:3;5091:5;5085:12;5106:52;5151:6;5146:3;5139:4;5132:5;5128:16;5106:52;:::i;:::-;5174:16;;;;;5011:185;-1:-1:-1;;5011:185:1:o;5563:470::-;5742:3;5780:6;5774:13;5796:53;5842:6;5837:3;5830:4;5822:6;5818:17;5796:53;:::i;:::-;5912:13;;5871:16;;;;5934:57;5912:13;5871:16;5968:4;5956:17;;5934:57;:::i;:::-;6007:20;;5563:470;-1:-1:-1;;;;5563:470:1:o;6038:1776::-;6553:3;6591:6;6585:13;6607:53;6653:6;6648:3;6641:4;6633:6;6629:17;6607:53;:::i;:::-;6691:6;6685:13;6707:68;6766:8;6757:6;6752:3;6748:16;6741:4;6733:6;6729:17;6707:68;:::i;:::-;6853:13;;6801:16;;;6797:31;;6875:57;6853:13;6797:31;6909:4;6897:17;;6875:57;:::i;:::-;6999:13;;6954:20;;;7021:57;6999:13;6954:20;7055:4;7043:17;;7021:57;:::i;:::-;7109:6;7103:13;7125:72;7188:8;7177;7170:5;7166:20;7159:4;7151:6;7147:17;7125:72;:::i;:::-;7279:13;;7223:20;;;;7219:35;;7301:57;7279:13;7219:35;7335:4;7323:17;;7301:57;:::i;:::-;7389:6;7383:13;7405:72;7468:8;7457;7450:5;7446:20;7439:4;7431:6;7427:17;7405:72;:::i;:::-;7559:13;;7503:20;;;;7499:35;;7581:57;7559:13;7499:35;7615:4;7603:17;;7581:57;:::i;:::-;7669:6;7663:13;7685:72;7748:8;7737;7730:5;7726:20;7719:4;7711:6;7707:17;7685:72;:::i;:::-;7777:20;;7773:35;;6038:1776;-1:-1:-1;;;;;;;;;;;6038:1776:1:o;7819:524::-;8051:3;8089:6;8083:13;8105:53;8151:6;8146:3;8139:4;8131:6;8127:17;8105:53;:::i;:::-;8219:34;8180:16;;8205:49;;;-1:-1:-1;;;;8281:4:1;8270:16;;8263:44;8334:2;8323:14;;7819:524;-1:-1:-1;7819:524:1:o;8348:2168::-;9527:3;-1:-1:-1;;;9590:2:1;9585:3;9578:15;9622:6;9616:13;9638:62;9693:6;9688:2;9683:3;9679:12;9672:4;9664:6;9660:17;9638:62;:::i;:::-;9728:6;9723:3;9719:16;9709:26;;-1:-1:-1;;;9790:2:1;9785;9781;9777:11;9770:23;9824:6;9818:13;9840:63;9894:8;9889:2;9885;9881:11;9874:4;9866:6;9862:17;9840:63;:::i;:::-;-1:-1:-1;;;9963:2:1;9922:17;;;;9955:11;;;9948:28;10001:13;;10023:63;10001:13;10072:2;10064:11;;10057:4;10045:17;;10023:63;:::i;:::-;10113:8;10109:2;10105:17;10095:27;;;-1:-1:-1;;;10146:2:1;10142;10138:11;10131:26;10186:2;10181;10177;10173:11;10166:23;10220:6;10214:13;10198:29;;10236:63;10290:8;10285:2;10281;10277:11;10270:4;10262:6;10258:17;10236:63;:::i;:::-;10326:8;10322:2;10318:17;10308:27;;10364:2;10359;10355;10351:11;10344:23;;;10383:127;10413:96;10439:69;10469:38;10503:2;10499;10495:11;10487:6;10469:38;:::i;:::-;-1:-1:-1;;;5266:20:1;;5311:1;5302:11;;5201:118;10439:69;10431:6;10413:96;:::i;:::-;-1:-1:-1;;;5507:18:1;;5550:1;5541:11;;5442:116;10383:127;10376:134;8348:2168;-1:-1:-1;;;;;;;;;8348:2168:1:o;10521:2195::-;11748:3;-1:-1:-1;;;11811:2:1;11806:3;11799:15;11843:6;11837:13;11859:62;11914:6;11909:2;11904:3;11900:12;11893:4;11885:6;11881:17;11859:62;:::i;:::-;-1:-1:-1;;;11980:2:1;11940:16;;;11972:11;;;11965:28;12018:13;;12040:63;12018:13;12089:2;12081:11;;12074:4;12062:17;;12040:63;:::i;:::-;-1:-1:-1;;;12163:2:1;12122:17;;;;12155:11;;;12148:28;12201:13;;12223:63;12201:13;12272:2;12264:11;;12257:4;12245:17;;12223:63;:::i;:::-;12313:8;12309:2;12305:17;12295:27;;;-1:-1:-1;;;12346:2:1;12342;12338:11;12331:26;12386:2;12381;12377;12373:11;12366:23;12420:6;12414:13;12398:29;;12436:63;12490:8;12485:2;12481;12477:11;12470:4;12462:6;12458:17;12436:63;:::i;:::-;12515:195;12541:168;12571:137;12597:110;12627:79;12653:52;12701:2;12690:8;12686:2;12682:17;12678:26;-1:-1:-1;;;5384:20:1;;5429:1;5420:11;;5324:113;12653:52;12645:6;12627:79;:::i;12597:110::-;12589:6;12571:137;:::i;12515:195::-;12508:202;10521:2195;-1:-1:-1;;;;;;;;;;;10521:2195:1:o;13139:488::-;-1:-1:-1;;;;;13408:15:1;;;13390:34;;13460:15;;13455:2;13440:18;;13433:43;13507:2;13492:18;;13485:34;;;13555:3;13550:2;13535:18;;13528:31;;;13333:4;;13576:45;;13601:19;;13593:6;13576:45;:::i;:::-;13568:53;13139:488;-1:-1:-1;;;;;;13139:488:1:o;13824:217::-;13971:2;13960:9;13953:21;13934:4;13991:44;14031:2;14020:9;14016:18;14008:6;13991:44;:::i;14682:414::-;14884:2;14866:21;;;14923:2;14903:18;;;14896:30;14962:34;14957:2;14942:18;;14935:62;-1:-1:-1;;;15028:2:1;15013:18;;15006:48;15086:3;15071:19;;14682:414::o;20921:356::-;21123:2;21105:21;;;21142:18;;;21135:30;21201:34;21196:2;21181:18;;21174:62;21268:2;21253:18;;20921:356::o;21630:411::-;21832:2;21814:21;;;21871:2;21851:18;;;21844:30;21910:34;21905:2;21890:18;;21883:62;-1:-1:-1;;;21976:2:1;21961:18;;21954:45;22031:3;22016:19;;21630:411::o;22799:413::-;23001:2;22983:21;;;23040:2;23020:18;;;23013:30;23079:34;23074:2;23059:18;;23052:62;-1:-1:-1;;;23145:2:1;23130:18;;23123:47;23202:3;23187:19;;22799:413::o;24036:355::-;24238:2;24220:21;;;24277:2;24257:18;;;24250:30;24316:33;24311:2;24296:18;;24289:61;24382:2;24367:18;;24036:355::o;25628:128::-;25668:3;25699:1;25695:6;25692:1;25689:13;25686:39;;;25705:18;;:::i;:::-;-1:-1:-1;25741:9:1;;25628:128::o;25761:204::-;25799:3;25835:4;25832:1;25828:12;25867:4;25864:1;25860:12;25902:3;25896:4;25892:14;25887:3;25884:23;25881:49;;;25910:18;;:::i;:::-;25946:13;;25761:204;-1:-1:-1;;;25761:204:1:o;25970:120::-;26010:1;26036;26026:35;;26041:18;;:::i;:::-;-1:-1:-1;26075:9:1;;25970:120::o;26095:168::-;26135:7;26201:1;26197;26193:6;26189:14;26186:1;26183:21;26178:1;26171:9;26164:17;26160:45;26157:71;;;26208:18;;:::i;:::-;-1:-1:-1;26248:9:1;;26095:168::o;26268:125::-;26308:4;26336:1;26333;26330:8;26327:34;;;26341:18;;:::i;:::-;-1:-1:-1;26378:9:1;;26268:125::o;26398:258::-;26470:1;26480:113;26494:6;26491:1;26488:13;26480:113;;;26570:11;;;26564:18;26551:11;;;26544:39;26516:2;26509:10;26480:113;;;26611:6;26608:1;26605:13;26602:48;;;-1:-1:-1;;26646:1:1;26628:16;;26621:27;26398:258::o;26661:380::-;26740:1;26736:12;;;;26783;;;26804:61;;26858:4;26850:6;26846:17;26836:27;;26804:61;26911:2;26903:6;26900:14;26880:18;26877:38;26874:161;;;26957:10;26952:3;26948:20;26945:1;26938:31;26992:4;26989:1;26982:15;27020:4;27017:1;27010:15;26874:161;;26661:380;;;:::o;27046:135::-;27085:3;-1:-1:-1;;27106:17:1;;27103:43;;;27126:18;;:::i;:::-;-1:-1:-1;27173:1:1;27162:13;;27046:135::o;27186:112::-;27218:1;27244;27234:35;;27249:18;;:::i;:::-;-1:-1:-1;27283:9:1;;27186:112::o;27303:127::-;27364:10;27359:3;27355:20;27352:1;27345:31;27395:4;27392:1;27385:15;27419:4;27416:1;27409:15;27435:127;27496:10;27491:3;27487:20;27484:1;27477:31;27527:4;27524:1;27517:15;27551:4;27548:1;27541:15;27567:127;27628:10;27623:3;27619:20;27616:1;27609:31;27659:4;27656:1;27649:15;27683:4;27680:1;27673:15;27699:127;27760:10;27755:3;27751:20;27748:1;27741:31;27791:4;27788:1;27781:15;27815:4;27812:1;27805:15;27831:127;27892:10;27887:3;27883:20;27880:1;27873:31;27923:4;27920:1;27913:15;27947:4;27944:1;27937:15;27963:131;-1:-1:-1;;;;;;28037:32:1;;28027:43;;28017:71;;28084:1;28081;28074:12
Swarm Source
ipfs://a9fefcaa0b4ff098224a61ab175fc18f1f3dcf93853f472d8b45308169a45c14
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.