Feature Tip: Add private address tag to any address under My Name Tag !
Overview
TokenID
168
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
LowEffortSmileeez
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-25 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Counters.sol pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/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/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 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 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/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 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 { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_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); } /** * @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); } /** * @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 of token that is not own"); 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); } /** * @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 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 {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol pragma solidity ^0.8.0; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @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 override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol pragma solidity ^0.8.0; /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be irreversibly burned (destroyed). */ abstract contract ERC721Burnable is Context, ERC721 { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved"); _burn(tokenId); } } // File: @openzeppelin/contracts/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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/security/Pausable.sol pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/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 tokenId); /** * @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/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: @openzeppelin/contracts/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/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/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: LowEffortSmileeez.sol contract OwnableDelegateProxy {} contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; } contract LowEffortSmileeez is ERC721, ERC721Enumerable, ERC721URIStorage, ERC721Burnable, Pausable, Ownable { using Counters for Counters.Counter; uint256 public basePrice = 0.069 ether; uint256 public supplyCap = 10000; uint8 public mintCap = 20; mapping(address => uint8) minterOutput; address proxyRegistryAddress = 0xa5409ec958C83C3f309868babACA7c86DCB077c1; Counters.Counter private _tokenIdCounter; constructor() ERC721("Low Effort Smileeez", "SMLE") { } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } function withdraw() public payable onlyOwner { require(payable(msg.sender).send(address(this).balance)); } function minterQuantity(address minter) public view returns (uint8) { return minterOutput[minter]; } function minterPrice(address minter) public view returns (uint256) { // Free for owner if (minter == owner()) { return 0.0 ether; } // First mint is free for everyone if (minterOutput[minter] == 0) { return 0.0 ether; } return basePrice; } function minterPriceExtended(address minter, uint8 qty) public view returns (uint256) { uint256 networkPrice = basePrice; // Free for owner if (minter == owner()) { return 0.0 ether; } // First mint is free for everyone if (minterOutput[minter] == 0) { return (qty - 1) * networkPrice; } return qty * networkPrice; } function mint(uint8 qty, string[] memory cids) public payable { require(qty <= mintCap, "Maximum allowable mint quanity is 20"); require(qty > 0, "Mint quantity must be non-zero"); require(totalSupply() + qty < supplyCap, "Maximum supply reached"); require(msg.value >= minterPriceExtended(msg.sender, qty), "Insufficient payable value"); for (uint8 i = 0; i<qty; i++) { uint256 newId = _tokenIdCounter.current(); _safeMint(msg.sender, newId); _setTokenURI(newId, string(abi.encodePacked("https://gateway.pinata.cloud/ipfs/", cids[i]))); _tokenIdCounter.increment(); minterOutput[msg.sender] = minterOutput[msg.sender] + 1; } } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal whenNotPaused override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } // Override isApprovedForAll to whitelist user's OpenSea proxy accounts to enable gas-less listings. function isApprovedForAll(address owner, address operator) public view override returns (bool) { // Whitelist OpenSea proxy contract for easy trading. ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress); if (address(proxyRegistry.proxies(owner)) == operator) { return true; } return super.isApprovedForAll(owner, operator); } function getChainId() private view returns (uint256 chainId) { assembly { chainId := chainid() } } // Remaining definitions are overrides required by Solidity. function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) { super._burn(tokenId); } function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { return super.tokenURI(tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"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":[],"name":"basePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"uint8","name":"qty","type":"uint8"},{"internalType":"string[]","name":"cids","type":"string[]"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintCap","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"minterPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"},{"internalType":"uint8","name":"qty","type":"uint8"}],"name":"minterPriceExtended","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"minterQuantity","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":[],"name":"supplyCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"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":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405266f5232269808000600c55612710600d556014600e60006101000a81548160ff021916908360ff16021790555073a5409ec958c83c3f309868babaca7c86dcb077c1601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200009357600080fd5b506040518060400160405280601381526020017f4c6f77204566666f727420536d696c6565657a000000000000000000000000008152506040518060400160405280600481526020017f534d4c450000000000000000000000000000000000000000000000000000000081525081600090805190602001906200011892919062000243565b5080600190805190602001906200013192919062000243565b5050506000600b60006101000a81548160ff0219169083151502179055506200016f620001636200017560201b60201c565b6200017d60201b60201c565b62000358565b600033905090565b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200025190620002f3565b90600052602060002090601f016020900481019282620002755760008555620002c1565b82601f106200029057805160ff1916838001178555620002c1565b82800160010185558215620002c1579182015b82811115620002c0578251825591602001919060010190620002a3565b5b509050620002d09190620002d4565b5090565b5b80821115620002ef576000816000905550600101620002d5565b5090565b600060028204905060018216806200030c57607f821691505b6020821081141562000323576200032262000329565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614cac80620003686000396000f3fe6080604052600436106101d85760003560e01c806370a0823111610102578063a22cb46511610095578063c87b56dd11610064578063c87b56dd1461067e578063e832eaf3146106bb578063e985e9c5146106f8578063f2fde38b14610735576101d8565b8063a22cb465146105c4578063a28e6e64146105ed578063b88d4fde1461062a578063c7876ea414610653576101d8565b80638456cb59116100d15780638456cb591461052c5780638da5cb5b146105435780638f770ad01461056e57806395d89b4114610599576101d8565b806370a0823114610470578063715018a6146104ad57806376c71ca1146104c45780637cfb627e146104ef576101d8565b80632f745c591161017a57806342966c681161014957806342966c68146103a25780634f6ccce7146103cb5780635c975abb146104085780636352211e14610433576101d8565b80632f745c591461031b5780633ccfd60b146103585780633f4ba83a1461036257806342842e0e14610379576101d8565b8063095ea7b3116101b6578063095ea7b31461028257806312639f9f146102ab57806318160ddd146102c757806323b872dd146102f2576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff91906134c5565b61075e565b6040516102119190613b35565b60405180910390f35b34801561022657600080fd5b5061022f610770565b60405161023c9190613b50565b60405180910390f35b34801561025157600080fd5b5061026c6004803603810190610267919061354c565b610802565b6040516102799190613ace565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190613445565b610887565b005b6102c560048036038101906102c09190613579565b61099f565b005b3480156102d357600080fd5b506102dc610c24565b6040516102e99190613ed2565b60405180910390f35b3480156102fe57600080fd5b506103196004803603810190610314919061332f565b610c31565b005b34801561032757600080fd5b50610342600480360381019061033d9190613445565b610c91565b60405161034f9190613ed2565b60405180910390f35b610360610d36565b005b34801561036e57600080fd5b50610377610df2565b005b34801561038557600080fd5b506103a0600480360381019061039b919061332f565b610e78565b005b3480156103ae57600080fd5b506103c960048036038101906103c4919061354c565b610e98565b005b3480156103d757600080fd5b506103f260048036038101906103ed919061354c565b610ef4565b6040516103ff9190613ed2565b60405180910390f35b34801561041457600080fd5b5061041d610f65565b60405161042a9190613b35565b60405180910390f35b34801561043f57600080fd5b5061045a6004803603810190610455919061354c565b610f7c565b6040516104679190613ace565b60405180910390f35b34801561047c57600080fd5b50610497600480360381019061049291906132c2565b61102e565b6040516104a49190613ed2565b60405180910390f35b3480156104b957600080fd5b506104c26110e6565b005b3480156104d057600080fd5b506104d961116e565b6040516104e69190613eed565b60405180910390f35b3480156104fb57600080fd5b50610516600480360381019061051191906132c2565b611181565b6040516105239190613ed2565b60405180910390f35b34801561053857600080fd5b50610541611233565b005b34801561054f57600080fd5b506105586112b9565b6040516105659190613ace565b60405180910390f35b34801561057a57600080fd5b506105836112e3565b6040516105909190613ed2565b60405180910390f35b3480156105a557600080fd5b506105ae6112e9565b6040516105bb9190613b50565b60405180910390f35b3480156105d057600080fd5b506105eb60048036038101906105e69190613405565b61137b565b005b3480156105f957600080fd5b50610614600480360381019061060f91906132c2565b6114fc565b6040516106219190613eed565b60405180910390f35b34801561063657600080fd5b50610651600480360381019061064c9190613382565b611552565b005b34801561065f57600080fd5b506106686115b4565b6040516106759190613ed2565b60405180910390f35b34801561068a57600080fd5b506106a560048036038101906106a0919061354c565b6115ba565b6040516106b29190613b50565b60405180910390f35b3480156106c757600080fd5b506106e260048036038101906106dd9190613485565b6115cc565b6040516106ef9190613ed2565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a91906132ef565b6116ad565b60405161072c9190613b35565b60405180910390f35b34801561074157600080fd5b5061075c600480360381019061075791906132c2565b6117af565b005b6000610769826118a7565b9050919050565b60606000805461077f90614253565b80601f01602080910402602001604051908101604052809291908181526020018280546107ab90614253565b80156107f85780601f106107cd576101008083540402835291602001916107f8565b820191906000526020600020905b8154815290600101906020018083116107db57829003601f168201915b5050505050905090565b600061080d82611921565b61084c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084390613db2565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061089282610f7c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fa90613e32565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661092261198d565b73ffffffffffffffffffffffffffffffffffffffff16148061095157506109508161094b61198d565b6116ad565b5b610990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098790613cd2565b60405180910390fd5b61099a8383611995565b505050565b600e60009054906101000a900460ff1660ff168260ff1611156109f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ee90613e72565b60405180910390fd5b60008260ff1611610a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3490613bd2565b60405180910390fd5b600d548260ff16610a4c610c24565b610a569190613ffe565b10610a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8d90613cb2565b60405180910390fd5b610aa033836115cc565b341015610ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad990613d12565b60405180910390fd5b60005b8260ff168160ff161015610c1f576000610aff6011611a4e565b9050610b0b3382611a5c565b610b5181848460ff1681518110610b2557610b24614416565b5b6020026020010151604051602001610b3d9190613aac565b604051602081830303815290604052611a7a565b610b5b6011611aee565b6001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610bb49190614054565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff160217905550508080610c17906142ff565b915050610ae5565b505050565b6000600880549050905090565b610c42610c3c61198d565b82611b04565b610c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7890613e52565b60405180910390fd5b610c8c838383611be2565b505050565b6000610c9c8361102e565b8210610cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd490613b92565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d3e61198d565b73ffffffffffffffffffffffffffffffffffffffff16610d5c6112b9565b73ffffffffffffffffffffffffffffffffffffffff1614610db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da990613dd2565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610df057600080fd5b565b610dfa61198d565b73ffffffffffffffffffffffffffffffffffffffff16610e186112b9565b73ffffffffffffffffffffffffffffffffffffffff1614610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6590613dd2565b60405180910390fd5b610e76611e3e565b565b610e9383838360405180602001604052806000815250611552565b505050565b610ea9610ea361198d565b82611b04565b610ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edf90613eb2565b60405180910390fd5b610ef181611ee0565b50565b6000610efe610c24565b8210610f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3690613e92565b60405180910390fd5b60088281548110610f5357610f52614416565b5b90600052602060002001549050919050565b6000600b60009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101c90613d32565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561109f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109690613cf2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110ee61198d565b73ffffffffffffffffffffffffffffffffffffffff1661110c6112b9565b73ffffffffffffffffffffffffffffffffffffffff1614611162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115990613dd2565b60405180910390fd5b61116c6000611eec565b565b600e60009054906101000a900460ff1681565b600061118b6112b9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111c7576000905061122e565b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff161415611228576000905061122e565b600c5490505b919050565b61123b61198d565b73ffffffffffffffffffffffffffffffffffffffff166112596112b9565b73ffffffffffffffffffffffffffffffffffffffff16146112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a690613dd2565b60405180910390fd5b6112b7611fb2565b565b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5481565b6060600180546112f890614253565b80601f016020809104026020016040519081016040528092919081815260200182805461132490614253565b80156113715780601f1061134657610100808354040283529160200191611371565b820191906000526020600020905b81548152906001019060200180831161135457829003601f168201915b5050505050905090565b61138361198d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e890613c52565b60405180910390fd5b80600560006113fe61198d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114ab61198d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114f09190613b35565b60405180910390a35050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61156361155d61198d565b83611b04565b6115a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159990613e52565b60405180910390fd5b6115ae84848484612055565b50505050565b600c5481565b60606115c5826120b1565b9050919050565b600080600c5490506115dc6112b9565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156116195760009150506116a7565b6000600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff161415611694578060018461167f919061414a565b60ff1661168c91906140bc565b9150506116a7565b808360ff166116a391906140bc565b9150505b92915050565b600080601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016117259190613ace565b60206040518083038186803b15801561173d57600080fd5b505afa158015611751573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611775919061351f565b73ffffffffffffffffffffffffffffffffffffffff16141561179b5760019150506117a9565b6117a58484612203565b9150505b92915050565b6117b761198d565b73ffffffffffffffffffffffffffffffffffffffff166117d56112b9565b73ffffffffffffffffffffffffffffffffffffffff161461182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182290613dd2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189290613bf2565b60405180910390fd5b6118a481611eec565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061191a575061191982612297565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a0883610f7c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b611a76828260405180602001604052806000815250612379565b5050565b611a8382611921565b611ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab990613d52565b60405180910390fd5b80600a60008481526020019081526020016000209080519060200190611ae9929190612fb0565b505050565b6001816000016000828254019250508190555050565b6000611b0f82611921565b611b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4590613c72565b60405180910390fd5b6000611b5983610f7c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611bc857508373ffffffffffffffffffffffffffffffffffffffff16611bb084610802565b73ffffffffffffffffffffffffffffffffffffffff16145b80611bd95750611bd881856116ad565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c0282610f7c565b73ffffffffffffffffffffffffffffffffffffffff1614611c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4f90613df2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbf90613c32565b60405180910390fd5b611cd38383836123d4565b611cde600082611995565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d2e9190614116565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d859190613ffe565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611e46610f65565b611e85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7c90613b72565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611ec961198d565b604051611ed69190613ace565b60405180910390a1565b611ee98161242c565b50565b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611fba610f65565b15611ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff190613c92565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861203e61198d565b60405161204b9190613ace565b60405180910390a1565b612060848484611be2565b61206c8484848461247f565b6120ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a290613bb2565b60405180910390fd5b50505050565b60606120bc82611921565b6120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f290613d92565b60405180910390fd5b6000600a6000848152602001908152602001600020805461211b90614253565b80601f016020809104026020016040519081016040528092919081815260200182805461214790614253565b80156121945780601f1061216957610100808354040283529160200191612194565b820191906000526020600020905b81548152906001019060200180831161217757829003601f168201915b5050505050905060006121a5612616565b90506000815114156121bb5781925050506121fe565b6000825111156121f05780826040516020016121d8929190613a88565b604051602081830303815290604052925050506121fe565b6121f98461262d565b925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061236257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806123725750612371826126d4565b5b9050919050565b612383838361273e565b612390600084848461247f565b6123cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c690613bb2565b60405180910390fd5b505050565b6123dc610f65565b1561241c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241390613c92565b60405180910390fd5b61242783838361290c565b505050565b61243581612a20565b6000600a6000838152602001908152602001600020805461245590614253565b90501461247c57600a6000828152602001908152602001600020600061247b9190613036565b5b50565b60006124a08473ffffffffffffffffffffffffffffffffffffffff16612b31565b15612609578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124c961198d565b8786866040518563ffffffff1660e01b81526004016124eb9493929190613ae9565b602060405180830381600087803b15801561250557600080fd5b505af192505050801561253657506040513d601f19601f8201168201806040525081019061253391906134f2565b60015b6125b9573d8060008114612566576040519150601f19603f3d011682016040523d82523d6000602084013e61256b565b606091505b506000815114156125b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a890613bb2565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061260e565b600190505b949350505050565b606060405180602001604052806000815250905090565b606061263882611921565b612677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266e90613e12565b60405180910390fd5b6000612681612616565b905060008151116126a157604051806020016040528060008152506126cc565b806126ab84612b44565b6040516020016126bc929190613a88565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a590613d72565b60405180910390fd5b6127b781611921565b156127f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ee90613c12565b60405180910390fd5b612803600083836123d4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128539190613ffe565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b612917838383612ca5565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561295a5761295581612caa565b612999565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612998576129978382612cf3565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129dc576129d781612e60565b612a1b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a1a57612a198282612f31565b5b5b505050565b6000612a2b82610f7c565b9050612a39816000846123d4565b612a44600083611995565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a949190614116565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b60606000821415612b8c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ca0565b600082905060005b60008214612bbe578080612ba7906142b6565b915050600a82612bb7919061408b565b9150612b94565b60008167ffffffffffffffff811115612bda57612bd9614445565b5b6040519080825280601f01601f191660200182016040528015612c0c5781602001600182028036833780820191505090505b5090505b60008514612c9957600182612c259190614116565b9150600a85612c349190614329565b6030612c409190613ffe565b60f81b818381518110612c5657612c55614416565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c92919061408b565b9450612c10565b8093505050505b919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612d008461102e565b612d0a9190614116565b9050600060076000848152602001908152602001600020549050818114612def576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612e749190614116565b9050600060096000848152602001908152602001600020549050600060088381548110612ea457612ea3614416565b5b906000526020600020015490508060088381548110612ec657612ec5614416565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612f1557612f146143e7565b5b6001900381819060005260206000200160009055905550505050565b6000612f3c8361102e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054612fbc90614253565b90600052602060002090601f016020900481019282612fde5760008555613025565b82601f10612ff757805160ff1916838001178555613025565b82800160010185558215613025579182015b82811115613024578251825591602001919060010190613009565b5b5090506130329190613076565b5090565b50805461304290614253565b6000825580601f106130545750613073565b601f0160209004906000526020600020908101906130729190613076565b5b50565b5b8082111561308f576000816000905550600101613077565b5090565b60006130a66130a184613f2d565b613f08565b905080838252602082019050828560208602820111156130c9576130c8614479565b5b60005b8581101561311757813567ffffffffffffffff8111156130ef576130ee614474565b5b8086016130fc898261326a565b855260208501945060208401935050506001810190506130cc565b5050509392505050565b600061313461312f84613f59565b613f08565b9050828152602081018484840111156131505761314f61447e565b5b61315b848285614211565b509392505050565b600061317661317184613f8a565b613f08565b9050828152602081018484840111156131925761319161447e565b5b61319d848285614211565b509392505050565b6000813590506131b481614bec565b92915050565b600082601f8301126131cf576131ce614474565b5b81356131df848260208601613093565b91505092915050565b6000813590506131f781614c03565b92915050565b60008135905061320c81614c1a565b92915050565b60008151905061322181614c1a565b92915050565b600082601f83011261323c5761323b614474565b5b813561324c848260208601613121565b91505092915050565b60008151905061326481614c31565b92915050565b600082601f83011261327f5761327e614474565b5b813561328f848260208601613163565b91505092915050565b6000813590506132a781614c48565b92915050565b6000813590506132bc81614c5f565b92915050565b6000602082840312156132d8576132d7614488565b5b60006132e6848285016131a5565b91505092915050565b6000806040838503121561330657613305614488565b5b6000613314858286016131a5565b9250506020613325858286016131a5565b9150509250929050565b60008060006060848603121561334857613347614488565b5b6000613356868287016131a5565b9350506020613367868287016131a5565b925050604061337886828701613298565b9150509250925092565b6000806000806080858703121561339c5761339b614488565b5b60006133aa878288016131a5565b94505060206133bb878288016131a5565b93505060406133cc87828801613298565b925050606085013567ffffffffffffffff8111156133ed576133ec614483565b5b6133f987828801613227565b91505092959194509250565b6000806040838503121561341c5761341b614488565b5b600061342a858286016131a5565b925050602061343b858286016131e8565b9150509250929050565b6000806040838503121561345c5761345b614488565b5b600061346a858286016131a5565b925050602061347b85828601613298565b9150509250929050565b6000806040838503121561349c5761349b614488565b5b60006134aa858286016131a5565b92505060206134bb858286016132ad565b9150509250929050565b6000602082840312156134db576134da614488565b5b60006134e9848285016131fd565b91505092915050565b60006020828403121561350857613507614488565b5b600061351684828501613212565b91505092915050565b60006020828403121561353557613534614488565b5b600061354384828501613255565b91505092915050565b60006020828403121561356257613561614488565b5b600061357084828501613298565b91505092915050565b600080604083850312156135905761358f614488565b5b600061359e858286016132ad565b925050602083013567ffffffffffffffff8111156135bf576135be614483565b5b6135cb858286016131ba565b9150509250929050565b6135de8161417e565b82525050565b6135ed81614190565b82525050565b60006135fe82613fbb565b6136088185613fd1565b9350613618818560208601614220565b6136218161448d565b840191505092915050565b600061363782613fc6565b6136418185613fe2565b9350613651818560208601614220565b61365a8161448d565b840191505092915050565b600061367082613fc6565b61367a8185613ff3565b935061368a818560208601614220565b80840191505092915050565b60006136a3601483613fe2565b91506136ae8261449e565b602082019050919050565b60006136c6602b83613fe2565b91506136d1826144c7565b604082019050919050565b60006136e9603283613fe2565b91506136f482614516565b604082019050919050565b600061370c601e83613fe2565b915061371782614565565b602082019050919050565b600061372f602683613fe2565b915061373a8261458e565b604082019050919050565b6000613752601c83613fe2565b915061375d826145dd565b602082019050919050565b6000613775602483613fe2565b915061378082614606565b604082019050919050565b6000613798601983613fe2565b91506137a382614655565b602082019050919050565b60006137bb602c83613fe2565b91506137c68261467e565b604082019050919050565b60006137de601083613fe2565b91506137e9826146cd565b602082019050919050565b6000613801601683613fe2565b915061380c826146f6565b602082019050919050565b6000613824603883613fe2565b915061382f8261471f565b604082019050919050565b6000613847602a83613fe2565b91506138528261476e565b604082019050919050565b600061386a601a83613fe2565b9150613875826147bd565b602082019050919050565b600061388d602983613fe2565b9150613898826147e6565b604082019050919050565b60006138b0602e83613fe2565b91506138bb82614835565b604082019050919050565b60006138d3602083613fe2565b91506138de82614884565b602082019050919050565b60006138f6603183613fe2565b9150613901826148ad565b604082019050919050565b6000613919602c83613fe2565b9150613924826148fc565b604082019050919050565b600061393c602083613fe2565b91506139478261494b565b602082019050919050565b600061395f602283613ff3565b915061396a82614974565b602282019050919050565b6000613982602983613fe2565b915061398d826149c3565b604082019050919050565b60006139a5602f83613fe2565b91506139b082614a12565b604082019050919050565b60006139c8602183613fe2565b91506139d382614a61565b604082019050919050565b60006139eb603183613fe2565b91506139f682614ab0565b604082019050919050565b6000613a0e602483613fe2565b9150613a1982614aff565b604082019050919050565b6000613a31602c83613fe2565b9150613a3c82614b4e565b604082019050919050565b6000613a54603083613fe2565b9150613a5f82614b9d565b604082019050919050565b613a73816141fa565b82525050565b613a8281614204565b82525050565b6000613a948285613665565b9150613aa08284613665565b91508190509392505050565b6000613ab782613952565b9150613ac38284613665565b915081905092915050565b6000602082019050613ae360008301846135d5565b92915050565b6000608082019050613afe60008301876135d5565b613b0b60208301866135d5565b613b186040830185613a6a565b8181036060830152613b2a81846135f3565b905095945050505050565b6000602082019050613b4a60008301846135e4565b92915050565b60006020820190508181036000830152613b6a818461362c565b905092915050565b60006020820190508181036000830152613b8b81613696565b9050919050565b60006020820190508181036000830152613bab816136b9565b9050919050565b60006020820190508181036000830152613bcb816136dc565b9050919050565b60006020820190508181036000830152613beb816136ff565b9050919050565b60006020820190508181036000830152613c0b81613722565b9050919050565b60006020820190508181036000830152613c2b81613745565b9050919050565b60006020820190508181036000830152613c4b81613768565b9050919050565b60006020820190508181036000830152613c6b8161378b565b9050919050565b60006020820190508181036000830152613c8b816137ae565b9050919050565b60006020820190508181036000830152613cab816137d1565b9050919050565b60006020820190508181036000830152613ccb816137f4565b9050919050565b60006020820190508181036000830152613ceb81613817565b9050919050565b60006020820190508181036000830152613d0b8161383a565b9050919050565b60006020820190508181036000830152613d2b8161385d565b9050919050565b60006020820190508181036000830152613d4b81613880565b9050919050565b60006020820190508181036000830152613d6b816138a3565b9050919050565b60006020820190508181036000830152613d8b816138c6565b9050919050565b60006020820190508181036000830152613dab816138e9565b9050919050565b60006020820190508181036000830152613dcb8161390c565b9050919050565b60006020820190508181036000830152613deb8161392f565b9050919050565b60006020820190508181036000830152613e0b81613975565b9050919050565b60006020820190508181036000830152613e2b81613998565b9050919050565b60006020820190508181036000830152613e4b816139bb565b9050919050565b60006020820190508181036000830152613e6b816139de565b9050919050565b60006020820190508181036000830152613e8b81613a01565b9050919050565b60006020820190508181036000830152613eab81613a24565b9050919050565b60006020820190508181036000830152613ecb81613a47565b9050919050565b6000602082019050613ee76000830184613a6a565b92915050565b6000602082019050613f026000830184613a79565b92915050565b6000613f12613f23565b9050613f1e8282614285565b919050565b6000604051905090565b600067ffffffffffffffff821115613f4857613f47614445565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613f7457613f73614445565b5b613f7d8261448d565b9050602081019050919050565b600067ffffffffffffffff821115613fa557613fa4614445565b5b613fae8261448d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614009826141fa565b9150614014836141fa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140495761404861435a565b5b828201905092915050565b600061405f82614204565b915061406a83614204565b92508260ff038211156140805761407f61435a565b5b828201905092915050565b6000614096826141fa565b91506140a1836141fa565b9250826140b1576140b0614389565b5b828204905092915050565b60006140c7826141fa565b91506140d2836141fa565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561410b5761410a61435a565b5b828202905092915050565b6000614121826141fa565b915061412c836141fa565b92508282101561413f5761413e61435a565b5b828203905092915050565b600061415582614204565b915061416083614204565b9250828210156141735761417261435a565b5b828203905092915050565b6000614189826141da565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006141d38261417e565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561423e578082015181840152602081019050614223565b8381111561424d576000848401525b50505050565b6000600282049050600182168061426b57607f821691505b6020821081141561427f5761427e6143b8565b5b50919050565b61428e8261448d565b810181811067ffffffffffffffff821117156142ad576142ac614445565b5b80604052505050565b60006142c1826141fa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142f4576142f361435a565b5b600182019050919050565b600061430a82614204565b915060ff82141561431e5761431d61435a565b5b600182019050919050565b6000614334826141fa565b915061433f836141fa565b92508261434f5761434e614389565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4d696e74207175616e74697479206d757374206265206e6f6e2d7a65726f0000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4d6178696d756d20737570706c79207265616368656400000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742070617961626c652076616c7565000000000000600082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f68747470733a2f2f676174657761792e70696e6174612e636c6f75642f69706660008201527f732f000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d6178696d756d20616c6c6f7761626c65206d696e74207175616e697479206960008201527f7320323000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b614bf58161417e565b8114614c0057600080fd5b50565b614c0c81614190565b8114614c1757600080fd5b50565b614c238161419c565b8114614c2e57600080fd5b50565b614c3a816141c8565b8114614c4557600080fd5b50565b614c51816141fa565b8114614c5c57600080fd5b50565b614c6881614204565b8114614c7357600080fd5b5056fea2646970667358221220e8e86c799fcfb9fcde5a344258faeb04f46c50fbb238daa6a0b21ad4a851b97464736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101d85760003560e01c806370a0823111610102578063a22cb46511610095578063c87b56dd11610064578063c87b56dd1461067e578063e832eaf3146106bb578063e985e9c5146106f8578063f2fde38b14610735576101d8565b8063a22cb465146105c4578063a28e6e64146105ed578063b88d4fde1461062a578063c7876ea414610653576101d8565b80638456cb59116100d15780638456cb591461052c5780638da5cb5b146105435780638f770ad01461056e57806395d89b4114610599576101d8565b806370a0823114610470578063715018a6146104ad57806376c71ca1146104c45780637cfb627e146104ef576101d8565b80632f745c591161017a57806342966c681161014957806342966c68146103a25780634f6ccce7146103cb5780635c975abb146104085780636352211e14610433576101d8565b80632f745c591461031b5780633ccfd60b146103585780633f4ba83a1461036257806342842e0e14610379576101d8565b8063095ea7b3116101b6578063095ea7b31461028257806312639f9f146102ab57806318160ddd146102c757806323b872dd146102f2576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff91906134c5565b61075e565b6040516102119190613b35565b60405180910390f35b34801561022657600080fd5b5061022f610770565b60405161023c9190613b50565b60405180910390f35b34801561025157600080fd5b5061026c6004803603810190610267919061354c565b610802565b6040516102799190613ace565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190613445565b610887565b005b6102c560048036038101906102c09190613579565b61099f565b005b3480156102d357600080fd5b506102dc610c24565b6040516102e99190613ed2565b60405180910390f35b3480156102fe57600080fd5b506103196004803603810190610314919061332f565b610c31565b005b34801561032757600080fd5b50610342600480360381019061033d9190613445565b610c91565b60405161034f9190613ed2565b60405180910390f35b610360610d36565b005b34801561036e57600080fd5b50610377610df2565b005b34801561038557600080fd5b506103a0600480360381019061039b919061332f565b610e78565b005b3480156103ae57600080fd5b506103c960048036038101906103c4919061354c565b610e98565b005b3480156103d757600080fd5b506103f260048036038101906103ed919061354c565b610ef4565b6040516103ff9190613ed2565b60405180910390f35b34801561041457600080fd5b5061041d610f65565b60405161042a9190613b35565b60405180910390f35b34801561043f57600080fd5b5061045a6004803603810190610455919061354c565b610f7c565b6040516104679190613ace565b60405180910390f35b34801561047c57600080fd5b50610497600480360381019061049291906132c2565b61102e565b6040516104a49190613ed2565b60405180910390f35b3480156104b957600080fd5b506104c26110e6565b005b3480156104d057600080fd5b506104d961116e565b6040516104e69190613eed565b60405180910390f35b3480156104fb57600080fd5b50610516600480360381019061051191906132c2565b611181565b6040516105239190613ed2565b60405180910390f35b34801561053857600080fd5b50610541611233565b005b34801561054f57600080fd5b506105586112b9565b6040516105659190613ace565b60405180910390f35b34801561057a57600080fd5b506105836112e3565b6040516105909190613ed2565b60405180910390f35b3480156105a557600080fd5b506105ae6112e9565b6040516105bb9190613b50565b60405180910390f35b3480156105d057600080fd5b506105eb60048036038101906105e69190613405565b61137b565b005b3480156105f957600080fd5b50610614600480360381019061060f91906132c2565b6114fc565b6040516106219190613eed565b60405180910390f35b34801561063657600080fd5b50610651600480360381019061064c9190613382565b611552565b005b34801561065f57600080fd5b506106686115b4565b6040516106759190613ed2565b60405180910390f35b34801561068a57600080fd5b506106a560048036038101906106a0919061354c565b6115ba565b6040516106b29190613b50565b60405180910390f35b3480156106c757600080fd5b506106e260048036038101906106dd9190613485565b6115cc565b6040516106ef9190613ed2565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a91906132ef565b6116ad565b60405161072c9190613b35565b60405180910390f35b34801561074157600080fd5b5061075c600480360381019061075791906132c2565b6117af565b005b6000610769826118a7565b9050919050565b60606000805461077f90614253565b80601f01602080910402602001604051908101604052809291908181526020018280546107ab90614253565b80156107f85780601f106107cd576101008083540402835291602001916107f8565b820191906000526020600020905b8154815290600101906020018083116107db57829003601f168201915b5050505050905090565b600061080d82611921565b61084c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084390613db2565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061089282610f7c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fa90613e32565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661092261198d565b73ffffffffffffffffffffffffffffffffffffffff16148061095157506109508161094b61198d565b6116ad565b5b610990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098790613cd2565b60405180910390fd5b61099a8383611995565b505050565b600e60009054906101000a900460ff1660ff168260ff1611156109f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ee90613e72565b60405180910390fd5b60008260ff1611610a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3490613bd2565b60405180910390fd5b600d548260ff16610a4c610c24565b610a569190613ffe565b10610a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8d90613cb2565b60405180910390fd5b610aa033836115cc565b341015610ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad990613d12565b60405180910390fd5b60005b8260ff168160ff161015610c1f576000610aff6011611a4e565b9050610b0b3382611a5c565b610b5181848460ff1681518110610b2557610b24614416565b5b6020026020010151604051602001610b3d9190613aac565b604051602081830303815290604052611a7a565b610b5b6011611aee565b6001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610bb49190614054565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff160217905550508080610c17906142ff565b915050610ae5565b505050565b6000600880549050905090565b610c42610c3c61198d565b82611b04565b610c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7890613e52565b60405180910390fd5b610c8c838383611be2565b505050565b6000610c9c8361102e565b8210610cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd490613b92565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d3e61198d565b73ffffffffffffffffffffffffffffffffffffffff16610d5c6112b9565b73ffffffffffffffffffffffffffffffffffffffff1614610db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da990613dd2565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610df057600080fd5b565b610dfa61198d565b73ffffffffffffffffffffffffffffffffffffffff16610e186112b9565b73ffffffffffffffffffffffffffffffffffffffff1614610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6590613dd2565b60405180910390fd5b610e76611e3e565b565b610e9383838360405180602001604052806000815250611552565b505050565b610ea9610ea361198d565b82611b04565b610ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edf90613eb2565b60405180910390fd5b610ef181611ee0565b50565b6000610efe610c24565b8210610f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3690613e92565b60405180910390fd5b60088281548110610f5357610f52614416565b5b90600052602060002001549050919050565b6000600b60009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101c90613d32565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561109f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109690613cf2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110ee61198d565b73ffffffffffffffffffffffffffffffffffffffff1661110c6112b9565b73ffffffffffffffffffffffffffffffffffffffff1614611162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115990613dd2565b60405180910390fd5b61116c6000611eec565b565b600e60009054906101000a900460ff1681565b600061118b6112b9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111c7576000905061122e565b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff161415611228576000905061122e565b600c5490505b919050565b61123b61198d565b73ffffffffffffffffffffffffffffffffffffffff166112596112b9565b73ffffffffffffffffffffffffffffffffffffffff16146112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a690613dd2565b60405180910390fd5b6112b7611fb2565b565b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5481565b6060600180546112f890614253565b80601f016020809104026020016040519081016040528092919081815260200182805461132490614253565b80156113715780601f1061134657610100808354040283529160200191611371565b820191906000526020600020905b81548152906001019060200180831161135457829003601f168201915b5050505050905090565b61138361198d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e890613c52565b60405180910390fd5b80600560006113fe61198d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114ab61198d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114f09190613b35565b60405180910390a35050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61156361155d61198d565b83611b04565b6115a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159990613e52565b60405180910390fd5b6115ae84848484612055565b50505050565b600c5481565b60606115c5826120b1565b9050919050565b600080600c5490506115dc6112b9565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156116195760009150506116a7565b6000600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff161415611694578060018461167f919061414a565b60ff1661168c91906140bc565b9150506116a7565b808360ff166116a391906140bc565b9150505b92915050565b600080601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016117259190613ace565b60206040518083038186803b15801561173d57600080fd5b505afa158015611751573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611775919061351f565b73ffffffffffffffffffffffffffffffffffffffff16141561179b5760019150506117a9565b6117a58484612203565b9150505b92915050565b6117b761198d565b73ffffffffffffffffffffffffffffffffffffffff166117d56112b9565b73ffffffffffffffffffffffffffffffffffffffff161461182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182290613dd2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189290613bf2565b60405180910390fd5b6118a481611eec565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061191a575061191982612297565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a0883610f7c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b611a76828260405180602001604052806000815250612379565b5050565b611a8382611921565b611ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab990613d52565b60405180910390fd5b80600a60008481526020019081526020016000209080519060200190611ae9929190612fb0565b505050565b6001816000016000828254019250508190555050565b6000611b0f82611921565b611b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4590613c72565b60405180910390fd5b6000611b5983610f7c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611bc857508373ffffffffffffffffffffffffffffffffffffffff16611bb084610802565b73ffffffffffffffffffffffffffffffffffffffff16145b80611bd95750611bd881856116ad565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c0282610f7c565b73ffffffffffffffffffffffffffffffffffffffff1614611c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4f90613df2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbf90613c32565b60405180910390fd5b611cd38383836123d4565b611cde600082611995565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d2e9190614116565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d859190613ffe565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611e46610f65565b611e85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7c90613b72565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611ec961198d565b604051611ed69190613ace565b60405180910390a1565b611ee98161242c565b50565b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611fba610f65565b15611ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff190613c92565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861203e61198d565b60405161204b9190613ace565b60405180910390a1565b612060848484611be2565b61206c8484848461247f565b6120ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a290613bb2565b60405180910390fd5b50505050565b60606120bc82611921565b6120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f290613d92565b60405180910390fd5b6000600a6000848152602001908152602001600020805461211b90614253565b80601f016020809104026020016040519081016040528092919081815260200182805461214790614253565b80156121945780601f1061216957610100808354040283529160200191612194565b820191906000526020600020905b81548152906001019060200180831161217757829003601f168201915b5050505050905060006121a5612616565b90506000815114156121bb5781925050506121fe565b6000825111156121f05780826040516020016121d8929190613a88565b604051602081830303815290604052925050506121fe565b6121f98461262d565b925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061236257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806123725750612371826126d4565b5b9050919050565b612383838361273e565b612390600084848461247f565b6123cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c690613bb2565b60405180910390fd5b505050565b6123dc610f65565b1561241c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241390613c92565b60405180910390fd5b61242783838361290c565b505050565b61243581612a20565b6000600a6000838152602001908152602001600020805461245590614253565b90501461247c57600a6000828152602001908152602001600020600061247b9190613036565b5b50565b60006124a08473ffffffffffffffffffffffffffffffffffffffff16612b31565b15612609578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124c961198d565b8786866040518563ffffffff1660e01b81526004016124eb9493929190613ae9565b602060405180830381600087803b15801561250557600080fd5b505af192505050801561253657506040513d601f19601f8201168201806040525081019061253391906134f2565b60015b6125b9573d8060008114612566576040519150601f19603f3d011682016040523d82523d6000602084013e61256b565b606091505b506000815114156125b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a890613bb2565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061260e565b600190505b949350505050565b606060405180602001604052806000815250905090565b606061263882611921565b612677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266e90613e12565b60405180910390fd5b6000612681612616565b905060008151116126a157604051806020016040528060008152506126cc565b806126ab84612b44565b6040516020016126bc929190613a88565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a590613d72565b60405180910390fd5b6127b781611921565b156127f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ee90613c12565b60405180910390fd5b612803600083836123d4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128539190613ffe565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b612917838383612ca5565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561295a5761295581612caa565b612999565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612998576129978382612cf3565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129dc576129d781612e60565b612a1b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a1a57612a198282612f31565b5b5b505050565b6000612a2b82610f7c565b9050612a39816000846123d4565b612a44600083611995565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a949190614116565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b60606000821415612b8c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ca0565b600082905060005b60008214612bbe578080612ba7906142b6565b915050600a82612bb7919061408b565b9150612b94565b60008167ffffffffffffffff811115612bda57612bd9614445565b5b6040519080825280601f01601f191660200182016040528015612c0c5781602001600182028036833780820191505090505b5090505b60008514612c9957600182612c259190614116565b9150600a85612c349190614329565b6030612c409190613ffe565b60f81b818381518110612c5657612c55614416565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c92919061408b565b9450612c10565b8093505050505b919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612d008461102e565b612d0a9190614116565b9050600060076000848152602001908152602001600020549050818114612def576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612e749190614116565b9050600060096000848152602001908152602001600020549050600060088381548110612ea457612ea3614416565b5b906000526020600020015490508060088381548110612ec657612ec5614416565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612f1557612f146143e7565b5b6001900381819060005260206000200160009055905550505050565b6000612f3c8361102e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054612fbc90614253565b90600052602060002090601f016020900481019282612fde5760008555613025565b82601f10612ff757805160ff1916838001178555613025565b82800160010185558215613025579182015b82811115613024578251825591602001919060010190613009565b5b5090506130329190613076565b5090565b50805461304290614253565b6000825580601f106130545750613073565b601f0160209004906000526020600020908101906130729190613076565b5b50565b5b8082111561308f576000816000905550600101613077565b5090565b60006130a66130a184613f2d565b613f08565b905080838252602082019050828560208602820111156130c9576130c8614479565b5b60005b8581101561311757813567ffffffffffffffff8111156130ef576130ee614474565b5b8086016130fc898261326a565b855260208501945060208401935050506001810190506130cc565b5050509392505050565b600061313461312f84613f59565b613f08565b9050828152602081018484840111156131505761314f61447e565b5b61315b848285614211565b509392505050565b600061317661317184613f8a565b613f08565b9050828152602081018484840111156131925761319161447e565b5b61319d848285614211565b509392505050565b6000813590506131b481614bec565b92915050565b600082601f8301126131cf576131ce614474565b5b81356131df848260208601613093565b91505092915050565b6000813590506131f781614c03565b92915050565b60008135905061320c81614c1a565b92915050565b60008151905061322181614c1a565b92915050565b600082601f83011261323c5761323b614474565b5b813561324c848260208601613121565b91505092915050565b60008151905061326481614c31565b92915050565b600082601f83011261327f5761327e614474565b5b813561328f848260208601613163565b91505092915050565b6000813590506132a781614c48565b92915050565b6000813590506132bc81614c5f565b92915050565b6000602082840312156132d8576132d7614488565b5b60006132e6848285016131a5565b91505092915050565b6000806040838503121561330657613305614488565b5b6000613314858286016131a5565b9250506020613325858286016131a5565b9150509250929050565b60008060006060848603121561334857613347614488565b5b6000613356868287016131a5565b9350506020613367868287016131a5565b925050604061337886828701613298565b9150509250925092565b6000806000806080858703121561339c5761339b614488565b5b60006133aa878288016131a5565b94505060206133bb878288016131a5565b93505060406133cc87828801613298565b925050606085013567ffffffffffffffff8111156133ed576133ec614483565b5b6133f987828801613227565b91505092959194509250565b6000806040838503121561341c5761341b614488565b5b600061342a858286016131a5565b925050602061343b858286016131e8565b9150509250929050565b6000806040838503121561345c5761345b614488565b5b600061346a858286016131a5565b925050602061347b85828601613298565b9150509250929050565b6000806040838503121561349c5761349b614488565b5b60006134aa858286016131a5565b92505060206134bb858286016132ad565b9150509250929050565b6000602082840312156134db576134da614488565b5b60006134e9848285016131fd565b91505092915050565b60006020828403121561350857613507614488565b5b600061351684828501613212565b91505092915050565b60006020828403121561353557613534614488565b5b600061354384828501613255565b91505092915050565b60006020828403121561356257613561614488565b5b600061357084828501613298565b91505092915050565b600080604083850312156135905761358f614488565b5b600061359e858286016132ad565b925050602083013567ffffffffffffffff8111156135bf576135be614483565b5b6135cb858286016131ba565b9150509250929050565b6135de8161417e565b82525050565b6135ed81614190565b82525050565b60006135fe82613fbb565b6136088185613fd1565b9350613618818560208601614220565b6136218161448d565b840191505092915050565b600061363782613fc6565b6136418185613fe2565b9350613651818560208601614220565b61365a8161448d565b840191505092915050565b600061367082613fc6565b61367a8185613ff3565b935061368a818560208601614220565b80840191505092915050565b60006136a3601483613fe2565b91506136ae8261449e565b602082019050919050565b60006136c6602b83613fe2565b91506136d1826144c7565b604082019050919050565b60006136e9603283613fe2565b91506136f482614516565b604082019050919050565b600061370c601e83613fe2565b915061371782614565565b602082019050919050565b600061372f602683613fe2565b915061373a8261458e565b604082019050919050565b6000613752601c83613fe2565b915061375d826145dd565b602082019050919050565b6000613775602483613fe2565b915061378082614606565b604082019050919050565b6000613798601983613fe2565b91506137a382614655565b602082019050919050565b60006137bb602c83613fe2565b91506137c68261467e565b604082019050919050565b60006137de601083613fe2565b91506137e9826146cd565b602082019050919050565b6000613801601683613fe2565b915061380c826146f6565b602082019050919050565b6000613824603883613fe2565b915061382f8261471f565b604082019050919050565b6000613847602a83613fe2565b91506138528261476e565b604082019050919050565b600061386a601a83613fe2565b9150613875826147bd565b602082019050919050565b600061388d602983613fe2565b9150613898826147e6565b604082019050919050565b60006138b0602e83613fe2565b91506138bb82614835565b604082019050919050565b60006138d3602083613fe2565b91506138de82614884565b602082019050919050565b60006138f6603183613fe2565b9150613901826148ad565b604082019050919050565b6000613919602c83613fe2565b9150613924826148fc565b604082019050919050565b600061393c602083613fe2565b91506139478261494b565b602082019050919050565b600061395f602283613ff3565b915061396a82614974565b602282019050919050565b6000613982602983613fe2565b915061398d826149c3565b604082019050919050565b60006139a5602f83613fe2565b91506139b082614a12565b604082019050919050565b60006139c8602183613fe2565b91506139d382614a61565b604082019050919050565b60006139eb603183613fe2565b91506139f682614ab0565b604082019050919050565b6000613a0e602483613fe2565b9150613a1982614aff565b604082019050919050565b6000613a31602c83613fe2565b9150613a3c82614b4e565b604082019050919050565b6000613a54603083613fe2565b9150613a5f82614b9d565b604082019050919050565b613a73816141fa565b82525050565b613a8281614204565b82525050565b6000613a948285613665565b9150613aa08284613665565b91508190509392505050565b6000613ab782613952565b9150613ac38284613665565b915081905092915050565b6000602082019050613ae360008301846135d5565b92915050565b6000608082019050613afe60008301876135d5565b613b0b60208301866135d5565b613b186040830185613a6a565b8181036060830152613b2a81846135f3565b905095945050505050565b6000602082019050613b4a60008301846135e4565b92915050565b60006020820190508181036000830152613b6a818461362c565b905092915050565b60006020820190508181036000830152613b8b81613696565b9050919050565b60006020820190508181036000830152613bab816136b9565b9050919050565b60006020820190508181036000830152613bcb816136dc565b9050919050565b60006020820190508181036000830152613beb816136ff565b9050919050565b60006020820190508181036000830152613c0b81613722565b9050919050565b60006020820190508181036000830152613c2b81613745565b9050919050565b60006020820190508181036000830152613c4b81613768565b9050919050565b60006020820190508181036000830152613c6b8161378b565b9050919050565b60006020820190508181036000830152613c8b816137ae565b9050919050565b60006020820190508181036000830152613cab816137d1565b9050919050565b60006020820190508181036000830152613ccb816137f4565b9050919050565b60006020820190508181036000830152613ceb81613817565b9050919050565b60006020820190508181036000830152613d0b8161383a565b9050919050565b60006020820190508181036000830152613d2b8161385d565b9050919050565b60006020820190508181036000830152613d4b81613880565b9050919050565b60006020820190508181036000830152613d6b816138a3565b9050919050565b60006020820190508181036000830152613d8b816138c6565b9050919050565b60006020820190508181036000830152613dab816138e9565b9050919050565b60006020820190508181036000830152613dcb8161390c565b9050919050565b60006020820190508181036000830152613deb8161392f565b9050919050565b60006020820190508181036000830152613e0b81613975565b9050919050565b60006020820190508181036000830152613e2b81613998565b9050919050565b60006020820190508181036000830152613e4b816139bb565b9050919050565b60006020820190508181036000830152613e6b816139de565b9050919050565b60006020820190508181036000830152613e8b81613a01565b9050919050565b60006020820190508181036000830152613eab81613a24565b9050919050565b60006020820190508181036000830152613ecb81613a47565b9050919050565b6000602082019050613ee76000830184613a6a565b92915050565b6000602082019050613f026000830184613a79565b92915050565b6000613f12613f23565b9050613f1e8282614285565b919050565b6000604051905090565b600067ffffffffffffffff821115613f4857613f47614445565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613f7457613f73614445565b5b613f7d8261448d565b9050602081019050919050565b600067ffffffffffffffff821115613fa557613fa4614445565b5b613fae8261448d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614009826141fa565b9150614014836141fa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140495761404861435a565b5b828201905092915050565b600061405f82614204565b915061406a83614204565b92508260ff038211156140805761407f61435a565b5b828201905092915050565b6000614096826141fa565b91506140a1836141fa565b9250826140b1576140b0614389565b5b828204905092915050565b60006140c7826141fa565b91506140d2836141fa565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561410b5761410a61435a565b5b828202905092915050565b6000614121826141fa565b915061412c836141fa565b92508282101561413f5761413e61435a565b5b828203905092915050565b600061415582614204565b915061416083614204565b9250828210156141735761417261435a565b5b828203905092915050565b6000614189826141da565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006141d38261417e565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561423e578082015181840152602081019050614223565b8381111561424d576000848401525b50505050565b6000600282049050600182168061426b57607f821691505b6020821081141561427f5761427e6143b8565b5b50919050565b61428e8261448d565b810181811067ffffffffffffffff821117156142ad576142ac614445565b5b80604052505050565b60006142c1826141fa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142f4576142f361435a565b5b600182019050919050565b600061430a82614204565b915060ff82141561431e5761431d61435a565b5b600182019050919050565b6000614334826141fa565b915061433f836141fa565b92508261434f5761434e614389565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4d696e74207175616e74697479206d757374206265206e6f6e2d7a65726f0000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4d6178696d756d20737570706c79207265616368656400000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742070617961626c652076616c7565000000000000600082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f68747470733a2f2f676174657761792e70696e6174612e636c6f75642f69706660008201527f732f000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d6178696d756d20616c6c6f7761626c65206d696e74207175616e697479206960008201527f7320323000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b614bf58161417e565b8114614c0057600080fd5b50565b614c0c81614190565b8114614c1757600080fd5b50565b614c238161419c565b8114614c2e57600080fd5b50565b614c3a816141c8565b8114614c4557600080fd5b50565b614c51816141fa565b8114614c5c57600080fd5b50565b614c6881614204565b8114614c7357600080fd5b5056fea2646970667358221220e8e86c799fcfb9fcde5a344258faeb04f46c50fbb238daa6a0b21ad4a851b97464736f6c63430008070033
Deployed Bytecode Sourcemap
49562:4018:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53365:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11860:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13419:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12942:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51248:778;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32762:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14309:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32430:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50220:120;;;:::i;:::-;;50147:65;;;;;;;;;;;;;:::i;:::-;;14719:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25415:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32952:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29019:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11554:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11284:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27316:94;;;;;;;;;;;;;:::i;:::-;;49805:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50470:337;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50078:61;;;;;;;;;;;;;:::i;:::-;;26665:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49766:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12029:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13712:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50348:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14975:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49721:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53161:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50815:425;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52375:445;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27565:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53365:212;53504:4;53533:36;53557:11;53533:23;:36::i;:::-;53526:43;;53365:212;;;:::o;11860:100::-;11914:13;11947:5;11940:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11860:100;:::o;13419:221::-;13495:7;13523:16;13531:7;13523;:16::i;:::-;13515:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13608:15;:24;13624:7;13608:24;;;;;;;;;;;;;;;;;;;;;13601:31;;13419:221;;;:::o;12942:411::-;13023:13;13039:23;13054:7;13039:14;:23::i;:::-;13023:39;;13087:5;13081:11;;:2;:11;;;;13073:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;13181:5;13165:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;13190:37;13207:5;13214:12;:10;:12::i;:::-;13190:16;:37::i;:::-;13165:62;13143:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;13324:21;13333:2;13337:7;13324:8;:21::i;:::-;13012:341;12942:411;;:::o;51248:778::-;51359:7;;;;;;;;;;;51352:14;;:3;:14;;;;51344:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;51432:1;51426:3;:7;;;51418:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;51509:9;;51503:3;51487:19;;:13;:11;:13::i;:::-;:19;;;;:::i;:::-;:31;51479:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;51577:36;51597:10;51609:3;51577:19;:36::i;:::-;51564:9;:49;;51556:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;51662:7;51657:362;51677:3;51675:5;;:1;:5;;;51657:362;;;51702:13;51718:25;:15;:23;:25::i;:::-;51702:41;;51758:28;51768:10;51780:5;51758:9;:28::i;:::-;51801:92;51814:5;51883:4;51888:1;51883:7;;;;;;;;;;:::i;:::-;;;;;;;;51828:63;;;;;;;;:::i;:::-;;;;;;;;;;;;;51801:12;:92::i;:::-;51908:27;:15;:25;:27::i;:::-;52006:1;51979:12;:24;51992:10;51979:24;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;;:::i;:::-;51952:12;:24;51965:10;51952:24;;;;;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;51687:332;51682:3;;;;;:::i;:::-;;;;51657:362;;;;51248:778;;:::o;32762:113::-;32823:7;32850:10;:17;;;;32843:24;;32762:113;:::o;14309:339::-;14504:41;14523:12;:10;:12::i;:::-;14537:7;14504:18;:41::i;:::-;14496:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;14612:28;14622:4;14628:2;14632:7;14612:9;:28::i;:::-;14309:339;;;:::o;32430:256::-;32527:7;32563:23;32580:5;32563:16;:23::i;:::-;32555:5;:31;32547:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;32652:12;:19;32665:5;32652:19;;;;;;;;;;;;;;;:26;32672:5;32652:26;;;;;;;;;;;;32645:33;;32430:256;;;;:::o;50220:120::-;26896:12;:10;:12::i;:::-;26885:23;;:7;:5;:7::i;:::-;:23;;;26877:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50292:10:::1;50284:24;;:47;50309:21;50284:47;;;;;;;;;;;;;;;;;;;;;;;50276:56;;;::::0;::::1;;50220:120::o:0;50147:65::-;26896:12;:10;:12::i;:::-;26885:23;;:7;:5;:7::i;:::-;:23;;;26877:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50194:10:::1;:8;:10::i;:::-;50147:65::o:0;14719:185::-;14857:39;14874:4;14880:2;14884:7;14857:39;;;;;;;;;;;;:16;:39::i;:::-;14719:185;;;:::o;25415:245::-;25533:41;25552:12;:10;:12::i;:::-;25566:7;25533:18;:41::i;:::-;25525:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;25638:14;25644:7;25638:5;:14::i;:::-;25415:245;:::o;32952:233::-;33027:7;33063:30;:28;:30::i;:::-;33055:5;:38;33047:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;33160:10;33171:5;33160:17;;;;;;;;:::i;:::-;;;;;;;;;;33153:24;;32952:233;;;:::o;29019:86::-;29066:4;29090:7;;;;;;;;;;;29083:14;;29019:86;:::o;11554:239::-;11626:7;11646:13;11662:7;:16;11670:7;11662:16;;;;;;;;;;;;;;;;;;;;;11646:32;;11714:1;11697:19;;:5;:19;;;;11689:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11780:5;11773:12;;;11554:239;;;:::o;11284:208::-;11356:7;11401:1;11384:19;;:5;:19;;;;11376:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11468:9;:16;11478:5;11468:16;;;;;;;;;;;;;;;;11461:23;;11284:208;;;:::o;27316:94::-;26896:12;:10;:12::i;:::-;26885:23;;:7;:5;:7::i;:::-;:23;;;26877:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27381:21:::1;27399:1;27381:9;:21::i;:::-;27316:94::o:0;49805:25::-;;;;;;;;;;;;;:::o;50470:337::-;50528:7;50589;:5;:7::i;:::-;50579:17;;:6;:17;;;50575:66;;;50620:9;50613:16;;;;50575:66;50725:1;50701:12;:20;50714:6;50701:20;;;;;;;;;;;;;;;;;;;;;;;;;:25;;;50697:74;;;50750:9;50743:16;;;;50697:74;50790:9;;50783:16;;50470:337;;;;:::o;50078:61::-;26896:12;:10;:12::i;:::-;26885:23;;:7;:5;:7::i;:::-;:23;;;26877:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50123:8:::1;:6;:8::i;:::-;50078:61::o:0;26665:87::-;26711:7;26738:6;;;;;;;;;;;26731:13;;26665:87;:::o;49766:32::-;;;;:::o;12029:104::-;12085:13;12118:7;12111:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12029:104;:::o;13712:295::-;13827:12;:10;:12::i;:::-;13815:24;;:8;:24;;;;13807:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;13927:8;13882:18;:32;13901:12;:10;:12::i;:::-;13882:32;;;;;;;;;;;;;;;:42;13915:8;13882:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;13980:8;13951:48;;13966:12;:10;:12::i;:::-;13951:48;;;13990:8;13951:48;;;;;;:::i;:::-;;;;;;;;13712:295;;:::o;50348:114::-;50409:5;50434:12;:20;50447:6;50434:20;;;;;;;;;;;;;;;;;;;;;;;;;50427:27;;50348:114;;;:::o;14975:328::-;15150:41;15169:12;:10;:12::i;:::-;15183:7;15150:18;:41::i;:::-;15142:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;15256:39;15270:4;15276:2;15280:7;15289:5;15256:13;:39::i;:::-;14975:328;;;;:::o;49721:38::-;;;;:::o;53161:196::-;53288:13;53326:23;53341:7;53326:14;:23::i;:::-;53319:30;;53161:196;;;:::o;50815:425::-;50892:7;50912:20;50935:9;;50912:32;;50998:7;:5;:7::i;:::-;50988:17;;:6;:17;;;50984:66;;;51029:9;51022:16;;;;;50984:66;51134:1;51110:12;:20;51123:6;51110:20;;;;;;;;;;;;;;;;;;;;;;;;;:25;;;51106:89;;;51171:12;51166:1;51160:3;:7;;;;:::i;:::-;51159:24;;;;;;:::i;:::-;51152:31;;;;;51106:89;51220:12;51214:3;:18;;;;;;:::i;:::-;51207:25;;;50815:425;;;;;:::o;52375:445::-;52500:4;52585:27;52629:20;;;;;;;;;;;52585:65;;52706:8;52665:49;;52673:13;:21;;;52695:5;52673:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52665:49;;;52661:93;;;52738:4;52731:11;;;;;52661:93;52773:39;52796:5;52803:8;52773:22;:39::i;:::-;52766:46;;;52375:445;;;;;:::o;27565:192::-;26896:12;:10;:12::i;:::-;26885:23;;:7;:5;:7::i;:::-;:23;;;26877:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27674:1:::1;27654:22;;:8;:22;;;;27646:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27730:19;27740:8;27730:9;:19::i;:::-;27565:192:::0;:::o;32122:224::-;32224:4;32263:35;32248:50;;;:11;:50;;;;:90;;;;32302:36;32326:11;32302:23;:36::i;:::-;32248:90;32241:97;;32122:224;;;:::o;16813:127::-;16878:4;16930:1;16902:30;;:7;:16;16910:7;16902:16;;;;;;;;;;;;;;;;;;;;;:30;;;;16895:37;;16813:127;;;:::o;2064:98::-;2117:7;2144:10;2137:17;;2064:98;:::o;20795:174::-;20897:2;20870:15;:24;20886:7;20870:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;20953:7;20949:2;20915:46;;20924:23;20939:7;20924:14;:23::i;:::-;20915:46;;;;;;;;;;;;20795:174;;:::o;848:114::-;913:7;940;:14;;;933:21;;848:114;;;:::o;17797:110::-;17873:26;17883:2;17887:7;17873:26;;;;;;;;;;;;:9;:26::i;:::-;17797:110;;:::o;24299:217::-;24399:16;24407:7;24399;:16::i;:::-;24391:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24499:9;24477:10;:19;24488:7;24477:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;24299:217;;:::o;970:127::-;1077:1;1059:7;:14;;;:19;;;;;;;;;;;970:127;:::o;17107:348::-;17200:4;17225:16;17233:7;17225;:16::i;:::-;17217:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;17301:13;17317:23;17332:7;17317:14;:23::i;:::-;17301:39;;17370:5;17359:16;;:7;:16;;;:51;;;;17403:7;17379:31;;:20;17391:7;17379:11;:20::i;:::-;:31;;;17359:51;:87;;;;17414:32;17431:5;17438:7;17414:16;:32::i;:::-;17359:87;17351:96;;;17107:348;;;;:::o;20099:578::-;20258:4;20231:31;;:23;20246:7;20231:14;:23::i;:::-;:31;;;20223:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;20341:1;20327:16;;:2;:16;;;;20319:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;20397:39;20418:4;20424:2;20428:7;20397:20;:39::i;:::-;20501:29;20518:1;20522:7;20501:8;:29::i;:::-;20562:1;20543:9;:15;20553:4;20543:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;20591:1;20574:9;:13;20584:2;20574:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;20622:2;20603:7;:16;20611:7;20603:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;20661:7;20657:2;20642:27;;20651:4;20642:27;;;;;;;;;;;;20099:578;;;:::o;30078:120::-;29622:8;:6;:8::i;:::-;29614:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;30147:5:::1;30137:7;;:15;;;;;;;;;;;;;;;;;;30168:22;30177:12;:10;:12::i;:::-;30168:22;;;;;;:::i;:::-;;;;;;;;30078:120::o:0;53038:115::-;53125:20;53137:7;53125:11;:20::i;:::-;53038:115;:::o;27765:173::-;27821:16;27840:6;;;;;;;;;;;27821:25;;27866:8;27857:6;;:17;;;;;;;;;;;;;;;;;;27921:8;27890:40;;27911:8;27890:40;;;;;;;;;;;;27810:128;27765:173;:::o;29819:118::-;29345:8;:6;:8::i;:::-;29344:9;29336:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;29889:4:::1;29879:7;;:14;;;;;;;;;;;;;;;;;;29909:20;29916:12;:10;:12::i;:::-;29909:20;;;;;;:::i;:::-;;;;;;;;29819:118::o:0;16185:315::-;16342:28;16352:4;16358:2;16362:7;16342:9;:28::i;:::-;16389:48;16412:4;16418:2;16422:7;16431:5;16389:22;:48::i;:::-;16381:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;16185:315;;;;:::o;23464:679::-;23537:13;23571:16;23579:7;23571;:16::i;:::-;23563:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;23654:23;23680:10;:19;23691:7;23680:19;;;;;;;;;;;23654:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23710:18;23731:10;:8;:10::i;:::-;23710:31;;23839:1;23823:4;23817:18;:23;23813:72;;;23864:9;23857:16;;;;;;23813:72;24015:1;23995:9;23989:23;:27;23985:108;;;24064:4;24070:9;24047:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24033:48;;;;;;23985:108;24112:23;24127:7;24112:14;:23::i;:::-;24105:30;;;;23464:679;;;;:::o;14078:164::-;14175:4;14199:18;:25;14218:5;14199:25;;;;;;;;;;;;;;;:35;14225:8;14199:35;;;;;;;;;;;;;;;;;;;;;;;;;14192:42;;14078:164;;;;:::o;10915:305::-;11017:4;11069:25;11054:40;;;:11;:40;;;;:105;;;;11126:33;11111:48;;;:11;:48;;;;11054:105;:158;;;;11176:36;11200:11;11176:23;:36::i;:::-;11054:158;11034:178;;10915:305;;;:::o;18134:321::-;18264:18;18270:2;18274:7;18264:5;:18::i;:::-;18315:54;18346:1;18350:2;18354:7;18363:5;18315:22;:54::i;:::-;18293:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;18134:321;;;:::o;52034:227::-;29345:8;:6;:8::i;:::-;29344:9;29336:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;52208:45:::1;52235:4;52241:2;52245:7;52208:26;:45::i;:::-;52034:227:::0;;;:::o;24745:206::-;24814:20;24826:7;24814:11;:20::i;:::-;24888:1;24857:10;:19;24868:7;24857:19;;;;;;;;;;;24851:33;;;;;:::i;:::-;;;:38;24847:97;;24913:10;:19;24924:7;24913:19;;;;;;;;;;;;24906:26;;;;:::i;:::-;24847:97;24745:206;:::o;21534:799::-;21689:4;21710:15;:2;:13;;;:15::i;:::-;21706:620;;;21762:2;21746:36;;;21783:12;:10;:12::i;:::-;21797:4;21803:7;21812:5;21746:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;21742:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22005:1;21988:6;:13;:18;21984:272;;;22031:60;;;;;;;;;;:::i;:::-;;;;;;;;21984:272;22206:6;22200:13;22191:6;22187:2;22183:15;22176:38;21742:529;21879:41;;;21869:51;;;:6;:51;;;;21862:58;;;;;21706:620;22310:4;22303:11;;21534:799;;;;;;;:::o;12786:94::-;12837:13;12863:9;;;;;;;;;;;;;;12786:94;:::o;12204:334::-;12277:13;12311:16;12319:7;12311;:16::i;:::-;12303:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;12392:21;12416:10;:8;:10::i;:::-;12392:34;;12468:1;12450:7;12444:21;:25;:86;;;;;;;;;;;;;;;;;12496:7;12505:18;:7;:16;:18::i;:::-;12479:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12444:86;12437:93;;;12204:334;;;:::o;3915:157::-;4000:4;4039:25;4024:40;;;:11;:40;;;;4017:47;;3915:157;;;:::o;18791:382::-;18885:1;18871:16;;:2;:16;;;;18863:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;18944:16;18952:7;18944;:16::i;:::-;18943:17;18935:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;19006:45;19035:1;19039:2;19043:7;19006:20;:45::i;:::-;19081:1;19064:9;:13;19074:2;19064:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;19112:2;19093:7;:16;19101:7;19093:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;19157:7;19153:2;19132:33;;19149:1;19132:33;;;;;;;;;;;;18791:382;;:::o;33798:589::-;33942:45;33969:4;33975:2;33979:7;33942:26;:45::i;:::-;34020:1;34004:18;;:4;:18;;;34000:187;;;34039:40;34071:7;34039:31;:40::i;:::-;34000:187;;;34109:2;34101:10;;:4;:10;;;34097:90;;34128:47;34161:4;34167:7;34128:32;:47::i;:::-;34097:90;34000:187;34215:1;34201:16;;:2;:16;;;34197:183;;;34234:45;34271:7;34234:36;:45::i;:::-;34197:183;;;34307:4;34301:10;;:2;:10;;;34297:83;;34328:40;34356:2;34360:7;34328:27;:40::i;:::-;34297:83;34197:183;33798:589;;;:::o;19402:360::-;19462:13;19478:23;19493:7;19478:14;:23::i;:::-;19462:39;;19514:48;19535:5;19550:1;19554:7;19514:20;:48::i;:::-;19603:29;19620:1;19624:7;19603:8;:29::i;:::-;19665:1;19645:9;:16;19655:5;19645:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;19684:7;:16;19692:7;19684:16;;;;;;;;;;;;19677:23;;;;;;;;;;;19746:7;19742:1;19718:36;;19727:5;19718:36;;;;;;;;;;;;19451:311;19402:360;:::o;41102:387::-;41162:4;41370:12;41437:7;41425:20;41417:28;;41480:1;41473:4;:8;41466:15;;;41102:387;;;:::o;38579:723::-;38635:13;38865:1;38856:5;:10;38852:53;;;38883:10;;;;;;;;;;;;;;;;;;;;;38852:53;38915:12;38930:5;38915:20;;38946:14;38971:78;38986:1;38978:4;:9;38971:78;;39004:8;;;;;:::i;:::-;;;;39035:2;39027:10;;;;;:::i;:::-;;;38971:78;;;39059:19;39091:6;39081:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39059:39;;39109:154;39125:1;39116:5;:10;39109:154;;39153:1;39143:11;;;;;:::i;:::-;;;39220:2;39212:5;:10;;;;:::i;:::-;39199:2;:24;;;;:::i;:::-;39186:39;;39169:6;39176;39169:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;39249:2;39240:11;;;;;:::i;:::-;;;39109:154;;;39287:6;39273:21;;;;;38579:723;;;;:::o;22905:126::-;;;;:::o;35110:164::-;35214:10;:17;;;;35187:15;:24;35203:7;35187:24;;;;;;;;;;;:44;;;;35242:10;35258:7;35242:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35110:164;:::o;35901:988::-;36167:22;36217:1;36192:22;36209:4;36192:16;:22::i;:::-;:26;;;;:::i;:::-;36167:51;;36229:18;36250:17;:26;36268:7;36250:26;;;;;;;;;;;;36229:47;;36397:14;36383:10;:28;36379:328;;36428:19;36450:12;:18;36463:4;36450:18;;;;;;;;;;;;;;;:34;36469:14;36450:34;;;;;;;;;;;;36428:56;;36534:11;36501:12;:18;36514:4;36501:18;;;;;;;;;;;;;;;:30;36520:10;36501:30;;;;;;;;;;;:44;;;;36651:10;36618:17;:30;36636:11;36618:30;;;;;;;;;;;:43;;;;36413:294;36379:328;36803:17;:26;36821:7;36803:26;;;;;;;;;;;36796:33;;;36847:12;:18;36860:4;36847:18;;;;;;;;;;;;;;;:34;36866:14;36847:34;;;;;;;;;;;36840:41;;;35982:907;;35901:988;;:::o;37184:1079::-;37437:22;37482:1;37462:10;:17;;;;:21;;;;:::i;:::-;37437:46;;37494:18;37515:15;:24;37531:7;37515:24;;;;;;;;;;;;37494:45;;37866:19;37888:10;37899:14;37888:26;;;;;;;;:::i;:::-;;;;;;;;;;37866:48;;37952:11;37927:10;37938;37927:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;38063:10;38032:15;:28;38048:11;38032:28;;;;;;;;;;;:41;;;;38204:15;:24;38220:7;38204:24;;;;;;;;;;;38197:31;;;38239:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37255:1008;;;37184:1079;:::o;34688:221::-;34773:14;34790:20;34807:2;34790:16;:20::i;:::-;34773:37;;34848:7;34821:12;:16;34834:2;34821:16;;;;;;;;;;;;;;;:24;34838:6;34821:24;;;;;;;;;;;:34;;;;34895:6;34866:17;:26;34884:7;34866:26;;;;;;;;;;;:35;;;;34762:147;34688:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;23:957:1:-;129:5;154:91;170:74;237:6;170:74;:::i;:::-;154:91;:::i;:::-;145:100;;265:5;294:6;287:5;280:21;328:4;321:5;317:16;310:23;;354:6;404:3;396:4;388:6;384:17;379:3;375:27;372:36;369:143;;;423:79;;:::i;:::-;369:143;536:1;521:453;546:6;543:1;540:13;521:453;;;628:3;615:17;664:18;651:11;648:35;645:122;;;686:79;;:::i;:::-;645:122;810:11;802:6;798:24;848:47;891:3;879:10;848:47;:::i;:::-;843:3;836:60;925:4;920:3;916:14;909:21;;959:4;954:3;950:14;943:21;;581:393;;568:1;565;561:9;556:14;;521:453;;;525:14;135:845;;23:957;;;;;:::o;986:410::-;1063:5;1088:65;1104:48;1145:6;1104:48;:::i;:::-;1088:65;:::i;:::-;1079:74;;1176:6;1169:5;1162:21;1214:4;1207:5;1203:16;1252:3;1243:6;1238:3;1234:16;1231:25;1228:112;;;1259:79;;:::i;:::-;1228:112;1349:41;1383:6;1378:3;1373;1349:41;:::i;:::-;1069:327;986:410;;;;;:::o;1402:412::-;1480:5;1505:66;1521:49;1563:6;1521:49;:::i;:::-;1505:66;:::i;:::-;1496:75;;1594:6;1587:5;1580:21;1632:4;1625:5;1621:16;1670:3;1661:6;1656:3;1652:16;1649:25;1646:112;;;1677:79;;:::i;:::-;1646:112;1767:41;1801:6;1796:3;1791;1767:41;:::i;:::-;1486:328;1402:412;;;;;:::o;1820:139::-;1866:5;1904:6;1891:20;1882:29;;1920:33;1947:5;1920:33;:::i;:::-;1820:139;;;;:::o;1981:390::-;2062:5;2111:3;2104:4;2096:6;2092:17;2088:27;2078:122;;2119:79;;:::i;:::-;2078:122;2236:6;2223:20;2261:104;2361:3;2353:6;2346:4;2338:6;2334:17;2261:104;:::i;:::-;2252:113;;2068:303;1981:390;;;;:::o;2377:133::-;2420:5;2458:6;2445:20;2436:29;;2474:30;2498:5;2474:30;:::i;:::-;2377:133;;;;:::o;2516:137::-;2561:5;2599:6;2586:20;2577:29;;2615:32;2641:5;2615:32;:::i;:::-;2516:137;;;;:::o;2659:141::-;2715:5;2746:6;2740:13;2731:22;;2762:32;2788:5;2762:32;:::i;:::-;2659:141;;;;:::o;2819:338::-;2874:5;2923:3;2916:4;2908:6;2904:17;2900:27;2890:122;;2931:79;;:::i;:::-;2890:122;3048:6;3035:20;3073:78;3147:3;3139:6;3132:4;3124:6;3120:17;3073:78;:::i;:::-;3064:87;;2880:277;2819:338;;;;:::o;3163:201::-;3249:5;3280:6;3274:13;3265:22;;3296:62;3352:5;3296:62;:::i;:::-;3163:201;;;;:::o;3384:340::-;3440:5;3489:3;3482:4;3474:6;3470:17;3466:27;3456:122;;3497:79;;:::i;:::-;3456:122;3614:6;3601:20;3639:79;3714:3;3706:6;3699:4;3691:6;3687:17;3639:79;:::i;:::-;3630:88;;3446:278;3384:340;;;;:::o;3730:139::-;3776:5;3814:6;3801:20;3792:29;;3830:33;3857:5;3830:33;:::i;:::-;3730:139;;;;:::o;3875:135::-;3919:5;3957:6;3944:20;3935:29;;3973:31;3998:5;3973:31;:::i;:::-;3875:135;;;;:::o;4016:329::-;4075:6;4124:2;4112:9;4103:7;4099:23;4095:32;4092:119;;;4130:79;;:::i;:::-;4092:119;4250:1;4275:53;4320:7;4311:6;4300:9;4296:22;4275:53;:::i;:::-;4265:63;;4221:117;4016:329;;;;:::o;4351:474::-;4419:6;4427;4476:2;4464:9;4455:7;4451:23;4447:32;4444:119;;;4482:79;;:::i;:::-;4444:119;4602:1;4627:53;4672:7;4663:6;4652:9;4648:22;4627:53;:::i;:::-;4617:63;;4573:117;4729:2;4755:53;4800:7;4791:6;4780:9;4776:22;4755:53;:::i;:::-;4745:63;;4700:118;4351:474;;;;;:::o;4831:619::-;4908:6;4916;4924;4973:2;4961:9;4952:7;4948:23;4944:32;4941:119;;;4979:79;;:::i;:::-;4941:119;5099:1;5124:53;5169:7;5160:6;5149:9;5145:22;5124:53;:::i;:::-;5114:63;;5070:117;5226:2;5252:53;5297:7;5288:6;5277:9;5273:22;5252:53;:::i;:::-;5242:63;;5197:118;5354:2;5380:53;5425:7;5416:6;5405:9;5401:22;5380:53;:::i;:::-;5370:63;;5325:118;4831:619;;;;;:::o;5456:943::-;5551:6;5559;5567;5575;5624:3;5612:9;5603:7;5599:23;5595:33;5592:120;;;5631:79;;:::i;:::-;5592:120;5751:1;5776:53;5821:7;5812:6;5801:9;5797:22;5776:53;:::i;:::-;5766:63;;5722:117;5878:2;5904:53;5949:7;5940:6;5929:9;5925:22;5904:53;:::i;:::-;5894:63;;5849:118;6006:2;6032:53;6077:7;6068:6;6057:9;6053:22;6032:53;:::i;:::-;6022:63;;5977:118;6162:2;6151:9;6147:18;6134:32;6193:18;6185:6;6182:30;6179:117;;;6215:79;;:::i;:::-;6179:117;6320:62;6374:7;6365:6;6354:9;6350:22;6320:62;:::i;:::-;6310:72;;6105:287;5456:943;;;;;;;:::o;6405:468::-;6470:6;6478;6527:2;6515:9;6506:7;6502:23;6498:32;6495:119;;;6533:79;;:::i;:::-;6495:119;6653:1;6678:53;6723:7;6714:6;6703:9;6699:22;6678:53;:::i;:::-;6668:63;;6624:117;6780:2;6806:50;6848:7;6839:6;6828:9;6824:22;6806:50;:::i;:::-;6796:60;;6751:115;6405:468;;;;;:::o;6879:474::-;6947:6;6955;7004:2;6992:9;6983:7;6979:23;6975:32;6972:119;;;7010:79;;:::i;:::-;6972:119;7130:1;7155:53;7200:7;7191:6;7180:9;7176:22;7155:53;:::i;:::-;7145:63;;7101:117;7257:2;7283:53;7328:7;7319:6;7308:9;7304:22;7283:53;:::i;:::-;7273:63;;7228:118;6879:474;;;;;:::o;7359:470::-;7425:6;7433;7482:2;7470:9;7461:7;7457:23;7453:32;7450:119;;;7488:79;;:::i;:::-;7450:119;7608:1;7633:53;7678:7;7669:6;7658:9;7654:22;7633:53;:::i;:::-;7623:63;;7579:117;7735:2;7761:51;7804:7;7795:6;7784:9;7780:22;7761:51;:::i;:::-;7751:61;;7706:116;7359:470;;;;;:::o;7835:327::-;7893:6;7942:2;7930:9;7921:7;7917:23;7913:32;7910:119;;;7948:79;;:::i;:::-;7910:119;8068:1;8093:52;8137:7;8128:6;8117:9;8113:22;8093:52;:::i;:::-;8083:62;;8039:116;7835:327;;;;:::o;8168:349::-;8237:6;8286:2;8274:9;8265:7;8261:23;8257:32;8254:119;;;8292:79;;:::i;:::-;8254:119;8412:1;8437:63;8492:7;8483:6;8472:9;8468:22;8437:63;:::i;:::-;8427:73;;8383:127;8168:349;;;;:::o;8523:409::-;8622:6;8671:2;8659:9;8650:7;8646:23;8642:32;8639:119;;;8677:79;;:::i;:::-;8639:119;8797:1;8822:93;8907:7;8898:6;8887:9;8883:22;8822:93;:::i;:::-;8812:103;;8768:157;8523:409;;;;:::o;8938:329::-;8997:6;9046:2;9034:9;9025:7;9021:23;9017:32;9014:119;;;9052:79;;:::i;:::-;9014:119;9172:1;9197:53;9242:7;9233:6;9222:9;9218:22;9197:53;:::i;:::-;9187:63;;9143:117;8938:329;;;;:::o;9273:700::-;9374:6;9382;9431:2;9419:9;9410:7;9406:23;9402:32;9399:119;;;9437:79;;:::i;:::-;9399:119;9557:1;9582:51;9625:7;9616:6;9605:9;9601:22;9582:51;:::i;:::-;9572:61;;9528:115;9710:2;9699:9;9695:18;9682:32;9741:18;9733:6;9730:30;9727:117;;;9763:79;;:::i;:::-;9727:117;9868:88;9948:7;9939:6;9928:9;9924:22;9868:88;:::i;:::-;9858:98;;9653:313;9273:700;;;;;:::o;9979:118::-;10066:24;10084:5;10066:24;:::i;:::-;10061:3;10054:37;9979:118;;:::o;10103:109::-;10184:21;10199:5;10184:21;:::i;:::-;10179:3;10172:34;10103:109;;:::o;10218:360::-;10304:3;10332:38;10364:5;10332:38;:::i;:::-;10386:70;10449:6;10444:3;10386:70;:::i;:::-;10379:77;;10465:52;10510:6;10505:3;10498:4;10491:5;10487:16;10465:52;:::i;:::-;10542:29;10564:6;10542:29;:::i;:::-;10537:3;10533:39;10526:46;;10308:270;10218:360;;;;:::o;10584:364::-;10672:3;10700:39;10733:5;10700:39;:::i;:::-;10755:71;10819:6;10814:3;10755:71;:::i;:::-;10748:78;;10835:52;10880:6;10875:3;10868:4;10861:5;10857:16;10835:52;:::i;:::-;10912:29;10934:6;10912:29;:::i;:::-;10907:3;10903:39;10896:46;;10676:272;10584:364;;;;:::o;10954:377::-;11060:3;11088:39;11121:5;11088:39;:::i;:::-;11143:89;11225:6;11220:3;11143:89;:::i;:::-;11136:96;;11241:52;11286:6;11281:3;11274:4;11267:5;11263:16;11241:52;:::i;:::-;11318:6;11313:3;11309:16;11302:23;;11064:267;10954:377;;;;:::o;11337:366::-;11479:3;11500:67;11564:2;11559:3;11500:67;:::i;:::-;11493:74;;11576:93;11665:3;11576:93;:::i;:::-;11694:2;11689:3;11685:12;11678:19;;11337:366;;;:::o;11709:::-;11851:3;11872:67;11936:2;11931:3;11872:67;:::i;:::-;11865:74;;11948:93;12037:3;11948:93;:::i;:::-;12066:2;12061:3;12057:12;12050:19;;11709:366;;;:::o;12081:::-;12223:3;12244:67;12308:2;12303:3;12244:67;:::i;:::-;12237:74;;12320:93;12409:3;12320:93;:::i;:::-;12438:2;12433:3;12429:12;12422:19;;12081:366;;;:::o;12453:::-;12595:3;12616:67;12680:2;12675:3;12616:67;:::i;:::-;12609:74;;12692:93;12781:3;12692:93;:::i;:::-;12810:2;12805:3;12801:12;12794:19;;12453:366;;;:::o;12825:::-;12967:3;12988:67;13052:2;13047:3;12988:67;:::i;:::-;12981:74;;13064:93;13153:3;13064:93;:::i;:::-;13182:2;13177:3;13173:12;13166:19;;12825:366;;;:::o;13197:::-;13339:3;13360:67;13424:2;13419:3;13360:67;:::i;:::-;13353:74;;13436:93;13525:3;13436:93;:::i;:::-;13554:2;13549:3;13545:12;13538:19;;13197:366;;;:::o;13569:::-;13711:3;13732:67;13796:2;13791:3;13732:67;:::i;:::-;13725:74;;13808:93;13897:3;13808:93;:::i;:::-;13926:2;13921:3;13917:12;13910:19;;13569:366;;;:::o;13941:::-;14083:3;14104:67;14168:2;14163:3;14104:67;:::i;:::-;14097:74;;14180:93;14269:3;14180:93;:::i;:::-;14298:2;14293:3;14289:12;14282:19;;13941:366;;;:::o;14313:::-;14455:3;14476:67;14540:2;14535:3;14476:67;:::i;:::-;14469:74;;14552:93;14641:3;14552:93;:::i;:::-;14670:2;14665:3;14661:12;14654:19;;14313:366;;;:::o;14685:::-;14827:3;14848:67;14912:2;14907:3;14848:67;:::i;:::-;14841:74;;14924:93;15013:3;14924:93;:::i;:::-;15042:2;15037:3;15033:12;15026:19;;14685:366;;;:::o;15057:::-;15199:3;15220:67;15284:2;15279:3;15220:67;:::i;:::-;15213:74;;15296:93;15385:3;15296:93;:::i;:::-;15414:2;15409:3;15405:12;15398:19;;15057:366;;;:::o;15429:::-;15571:3;15592:67;15656:2;15651:3;15592:67;:::i;:::-;15585:74;;15668:93;15757:3;15668:93;:::i;:::-;15786:2;15781:3;15777:12;15770:19;;15429:366;;;:::o;15801:::-;15943:3;15964:67;16028:2;16023:3;15964:67;:::i;:::-;15957:74;;16040:93;16129:3;16040:93;:::i;:::-;16158:2;16153:3;16149:12;16142:19;;15801:366;;;:::o;16173:::-;16315:3;16336:67;16400:2;16395:3;16336:67;:::i;:::-;16329:74;;16412:93;16501:3;16412:93;:::i;:::-;16530:2;16525:3;16521:12;16514:19;;16173:366;;;:::o;16545:::-;16687:3;16708:67;16772:2;16767:3;16708:67;:::i;:::-;16701:74;;16784:93;16873:3;16784:93;:::i;:::-;16902:2;16897:3;16893:12;16886:19;;16545:366;;;:::o;16917:::-;17059:3;17080:67;17144:2;17139:3;17080:67;:::i;:::-;17073:74;;17156:93;17245:3;17156:93;:::i;:::-;17274:2;17269:3;17265:12;17258:19;;16917:366;;;:::o;17289:::-;17431:3;17452:67;17516:2;17511:3;17452:67;:::i;:::-;17445:74;;17528:93;17617:3;17528:93;:::i;:::-;17646:2;17641:3;17637:12;17630:19;;17289:366;;;:::o;17661:::-;17803:3;17824:67;17888:2;17883:3;17824:67;:::i;:::-;17817:74;;17900:93;17989:3;17900:93;:::i;:::-;18018:2;18013:3;18009:12;18002:19;;17661:366;;;:::o;18033:::-;18175:3;18196:67;18260:2;18255:3;18196:67;:::i;:::-;18189:74;;18272:93;18361:3;18272:93;:::i;:::-;18390:2;18385:3;18381:12;18374:19;;18033:366;;;:::o;18405:::-;18547:3;18568:67;18632:2;18627:3;18568:67;:::i;:::-;18561:74;;18644:93;18733:3;18644:93;:::i;:::-;18762:2;18757:3;18753:12;18746:19;;18405:366;;;:::o;18777:402::-;18937:3;18958:85;19040:2;19035:3;18958:85;:::i;:::-;18951:92;;19052:93;19141:3;19052:93;:::i;:::-;19170:2;19165:3;19161:12;19154:19;;18777:402;;;:::o;19185:366::-;19327:3;19348:67;19412:2;19407:3;19348:67;:::i;:::-;19341:74;;19424:93;19513:3;19424:93;:::i;:::-;19542:2;19537:3;19533:12;19526:19;;19185:366;;;:::o;19557:::-;19699:3;19720:67;19784:2;19779:3;19720:67;:::i;:::-;19713:74;;19796:93;19885:3;19796:93;:::i;:::-;19914:2;19909:3;19905:12;19898:19;;19557:366;;;:::o;19929:::-;20071:3;20092:67;20156:2;20151:3;20092:67;:::i;:::-;20085:74;;20168:93;20257:3;20168:93;:::i;:::-;20286:2;20281:3;20277:12;20270:19;;19929:366;;;:::o;20301:::-;20443:3;20464:67;20528:2;20523:3;20464:67;:::i;:::-;20457:74;;20540:93;20629:3;20540:93;:::i;:::-;20658:2;20653:3;20649:12;20642:19;;20301:366;;;:::o;20673:::-;20815:3;20836:67;20900:2;20895:3;20836:67;:::i;:::-;20829:74;;20912:93;21001:3;20912:93;:::i;:::-;21030:2;21025:3;21021:12;21014:19;;20673:366;;;:::o;21045:::-;21187:3;21208:67;21272:2;21267:3;21208:67;:::i;:::-;21201:74;;21284:93;21373:3;21284:93;:::i;:::-;21402:2;21397:3;21393:12;21386:19;;21045:366;;;:::o;21417:::-;21559:3;21580:67;21644:2;21639:3;21580:67;:::i;:::-;21573:74;;21656:93;21745:3;21656:93;:::i;:::-;21774:2;21769:3;21765:12;21758:19;;21417:366;;;:::o;21789:118::-;21876:24;21894:5;21876:24;:::i;:::-;21871:3;21864:37;21789:118;;:::o;21913:112::-;21996:22;22012:5;21996:22;:::i;:::-;21991:3;21984:35;21913:112;;:::o;22031:435::-;22211:3;22233:95;22324:3;22315:6;22233:95;:::i;:::-;22226:102;;22345:95;22436:3;22427:6;22345:95;:::i;:::-;22338:102;;22457:3;22450:10;;22031:435;;;;;:::o;22472:541::-;22705:3;22727:148;22871:3;22727:148;:::i;:::-;22720:155;;22892:95;22983:3;22974:6;22892:95;:::i;:::-;22885:102;;23004:3;22997:10;;22472:541;;;;:::o;23019:222::-;23112:4;23150:2;23139:9;23135:18;23127:26;;23163:71;23231:1;23220:9;23216:17;23207:6;23163:71;:::i;:::-;23019:222;;;;:::o;23247:640::-;23442:4;23480:3;23469:9;23465:19;23457:27;;23494:71;23562:1;23551:9;23547:17;23538:6;23494:71;:::i;:::-;23575:72;23643:2;23632:9;23628:18;23619:6;23575:72;:::i;:::-;23657;23725:2;23714:9;23710:18;23701:6;23657:72;:::i;:::-;23776:9;23770:4;23766:20;23761:2;23750:9;23746:18;23739:48;23804:76;23875:4;23866:6;23804:76;:::i;:::-;23796:84;;23247:640;;;;;;;:::o;23893:210::-;23980:4;24018:2;24007:9;24003:18;23995:26;;24031:65;24093:1;24082:9;24078:17;24069:6;24031:65;:::i;:::-;23893:210;;;;:::o;24109:313::-;24222:4;24260:2;24249:9;24245:18;24237:26;;24309:9;24303:4;24299:20;24295:1;24284:9;24280:17;24273:47;24337:78;24410:4;24401:6;24337:78;:::i;:::-;24329:86;;24109:313;;;;:::o;24428:419::-;24594:4;24632:2;24621:9;24617:18;24609:26;;24681:9;24675:4;24671:20;24667:1;24656:9;24652:17;24645:47;24709:131;24835:4;24709:131;:::i;:::-;24701:139;;24428:419;;;:::o;24853:::-;25019:4;25057:2;25046:9;25042:18;25034:26;;25106:9;25100:4;25096:20;25092:1;25081:9;25077:17;25070:47;25134:131;25260:4;25134:131;:::i;:::-;25126:139;;24853:419;;;:::o;25278:::-;25444:4;25482:2;25471:9;25467:18;25459:26;;25531:9;25525:4;25521:20;25517:1;25506:9;25502:17;25495:47;25559:131;25685:4;25559:131;:::i;:::-;25551:139;;25278:419;;;:::o;25703:::-;25869:4;25907:2;25896:9;25892:18;25884:26;;25956:9;25950:4;25946:20;25942:1;25931:9;25927:17;25920:47;25984:131;26110:4;25984:131;:::i;:::-;25976:139;;25703:419;;;:::o;26128:::-;26294:4;26332:2;26321:9;26317:18;26309:26;;26381:9;26375:4;26371:20;26367:1;26356:9;26352:17;26345:47;26409:131;26535:4;26409:131;:::i;:::-;26401:139;;26128:419;;;:::o;26553:::-;26719:4;26757:2;26746:9;26742:18;26734:26;;26806:9;26800:4;26796:20;26792:1;26781:9;26777:17;26770:47;26834:131;26960:4;26834:131;:::i;:::-;26826:139;;26553:419;;;:::o;26978:::-;27144:4;27182:2;27171:9;27167:18;27159:26;;27231:9;27225:4;27221:20;27217:1;27206:9;27202:17;27195:47;27259:131;27385:4;27259:131;:::i;:::-;27251:139;;26978:419;;;:::o;27403:::-;27569:4;27607:2;27596:9;27592:18;27584:26;;27656:9;27650:4;27646:20;27642:1;27631:9;27627:17;27620:47;27684:131;27810:4;27684:131;:::i;:::-;27676:139;;27403:419;;;:::o;27828:::-;27994:4;28032:2;28021:9;28017:18;28009:26;;28081:9;28075:4;28071:20;28067:1;28056:9;28052:17;28045:47;28109:131;28235:4;28109:131;:::i;:::-;28101:139;;27828:419;;;:::o;28253:::-;28419:4;28457:2;28446:9;28442:18;28434:26;;28506:9;28500:4;28496:20;28492:1;28481:9;28477:17;28470:47;28534:131;28660:4;28534:131;:::i;:::-;28526:139;;28253:419;;;:::o;28678:::-;28844:4;28882:2;28871:9;28867:18;28859:26;;28931:9;28925:4;28921:20;28917:1;28906:9;28902:17;28895:47;28959:131;29085:4;28959:131;:::i;:::-;28951:139;;28678:419;;;:::o;29103:::-;29269:4;29307:2;29296:9;29292:18;29284:26;;29356:9;29350:4;29346:20;29342:1;29331:9;29327:17;29320:47;29384:131;29510:4;29384:131;:::i;:::-;29376:139;;29103:419;;;:::o;29528:::-;29694:4;29732:2;29721:9;29717:18;29709:26;;29781:9;29775:4;29771:20;29767:1;29756:9;29752:17;29745:47;29809:131;29935:4;29809:131;:::i;:::-;29801:139;;29528:419;;;:::o;29953:::-;30119:4;30157:2;30146:9;30142:18;30134:26;;30206:9;30200:4;30196:20;30192:1;30181:9;30177:17;30170:47;30234:131;30360:4;30234:131;:::i;:::-;30226:139;;29953:419;;;:::o;30378:::-;30544:4;30582:2;30571:9;30567:18;30559:26;;30631:9;30625:4;30621:20;30617:1;30606:9;30602:17;30595:47;30659:131;30785:4;30659:131;:::i;:::-;30651:139;;30378:419;;;:::o;30803:::-;30969:4;31007:2;30996:9;30992:18;30984:26;;31056:9;31050:4;31046:20;31042:1;31031:9;31027:17;31020:47;31084:131;31210:4;31084:131;:::i;:::-;31076:139;;30803:419;;;:::o;31228:::-;31394:4;31432:2;31421:9;31417:18;31409:26;;31481:9;31475:4;31471:20;31467:1;31456:9;31452:17;31445:47;31509:131;31635:4;31509:131;:::i;:::-;31501:139;;31228:419;;;:::o;31653:::-;31819:4;31857:2;31846:9;31842:18;31834:26;;31906:9;31900:4;31896:20;31892:1;31881:9;31877:17;31870:47;31934:131;32060:4;31934:131;:::i;:::-;31926:139;;31653:419;;;:::o;32078:::-;32244:4;32282:2;32271:9;32267:18;32259:26;;32331:9;32325:4;32321:20;32317:1;32306:9;32302:17;32295:47;32359:131;32485:4;32359:131;:::i;:::-;32351:139;;32078:419;;;:::o;32503:::-;32669:4;32707:2;32696:9;32692:18;32684:26;;32756:9;32750:4;32746:20;32742:1;32731:9;32727:17;32720:47;32784:131;32910:4;32784:131;:::i;:::-;32776:139;;32503:419;;;:::o;32928:::-;33094:4;33132:2;33121:9;33117:18;33109:26;;33181:9;33175:4;33171:20;33167:1;33156:9;33152:17;33145:47;33209:131;33335:4;33209:131;:::i;:::-;33201:139;;32928:419;;;:::o;33353:::-;33519:4;33557:2;33546:9;33542:18;33534:26;;33606:9;33600:4;33596:20;33592:1;33581:9;33577:17;33570:47;33634:131;33760:4;33634:131;:::i;:::-;33626:139;;33353:419;;;:::o;33778:::-;33944:4;33982:2;33971:9;33967:18;33959:26;;34031:9;34025:4;34021:20;34017:1;34006:9;34002:17;33995:47;34059:131;34185:4;34059:131;:::i;:::-;34051:139;;33778:419;;;:::o;34203:::-;34369:4;34407:2;34396:9;34392:18;34384:26;;34456:9;34450:4;34446:20;34442:1;34431:9;34427:17;34420:47;34484:131;34610:4;34484:131;:::i;:::-;34476:139;;34203:419;;;:::o;34628:::-;34794:4;34832:2;34821:9;34817:18;34809:26;;34881:9;34875:4;34871:20;34867:1;34856:9;34852:17;34845:47;34909:131;35035:4;34909:131;:::i;:::-;34901:139;;34628:419;;;:::o;35053:::-;35219:4;35257:2;35246:9;35242:18;35234:26;;35306:9;35300:4;35296:20;35292:1;35281:9;35277:17;35270:47;35334:131;35460:4;35334:131;:::i;:::-;35326:139;;35053:419;;;:::o;35478:::-;35644:4;35682:2;35671:9;35667:18;35659:26;;35731:9;35725:4;35721:20;35717:1;35706:9;35702:17;35695:47;35759:131;35885:4;35759:131;:::i;:::-;35751:139;;35478:419;;;:::o;35903:222::-;35996:4;36034:2;36023:9;36019:18;36011:26;;36047:71;36115:1;36104:9;36100:17;36091:6;36047:71;:::i;:::-;35903:222;;;;:::o;36131:214::-;36220:4;36258:2;36247:9;36243:18;36235:26;;36271:67;36335:1;36324:9;36320:17;36311:6;36271:67;:::i;:::-;36131:214;;;;:::o;36351:129::-;36385:6;36412:20;;:::i;:::-;36402:30;;36441:33;36469:4;36461:6;36441:33;:::i;:::-;36351:129;;;:::o;36486:75::-;36519:6;36552:2;36546:9;36536:19;;36486:75;:::o;36567:321::-;36654:4;36744:18;36736:6;36733:30;36730:56;;;36766:18;;:::i;:::-;36730:56;36816:4;36808:6;36804:17;36796:25;;36876:4;36870;36866:15;36858:23;;36567:321;;;:::o;36894:307::-;36955:4;37045:18;37037:6;37034:30;37031:56;;;37067:18;;:::i;:::-;37031:56;37105:29;37127:6;37105:29;:::i;:::-;37097:37;;37189:4;37183;37179:15;37171:23;;36894:307;;;:::o;37207:308::-;37269:4;37359:18;37351:6;37348:30;37345:56;;;37381:18;;:::i;:::-;37345:56;37419:29;37441:6;37419:29;:::i;:::-;37411:37;;37503:4;37497;37493:15;37485:23;;37207:308;;;:::o;37521:98::-;37572:6;37606:5;37600:12;37590:22;;37521:98;;;:::o;37625:99::-;37677:6;37711:5;37705:12;37695:22;;37625:99;;;:::o;37730:168::-;37813:11;37847:6;37842:3;37835:19;37887:4;37882:3;37878:14;37863:29;;37730:168;;;;:::o;37904:169::-;37988:11;38022:6;38017:3;38010:19;38062:4;38057:3;38053:14;38038:29;;37904:169;;;;:::o;38079:148::-;38181:11;38218:3;38203:18;;38079:148;;;;:::o;38233:305::-;38273:3;38292:20;38310:1;38292:20;:::i;:::-;38287:25;;38326:20;38344:1;38326:20;:::i;:::-;38321:25;;38480:1;38412:66;38408:74;38405:1;38402:81;38399:107;;;38486:18;;:::i;:::-;38399:107;38530:1;38527;38523:9;38516:16;;38233:305;;;;:::o;38544:237::-;38582:3;38601:18;38617:1;38601:18;:::i;:::-;38596:23;;38633:18;38649:1;38633:18;:::i;:::-;38628:23;;38723:1;38717:4;38713:12;38710:1;38707:19;38704:45;;;38729:18;;:::i;:::-;38704:45;38773:1;38770;38766:9;38759:16;;38544:237;;;;:::o;38787:185::-;38827:1;38844:20;38862:1;38844:20;:::i;:::-;38839:25;;38878:20;38896:1;38878:20;:::i;:::-;38873:25;;38917:1;38907:35;;38922:18;;:::i;:::-;38907:35;38964:1;38961;38957:9;38952:14;;38787:185;;;;:::o;38978:348::-;39018:7;39041:20;39059:1;39041:20;:::i;:::-;39036:25;;39075:20;39093:1;39075:20;:::i;:::-;39070:25;;39263:1;39195:66;39191:74;39188:1;39185:81;39180:1;39173:9;39166:17;39162:105;39159:131;;;39270:18;;:::i;:::-;39159:131;39318:1;39315;39311:9;39300:20;;38978:348;;;;:::o;39332:191::-;39372:4;39392:20;39410:1;39392:20;:::i;:::-;39387:25;;39426:20;39444:1;39426:20;:::i;:::-;39421:25;;39465:1;39462;39459:8;39456:34;;;39470:18;;:::i;:::-;39456:34;39515:1;39512;39508:9;39500:17;;39332:191;;;;:::o;39529:185::-;39567:4;39587:18;39603:1;39587:18;:::i;:::-;39582:23;;39619:18;39635:1;39619:18;:::i;:::-;39614:23;;39656:1;39653;39650:8;39647:34;;;39661:18;;:::i;:::-;39647:34;39706:1;39703;39699:9;39691:17;;39529:185;;;;:::o;39720:96::-;39757:7;39786:24;39804:5;39786:24;:::i;:::-;39775:35;;39720:96;;;:::o;39822:90::-;39856:7;39899:5;39892:13;39885:21;39874:32;;39822:90;;;:::o;39918:149::-;39954:7;39994:66;39987:5;39983:78;39972:89;;39918:149;;;:::o;40073:125::-;40139:7;40168:24;40186:5;40168:24;:::i;:::-;40157:35;;40073:125;;;:::o;40204:126::-;40241:7;40281:42;40274:5;40270:54;40259:65;;40204:126;;;:::o;40336:77::-;40373:7;40402:5;40391:16;;40336:77;;;:::o;40419:86::-;40454:7;40494:4;40487:5;40483:16;40472:27;;40419:86;;;:::o;40511:154::-;40595:6;40590:3;40585;40572:30;40657:1;40648:6;40643:3;40639:16;40632:27;40511:154;;;:::o;40671:307::-;40739:1;40749:113;40763:6;40760:1;40757:13;40749:113;;;40848:1;40843:3;40839:11;40833:18;40829:1;40824:3;40820:11;40813:39;40785:2;40782:1;40778:10;40773:15;;40749:113;;;40880:6;40877:1;40874:13;40871:101;;;40960:1;40951:6;40946:3;40942:16;40935:27;40871:101;40720:258;40671:307;;;:::o;40984:320::-;41028:6;41065:1;41059:4;41055:12;41045:22;;41112:1;41106:4;41102:12;41133:18;41123:81;;41189:4;41181:6;41177:17;41167:27;;41123:81;41251:2;41243:6;41240:14;41220:18;41217:38;41214:84;;;41270:18;;:::i;:::-;41214:84;41035:269;40984:320;;;:::o;41310:281::-;41393:27;41415:4;41393:27;:::i;:::-;41385:6;41381:40;41523:6;41511:10;41508:22;41487:18;41475:10;41472:34;41469:62;41466:88;;;41534:18;;:::i;:::-;41466:88;41574:10;41570:2;41563:22;41353:238;41310:281;;:::o;41597:233::-;41636:3;41659:24;41677:5;41659:24;:::i;:::-;41650:33;;41705:66;41698:5;41695:77;41692:103;;;41775:18;;:::i;:::-;41692:103;41822:1;41815:5;41811:13;41804:20;;41597:233;;;:::o;41836:167::-;41873:3;41896:22;41912:5;41896:22;:::i;:::-;41887:31;;41940:4;41933:5;41930:15;41927:41;;;41948:18;;:::i;:::-;41927:41;41995:1;41988:5;41984:13;41977:20;;41836:167;;;:::o;42009:176::-;42041:1;42058:20;42076:1;42058:20;:::i;:::-;42053:25;;42092:20;42110:1;42092:20;:::i;:::-;42087:25;;42131:1;42121:35;;42136:18;;:::i;:::-;42121:35;42177:1;42174;42170:9;42165:14;;42009:176;;;;:::o;42191:180::-;42239:77;42236:1;42229:88;42336:4;42333:1;42326:15;42360:4;42357:1;42350:15;42377:180;42425:77;42422:1;42415:88;42522:4;42519:1;42512:15;42546:4;42543:1;42536:15;42563:180;42611:77;42608:1;42601:88;42708:4;42705:1;42698:15;42732:4;42729:1;42722:15;42749:180;42797:77;42794:1;42787:88;42894:4;42891:1;42884:15;42918:4;42915:1;42908:15;42935:180;42983:77;42980:1;42973:88;43080:4;43077:1;43070:15;43104:4;43101:1;43094:15;43121:180;43169:77;43166:1;43159:88;43266:4;43263:1;43256:15;43290:4;43287:1;43280:15;43307:117;43416:1;43413;43406:12;43430:117;43539:1;43536;43529:12;43553:117;43662:1;43659;43652:12;43676:117;43785:1;43782;43775:12;43799:117;43908:1;43905;43898:12;43922:102;43963:6;44014:2;44010:7;44005:2;43998:5;43994:14;43990:28;43980:38;;43922:102;;;:::o;44030:170::-;44170:22;44166:1;44158:6;44154:14;44147:46;44030:170;:::o;44206:230::-;44346:34;44342:1;44334:6;44330:14;44323:58;44415:13;44410:2;44402:6;44398:15;44391:38;44206:230;:::o;44442:237::-;44582:34;44578:1;44570:6;44566:14;44559:58;44651:20;44646:2;44638:6;44634:15;44627:45;44442:237;:::o;44685:180::-;44825:32;44821:1;44813:6;44809:14;44802:56;44685:180;:::o;44871:225::-;45011:34;45007:1;44999:6;44995:14;44988:58;45080:8;45075:2;45067:6;45063:15;45056:33;44871:225;:::o;45102:178::-;45242:30;45238:1;45230:6;45226:14;45219:54;45102:178;:::o;45286:223::-;45426:34;45422:1;45414:6;45410:14;45403:58;45495:6;45490:2;45482:6;45478:15;45471:31;45286:223;:::o;45515:175::-;45655:27;45651:1;45643:6;45639:14;45632:51;45515:175;:::o;45696:231::-;45836:34;45832:1;45824:6;45820:14;45813:58;45905:14;45900:2;45892:6;45888:15;45881:39;45696:231;:::o;45933:166::-;46073:18;46069:1;46061:6;46057:14;46050:42;45933:166;:::o;46105:172::-;46245:24;46241:1;46233:6;46229:14;46222:48;46105:172;:::o;46283:243::-;46423:34;46419:1;46411:6;46407:14;46400:58;46492:26;46487:2;46479:6;46475:15;46468:51;46283:243;:::o;46532:229::-;46672:34;46668:1;46660:6;46656:14;46649:58;46741:12;46736:2;46728:6;46724:15;46717:37;46532:229;:::o;46767:176::-;46907:28;46903:1;46895:6;46891:14;46884:52;46767:176;:::o;46949:228::-;47089:34;47085:1;47077:6;47073:14;47066:58;47158:11;47153:2;47145:6;47141:15;47134:36;46949:228;:::o;47183:233::-;47323:34;47319:1;47311:6;47307:14;47300:58;47392:16;47387:2;47379:6;47375:15;47368:41;47183:233;:::o;47422:182::-;47562:34;47558:1;47550:6;47546:14;47539:58;47422:182;:::o;47610:236::-;47750:34;47746:1;47738:6;47734:14;47727:58;47819:19;47814:2;47806:6;47802:15;47795:44;47610:236;:::o;47852:231::-;47992:34;47988:1;47980:6;47976:14;47969:58;48061:14;48056:2;48048:6;48044:15;48037:39;47852:231;:::o;48089:182::-;48229:34;48225:1;48217:6;48213:14;48206:58;48089:182;:::o;48277:229::-;48417:34;48413:1;48405:6;48401:14;48394:58;48490:4;48485:2;48477:6;48473:15;48466:29;48277:229;:::o;48516:240::-;48660:34;48656:1;48648:6;48644:14;48637:58;48733:11;48728:2;48720:6;48716:15;48709:36;48516:240;:::o;48766:246::-;48910:34;48906:1;48898:6;48894:14;48887:58;48983:17;48978:2;48970:6;48966:15;48959:42;48766:246;:::o;49022:232::-;49166:34;49162:1;49154:6;49150:14;49143:58;49239:3;49234:2;49226:6;49222:15;49215:28;49022:232;:::o;49264:248::-;49408:34;49404:1;49396:6;49392:14;49385:58;49481:19;49476:2;49468:6;49464:15;49457:44;49264:248;:::o;49522:235::-;49666:34;49662:1;49654:6;49650:14;49643:58;49739:6;49734:2;49726:6;49722:15;49715:31;49522:235;:::o;49767:243::-;49911:34;49907:1;49899:6;49895:14;49888:58;49984:14;49979:2;49971:6;49967:15;49960:39;49767:243;:::o;50020:247::-;50164:34;50160:1;50152:6;50148:14;50141:58;50237:18;50232:2;50224:6;50220:15;50213:43;50020:247;:::o;50277:130::-;50354:24;50372:5;50354:24;:::i;:::-;50347:5;50344:35;50334:63;;50393:1;50390;50383:12;50334:63;50277:130;:::o;50417:124::-;50491:21;50506:5;50491:21;:::i;:::-;50484:5;50481:32;50471:60;;50527:1;50524;50517:12;50471:60;50417:124;:::o;50551:128::-;50627:23;50644:5;50627:23;:::i;:::-;50620:5;50617:34;50607:62;;50665:1;50662;50655:12;50607:62;50551:128;:::o;50689:188::-;50795:53;50842:5;50795:53;:::i;:::-;50788:5;50785:64;50775:92;;50863:1;50860;50853:12;50775:92;50689:188;:::o;50887:130::-;50964:24;50982:5;50964:24;:::i;:::-;50957:5;50954:35;50944:63;;51003:1;51000;50993:12;50944:63;50887:130;:::o;51027:126::-;51102:22;51118:5;51102:22;:::i;:::-;51095:5;51092:33;51082:61;;51139:1;51136;51129:12;51082:61;51027:126;:::o
Swarm Source
ipfs://e8e86c799fcfb9fcde5a344258faeb04f46c50fbb238daa6a0b21ad4a851b974
Loading...
Loading
Loading...
Loading
[ 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.