ERC-721
Overview
Max Total Supply
109 LLOJO
Holders
48
Total Transfers
-
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
LumberjackLarryNFT
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-23 */ pragma solidity >=0.7.0 <0.9.0; 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); } 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; } interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } 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); } 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); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } 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); } } library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } /** * @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(); } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } contract LumberjackLarryNFT is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; uint256 public cost = 0.003 ether; uint256 public maxSupply = 10000; uint256 public maxMintAmount = 20; uint256 public nftPerAddressLimit = 50; bool public paused = false; bool public onlyWhitelisted = false; address[] public whitelistedAddresses; mapping(address => uint256) public addressMintedBalance; constructor( string memory _initBaseURI ) ERC721("Lumberjack Larry", "LLOJO") { setBaseURI(_initBaseURI); } // internaln function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(uint256 _mintAmount) public payable { require(!paused, "the contract is paused"); uint256 supply = totalSupply(); require(_mintAmount > 0, "need to mint at least 1 NFT"); require(_mintAmount <= maxMintAmount, "max mint amount per session exceeded"); require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded"); uint256 ownerMintedCount = addressMintedBalance[msg.sender]; require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "max NFT per address exceeded"); if (msg.sender != owner()) { if (onlyWhitelisted == true) { require(isWhitelisted(msg.sender), "user is not whitelisted"); require(supply + _mintAmount <= 1000, "First whitelist limit exceeded (1000)"); } require(msg.value >= cost * _mintAmount, "insufficient funds"); } for (uint256 i = 1; i <= _mintAmount; i++) { addressMintedBalance[msg.sender]++; _safeMint(msg.sender, supply + i); } } function mintReserved(address to, uint8 amount) external onlyOwner { require(amount > 0, "No amount specified"); uint256 supply = totalSupply(); require(supply + amount <= maxSupply, "max NFT limit exceeded"); for (uint256 i = 1; i <= amount; i++) { addressMintedBalance[to]++; _safeMint(to, supply + i); } } function isWhitelisted(address _user) public view returns (bool) { if (onlyWhitelisted == true) { for (uint i = 0; i < whitelistedAddresses.length; i++) { if (whitelistedAddresses[i] == _user) { return true; } } } return false; } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString())) : ""; } //only owner function setNftPerAddressLimit(uint256 _limit) public onlyOwner { nftPerAddressLimit = _limit; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function pause(bool _state) public onlyOwner { paused = _state; } function setOnlyWhitelisted(bool _state) public onlyOwner { onlyWhitelisted = _state; setCost(3000000000000000); } function endOnlyWhitelisted() public onlyOwner { onlyWhitelisted = false; setCost(5000000000000000); } function whitelistUsers(address[] calldata _users) public onlyOwner { delete whitelistedAddresses; whitelistedAddresses = _users; } function withdraw() public payable onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endOnlyWhitelisted","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":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint8","name":"amount","type":"uint8"}],"name":"mintReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"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":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
6080604052660aa87bee538000600c55612710600d556014600e556032600f556000601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040516200564b3803806200564b833981810160405281019062000088919062000431565b6040518060400160405280601081526020017f4c756d6265726a61636b204c61727279000000000000000000000000000000008152506040518060400160405280600581526020017f4c4c4f4a4f00000000000000000000000000000000000000000000000000000081525081600090805190602001906200010c92919062000303565b5080600190805190602001906200012592919062000303565b505050620001486200013c6200016060201b60201c565b6200016860201b60201c565b62000159816200022e60201b60201c565b5062000689565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200023e6200016060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000264620002d960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002bd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002b490620004a9565b60405180910390fd5b80600b9080519060200190620002d592919062000303565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003119062000571565b90600052602060002090601f01602090048101928262000335576000855562000381565b82601f106200035057805160ff191683800117855562000381565b8280016001018555821562000381579182015b828111156200038057825182559160200191906001019062000363565b5b50905062000390919062000394565b5090565b5b80821115620003af57600081600090555060010162000395565b5090565b6000620003ca620003c484620004f4565b620004cb565b905082815260208101848484011115620003e957620003e862000640565b5b620003f68482856200053b565b509392505050565b600082601f8301126200041657620004156200063b565b5b815162000428848260208601620003b3565b91505092915050565b6000602082840312156200044a57620004496200064a565b5b600082015167ffffffffffffffff8111156200046b576200046a62000645565b5b6200047984828501620003fe565b91505092915050565b6000620004916020836200052a565b91506200049e8262000660565b602082019050919050565b60006020820190508181036000830152620004c48162000482565b9050919050565b6000620004d7620004ea565b9050620004e58282620005a7565b919050565b6000604051905090565b600067ffffffffffffffff8211156200051257620005116200060c565b5b6200051d826200064f565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200055b5780820151818401526020810190506200053e565b838111156200056b576000848401525b50505050565b600060028204905060018216806200058a57607f821691505b60208210811415620005a157620005a0620005dd565b5b50919050565b620005b2826200064f565b810181811067ffffffffffffffff82111715620005d457620005d36200060c565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614fb280620006996000396000f3fe6080604052600436106102465760003560e01c80635c975abb11610139578063a0712d68116100b6578063c87b56dd1161007a578063c87b56dd14610872578063d0eb26b0146108af578063d5abeb01146108d8578063e985e9c514610903578063edec5f2714610940578063f2fde38b1461096957610246565b8063a0712d681461079c578063a22cb465146107b8578063b88d4fde146107e1578063ba4e5c491461080a578063ba7d2c761461084757610246565b80637f00c7a6116100fd5780637f00c7a6146106c95780638da5cb5b146106f25780638eb563961461071d57806395d89b41146107465780639c70b5121461077157610246565b80635c975abb146105e25780636352211e1461060d5780636c0360eb1461064a57806370a0823114610675578063715018a6146106b257610246565b806328fb1eff116101c757806342842e0e1161018b57806342842e0e146104ed578063438b63001461051657806344a0d68a146105535780634f6ccce71461057c57806355f804b3146105b957610246565b806328fb1eff146104295780632f745c59146104405780633af32abf1461047d5780633c952764146104ba5780633ccfd60b146104e357610246565b806313faede61161020e57806313faede61461034257806318160ddd1461036d57806318cae26914610398578063239c70ae146103d557806323b872dd1461040057610246565b806301ffc9a71461024b57806302329a291461028857806306fdde03146102b1578063081812fc146102dc578063095ea7b314610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906138d4565b610992565b60405161027f9190613f8f565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa91906138a7565b610a0c565b005b3480156102bd57600080fd5b506102c6610aa5565b6040516102d39190613faa565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe9190613977565b610b37565b6040516103109190613f06565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b91906137da565b610bbc565b005b34801561034e57600080fd5b50610357610cd4565b604051610364919061432c565b60405180910390f35b34801561037957600080fd5b50610382610cda565b60405161038f919061432c565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190613657565b610ce7565b6040516103cc919061432c565b60405180910390f35b3480156103e157600080fd5b506103ea610cff565b6040516103f7919061432c565b60405180910390f35b34801561040c57600080fd5b50610427600480360381019061042291906136c4565b610d05565b005b34801561043557600080fd5b5061043e610d65565b005b34801561044c57600080fd5b50610467600480360381019061046291906137da565b610e0e565b604051610474919061432c565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f9190613657565b610eb3565b6040516104b19190613f8f565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc91906138a7565b610f7c565b005b6104eb611025565b005b3480156104f957600080fd5b50610514600480360381019061050f91906136c4565b611121565b005b34801561052257600080fd5b5061053d60048036038101906105389190613657565b611141565b60405161054a9190613f6d565b60405180910390f35b34801561055f57600080fd5b5061057a60048036038101906105759190613977565b6111ef565b005b34801561058857600080fd5b506105a3600480360381019061059e9190613977565b611275565b6040516105b0919061432c565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db919061392e565b6112e6565b005b3480156105ee57600080fd5b506105f761137c565b6040516106049190613f8f565b60405180910390f35b34801561061957600080fd5b50610634600480360381019061062f9190613977565b61138f565b6040516106419190613f06565b60405180910390f35b34801561065657600080fd5b5061065f611441565b60405161066c9190613faa565b60405180910390f35b34801561068157600080fd5b5061069c60048036038101906106979190613657565b6114cf565b6040516106a9919061432c565b60405180910390f35b3480156106be57600080fd5b506106c7611587565b005b3480156106d557600080fd5b506106f060048036038101906106eb9190613977565b61160f565b005b3480156106fe57600080fd5b50610707611695565b6040516107149190613f06565b60405180910390f35b34801561072957600080fd5b50610744600480360381019061073f919061381a565b6116bf565b005b34801561075257600080fd5b5061075b611874565b6040516107689190613faa565b60405180910390f35b34801561077d57600080fd5b50610786611906565b6040516107939190613f8f565b60405180910390f35b6107b660048036038101906107b19190613977565b611919565b005b3480156107c457600080fd5b506107df60048036038101906107da919061379a565b611cb2565b005b3480156107ed57600080fd5b5061080860048036038101906108039190613717565b611cc8565b005b34801561081657600080fd5b50610831600480360381019061082c9190613977565b611d2a565b60405161083e9190613f06565b60405180910390f35b34801561085357600080fd5b5061085c611d69565b604051610869919061432c565b60405180910390f35b34801561087e57600080fd5b5061089960048036038101906108949190613977565b611d6f565b6040516108a69190613faa565b60405180910390f35b3480156108bb57600080fd5b506108d660048036038101906108d19190613977565b611e16565b005b3480156108e457600080fd5b506108ed611e9c565b6040516108fa919061432c565b60405180910390f35b34801561090f57600080fd5b5061092a60048036038101906109259190613684565b611ea2565b6040516109379190613f8f565b60405180910390f35b34801561094c57600080fd5b506109676004803603810190610962919061385a565b611f36565b005b34801561097557600080fd5b50610990600480360381019061098b9190613657565b611fd6565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a055750610a04826120ce565b5b9050919050565b610a146121b0565b73ffffffffffffffffffffffffffffffffffffffff16610a32611695565b73ffffffffffffffffffffffffffffffffffffffff1614610a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7f906141cc565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b606060008054610ab49061462d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae09061462d565b8015610b2d5780601f10610b0257610100808354040283529160200191610b2d565b820191906000526020600020905b815481529060010190602001808311610b1057829003601f168201915b5050505050905090565b6000610b42826121b8565b610b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b78906141ac565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bc78261138f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2f9061422c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c576121b0565b73ffffffffffffffffffffffffffffffffffffffff161480610c865750610c8581610c806121b0565b611ea2565b5b610cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbc906140ec565b60405180910390fd5b610ccf8383612224565b505050565b600c5481565b6000600880549050905090565b60126020528060005260406000206000915090505481565b600e5481565b610d16610d106121b0565b826122dd565b610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c9061428c565b60405180910390fd5b610d608383836123bb565b505050565b610d6d6121b0565b73ffffffffffffffffffffffffffffffffffffffff16610d8b611695565b73ffffffffffffffffffffffffffffffffffffffff1614610de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd8906141cc565b60405180910390fd5b6000601060016101000a81548160ff021916908315150217905550610e0c6611c37937e080006111ef565b565b6000610e19836114cf565b8210610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5190613fcc565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600060011515601060019054906101000a900460ff1615151415610f725760005b601180549050811015610f70578273ffffffffffffffffffffffffffffffffffffffff1660118281548110610f0c57610f0b6147c6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f5d576001915050610f77565b8080610f6890614690565b915050610ed4565b505b600090505b919050565b610f846121b0565b73ffffffffffffffffffffffffffffffffffffffff16610fa2611695565b73ffffffffffffffffffffffffffffffffffffffff1614610ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fef906141cc565b60405180910390fd5b80601060016101000a81548160ff021916908315150217905550611022660aa87bee5380006111ef565b50565b61102d6121b0565b73ffffffffffffffffffffffffffffffffffffffff1661104b611695565b73ffffffffffffffffffffffffffffffffffffffff16146110a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611098906141cc565b60405180910390fd5b60006110ab611695565b73ffffffffffffffffffffffffffffffffffffffff16476040516110ce90613ef1565b60006040518083038185875af1925050503d806000811461110b576040519150601f19603f3d011682016040523d82523d6000602084013e611110565b606091505b505090508061111e57600080fd5b50565b61113c83838360405180602001604052806000815250611cc8565b505050565b6060600061114e836114cf565b905060008167ffffffffffffffff81111561116c5761116b6147f5565b5b60405190808252806020026020018201604052801561119a5781602001602082028036833780820191505090505b50905060005b828110156111e4576111b28582610e0e565b8282815181106111c5576111c46147c6565b5b60200260200101818152505080806111dc90614690565b9150506111a0565b508092505050919050565b6111f76121b0565b73ffffffffffffffffffffffffffffffffffffffff16611215611695565b73ffffffffffffffffffffffffffffffffffffffff161461126b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611262906141cc565b60405180910390fd5b80600c8190555050565b600061127f610cda565b82106112c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b7906142ac565b60405180910390fd5b600882815481106112d4576112d36147c6565b5b90600052602060002001549050919050565b6112ee6121b0565b73ffffffffffffffffffffffffffffffffffffffff1661130c611695565b73ffffffffffffffffffffffffffffffffffffffff1614611362576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611359906141cc565b60405180910390fd5b80600b908051906020019061137892919061333f565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142f9061412c565b60405180910390fd5b80915050919050565b600b805461144e9061462d565b80601f016020809104026020016040519081016040528092919081815260200182805461147a9061462d565b80156114c75780601f1061149c576101008083540402835291602001916114c7565b820191906000526020600020905b8154815290600101906020018083116114aa57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611540576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115379061410c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61158f6121b0565b73ffffffffffffffffffffffffffffffffffffffff166115ad611695565b73ffffffffffffffffffffffffffffffffffffffff1614611603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fa906141cc565b60405180910390fd5b61160d6000612622565b565b6116176121b0565b73ffffffffffffffffffffffffffffffffffffffff16611635611695565b73ffffffffffffffffffffffffffffffffffffffff161461168b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611682906141cc565b60405180910390fd5b80600e8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116c76121b0565b73ffffffffffffffffffffffffffffffffffffffff166116e5611695565b73ffffffffffffffffffffffffffffffffffffffff161461173b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611732906141cc565b60405180910390fd5b60008160ff1611611781576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117789061424c565b60405180910390fd5b600061178b610cda565b9050600d548260ff168261179f9190614455565b11156117e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d79061414c565b60405180910390fd5b6000600190505b8260ff16811161186e57601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061184190614690565b919050555061185b8482846118569190614455565b6126e8565b808061186690614690565b9150506117e7565b50505050565b6060600180546118839061462d565b80601f01602080910402602001604051908101604052809291908181526020018280546118af9061462d565b80156118fc5780601f106118d1576101008083540402835291602001916118fc565b820191906000526020600020905b8154815290600101906020018083116118df57829003601f168201915b5050505050905090565b601060019054906101000a900460ff1681565b601060009054906101000a900460ff1615611969576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611960906141ec565b60405180910390fd5b6000611973610cda565b9050600082116119b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119af9061430c565b60405180910390fd5b600e548211156119fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f49061416c565b60405180910390fd5b600d548282611a0c9190614455565b1115611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a449061414c565b60405180910390fd5b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f548382611aa09190614455565b1115611ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad89061406c565b60405180910390fd5b611ae9611695565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c215760011515601060019054906101000a900460ff1615151415611bd057611b4033610eb3565b611b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b76906142ec565b60405180910390fd5b6103e88383611b8e9190614455565b1115611bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc6906142cc565b60405180910390fd5b5b82600c54611bde91906144dc565b341015611c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c179061426c565b60405180910390fd5b5b6000600190505b838111611cac57601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611c7f90614690565b9190505550611c99338285611c949190614455565b6126e8565b8080611ca490614690565b915050611c28565b50505050565b611cc4611cbd6121b0565b8383612706565b5050565b611cd9611cd36121b0565b836122dd565b611d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0f9061428c565b60405180910390fd5b611d2484848484612873565b50505050565b60118181548110611d3a57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b6060611d7a826121b8565b611db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db09061420c565b60405180910390fd5b6000611dc36128cf565b90506000815111611de35760405180602001604052806000815250611e0e565b80611ded84612961565b604051602001611dfe929190613ecd565b6040516020818303038152906040525b915050919050565b611e1e6121b0565b73ffffffffffffffffffffffffffffffffffffffff16611e3c611695565b73ffffffffffffffffffffffffffffffffffffffff1614611e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e89906141cc565b60405180910390fd5b80600f8190555050565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f3e6121b0565b73ffffffffffffffffffffffffffffffffffffffff16611f5c611695565b73ffffffffffffffffffffffffffffffffffffffff1614611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa9906141cc565b60405180910390fd5b60116000611fc091906133c5565b818160119190611fd19291906133e6565b505050565b611fde6121b0565b73ffffffffffffffffffffffffffffffffffffffff16611ffc611695565b73ffffffffffffffffffffffffffffffffffffffff1614612052576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612049906141cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b99061400c565b60405180910390fd5b6120cb81612622565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061219957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806121a957506121a882612ac2565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122978361138f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006122e8826121b8565b612327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231e906140cc565b60405180910390fd5b60006123328361138f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123a157508373ffffffffffffffffffffffffffffffffffffffff1661238984610b37565b73ffffffffffffffffffffffffffffffffffffffff16145b806123b257506123b18185611ea2565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166123db8261138f565b73ffffffffffffffffffffffffffffffffffffffff1614612431576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124289061402c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124989061408c565b60405180910390fd5b6124ac838383612b2c565b6124b7600082612224565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125079190614536565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461255e9190614455565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461261d838383612c40565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612702828260405180602001604052806000815250612c45565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276c906140ac565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516128669190613f8f565b60405180910390a3505050565b61287e8484846123bb565b61288a84848484612ca0565b6128c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c090613fec565b60405180910390fd5b50505050565b6060600b80546128de9061462d565b80601f016020809104026020016040519081016040528092919081815260200182805461290a9061462d565b80156129575780601f1061292c57610100808354040283529160200191612957565b820191906000526020600020905b81548152906001019060200180831161293a57829003601f168201915b5050505050905090565b606060008214156129a9576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612abd565b600082905060005b600082146129db5780806129c490614690565b915050600a826129d491906144ab565b91506129b1565b60008167ffffffffffffffff8111156129f7576129f66147f5565b5b6040519080825280601f01601f191660200182016040528015612a295781602001600182028036833780820191505090505b5090505b60008514612ab657600182612a429190614536565b9150600a85612a5191906146d9565b6030612a5d9190614455565b60f81b818381518110612a7357612a726147c6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612aaf91906144ab565b9450612a2d565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612b37838383612e37565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b7a57612b7581612e3c565b612bb9565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612bb857612bb78382612e85565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bfc57612bf781612ff2565b612c3b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612c3a57612c3982826130c3565b5b5b505050565b505050565b612c4f8383613142565b612c5c6000848484612ca0565b612c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9290613fec565b60405180910390fd5b505050565b6000612cc18473ffffffffffffffffffffffffffffffffffffffff1661331c565b15612e2a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612cea6121b0565b8786866040518563ffffffff1660e01b8152600401612d0c9493929190613f21565b602060405180830381600087803b158015612d2657600080fd5b505af1925050508015612d5757506040513d601f19601f82011682018060405250810190612d549190613901565b60015b612dda573d8060008114612d87576040519150601f19603f3d011682016040523d82523d6000602084013e612d8c565b606091505b50600081511415612dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc990613fec565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e2f565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e92846114cf565b612e9c9190614536565b9050600060076000848152602001908152602001600020549050818114612f81576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506130069190614536565b9050600060096000848152602001908152602001600020549050600060088381548110613036576130356147c6565b5b906000526020600020015490508060088381548110613058576130576147c6565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806130a7576130a6614797565b5b6001900381819060005260206000200160009055905550505050565b60006130ce836114cf565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a99061418c565b60405180910390fd5b6131bb816121b8565b156131fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f29061404c565b60405180910390fd5b61320760008383612b2c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132579190614455565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461331860008383612c40565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461334b9061462d565b90600052602060002090601f01602090048101928261336d57600085556133b4565b82601f1061338657805160ff19168380011785556133b4565b828001600101855582156133b4579182015b828111156133b3578251825591602001919060010190613398565b5b5090506133c19190613486565b5090565b50805460008255906000526020600020908101906133e39190613486565b50565b828054828255906000526020600020908101928215613475579160200282015b8281111561347457823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613406565b5b5090506134829190613486565b5090565b5b8082111561349f576000816000905550600101613487565b5090565b60006134b66134b18461436c565b614347565b9050828152602081018484840111156134d2576134d1614833565b5b6134dd8482856145eb565b509392505050565b60006134f86134f38461439d565b614347565b90508281526020810184848401111561351457613513614833565b5b61351f8482856145eb565b509392505050565b60008135905061353681614f09565b92915050565b60008083601f84011261355257613551614829565b5b8235905067ffffffffffffffff81111561356f5761356e614824565b5b60208301915083602082028301111561358b5761358a61482e565b5b9250929050565b6000813590506135a181614f20565b92915050565b6000813590506135b681614f37565b92915050565b6000815190506135cb81614f37565b92915050565b600082601f8301126135e6576135e5614829565b5b81356135f68482602086016134a3565b91505092915050565b600082601f83011261361457613613614829565b5b81356136248482602086016134e5565b91505092915050565b60008135905061363c81614f4e565b92915050565b60008135905061365181614f65565b92915050565b60006020828403121561366d5761366c61483d565b5b600061367b84828501613527565b91505092915050565b6000806040838503121561369b5761369a61483d565b5b60006136a985828601613527565b92505060206136ba85828601613527565b9150509250929050565b6000806000606084860312156136dd576136dc61483d565b5b60006136eb86828701613527565b93505060206136fc86828701613527565b925050604061370d8682870161362d565b9150509250925092565b600080600080608085870312156137315761373061483d565b5b600061373f87828801613527565b945050602061375087828801613527565b93505060406137618782880161362d565b925050606085013567ffffffffffffffff81111561378257613781614838565b5b61378e878288016135d1565b91505092959194509250565b600080604083850312156137b1576137b061483d565b5b60006137bf85828601613527565b92505060206137d085828601613592565b9150509250929050565b600080604083850312156137f1576137f061483d565b5b60006137ff85828601613527565b92505060206138108582860161362d565b9150509250929050565b600080604083850312156138315761383061483d565b5b600061383f85828601613527565b925050602061385085828601613642565b9150509250929050565b600080602083850312156138715761387061483d565b5b600083013567ffffffffffffffff81111561388f5761388e614838565b5b61389b8582860161353c565b92509250509250929050565b6000602082840312156138bd576138bc61483d565b5b60006138cb84828501613592565b91505092915050565b6000602082840312156138ea576138e961483d565b5b60006138f8848285016135a7565b91505092915050565b6000602082840312156139175761391661483d565b5b6000613925848285016135bc565b91505092915050565b6000602082840312156139445761394361483d565b5b600082013567ffffffffffffffff81111561396257613961614838565b5b61396e848285016135ff565b91505092915050565b60006020828403121561398d5761398c61483d565b5b600061399b8482850161362d565b91505092915050565b60006139b08383613eaf565b60208301905092915050565b6139c58161456a565b82525050565b60006139d6826143de565b6139e0818561440c565b93506139eb836143ce565b8060005b83811015613a1c578151613a0388826139a4565b9750613a0e836143ff565b9250506001810190506139ef565b5085935050505092915050565b613a328161457c565b82525050565b6000613a43826143e9565b613a4d818561441d565b9350613a5d8185602086016145fa565b613a6681614842565b840191505092915050565b6000613a7c826143f4565b613a868185614439565b9350613a968185602086016145fa565b613a9f81614842565b840191505092915050565b6000613ab5826143f4565b613abf818561444a565b9350613acf8185602086016145fa565b80840191505092915050565b6000613ae8602b83614439565b9150613af382614853565b604082019050919050565b6000613b0b603283614439565b9150613b16826148a2565b604082019050919050565b6000613b2e602683614439565b9150613b39826148f1565b604082019050919050565b6000613b51602583614439565b9150613b5c82614940565b604082019050919050565b6000613b74601c83614439565b9150613b7f8261498f565b602082019050919050565b6000613b97601c83614439565b9150613ba2826149b8565b602082019050919050565b6000613bba602483614439565b9150613bc5826149e1565b604082019050919050565b6000613bdd601983614439565b9150613be882614a30565b602082019050919050565b6000613c00602c83614439565b9150613c0b82614a59565b604082019050919050565b6000613c23603883614439565b9150613c2e82614aa8565b604082019050919050565b6000613c46602a83614439565b9150613c5182614af7565b604082019050919050565b6000613c69602983614439565b9150613c7482614b46565b604082019050919050565b6000613c8c601683614439565b9150613c9782614b95565b602082019050919050565b6000613caf602483614439565b9150613cba82614bbe565b604082019050919050565b6000613cd2602083614439565b9150613cdd82614c0d565b602082019050919050565b6000613cf5602c83614439565b9150613d0082614c36565b604082019050919050565b6000613d18602083614439565b9150613d2382614c85565b602082019050919050565b6000613d3b601683614439565b9150613d4682614cae565b602082019050919050565b6000613d5e602f83614439565b9150613d6982614cd7565b604082019050919050565b6000613d81602183614439565b9150613d8c82614d26565b604082019050919050565b6000613da4601383614439565b9150613daf82614d75565b602082019050919050565b6000613dc760008361442e565b9150613dd282614d9e565b600082019050919050565b6000613dea601283614439565b9150613df582614da1565b602082019050919050565b6000613e0d603183614439565b9150613e1882614dca565b604082019050919050565b6000613e30602c83614439565b9150613e3b82614e19565b604082019050919050565b6000613e53602583614439565b9150613e5e82614e68565b604082019050919050565b6000613e76601783614439565b9150613e8182614eb7565b602082019050919050565b6000613e99601b83614439565b9150613ea482614ee0565b602082019050919050565b613eb8816145d4565b82525050565b613ec7816145d4565b82525050565b6000613ed98285613aaa565b9150613ee58284613aaa565b91508190509392505050565b6000613efc82613dba565b9150819050919050565b6000602082019050613f1b60008301846139bc565b92915050565b6000608082019050613f3660008301876139bc565b613f4360208301866139bc565b613f506040830185613ebe565b8181036060830152613f628184613a38565b905095945050505050565b60006020820190508181036000830152613f8781846139cb565b905092915050565b6000602082019050613fa46000830184613a29565b92915050565b60006020820190508181036000830152613fc48184613a71565b905092915050565b60006020820190508181036000830152613fe581613adb565b9050919050565b6000602082019050818103600083015261400581613afe565b9050919050565b6000602082019050818103600083015261402581613b21565b9050919050565b6000602082019050818103600083015261404581613b44565b9050919050565b6000602082019050818103600083015261406581613b67565b9050919050565b6000602082019050818103600083015261408581613b8a565b9050919050565b600060208201905081810360008301526140a581613bad565b9050919050565b600060208201905081810360008301526140c581613bd0565b9050919050565b600060208201905081810360008301526140e581613bf3565b9050919050565b6000602082019050818103600083015261410581613c16565b9050919050565b6000602082019050818103600083015261412581613c39565b9050919050565b6000602082019050818103600083015261414581613c5c565b9050919050565b6000602082019050818103600083015261416581613c7f565b9050919050565b6000602082019050818103600083015261418581613ca2565b9050919050565b600060208201905081810360008301526141a581613cc5565b9050919050565b600060208201905081810360008301526141c581613ce8565b9050919050565b600060208201905081810360008301526141e581613d0b565b9050919050565b6000602082019050818103600083015261420581613d2e565b9050919050565b6000602082019050818103600083015261422581613d51565b9050919050565b6000602082019050818103600083015261424581613d74565b9050919050565b6000602082019050818103600083015261426581613d97565b9050919050565b6000602082019050818103600083015261428581613ddd565b9050919050565b600060208201905081810360008301526142a581613e00565b9050919050565b600060208201905081810360008301526142c581613e23565b9050919050565b600060208201905081810360008301526142e581613e46565b9050919050565b6000602082019050818103600083015261430581613e69565b9050919050565b6000602082019050818103600083015261432581613e8c565b9050919050565b60006020820190506143416000830184613ebe565b92915050565b6000614351614362565b905061435d828261465f565b919050565b6000604051905090565b600067ffffffffffffffff821115614387576143866147f5565b5b61439082614842565b9050602081019050919050565b600067ffffffffffffffff8211156143b8576143b76147f5565b5b6143c182614842565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614460826145d4565b915061446b836145d4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144a05761449f61470a565b5b828201905092915050565b60006144b6826145d4565b91506144c1836145d4565b9250826144d1576144d0614739565b5b828204905092915050565b60006144e7826145d4565b91506144f2836145d4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561452b5761452a61470a565b5b828202905092915050565b6000614541826145d4565b915061454c836145d4565b92508282101561455f5761455e61470a565b5b828203905092915050565b6000614575826145b4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156146185780820151818401526020810190506145fd565b83811115614627576000848401525b50505050565b6000600282049050600182168061464557607f821691505b6020821081141561465957614658614768565b5b50919050565b61466882614842565b810181811067ffffffffffffffff82111715614687576146866147f5565b5b80604052505050565b600061469b826145d4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146ce576146cd61470a565b5b600182019050919050565b60006146e4826145d4565b91506146ef836145d4565b9250826146ff576146fe614739565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f20616d6f756e742073706563696669656400000000000000000000000000600082015250565b50565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f46697273742077686974656c697374206c696d6974206578636565646564202860008201527f3130303029000000000000000000000000000000000000000000000000000000602082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b614f128161456a565b8114614f1d57600080fd5b50565b614f298161457c565b8114614f3457600080fd5b50565b614f4081614588565b8114614f4b57600080fd5b50565b614f57816145d4565b8114614f6257600080fd5b50565b614f6e816145de565b8114614f7957600080fd5b5056fea26469706673582212206f3f54a43f58ab9db5b1b36a8999d2d9dfb58aa4e22d9150729076f2742dfe3164736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d525a536356657152324a59717154725762527255547a654a48356739595736326f514c6a774546586f6e78762f00000000000000000000
Deployed Bytecode
0x6080604052600436106102465760003560e01c80635c975abb11610139578063a0712d68116100b6578063c87b56dd1161007a578063c87b56dd14610872578063d0eb26b0146108af578063d5abeb01146108d8578063e985e9c514610903578063edec5f2714610940578063f2fde38b1461096957610246565b8063a0712d681461079c578063a22cb465146107b8578063b88d4fde146107e1578063ba4e5c491461080a578063ba7d2c761461084757610246565b80637f00c7a6116100fd5780637f00c7a6146106c95780638da5cb5b146106f25780638eb563961461071d57806395d89b41146107465780639c70b5121461077157610246565b80635c975abb146105e25780636352211e1461060d5780636c0360eb1461064a57806370a0823114610675578063715018a6146106b257610246565b806328fb1eff116101c757806342842e0e1161018b57806342842e0e146104ed578063438b63001461051657806344a0d68a146105535780634f6ccce71461057c57806355f804b3146105b957610246565b806328fb1eff146104295780632f745c59146104405780633af32abf1461047d5780633c952764146104ba5780633ccfd60b146104e357610246565b806313faede61161020e57806313faede61461034257806318160ddd1461036d57806318cae26914610398578063239c70ae146103d557806323b872dd1461040057610246565b806301ffc9a71461024b57806302329a291461028857806306fdde03146102b1578063081812fc146102dc578063095ea7b314610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906138d4565b610992565b60405161027f9190613f8f565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa91906138a7565b610a0c565b005b3480156102bd57600080fd5b506102c6610aa5565b6040516102d39190613faa565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe9190613977565b610b37565b6040516103109190613f06565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b91906137da565b610bbc565b005b34801561034e57600080fd5b50610357610cd4565b604051610364919061432c565b60405180910390f35b34801561037957600080fd5b50610382610cda565b60405161038f919061432c565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190613657565b610ce7565b6040516103cc919061432c565b60405180910390f35b3480156103e157600080fd5b506103ea610cff565b6040516103f7919061432c565b60405180910390f35b34801561040c57600080fd5b50610427600480360381019061042291906136c4565b610d05565b005b34801561043557600080fd5b5061043e610d65565b005b34801561044c57600080fd5b50610467600480360381019061046291906137da565b610e0e565b604051610474919061432c565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f9190613657565b610eb3565b6040516104b19190613f8f565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc91906138a7565b610f7c565b005b6104eb611025565b005b3480156104f957600080fd5b50610514600480360381019061050f91906136c4565b611121565b005b34801561052257600080fd5b5061053d60048036038101906105389190613657565b611141565b60405161054a9190613f6d565b60405180910390f35b34801561055f57600080fd5b5061057a60048036038101906105759190613977565b6111ef565b005b34801561058857600080fd5b506105a3600480360381019061059e9190613977565b611275565b6040516105b0919061432c565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db919061392e565b6112e6565b005b3480156105ee57600080fd5b506105f761137c565b6040516106049190613f8f565b60405180910390f35b34801561061957600080fd5b50610634600480360381019061062f9190613977565b61138f565b6040516106419190613f06565b60405180910390f35b34801561065657600080fd5b5061065f611441565b60405161066c9190613faa565b60405180910390f35b34801561068157600080fd5b5061069c60048036038101906106979190613657565b6114cf565b6040516106a9919061432c565b60405180910390f35b3480156106be57600080fd5b506106c7611587565b005b3480156106d557600080fd5b506106f060048036038101906106eb9190613977565b61160f565b005b3480156106fe57600080fd5b50610707611695565b6040516107149190613f06565b60405180910390f35b34801561072957600080fd5b50610744600480360381019061073f919061381a565b6116bf565b005b34801561075257600080fd5b5061075b611874565b6040516107689190613faa565b60405180910390f35b34801561077d57600080fd5b50610786611906565b6040516107939190613f8f565b60405180910390f35b6107b660048036038101906107b19190613977565b611919565b005b3480156107c457600080fd5b506107df60048036038101906107da919061379a565b611cb2565b005b3480156107ed57600080fd5b5061080860048036038101906108039190613717565b611cc8565b005b34801561081657600080fd5b50610831600480360381019061082c9190613977565b611d2a565b60405161083e9190613f06565b60405180910390f35b34801561085357600080fd5b5061085c611d69565b604051610869919061432c565b60405180910390f35b34801561087e57600080fd5b5061089960048036038101906108949190613977565b611d6f565b6040516108a69190613faa565b60405180910390f35b3480156108bb57600080fd5b506108d660048036038101906108d19190613977565b611e16565b005b3480156108e457600080fd5b506108ed611e9c565b6040516108fa919061432c565b60405180910390f35b34801561090f57600080fd5b5061092a60048036038101906109259190613684565b611ea2565b6040516109379190613f8f565b60405180910390f35b34801561094c57600080fd5b506109676004803603810190610962919061385a565b611f36565b005b34801561097557600080fd5b50610990600480360381019061098b9190613657565b611fd6565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a055750610a04826120ce565b5b9050919050565b610a146121b0565b73ffffffffffffffffffffffffffffffffffffffff16610a32611695565b73ffffffffffffffffffffffffffffffffffffffff1614610a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7f906141cc565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b606060008054610ab49061462d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae09061462d565b8015610b2d5780601f10610b0257610100808354040283529160200191610b2d565b820191906000526020600020905b815481529060010190602001808311610b1057829003601f168201915b5050505050905090565b6000610b42826121b8565b610b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b78906141ac565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bc78261138f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2f9061422c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c576121b0565b73ffffffffffffffffffffffffffffffffffffffff161480610c865750610c8581610c806121b0565b611ea2565b5b610cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbc906140ec565b60405180910390fd5b610ccf8383612224565b505050565b600c5481565b6000600880549050905090565b60126020528060005260406000206000915090505481565b600e5481565b610d16610d106121b0565b826122dd565b610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c9061428c565b60405180910390fd5b610d608383836123bb565b505050565b610d6d6121b0565b73ffffffffffffffffffffffffffffffffffffffff16610d8b611695565b73ffffffffffffffffffffffffffffffffffffffff1614610de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd8906141cc565b60405180910390fd5b6000601060016101000a81548160ff021916908315150217905550610e0c6611c37937e080006111ef565b565b6000610e19836114cf565b8210610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5190613fcc565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600060011515601060019054906101000a900460ff1615151415610f725760005b601180549050811015610f70578273ffffffffffffffffffffffffffffffffffffffff1660118281548110610f0c57610f0b6147c6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f5d576001915050610f77565b8080610f6890614690565b915050610ed4565b505b600090505b919050565b610f846121b0565b73ffffffffffffffffffffffffffffffffffffffff16610fa2611695565b73ffffffffffffffffffffffffffffffffffffffff1614610ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fef906141cc565b60405180910390fd5b80601060016101000a81548160ff021916908315150217905550611022660aa87bee5380006111ef565b50565b61102d6121b0565b73ffffffffffffffffffffffffffffffffffffffff1661104b611695565b73ffffffffffffffffffffffffffffffffffffffff16146110a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611098906141cc565b60405180910390fd5b60006110ab611695565b73ffffffffffffffffffffffffffffffffffffffff16476040516110ce90613ef1565b60006040518083038185875af1925050503d806000811461110b576040519150601f19603f3d011682016040523d82523d6000602084013e611110565b606091505b505090508061111e57600080fd5b50565b61113c83838360405180602001604052806000815250611cc8565b505050565b6060600061114e836114cf565b905060008167ffffffffffffffff81111561116c5761116b6147f5565b5b60405190808252806020026020018201604052801561119a5781602001602082028036833780820191505090505b50905060005b828110156111e4576111b28582610e0e565b8282815181106111c5576111c46147c6565b5b60200260200101818152505080806111dc90614690565b9150506111a0565b508092505050919050565b6111f76121b0565b73ffffffffffffffffffffffffffffffffffffffff16611215611695565b73ffffffffffffffffffffffffffffffffffffffff161461126b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611262906141cc565b60405180910390fd5b80600c8190555050565b600061127f610cda565b82106112c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b7906142ac565b60405180910390fd5b600882815481106112d4576112d36147c6565b5b90600052602060002001549050919050565b6112ee6121b0565b73ffffffffffffffffffffffffffffffffffffffff1661130c611695565b73ffffffffffffffffffffffffffffffffffffffff1614611362576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611359906141cc565b60405180910390fd5b80600b908051906020019061137892919061333f565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142f9061412c565b60405180910390fd5b80915050919050565b600b805461144e9061462d565b80601f016020809104026020016040519081016040528092919081815260200182805461147a9061462d565b80156114c75780601f1061149c576101008083540402835291602001916114c7565b820191906000526020600020905b8154815290600101906020018083116114aa57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611540576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115379061410c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61158f6121b0565b73ffffffffffffffffffffffffffffffffffffffff166115ad611695565b73ffffffffffffffffffffffffffffffffffffffff1614611603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fa906141cc565b60405180910390fd5b61160d6000612622565b565b6116176121b0565b73ffffffffffffffffffffffffffffffffffffffff16611635611695565b73ffffffffffffffffffffffffffffffffffffffff161461168b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611682906141cc565b60405180910390fd5b80600e8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116c76121b0565b73ffffffffffffffffffffffffffffffffffffffff166116e5611695565b73ffffffffffffffffffffffffffffffffffffffff161461173b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611732906141cc565b60405180910390fd5b60008160ff1611611781576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117789061424c565b60405180910390fd5b600061178b610cda565b9050600d548260ff168261179f9190614455565b11156117e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d79061414c565b60405180910390fd5b6000600190505b8260ff16811161186e57601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061184190614690565b919050555061185b8482846118569190614455565b6126e8565b808061186690614690565b9150506117e7565b50505050565b6060600180546118839061462d565b80601f01602080910402602001604051908101604052809291908181526020018280546118af9061462d565b80156118fc5780601f106118d1576101008083540402835291602001916118fc565b820191906000526020600020905b8154815290600101906020018083116118df57829003601f168201915b5050505050905090565b601060019054906101000a900460ff1681565b601060009054906101000a900460ff1615611969576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611960906141ec565b60405180910390fd5b6000611973610cda565b9050600082116119b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119af9061430c565b60405180910390fd5b600e548211156119fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f49061416c565b60405180910390fd5b600d548282611a0c9190614455565b1115611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a449061414c565b60405180910390fd5b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f548382611aa09190614455565b1115611ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad89061406c565b60405180910390fd5b611ae9611695565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c215760011515601060019054906101000a900460ff1615151415611bd057611b4033610eb3565b611b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b76906142ec565b60405180910390fd5b6103e88383611b8e9190614455565b1115611bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc6906142cc565b60405180910390fd5b5b82600c54611bde91906144dc565b341015611c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c179061426c565b60405180910390fd5b5b6000600190505b838111611cac57601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611c7f90614690565b9190505550611c99338285611c949190614455565b6126e8565b8080611ca490614690565b915050611c28565b50505050565b611cc4611cbd6121b0565b8383612706565b5050565b611cd9611cd36121b0565b836122dd565b611d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0f9061428c565b60405180910390fd5b611d2484848484612873565b50505050565b60118181548110611d3a57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b6060611d7a826121b8565b611db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db09061420c565b60405180910390fd5b6000611dc36128cf565b90506000815111611de35760405180602001604052806000815250611e0e565b80611ded84612961565b604051602001611dfe929190613ecd565b6040516020818303038152906040525b915050919050565b611e1e6121b0565b73ffffffffffffffffffffffffffffffffffffffff16611e3c611695565b73ffffffffffffffffffffffffffffffffffffffff1614611e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e89906141cc565b60405180910390fd5b80600f8190555050565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f3e6121b0565b73ffffffffffffffffffffffffffffffffffffffff16611f5c611695565b73ffffffffffffffffffffffffffffffffffffffff1614611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa9906141cc565b60405180910390fd5b60116000611fc091906133c5565b818160119190611fd19291906133e6565b505050565b611fde6121b0565b73ffffffffffffffffffffffffffffffffffffffff16611ffc611695565b73ffffffffffffffffffffffffffffffffffffffff1614612052576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612049906141cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b99061400c565b60405180910390fd5b6120cb81612622565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061219957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806121a957506121a882612ac2565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122978361138f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006122e8826121b8565b612327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231e906140cc565b60405180910390fd5b60006123328361138f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123a157508373ffffffffffffffffffffffffffffffffffffffff1661238984610b37565b73ffffffffffffffffffffffffffffffffffffffff16145b806123b257506123b18185611ea2565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166123db8261138f565b73ffffffffffffffffffffffffffffffffffffffff1614612431576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124289061402c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124989061408c565b60405180910390fd5b6124ac838383612b2c565b6124b7600082612224565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125079190614536565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461255e9190614455565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461261d838383612c40565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612702828260405180602001604052806000815250612c45565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276c906140ac565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516128669190613f8f565b60405180910390a3505050565b61287e8484846123bb565b61288a84848484612ca0565b6128c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c090613fec565b60405180910390fd5b50505050565b6060600b80546128de9061462d565b80601f016020809104026020016040519081016040528092919081815260200182805461290a9061462d565b80156129575780601f1061292c57610100808354040283529160200191612957565b820191906000526020600020905b81548152906001019060200180831161293a57829003601f168201915b5050505050905090565b606060008214156129a9576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612abd565b600082905060005b600082146129db5780806129c490614690565b915050600a826129d491906144ab565b91506129b1565b60008167ffffffffffffffff8111156129f7576129f66147f5565b5b6040519080825280601f01601f191660200182016040528015612a295781602001600182028036833780820191505090505b5090505b60008514612ab657600182612a429190614536565b9150600a85612a5191906146d9565b6030612a5d9190614455565b60f81b818381518110612a7357612a726147c6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612aaf91906144ab565b9450612a2d565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612b37838383612e37565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b7a57612b7581612e3c565b612bb9565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612bb857612bb78382612e85565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bfc57612bf781612ff2565b612c3b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612c3a57612c3982826130c3565b5b5b505050565b505050565b612c4f8383613142565b612c5c6000848484612ca0565b612c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9290613fec565b60405180910390fd5b505050565b6000612cc18473ffffffffffffffffffffffffffffffffffffffff1661331c565b15612e2a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612cea6121b0565b8786866040518563ffffffff1660e01b8152600401612d0c9493929190613f21565b602060405180830381600087803b158015612d2657600080fd5b505af1925050508015612d5757506040513d601f19601f82011682018060405250810190612d549190613901565b60015b612dda573d8060008114612d87576040519150601f19603f3d011682016040523d82523d6000602084013e612d8c565b606091505b50600081511415612dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc990613fec565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e2f565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e92846114cf565b612e9c9190614536565b9050600060076000848152602001908152602001600020549050818114612f81576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506130069190614536565b9050600060096000848152602001908152602001600020549050600060088381548110613036576130356147c6565b5b906000526020600020015490508060088381548110613058576130576147c6565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806130a7576130a6614797565b5b6001900381819060005260206000200160009055905550505050565b60006130ce836114cf565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a99061418c565b60405180910390fd5b6131bb816121b8565b156131fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f29061404c565b60405180910390fd5b61320760008383612b2c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132579190614455565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461331860008383612c40565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461334b9061462d565b90600052602060002090601f01602090048101928261336d57600085556133b4565b82601f1061338657805160ff19168380011785556133b4565b828001600101855582156133b4579182015b828111156133b3578251825591602001919060010190613398565b5b5090506133c19190613486565b5090565b50805460008255906000526020600020908101906133e39190613486565b50565b828054828255906000526020600020908101928215613475579160200282015b8281111561347457823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613406565b5b5090506134829190613486565b5090565b5b8082111561349f576000816000905550600101613487565b5090565b60006134b66134b18461436c565b614347565b9050828152602081018484840111156134d2576134d1614833565b5b6134dd8482856145eb565b509392505050565b60006134f86134f38461439d565b614347565b90508281526020810184848401111561351457613513614833565b5b61351f8482856145eb565b509392505050565b60008135905061353681614f09565b92915050565b60008083601f84011261355257613551614829565b5b8235905067ffffffffffffffff81111561356f5761356e614824565b5b60208301915083602082028301111561358b5761358a61482e565b5b9250929050565b6000813590506135a181614f20565b92915050565b6000813590506135b681614f37565b92915050565b6000815190506135cb81614f37565b92915050565b600082601f8301126135e6576135e5614829565b5b81356135f68482602086016134a3565b91505092915050565b600082601f83011261361457613613614829565b5b81356136248482602086016134e5565b91505092915050565b60008135905061363c81614f4e565b92915050565b60008135905061365181614f65565b92915050565b60006020828403121561366d5761366c61483d565b5b600061367b84828501613527565b91505092915050565b6000806040838503121561369b5761369a61483d565b5b60006136a985828601613527565b92505060206136ba85828601613527565b9150509250929050565b6000806000606084860312156136dd576136dc61483d565b5b60006136eb86828701613527565b93505060206136fc86828701613527565b925050604061370d8682870161362d565b9150509250925092565b600080600080608085870312156137315761373061483d565b5b600061373f87828801613527565b945050602061375087828801613527565b93505060406137618782880161362d565b925050606085013567ffffffffffffffff81111561378257613781614838565b5b61378e878288016135d1565b91505092959194509250565b600080604083850312156137b1576137b061483d565b5b60006137bf85828601613527565b92505060206137d085828601613592565b9150509250929050565b600080604083850312156137f1576137f061483d565b5b60006137ff85828601613527565b92505060206138108582860161362d565b9150509250929050565b600080604083850312156138315761383061483d565b5b600061383f85828601613527565b925050602061385085828601613642565b9150509250929050565b600080602083850312156138715761387061483d565b5b600083013567ffffffffffffffff81111561388f5761388e614838565b5b61389b8582860161353c565b92509250509250929050565b6000602082840312156138bd576138bc61483d565b5b60006138cb84828501613592565b91505092915050565b6000602082840312156138ea576138e961483d565b5b60006138f8848285016135a7565b91505092915050565b6000602082840312156139175761391661483d565b5b6000613925848285016135bc565b91505092915050565b6000602082840312156139445761394361483d565b5b600082013567ffffffffffffffff81111561396257613961614838565b5b61396e848285016135ff565b91505092915050565b60006020828403121561398d5761398c61483d565b5b600061399b8482850161362d565b91505092915050565b60006139b08383613eaf565b60208301905092915050565b6139c58161456a565b82525050565b60006139d6826143de565b6139e0818561440c565b93506139eb836143ce565b8060005b83811015613a1c578151613a0388826139a4565b9750613a0e836143ff565b9250506001810190506139ef565b5085935050505092915050565b613a328161457c565b82525050565b6000613a43826143e9565b613a4d818561441d565b9350613a5d8185602086016145fa565b613a6681614842565b840191505092915050565b6000613a7c826143f4565b613a868185614439565b9350613a968185602086016145fa565b613a9f81614842565b840191505092915050565b6000613ab5826143f4565b613abf818561444a565b9350613acf8185602086016145fa565b80840191505092915050565b6000613ae8602b83614439565b9150613af382614853565b604082019050919050565b6000613b0b603283614439565b9150613b16826148a2565b604082019050919050565b6000613b2e602683614439565b9150613b39826148f1565b604082019050919050565b6000613b51602583614439565b9150613b5c82614940565b604082019050919050565b6000613b74601c83614439565b9150613b7f8261498f565b602082019050919050565b6000613b97601c83614439565b9150613ba2826149b8565b602082019050919050565b6000613bba602483614439565b9150613bc5826149e1565b604082019050919050565b6000613bdd601983614439565b9150613be882614a30565b602082019050919050565b6000613c00602c83614439565b9150613c0b82614a59565b604082019050919050565b6000613c23603883614439565b9150613c2e82614aa8565b604082019050919050565b6000613c46602a83614439565b9150613c5182614af7565b604082019050919050565b6000613c69602983614439565b9150613c7482614b46565b604082019050919050565b6000613c8c601683614439565b9150613c9782614b95565b602082019050919050565b6000613caf602483614439565b9150613cba82614bbe565b604082019050919050565b6000613cd2602083614439565b9150613cdd82614c0d565b602082019050919050565b6000613cf5602c83614439565b9150613d0082614c36565b604082019050919050565b6000613d18602083614439565b9150613d2382614c85565b602082019050919050565b6000613d3b601683614439565b9150613d4682614cae565b602082019050919050565b6000613d5e602f83614439565b9150613d6982614cd7565b604082019050919050565b6000613d81602183614439565b9150613d8c82614d26565b604082019050919050565b6000613da4601383614439565b9150613daf82614d75565b602082019050919050565b6000613dc760008361442e565b9150613dd282614d9e565b600082019050919050565b6000613dea601283614439565b9150613df582614da1565b602082019050919050565b6000613e0d603183614439565b9150613e1882614dca565b604082019050919050565b6000613e30602c83614439565b9150613e3b82614e19565b604082019050919050565b6000613e53602583614439565b9150613e5e82614e68565b604082019050919050565b6000613e76601783614439565b9150613e8182614eb7565b602082019050919050565b6000613e99601b83614439565b9150613ea482614ee0565b602082019050919050565b613eb8816145d4565b82525050565b613ec7816145d4565b82525050565b6000613ed98285613aaa565b9150613ee58284613aaa565b91508190509392505050565b6000613efc82613dba565b9150819050919050565b6000602082019050613f1b60008301846139bc565b92915050565b6000608082019050613f3660008301876139bc565b613f4360208301866139bc565b613f506040830185613ebe565b8181036060830152613f628184613a38565b905095945050505050565b60006020820190508181036000830152613f8781846139cb565b905092915050565b6000602082019050613fa46000830184613a29565b92915050565b60006020820190508181036000830152613fc48184613a71565b905092915050565b60006020820190508181036000830152613fe581613adb565b9050919050565b6000602082019050818103600083015261400581613afe565b9050919050565b6000602082019050818103600083015261402581613b21565b9050919050565b6000602082019050818103600083015261404581613b44565b9050919050565b6000602082019050818103600083015261406581613b67565b9050919050565b6000602082019050818103600083015261408581613b8a565b9050919050565b600060208201905081810360008301526140a581613bad565b9050919050565b600060208201905081810360008301526140c581613bd0565b9050919050565b600060208201905081810360008301526140e581613bf3565b9050919050565b6000602082019050818103600083015261410581613c16565b9050919050565b6000602082019050818103600083015261412581613c39565b9050919050565b6000602082019050818103600083015261414581613c5c565b9050919050565b6000602082019050818103600083015261416581613c7f565b9050919050565b6000602082019050818103600083015261418581613ca2565b9050919050565b600060208201905081810360008301526141a581613cc5565b9050919050565b600060208201905081810360008301526141c581613ce8565b9050919050565b600060208201905081810360008301526141e581613d0b565b9050919050565b6000602082019050818103600083015261420581613d2e565b9050919050565b6000602082019050818103600083015261422581613d51565b9050919050565b6000602082019050818103600083015261424581613d74565b9050919050565b6000602082019050818103600083015261426581613d97565b9050919050565b6000602082019050818103600083015261428581613ddd565b9050919050565b600060208201905081810360008301526142a581613e00565b9050919050565b600060208201905081810360008301526142c581613e23565b9050919050565b600060208201905081810360008301526142e581613e46565b9050919050565b6000602082019050818103600083015261430581613e69565b9050919050565b6000602082019050818103600083015261432581613e8c565b9050919050565b60006020820190506143416000830184613ebe565b92915050565b6000614351614362565b905061435d828261465f565b919050565b6000604051905090565b600067ffffffffffffffff821115614387576143866147f5565b5b61439082614842565b9050602081019050919050565b600067ffffffffffffffff8211156143b8576143b76147f5565b5b6143c182614842565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614460826145d4565b915061446b836145d4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144a05761449f61470a565b5b828201905092915050565b60006144b6826145d4565b91506144c1836145d4565b9250826144d1576144d0614739565b5b828204905092915050565b60006144e7826145d4565b91506144f2836145d4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561452b5761452a61470a565b5b828202905092915050565b6000614541826145d4565b915061454c836145d4565b92508282101561455f5761455e61470a565b5b828203905092915050565b6000614575826145b4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156146185780820151818401526020810190506145fd565b83811115614627576000848401525b50505050565b6000600282049050600182168061464557607f821691505b6020821081141561465957614658614768565b5b50919050565b61466882614842565b810181811067ffffffffffffffff82111715614687576146866147f5565b5b80604052505050565b600061469b826145d4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146ce576146cd61470a565b5b600182019050919050565b60006146e4826145d4565b91506146ef836145d4565b9250826146ff576146fe614739565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f20616d6f756e742073706563696669656400000000000000000000000000600082015250565b50565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f46697273742077686974656c697374206c696d6974206578636565646564202860008201527f3130303029000000000000000000000000000000000000000000000000000000602082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b614f128161456a565b8114614f1d57600080fd5b50565b614f298161457c565b8114614f3457600080fd5b50565b614f4081614588565b8114614f4b57600080fd5b50565b614f57816145d4565b8114614f6257600080fd5b50565b614f6e816145de565b8114614f7957600080fd5b5056fea26469706673582212206f3f54a43f58ab9db5b1b36a8999d2d9dfb58aa4e22d9150729076f2742dfe3164736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d525a536356657152324a59717154725762527255547a654a48356739595736326f514c6a774546586f6e78762f00000000000000000000
-----Decoded View---------------
Arg [0] : _initBaseURI (string): ipfs://QmRZScVeqR2JYqqTrWbRrUTzeJH5g9YW62oQLjwEFXonxv/
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d525a536356657152324a59717154725762527255547a65
Arg [3] : 4a48356739595736326f514c6a774546586f6e78762f00000000000000000000
Deployed Bytecode Sourcemap
40987:4215:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32957:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44571:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19972:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21531:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21054:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41107:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33597:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41376:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41182:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22281:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44783:115;;;;;;;;;;;;;:::i;:::-;;33265:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43069:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44650:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45054:145;;;:::i;:::-;;22691:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43365:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44259:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33787:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44467:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41263:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19666:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41081:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19396:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40170:103;;;;;;;;;;;;;:::i;:::-;;44345:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39519:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42707:356;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20141:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41294:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41704:997;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21824:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22947:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41334:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41220:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43719:408;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44149:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41145:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22050:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44904:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40428:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32957:224;33059:4;33098:35;33083:50;;;:11;:50;;;;:90;;;;33137:36;33161:11;33137:23;:36::i;:::-;33083:90;33076:97;;32957:224;;;:::o;44571:73::-;39750:12;:10;:12::i;:::-;39739:23;;:7;:5;:7::i;:::-;:23;;;39731:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44632:6:::1;44623;;:15;;;;;;;;;;;;;;;;;;44571:73:::0;:::o;19972:100::-;20026:13;20059:5;20052:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19972:100;:::o;21531:221::-;21607:7;21635:16;21643:7;21635;:16::i;:::-;21627:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21720:15;:24;21736:7;21720:24;;;;;;;;;;;;;;;;;;;;;21713:31;;21531:221;;;:::o;21054:411::-;21135:13;21151:23;21166:7;21151:14;:23::i;:::-;21135:39;;21199:5;21193:11;;:2;:11;;;;21185:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;21293:5;21277:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;21302:37;21319:5;21326:12;:10;:12::i;:::-;21302:16;:37::i;:::-;21277:62;21255:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;21436:21;21445:2;21449:7;21436:8;:21::i;:::-;21124:341;21054:411;;:::o;41107:33::-;;;;:::o;33597:113::-;33658:7;33685:10;:17;;;;33678:24;;33597:113;:::o;41376:55::-;;;;;;;;;;;;;;;;;:::o;41182:33::-;;;;:::o;22281:339::-;22476:41;22495:12;:10;:12::i;:::-;22509:7;22476:18;:41::i;:::-;22468:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;22584:28;22594:4;22600:2;22604:7;22584:9;:28::i;:::-;22281:339;;;:::o;44783:115::-;39750:12;:10;:12::i;:::-;39739:23;;:7;:5;:7::i;:::-;:23;;;39731:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44855:5:::1;44837:15;;:23;;;;;;;;;;;;;;;;;;44867:25;44875:16;44867:7;:25::i;:::-;44783:115::o:0;33265:256::-;33362:7;33398:23;33415:5;33398:16;:23::i;:::-;33390:5;:31;33382:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;33487:12;:19;33500:5;33487:19;;;;;;;;;;;;;;;:26;33507:5;33487:26;;;;;;;;;;;;33480:33;;33265:256;;;;:::o;43069:290::-;43128:4;43164;43145:23;;:15;;;;;;;;;;;:23;;;43141:194;;;43184:6;43179:149;43200:20;:27;;;;43196:1;:31;43179:149;;;43276:5;43249:32;;:20;43270:1;43249:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:32;;;43245:74;;;43303:4;43296:11;;;;;43245:74;43229:3;;;;;:::i;:::-;;;;43179:149;;;;43141:194;43348:5;43341:12;;43069:290;;;;:::o;44650:127::-;39750:12;:10;:12::i;:::-;39739:23;;:7;:5;:7::i;:::-;:23;;;39731:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44733:6:::1;44715:15;;:24;;;;;;;;;;;;;;;;;;44746:25;44754:16;44746:7;:25::i;:::-;44650:127:::0;:::o;45054:145::-;39750:12;:10;:12::i;:::-;39739:23;;:7;:5;:7::i;:::-;:23;;;39731:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45107:7:::1;45128;:5;:7::i;:::-;45120:21;;45149;45120:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45106:69;;;45190:2;45182:11;;;::::0;::::1;;45099:100;45054:145::o:0;22691:185::-;22829:39;22846:4;22852:2;22856:7;22829:39;;;;;;;;;;;;:16;:39::i;:::-;22691:185;;;:::o;43365:348::-;43440:16;43468:23;43494:17;43504:6;43494:9;:17::i;:::-;43468:43;;43518:25;43560:15;43546:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43518:58;;43588:9;43583:103;43603:15;43599:1;:19;43583:103;;;43648:30;43668:6;43676:1;43648:19;:30::i;:::-;43634:8;43643:1;43634:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;43620:3;;;;;:::i;:::-;;;;43583:103;;;;43699:8;43692:15;;;;43365:348;;;:::o;44259:80::-;39750:12;:10;:12::i;:::-;39739:23;;:7;:5;:7::i;:::-;:23;;;39731:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44325:8:::1;44318:4;:15;;;;44259:80:::0;:::o;33787:233::-;33862:7;33898:30;:28;:30::i;:::-;33890:5;:38;33882:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;33995:10;34006:5;33995:17;;;;;;;;:::i;:::-;;;;;;;;;;33988:24;;33787:233;;;:::o;44467:98::-;39750:12;:10;:12::i;:::-;39739:23;;:7;:5;:7::i;:::-;:23;;;39731:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44548:11:::1;44538:7;:21;;;;;;;;;;;;:::i;:::-;;44467:98:::0;:::o;41263:26::-;;;;;;;;;;;;;:::o;19666:239::-;19738:7;19758:13;19774:7;:16;19782:7;19774:16;;;;;;;;;;;;;;;;;;;;;19758:32;;19826:1;19809:19;;:5;:19;;;;19801:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;19892:5;19885:12;;;19666:239;;;:::o;41081:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19396:208::-;19468:7;19513:1;19496:19;;:5;:19;;;;19488:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;19580:9;:16;19590:5;19580:16;;;;;;;;;;;;;;;;19573:23;;19396:208;;;:::o;40170:103::-;39750:12;:10;:12::i;:::-;39739:23;;:7;:5;:7::i;:::-;:23;;;39731:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40235:30:::1;40262:1;40235:18;:30::i;:::-;40170:103::o:0;44345:116::-;39750:12;:10;:12::i;:::-;39739:23;;:7;:5;:7::i;:::-;:23;;;39731:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44438:17:::1;44422:13;:33;;;;44345:116:::0;:::o;39519:87::-;39565:7;39592:6;;;;;;;;;;;39585:13;;39519:87;:::o;42707:356::-;39750:12;:10;:12::i;:::-;39739:23;;:7;:5;:7::i;:::-;:23;;;39731:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42798:1:::1;42789:6;:10;;;42781:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;42830:14;42847:13;:11;:13::i;:::-;42830:30;;42894:9;;42884:6;42875:15;;:6;:15;;;;:::i;:::-;:28;;42867:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;42948:9;42960:1;42948:13;;42943:115;42968:6;42963:11;;:1;:11;42943:115;;42990:20;:24;43011:2;42990:24;;;;;;;;;;;;;;;;:26;;;;;;;;;:::i;:::-;;;;;;43025:25;43035:2;43048:1;43039:6;:10;;;;:::i;:::-;43025:9;:25::i;:::-;42976:3;;;;;:::i;:::-;;;;42943:115;;;;42774:289;42707:356:::0;;:::o;20141:104::-;20197:13;20230:7;20223:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20141:104;:::o;41294:35::-;;;;;;;;;;;;;:::o;41704:997::-;41770:6;;;;;;;;;;;41769:7;41761:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;41810:14;41827:13;:11;:13::i;:::-;41810:30;;41869:1;41855:11;:15;41847:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;41932:13;;41917:11;:28;;41909:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;42025:9;;42010:11;42001:6;:20;;;;:::i;:::-;:33;;41993:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42070:24;42097:20;:32;42118:10;42097:32;;;;;;;;;;;;;;;;42070:59;;42178:18;;42163:11;42144:16;:30;;;;:::i;:::-;:52;;42136:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;42256:7;:5;:7::i;:::-;42242:21;;:10;:21;;;42238:314;;42297:4;42278:23;;:15;;;;;;;;;;;:23;;;42274:200;;;42322:25;42336:10;42322:13;:25::i;:::-;42314:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;42418:4;42403:11;42394:6;:20;;;;:::i;:::-;:28;;42386:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;42274:200;42510:11;42503:4;;:18;;;;:::i;:::-;42490:9;:31;;42482:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;42238:314;42565:9;42577:1;42565:13;;42560:136;42585:11;42580:1;:16;42560:136;;42612:20;:32;42633:10;42612:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;42655:33;42665:10;42686:1;42677:6;:10;;;;:::i;:::-;42655:9;:33::i;:::-;42598:3;;;;;:::i;:::-;;;;42560:136;;;;41754:947;;41704:997;:::o;21824:155::-;21919:52;21938:12;:10;:12::i;:::-;21952:8;21962;21919:18;:52::i;:::-;21824:155;;:::o;22947:328::-;23122:41;23141:12;:10;:12::i;:::-;23155:7;23122:18;:41::i;:::-;23114:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23228:39;23242:4;23248:2;23252:7;23261:5;23228:13;:39::i;:::-;22947:328;;;;:::o;41334:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41220:38::-;;;;:::o;43719:408::-;43817:13;43858:16;43866:7;43858;:16::i;:::-;43842:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;43948:28;43979:10;:8;:10::i;:::-;43948:41;;44034:1;44009:14;44003:28;:32;:118;;;;;;;;;;;;;;;;;44071:14;44087:18;:7;:16;:18::i;:::-;44054:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44003:118;43996:125;;;43719:408;;;:::o;44149:104::-;39750:12;:10;:12::i;:::-;39739:23;;:7;:5;:7::i;:::-;:23;;;39731:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44241:6:::1;44220:18;:27;;;;44149:104:::0;:::o;41145:32::-;;;;:::o;22050:164::-;22147:4;22171:18;:25;22190:5;22171:25;;;;;;;;;;;;;;;:35;22197:8;22171:35;;;;;;;;;;;;;;;;;;;;;;;;;22164:42;;22050:164;;;;:::o;44904:144::-;39750:12;:10;:12::i;:::-;39739:23;;:7;:5;:7::i;:::-;:23;;;39731:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44986:20:::1;;44979:27;;;;:::i;:::-;45036:6;;45013:20;:29;;;;;;;:::i;:::-;;44904:144:::0;;:::o;40428:201::-;39750:12;:10;:12::i;:::-;39739:23;;:7;:5;:7::i;:::-;:23;;;39731:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40537:1:::1;40517:22;;:8;:22;;;;40509:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;40593:28;40612:8;40593:18;:28::i;:::-;40428:201:::0;:::o;19027:305::-;19129:4;19181:25;19166:40;;;:11;:40;;;;:105;;;;19238:33;19223:48;;;:11;:48;;;;19166:105;:158;;;;19288:36;19312:11;19288:23;:36::i;:::-;19166:158;19146:178;;19027:305;;;:::o;7086:98::-;7139:7;7166:10;7159:17;;7086:98;:::o;24785:127::-;24850:4;24902:1;24874:30;;:7;:16;24882:7;24874:16;;;;;;;;;;;;;;;;;;;;;:30;;;;24867:37;;24785:127;;;:::o;28931:174::-;29033:2;29006:15;:24;29022:7;29006:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29089:7;29085:2;29051:46;;29060:23;29075:7;29060:14;:23::i;:::-;29051:46;;;;;;;;;;;;28931:174;;:::o;25079:348::-;25172:4;25197:16;25205:7;25197;:16::i;:::-;25189:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25273:13;25289:23;25304:7;25289:14;:23::i;:::-;25273:39;;25342:5;25331:16;;:7;:16;;;:51;;;;25375:7;25351:31;;:20;25363:7;25351:11;:20::i;:::-;:31;;;25331:51;:87;;;;25386:32;25403:5;25410:7;25386:16;:32::i;:::-;25331:87;25323:96;;;25079:348;;;;:::o;28188:625::-;28347:4;28320:31;;:23;28335:7;28320:14;:23::i;:::-;:31;;;28312:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28426:1;28412:16;;:2;:16;;;;28404:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28482:39;28503:4;28509:2;28513:7;28482:20;:39::i;:::-;28586:29;28603:1;28607:7;28586:8;:29::i;:::-;28647:1;28628:9;:15;28638:4;28628:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;28676:1;28659:9;:13;28669:2;28659:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28707:2;28688:7;:16;28696:7;28688:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28746:7;28742:2;28727:27;;28736:4;28727:27;;;;;;;;;;;;28767:38;28787:4;28793:2;28797:7;28767:19;:38::i;:::-;28188:625;;;:::o;40789:191::-;40863:16;40882:6;;;;;;;;;;;40863:25;;40908:8;40899:6;;:17;;;;;;;;;;;;;;;;;;40963:8;40932:40;;40953:8;40932:40;;;;;;;;;;;;40852:128;40789:191;:::o;25769:110::-;25845:26;25855:2;25859:7;25845:26;;;;;;;;;;;;:9;:26::i;:::-;25769:110;;:::o;29247:315::-;29402:8;29393:17;;:5;:17;;;;29385:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;29489:8;29451:18;:25;29470:5;29451:25;;;;;;;;;;;;;;;:35;29477:8;29451:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;29535:8;29513:41;;29528:5;29513:41;;;29545:8;29513:41;;;;;;:::i;:::-;;;;;;;;29247:315;;;:::o;24157:::-;24314:28;24324:4;24330:2;24334:7;24314:9;:28::i;:::-;24361:48;24384:4;24390:2;24394:7;24403:5;24361:22;:48::i;:::-;24353:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;24157:315;;;;:::o;41583:102::-;41643:13;41672:7;41665:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41583:102;:::o;7492:723::-;7548:13;7778:1;7769:5;:10;7765:53;;;7796:10;;;;;;;;;;;;;;;;;;;;;7765:53;7828:12;7843:5;7828:20;;7859:14;7884:78;7899:1;7891:4;:9;7884:78;;7917:8;;;;;:::i;:::-;;;;7948:2;7940:10;;;;;:::i;:::-;;;7884:78;;;7972:19;8004:6;7994:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7972:39;;8022:154;8038:1;8029:5;:10;8022:154;;8066:1;8056:11;;;;;:::i;:::-;;;8133:2;8125:5;:10;;;;:::i;:::-;8112:2;:24;;;;:::i;:::-;8099:39;;8082:6;8089;8082:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8162:2;8153:11;;;;;:::i;:::-;;;8022:154;;;8200:6;8186:21;;;;;7492:723;;;;:::o;17636:157::-;17721:4;17760:25;17745:40;;;:11;:40;;;;17738:47;;17636:157;;;:::o;34633:589::-;34777:45;34804:4;34810:2;34814:7;34777:26;:45::i;:::-;34855:1;34839:18;;:4;:18;;;34835:187;;;34874:40;34906:7;34874:31;:40::i;:::-;34835:187;;;34944:2;34936:10;;:4;:10;;;34932:90;;34963:47;34996:4;35002:7;34963:32;:47::i;:::-;34932:90;34835:187;35050:1;35036:16;;:2;:16;;;35032:183;;;35069:45;35106:7;35069:36;:45::i;:::-;35032:183;;;35142:4;35136:10;;:2;:10;;;35132:83;;35163:40;35191:2;35195:7;35163:27;:40::i;:::-;35132:83;35032:183;34633:589;;;:::o;32009:125::-;;;;:::o;26106:321::-;26236:18;26242:2;26246:7;26236:5;:18::i;:::-;26287:54;26318:1;26322:2;26326:7;26335:5;26287:22;:54::i;:::-;26265:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;26106:321;;;:::o;30127:799::-;30282:4;30303:15;:2;:13;;;:15::i;:::-;30299:620;;;30355:2;30339:36;;;30376:12;:10;:12::i;:::-;30390:4;30396:7;30405:5;30339:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30335:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30598:1;30581:6;:13;:18;30577:272;;;30624:60;;;;;;;;;;:::i;:::-;;;;;;;;30577:272;30799:6;30793:13;30784:6;30780:2;30776:15;30769:38;30335:529;30472:41;;;30462:51;;;:6;:51;;;;30455:58;;;;;30299:620;30903:4;30896:11;;30127:799;;;;;;;:::o;31498:126::-;;;;:::o;35945:164::-;36049:10;:17;;;;36022:15;:24;36038:7;36022:24;;;;;;;;;;;:44;;;;36077:10;36093:7;36077:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35945:164;:::o;36736:988::-;37002:22;37052:1;37027:22;37044:4;37027:16;:22::i;:::-;:26;;;;:::i;:::-;37002:51;;37064:18;37085:17;:26;37103:7;37085:26;;;;;;;;;;;;37064:47;;37232:14;37218:10;:28;37214:328;;37263:19;37285:12;:18;37298:4;37285:18;;;;;;;;;;;;;;;:34;37304:14;37285:34;;;;;;;;;;;;37263:56;;37369:11;37336:12;:18;37349:4;37336:18;;;;;;;;;;;;;;;:30;37355:10;37336:30;;;;;;;;;;;:44;;;;37486:10;37453:17;:30;37471:11;37453:30;;;;;;;;;;;:43;;;;37248:294;37214:328;37638:17;:26;37656:7;37638:26;;;;;;;;;;;37631:33;;;37682:12;:18;37695:4;37682:18;;;;;;;;;;;;;;;:34;37701:14;37682:34;;;;;;;;;;;37675:41;;;36817:907;;36736:988;;:::o;38019:1079::-;38272:22;38317:1;38297:10;:17;;;;:21;;;;:::i;:::-;38272:46;;38329:18;38350:15;:24;38366:7;38350:24;;;;;;;;;;;;38329:45;;38701:19;38723:10;38734:14;38723:26;;;;;;;;:::i;:::-;;;;;;;;;;38701:48;;38787:11;38762:10;38773;38762:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;38898:10;38867:15;:28;38883:11;38867:28;;;;;;;;;;;:41;;;;39039:15;:24;39055:7;39039:24;;;;;;;;;;;39032:31;;;39074:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38090:1008;;;38019:1079;:::o;35523:221::-;35608:14;35625:20;35642:2;35625:16;:20::i;:::-;35608:37;;35683:7;35656:12;:16;35669:2;35656:16;;;;;;;;;;;;;;;:24;35673:6;35656:24;;;;;;;;;;;:34;;;;35730:6;35701:17;:26;35719:7;35701:26;;;;;;;;;;;:35;;;;35597:147;35523:221;;:::o;26763:439::-;26857:1;26843:16;;:2;:16;;;;26835:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;26916:16;26924:7;26916;:16::i;:::-;26915:17;26907:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;26978:45;27007:1;27011:2;27015:7;26978:20;:45::i;:::-;27053:1;27036:9;:13;27046:2;27036:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27084:2;27065:7;:16;27073:7;27065:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27129:7;27125:2;27104:33;;27121:1;27104:33;;;;;;;;;;;;27150:44;27178:1;27182:2;27186:7;27150:19;:44::i;:::-;26763:439;;:::o;10259:326::-;10319:4;10576:1;10554:7;:19;;;:23;10547:30;;10259:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:135::-;2912:5;2950:6;2937:20;2928:29;;2966:31;2991:5;2966:31;:::i;:::-;2868:135;;;;:::o;3009:329::-;3068:6;3117:2;3105:9;3096:7;3092:23;3088:32;3085:119;;;3123:79;;:::i;:::-;3085:119;3243:1;3268:53;3313:7;3304:6;3293:9;3289:22;3268:53;:::i;:::-;3258:63;;3214:117;3009:329;;;;:::o;3344:474::-;3412:6;3420;3469:2;3457:9;3448:7;3444:23;3440:32;3437:119;;;3475:79;;:::i;:::-;3437:119;3595:1;3620:53;3665:7;3656:6;3645:9;3641:22;3620:53;:::i;:::-;3610:63;;3566:117;3722:2;3748:53;3793:7;3784:6;3773:9;3769:22;3748:53;:::i;:::-;3738:63;;3693:118;3344:474;;;;;:::o;3824:619::-;3901:6;3909;3917;3966:2;3954:9;3945:7;3941:23;3937:32;3934:119;;;3972:79;;:::i;:::-;3934:119;4092:1;4117:53;4162:7;4153:6;4142:9;4138:22;4117:53;:::i;:::-;4107:63;;4063:117;4219:2;4245:53;4290:7;4281:6;4270:9;4266:22;4245:53;:::i;:::-;4235:63;;4190:118;4347:2;4373:53;4418:7;4409:6;4398:9;4394:22;4373:53;:::i;:::-;4363:63;;4318:118;3824:619;;;;;:::o;4449:943::-;4544:6;4552;4560;4568;4617:3;4605:9;4596:7;4592:23;4588:33;4585:120;;;4624:79;;:::i;:::-;4585:120;4744:1;4769:53;4814:7;4805:6;4794:9;4790:22;4769:53;:::i;:::-;4759:63;;4715:117;4871:2;4897:53;4942:7;4933:6;4922:9;4918:22;4897:53;:::i;:::-;4887:63;;4842:118;4999:2;5025:53;5070:7;5061:6;5050:9;5046:22;5025:53;:::i;:::-;5015:63;;4970:118;5155:2;5144:9;5140:18;5127:32;5186:18;5178:6;5175:30;5172:117;;;5208:79;;:::i;:::-;5172:117;5313:62;5367:7;5358:6;5347:9;5343:22;5313:62;:::i;:::-;5303:72;;5098:287;4449:943;;;;;;;:::o;5398:468::-;5463:6;5471;5520:2;5508:9;5499:7;5495:23;5491:32;5488:119;;;5526:79;;:::i;:::-;5488:119;5646:1;5671:53;5716:7;5707:6;5696:9;5692:22;5671:53;:::i;:::-;5661:63;;5617:117;5773:2;5799:50;5841:7;5832:6;5821:9;5817:22;5799:50;:::i;:::-;5789:60;;5744:115;5398:468;;;;;:::o;5872:474::-;5940:6;5948;5997:2;5985:9;5976:7;5972:23;5968:32;5965:119;;;6003:79;;:::i;:::-;5965:119;6123:1;6148:53;6193:7;6184:6;6173:9;6169:22;6148:53;:::i;:::-;6138:63;;6094:117;6250:2;6276:53;6321:7;6312:6;6301:9;6297:22;6276:53;:::i;:::-;6266:63;;6221:118;5872:474;;;;;:::o;6352:470::-;6418:6;6426;6475:2;6463:9;6454:7;6450:23;6446:32;6443:119;;;6481:79;;:::i;:::-;6443:119;6601:1;6626:53;6671:7;6662:6;6651:9;6647:22;6626:53;:::i;:::-;6616:63;;6572:117;6728:2;6754:51;6797:7;6788:6;6777:9;6773:22;6754:51;:::i;:::-;6744:61;;6699:116;6352:470;;;;;:::o;6828:559::-;6914:6;6922;6971:2;6959:9;6950:7;6946:23;6942:32;6939:119;;;6977:79;;:::i;:::-;6939:119;7125:1;7114:9;7110:17;7097:31;7155:18;7147:6;7144:30;7141:117;;;7177:79;;:::i;:::-;7141:117;7290:80;7362:7;7353:6;7342:9;7338:22;7290:80;:::i;:::-;7272:98;;;;7068:312;6828:559;;;;;:::o;7393:323::-;7449:6;7498:2;7486:9;7477:7;7473:23;7469:32;7466:119;;;7504:79;;:::i;:::-;7466:119;7624:1;7649:50;7691:7;7682:6;7671:9;7667:22;7649:50;:::i;:::-;7639:60;;7595:114;7393:323;;;;:::o;7722:327::-;7780:6;7829:2;7817:9;7808:7;7804:23;7800:32;7797:119;;;7835:79;;:::i;:::-;7797:119;7955:1;7980:52;8024:7;8015:6;8004:9;8000:22;7980:52;:::i;:::-;7970:62;;7926:116;7722:327;;;;:::o;8055:349::-;8124:6;8173:2;8161:9;8152:7;8148:23;8144:32;8141:119;;;8179:79;;:::i;:::-;8141:119;8299:1;8324:63;8379:7;8370:6;8359:9;8355:22;8324:63;:::i;:::-;8314:73;;8270:127;8055:349;;;;:::o;8410:509::-;8479:6;8528:2;8516:9;8507:7;8503:23;8499:32;8496:119;;;8534:79;;:::i;:::-;8496:119;8682:1;8671:9;8667:17;8654:31;8712:18;8704:6;8701:30;8698:117;;;8734:79;;:::i;:::-;8698:117;8839:63;8894:7;8885:6;8874:9;8870:22;8839:63;:::i;:::-;8829:73;;8625:287;8410:509;;;;:::o;8925:329::-;8984:6;9033:2;9021:9;9012:7;9008:23;9004:32;9001:119;;;9039:79;;:::i;:::-;9001:119;9159:1;9184:53;9229:7;9220:6;9209:9;9205:22;9184:53;:::i;:::-;9174:63;;9130:117;8925:329;;;;:::o;9260:179::-;9329:10;9350:46;9392:3;9384:6;9350:46;:::i;:::-;9428:4;9423:3;9419:14;9405:28;;9260:179;;;;:::o;9445:118::-;9532:24;9550:5;9532:24;:::i;:::-;9527:3;9520:37;9445:118;;:::o;9599:732::-;9718:3;9747:54;9795:5;9747:54;:::i;:::-;9817:86;9896:6;9891:3;9817:86;:::i;:::-;9810:93;;9927:56;9977:5;9927:56;:::i;:::-;10006:7;10037:1;10022:284;10047:6;10044:1;10041:13;10022:284;;;10123:6;10117:13;10150:63;10209:3;10194:13;10150:63;:::i;:::-;10143:70;;10236:60;10289:6;10236:60;:::i;:::-;10226:70;;10082:224;10069:1;10066;10062:9;10057:14;;10022:284;;;10026:14;10322:3;10315:10;;9723:608;;;9599:732;;;;:::o;10337:109::-;10418:21;10433:5;10418:21;:::i;:::-;10413:3;10406:34;10337:109;;:::o;10452:360::-;10538:3;10566:38;10598:5;10566:38;:::i;:::-;10620:70;10683:6;10678:3;10620:70;:::i;:::-;10613:77;;10699:52;10744:6;10739:3;10732:4;10725:5;10721:16;10699:52;:::i;:::-;10776:29;10798:6;10776:29;:::i;:::-;10771:3;10767:39;10760:46;;10542:270;10452:360;;;;:::o;10818:364::-;10906:3;10934:39;10967:5;10934:39;:::i;:::-;10989:71;11053:6;11048:3;10989:71;:::i;:::-;10982:78;;11069:52;11114:6;11109:3;11102:4;11095:5;11091:16;11069:52;:::i;:::-;11146:29;11168:6;11146:29;:::i;:::-;11141:3;11137:39;11130:46;;10910:272;10818:364;;;;:::o;11188:377::-;11294:3;11322:39;11355:5;11322:39;:::i;:::-;11377:89;11459:6;11454:3;11377:89;:::i;:::-;11370:96;;11475:52;11520:6;11515:3;11508:4;11501:5;11497:16;11475:52;:::i;:::-;11552:6;11547:3;11543:16;11536:23;;11298:267;11188:377;;;;:::o;11571:366::-;11713:3;11734:67;11798:2;11793:3;11734:67;:::i;:::-;11727:74;;11810:93;11899:3;11810:93;:::i;:::-;11928:2;11923:3;11919:12;11912:19;;11571:366;;;:::o;11943:::-;12085:3;12106:67;12170:2;12165:3;12106:67;:::i;:::-;12099:74;;12182:93;12271:3;12182:93;:::i;:::-;12300:2;12295:3;12291:12;12284:19;;11943:366;;;:::o;12315:::-;12457:3;12478:67;12542:2;12537:3;12478:67;:::i;:::-;12471:74;;12554:93;12643:3;12554:93;:::i;:::-;12672:2;12667:3;12663:12;12656:19;;12315:366;;;:::o;12687:::-;12829:3;12850:67;12914:2;12909:3;12850:67;:::i;:::-;12843:74;;12926:93;13015:3;12926:93;:::i;:::-;13044:2;13039:3;13035:12;13028:19;;12687:366;;;:::o;13059:::-;13201:3;13222:67;13286:2;13281:3;13222:67;:::i;:::-;13215:74;;13298:93;13387:3;13298:93;:::i;:::-;13416:2;13411:3;13407:12;13400:19;;13059:366;;;:::o;13431:::-;13573:3;13594:67;13658:2;13653:3;13594:67;:::i;:::-;13587:74;;13670:93;13759:3;13670:93;:::i;:::-;13788:2;13783:3;13779:12;13772:19;;13431:366;;;:::o;13803:::-;13945:3;13966:67;14030:2;14025:3;13966:67;:::i;:::-;13959:74;;14042:93;14131:3;14042:93;:::i;:::-;14160:2;14155:3;14151:12;14144:19;;13803:366;;;:::o;14175:::-;14317:3;14338:67;14402:2;14397:3;14338:67;:::i;:::-;14331:74;;14414:93;14503:3;14414:93;:::i;:::-;14532:2;14527:3;14523:12;14516:19;;14175:366;;;:::o;14547:::-;14689:3;14710:67;14774:2;14769:3;14710:67;:::i;:::-;14703:74;;14786:93;14875:3;14786:93;:::i;:::-;14904:2;14899:3;14895:12;14888:19;;14547:366;;;:::o;14919:::-;15061:3;15082:67;15146:2;15141:3;15082:67;:::i;:::-;15075:74;;15158:93;15247:3;15158:93;:::i;:::-;15276:2;15271:3;15267:12;15260:19;;14919:366;;;:::o;15291:::-;15433:3;15454:67;15518:2;15513:3;15454:67;:::i;:::-;15447:74;;15530:93;15619:3;15530:93;:::i;:::-;15648:2;15643:3;15639:12;15632:19;;15291:366;;;:::o;15663:::-;15805:3;15826:67;15890:2;15885:3;15826:67;:::i;:::-;15819:74;;15902:93;15991:3;15902:93;:::i;:::-;16020:2;16015:3;16011:12;16004:19;;15663:366;;;:::o;16035:::-;16177:3;16198:67;16262:2;16257:3;16198:67;:::i;:::-;16191:74;;16274:93;16363:3;16274:93;:::i;:::-;16392:2;16387:3;16383:12;16376:19;;16035:366;;;:::o;16407:::-;16549:3;16570:67;16634:2;16629:3;16570:67;:::i;:::-;16563:74;;16646:93;16735:3;16646:93;:::i;:::-;16764:2;16759:3;16755:12;16748:19;;16407:366;;;:::o;16779:::-;16921:3;16942:67;17006:2;17001:3;16942:67;:::i;:::-;16935:74;;17018:93;17107:3;17018:93;:::i;:::-;17136:2;17131:3;17127:12;17120:19;;16779:366;;;:::o;17151:::-;17293:3;17314:67;17378:2;17373:3;17314:67;:::i;:::-;17307:74;;17390:93;17479:3;17390:93;:::i;:::-;17508:2;17503:3;17499:12;17492:19;;17151:366;;;:::o;17523:::-;17665:3;17686:67;17750:2;17745:3;17686:67;:::i;:::-;17679:74;;17762:93;17851:3;17762:93;:::i;:::-;17880:2;17875:3;17871:12;17864:19;;17523:366;;;:::o;17895:::-;18037:3;18058:67;18122:2;18117:3;18058:67;:::i;:::-;18051:74;;18134:93;18223:3;18134:93;:::i;:::-;18252:2;18247:3;18243:12;18236:19;;17895:366;;;:::o;18267:::-;18409:3;18430:67;18494:2;18489:3;18430:67;:::i;:::-;18423:74;;18506:93;18595:3;18506:93;:::i;:::-;18624:2;18619:3;18615:12;18608:19;;18267:366;;;:::o;18639:::-;18781:3;18802:67;18866:2;18861:3;18802:67;:::i;:::-;18795:74;;18878:93;18967:3;18878:93;:::i;:::-;18996:2;18991:3;18987:12;18980:19;;18639:366;;;:::o;19011:::-;19153:3;19174:67;19238:2;19233:3;19174:67;:::i;:::-;19167:74;;19250:93;19339:3;19250:93;:::i;:::-;19368:2;19363:3;19359:12;19352:19;;19011:366;;;:::o;19383:398::-;19542:3;19563:83;19644:1;19639:3;19563:83;:::i;:::-;19556:90;;19655:93;19744:3;19655:93;:::i;:::-;19773:1;19768:3;19764:11;19757:18;;19383:398;;;:::o;19787:366::-;19929:3;19950:67;20014:2;20009:3;19950:67;:::i;:::-;19943:74;;20026:93;20115:3;20026:93;:::i;:::-;20144:2;20139:3;20135:12;20128:19;;19787:366;;;:::o;20159:::-;20301:3;20322:67;20386:2;20381:3;20322:67;:::i;:::-;20315:74;;20398:93;20487:3;20398:93;:::i;:::-;20516:2;20511:3;20507:12;20500:19;;20159:366;;;:::o;20531:::-;20673:3;20694:67;20758:2;20753:3;20694:67;:::i;:::-;20687:74;;20770:93;20859:3;20770:93;:::i;:::-;20888:2;20883:3;20879:12;20872:19;;20531:366;;;:::o;20903:::-;21045:3;21066:67;21130:2;21125:3;21066:67;:::i;:::-;21059:74;;21142:93;21231:3;21142:93;:::i;:::-;21260:2;21255:3;21251:12;21244:19;;20903:366;;;:::o;21275:::-;21417:3;21438:67;21502:2;21497:3;21438:67;:::i;:::-;21431:74;;21514:93;21603:3;21514:93;:::i;:::-;21632:2;21627:3;21623:12;21616:19;;21275:366;;;:::o;21647:::-;21789:3;21810:67;21874:2;21869:3;21810:67;:::i;:::-;21803:74;;21886:93;21975:3;21886:93;:::i;:::-;22004:2;21999:3;21995:12;21988:19;;21647:366;;;:::o;22019:108::-;22096:24;22114:5;22096:24;:::i;:::-;22091:3;22084:37;22019:108;;:::o;22133:118::-;22220:24;22238:5;22220:24;:::i;:::-;22215:3;22208:37;22133:118;;:::o;22257:435::-;22437:3;22459:95;22550:3;22541:6;22459:95;:::i;:::-;22452:102;;22571:95;22662:3;22653:6;22571:95;:::i;:::-;22564:102;;22683:3;22676:10;;22257:435;;;;;:::o;22698:379::-;22882:3;22904:147;23047:3;22904:147;:::i;:::-;22897:154;;23068:3;23061:10;;22698:379;;;:::o;23083:222::-;23176:4;23214:2;23203:9;23199:18;23191:26;;23227:71;23295:1;23284:9;23280:17;23271:6;23227:71;:::i;:::-;23083:222;;;;:::o;23311:640::-;23506:4;23544:3;23533:9;23529:19;23521:27;;23558:71;23626:1;23615:9;23611:17;23602:6;23558:71;:::i;:::-;23639:72;23707:2;23696:9;23692:18;23683:6;23639:72;:::i;:::-;23721;23789:2;23778:9;23774:18;23765:6;23721:72;:::i;:::-;23840:9;23834:4;23830:20;23825:2;23814:9;23810:18;23803:48;23868:76;23939:4;23930:6;23868:76;:::i;:::-;23860:84;;23311:640;;;;;;;:::o;23957:373::-;24100:4;24138:2;24127:9;24123:18;24115:26;;24187:9;24181:4;24177:20;24173:1;24162:9;24158:17;24151:47;24215:108;24318:4;24309:6;24215:108;:::i;:::-;24207:116;;23957:373;;;;:::o;24336:210::-;24423:4;24461:2;24450:9;24446:18;24438:26;;24474:65;24536:1;24525:9;24521:17;24512:6;24474:65;:::i;:::-;24336:210;;;;:::o;24552:313::-;24665:4;24703:2;24692:9;24688:18;24680:26;;24752:9;24746:4;24742:20;24738:1;24727:9;24723:17;24716:47;24780:78;24853:4;24844:6;24780:78;:::i;:::-;24772:86;;24552:313;;;;:::o;24871:419::-;25037:4;25075:2;25064:9;25060:18;25052:26;;25124:9;25118:4;25114:20;25110:1;25099:9;25095:17;25088:47;25152:131;25278:4;25152:131;:::i;:::-;25144:139;;24871:419;;;:::o;25296:::-;25462:4;25500:2;25489:9;25485:18;25477:26;;25549:9;25543:4;25539:20;25535:1;25524:9;25520:17;25513:47;25577:131;25703:4;25577:131;:::i;:::-;25569:139;;25296:419;;;:::o;25721:::-;25887:4;25925:2;25914:9;25910:18;25902:26;;25974:9;25968:4;25964:20;25960:1;25949:9;25945:17;25938:47;26002:131;26128:4;26002:131;:::i;:::-;25994:139;;25721:419;;;:::o;26146:::-;26312:4;26350:2;26339:9;26335:18;26327:26;;26399:9;26393:4;26389:20;26385:1;26374:9;26370:17;26363:47;26427:131;26553:4;26427:131;:::i;:::-;26419:139;;26146:419;;;:::o;26571:::-;26737:4;26775:2;26764:9;26760:18;26752:26;;26824:9;26818:4;26814:20;26810:1;26799:9;26795:17;26788:47;26852:131;26978:4;26852:131;:::i;:::-;26844:139;;26571:419;;;:::o;26996:::-;27162:4;27200:2;27189:9;27185:18;27177:26;;27249:9;27243:4;27239:20;27235:1;27224:9;27220:17;27213:47;27277:131;27403:4;27277:131;:::i;:::-;27269:139;;26996:419;;;:::o;27421:::-;27587:4;27625:2;27614:9;27610:18;27602:26;;27674:9;27668:4;27664:20;27660:1;27649:9;27645:17;27638:47;27702:131;27828:4;27702:131;:::i;:::-;27694:139;;27421:419;;;:::o;27846:::-;28012:4;28050:2;28039:9;28035:18;28027:26;;28099:9;28093:4;28089:20;28085:1;28074:9;28070:17;28063:47;28127:131;28253:4;28127:131;:::i;:::-;28119:139;;27846:419;;;:::o;28271:::-;28437:4;28475:2;28464:9;28460:18;28452:26;;28524:9;28518:4;28514:20;28510:1;28499:9;28495:17;28488:47;28552:131;28678:4;28552:131;:::i;:::-;28544:139;;28271:419;;;:::o;28696:::-;28862:4;28900:2;28889:9;28885:18;28877:26;;28949:9;28943:4;28939:20;28935:1;28924:9;28920:17;28913:47;28977:131;29103:4;28977:131;:::i;:::-;28969:139;;28696:419;;;:::o;29121:::-;29287:4;29325:2;29314:9;29310:18;29302:26;;29374:9;29368:4;29364:20;29360:1;29349:9;29345:17;29338:47;29402:131;29528:4;29402:131;:::i;:::-;29394:139;;29121:419;;;:::o;29546:::-;29712:4;29750:2;29739:9;29735:18;29727:26;;29799:9;29793:4;29789:20;29785:1;29774:9;29770:17;29763:47;29827:131;29953:4;29827:131;:::i;:::-;29819:139;;29546:419;;;:::o;29971:::-;30137:4;30175:2;30164:9;30160:18;30152:26;;30224:9;30218:4;30214:20;30210:1;30199:9;30195:17;30188:47;30252:131;30378:4;30252:131;:::i;:::-;30244:139;;29971:419;;;:::o;30396:::-;30562:4;30600:2;30589:9;30585:18;30577:26;;30649:9;30643:4;30639:20;30635:1;30624:9;30620:17;30613:47;30677:131;30803:4;30677:131;:::i;:::-;30669:139;;30396:419;;;:::o;30821:::-;30987:4;31025:2;31014:9;31010:18;31002:26;;31074:9;31068:4;31064:20;31060:1;31049:9;31045:17;31038:47;31102:131;31228:4;31102:131;:::i;:::-;31094:139;;30821:419;;;:::o;31246:::-;31412:4;31450:2;31439:9;31435:18;31427:26;;31499:9;31493:4;31489:20;31485:1;31474:9;31470:17;31463:47;31527:131;31653:4;31527:131;:::i;:::-;31519:139;;31246:419;;;:::o;31671:::-;31837:4;31875:2;31864:9;31860:18;31852:26;;31924:9;31918:4;31914:20;31910:1;31899:9;31895:17;31888:47;31952:131;32078:4;31952:131;:::i;:::-;31944:139;;31671:419;;;:::o;32096:::-;32262:4;32300:2;32289:9;32285:18;32277:26;;32349:9;32343:4;32339:20;32335:1;32324:9;32320:17;32313:47;32377:131;32503:4;32377:131;:::i;:::-;32369:139;;32096:419;;;:::o;32521:::-;32687:4;32725:2;32714:9;32710:18;32702:26;;32774:9;32768:4;32764:20;32760:1;32749:9;32745:17;32738:47;32802:131;32928:4;32802:131;:::i;:::-;32794:139;;32521:419;;;:::o;32946:::-;33112:4;33150:2;33139:9;33135:18;33127:26;;33199:9;33193:4;33189:20;33185:1;33174:9;33170:17;33163:47;33227:131;33353:4;33227:131;:::i;:::-;33219:139;;32946:419;;;:::o;33371:::-;33537:4;33575:2;33564:9;33560:18;33552:26;;33624:9;33618:4;33614:20;33610:1;33599:9;33595:17;33588:47;33652:131;33778:4;33652:131;:::i;:::-;33644:139;;33371:419;;;:::o;33796:::-;33962:4;34000:2;33989:9;33985:18;33977:26;;34049:9;34043:4;34039:20;34035:1;34024:9;34020:17;34013:47;34077:131;34203:4;34077:131;:::i;:::-;34069:139;;33796:419;;;:::o;34221:::-;34387:4;34425:2;34414:9;34410:18;34402:26;;34474:9;34468:4;34464:20;34460:1;34449:9;34445:17;34438:47;34502:131;34628:4;34502:131;:::i;:::-;34494:139;;34221:419;;;:::o;34646:::-;34812:4;34850:2;34839:9;34835:18;34827:26;;34899:9;34893:4;34889:20;34885:1;34874:9;34870:17;34863:47;34927:131;35053:4;34927:131;:::i;:::-;34919:139;;34646:419;;;:::o;35071:::-;35237:4;35275:2;35264:9;35260:18;35252:26;;35324:9;35318:4;35314:20;35310:1;35299:9;35295:17;35288:47;35352:131;35478:4;35352:131;:::i;:::-;35344:139;;35071:419;;;:::o;35496:::-;35662:4;35700:2;35689:9;35685:18;35677:26;;35749:9;35743:4;35739:20;35735:1;35724:9;35720:17;35713:47;35777:131;35903:4;35777:131;:::i;:::-;35769:139;;35496:419;;;:::o;35921:::-;36087:4;36125:2;36114:9;36110:18;36102:26;;36174:9;36168:4;36164:20;36160:1;36149:9;36145:17;36138:47;36202:131;36328:4;36202:131;:::i;:::-;36194:139;;35921:419;;;:::o;36346:222::-;36439:4;36477:2;36466:9;36462:18;36454:26;;36490:71;36558:1;36547:9;36543:17;36534:6;36490:71;:::i;:::-;36346:222;;;;:::o;36574:129::-;36608:6;36635:20;;:::i;:::-;36625:30;;36664:33;36692:4;36684:6;36664:33;:::i;:::-;36574:129;;;:::o;36709:75::-;36742:6;36775:2;36769:9;36759:19;;36709:75;:::o;36790:307::-;36851:4;36941:18;36933:6;36930:30;36927:56;;;36963:18;;:::i;:::-;36927:56;37001:29;37023:6;37001:29;:::i;:::-;36993:37;;37085:4;37079;37075:15;37067:23;;36790:307;;;:::o;37103:308::-;37165:4;37255:18;37247:6;37244:30;37241:56;;;37277:18;;:::i;:::-;37241:56;37315:29;37337:6;37315:29;:::i;:::-;37307:37;;37399:4;37393;37389:15;37381:23;;37103:308;;;:::o;37417:132::-;37484:4;37507:3;37499:11;;37537:4;37532:3;37528:14;37520:22;;37417:132;;;:::o;37555:114::-;37622:6;37656:5;37650:12;37640:22;;37555:114;;;:::o;37675:98::-;37726:6;37760:5;37754:12;37744:22;;37675:98;;;:::o;37779:99::-;37831:6;37865:5;37859:12;37849:22;;37779:99;;;:::o;37884:113::-;37954:4;37986;37981:3;37977:14;37969:22;;37884:113;;;:::o;38003:184::-;38102:11;38136:6;38131:3;38124:19;38176:4;38171:3;38167:14;38152:29;;38003:184;;;;:::o;38193:168::-;38276:11;38310:6;38305:3;38298:19;38350:4;38345:3;38341:14;38326:29;;38193:168;;;;:::o;38367:147::-;38468:11;38505:3;38490:18;;38367:147;;;;:::o;38520:169::-;38604:11;38638:6;38633:3;38626:19;38678:4;38673:3;38669:14;38654:29;;38520:169;;;;:::o;38695:148::-;38797:11;38834:3;38819:18;;38695:148;;;;:::o;38849:305::-;38889:3;38908:20;38926:1;38908:20;:::i;:::-;38903:25;;38942:20;38960:1;38942:20;:::i;:::-;38937:25;;39096:1;39028:66;39024:74;39021:1;39018:81;39015:107;;;39102:18;;:::i;:::-;39015:107;39146:1;39143;39139:9;39132:16;;38849:305;;;;:::o;39160:185::-;39200:1;39217:20;39235:1;39217:20;:::i;:::-;39212:25;;39251:20;39269:1;39251:20;:::i;:::-;39246:25;;39290:1;39280:35;;39295:18;;:::i;:::-;39280:35;39337:1;39334;39330:9;39325:14;;39160:185;;;;:::o;39351:348::-;39391:7;39414:20;39432:1;39414:20;:::i;:::-;39409:25;;39448:20;39466:1;39448:20;:::i;:::-;39443:25;;39636:1;39568:66;39564:74;39561:1;39558:81;39553:1;39546:9;39539:17;39535:105;39532:131;;;39643:18;;:::i;:::-;39532:131;39691:1;39688;39684:9;39673:20;;39351:348;;;;:::o;39705:191::-;39745:4;39765:20;39783:1;39765:20;:::i;:::-;39760:25;;39799:20;39817:1;39799:20;:::i;:::-;39794:25;;39838:1;39835;39832:8;39829:34;;;39843:18;;:::i;:::-;39829:34;39888:1;39885;39881:9;39873:17;;39705:191;;;;:::o;39902:96::-;39939:7;39968:24;39986:5;39968:24;:::i;:::-;39957:35;;39902:96;;;:::o;40004:90::-;40038:7;40081:5;40074:13;40067:21;40056:32;;40004:90;;;:::o;40100:149::-;40136:7;40176:66;40169:5;40165:78;40154:89;;40100:149;;;:::o;40255:126::-;40292:7;40332:42;40325:5;40321:54;40310:65;;40255:126;;;:::o;40387:77::-;40424:7;40453:5;40442:16;;40387:77;;;:::o;40470:86::-;40505:7;40545:4;40538:5;40534:16;40523:27;;40470:86;;;:::o;40562:154::-;40646:6;40641:3;40636;40623:30;40708:1;40699:6;40694:3;40690:16;40683:27;40562:154;;;:::o;40722:307::-;40790:1;40800:113;40814:6;40811:1;40808:13;40800:113;;;40899:1;40894:3;40890:11;40884:18;40880:1;40875:3;40871:11;40864:39;40836:2;40833:1;40829:10;40824:15;;40800:113;;;40931:6;40928:1;40925:13;40922:101;;;41011:1;41002:6;40997:3;40993:16;40986:27;40922:101;40771:258;40722:307;;;:::o;41035:320::-;41079:6;41116:1;41110:4;41106:12;41096:22;;41163:1;41157:4;41153:12;41184:18;41174:81;;41240:4;41232:6;41228:17;41218:27;;41174:81;41302:2;41294:6;41291:14;41271:18;41268:38;41265:84;;;41321:18;;:::i;:::-;41265:84;41086:269;41035:320;;;:::o;41361:281::-;41444:27;41466:4;41444:27;:::i;:::-;41436:6;41432:40;41574:6;41562:10;41559:22;41538:18;41526:10;41523:34;41520:62;41517:88;;;41585:18;;:::i;:::-;41517:88;41625:10;41621:2;41614:22;41404:238;41361:281;;:::o;41648:233::-;41687:3;41710:24;41728:5;41710:24;:::i;:::-;41701:33;;41756:66;41749:5;41746:77;41743:103;;;41826:18;;:::i;:::-;41743:103;41873:1;41866:5;41862:13;41855:20;;41648:233;;;:::o;41887:176::-;41919:1;41936:20;41954:1;41936:20;:::i;:::-;41931:25;;41970:20;41988:1;41970:20;:::i;:::-;41965:25;;42009:1;41999:35;;42014:18;;:::i;:::-;41999:35;42055:1;42052;42048:9;42043:14;;41887:176;;;;:::o;42069:180::-;42117:77;42114:1;42107:88;42214:4;42211:1;42204:15;42238:4;42235:1;42228:15;42255:180;42303:77;42300:1;42293:88;42400:4;42397:1;42390:15;42424:4;42421:1;42414:15;42441:180;42489:77;42486:1;42479:88;42586:4;42583:1;42576:15;42610:4;42607:1;42600:15;42627:180;42675:77;42672:1;42665:88;42772:4;42769:1;42762:15;42796:4;42793:1;42786:15;42813:180;42861:77;42858:1;42851:88;42958:4;42955:1;42948:15;42982:4;42979:1;42972:15;42999:180;43047:77;43044:1;43037:88;43144:4;43141:1;43134:15;43168:4;43165:1;43158:15;43185:117;43294:1;43291;43284:12;43308:117;43417:1;43414;43407:12;43431:117;43540:1;43537;43530:12;43554:117;43663:1;43660;43653:12;43677:117;43786:1;43783;43776:12;43800:117;43909:1;43906;43899:12;43923:102;43964:6;44015:2;44011:7;44006:2;43999:5;43995:14;43991:28;43981:38;;43923:102;;;:::o;44031:230::-;44171:34;44167:1;44159:6;44155:14;44148:58;44240:13;44235:2;44227:6;44223:15;44216:38;44031:230;:::o;44267:237::-;44407:34;44403:1;44395:6;44391:14;44384:58;44476:20;44471:2;44463:6;44459:15;44452:45;44267:237;:::o;44510:225::-;44650:34;44646:1;44638:6;44634:14;44627:58;44719:8;44714:2;44706:6;44702:15;44695:33;44510:225;:::o;44741:224::-;44881:34;44877:1;44869:6;44865:14;44858:58;44950:7;44945:2;44937:6;44933:15;44926:32;44741:224;:::o;44971:178::-;45111:30;45107:1;45099:6;45095:14;45088:54;44971:178;:::o;45155:::-;45295:30;45291:1;45283:6;45279:14;45272:54;45155:178;:::o;45339:223::-;45479:34;45475:1;45467:6;45463:14;45456:58;45548:6;45543:2;45535:6;45531:15;45524:31;45339:223;:::o;45568:175::-;45708:27;45704:1;45696:6;45692:14;45685:51;45568:175;:::o;45749:231::-;45889:34;45885:1;45877:6;45873:14;45866:58;45958:14;45953:2;45945:6;45941:15;45934:39;45749:231;:::o;45986:243::-;46126:34;46122:1;46114:6;46110:14;46103:58;46195:26;46190:2;46182:6;46178:15;46171:51;45986:243;:::o;46235:229::-;46375:34;46371:1;46363:6;46359:14;46352:58;46444:12;46439:2;46431:6;46427:15;46420:37;46235:229;:::o;46470:228::-;46610:34;46606:1;46598:6;46594:14;46587:58;46679:11;46674:2;46666:6;46662:15;46655:36;46470:228;:::o;46704:172::-;46844:24;46840:1;46832:6;46828:14;46821:48;46704:172;:::o;46882:223::-;47022:34;47018:1;47010:6;47006:14;46999:58;47091:6;47086:2;47078:6;47074:15;47067:31;46882:223;:::o;47111:182::-;47251:34;47247:1;47239:6;47235:14;47228:58;47111:182;:::o;47299:231::-;47439:34;47435:1;47427:6;47423:14;47416:58;47508:14;47503:2;47495:6;47491:15;47484:39;47299:231;:::o;47536:182::-;47676:34;47672:1;47664:6;47660:14;47653:58;47536:182;:::o;47724:172::-;47864:24;47860:1;47852:6;47848:14;47841:48;47724:172;:::o;47902:234::-;48042:34;48038:1;48030:6;48026:14;48019:58;48111:17;48106:2;48098:6;48094:15;48087:42;47902:234;:::o;48142:220::-;48282:34;48278:1;48270:6;48266:14;48259:58;48351:3;48346:2;48338:6;48334:15;48327:28;48142:220;:::o;48368:169::-;48508:21;48504:1;48496:6;48492:14;48485:45;48368:169;:::o;48543:114::-;;:::o;48663:168::-;48803:20;48799:1;48791:6;48787:14;48780:44;48663:168;:::o;48837:236::-;48977:34;48973:1;48965:6;48961:14;48954:58;49046:19;49041:2;49033:6;49029:15;49022:44;48837:236;:::o;49079:231::-;49219:34;49215:1;49207:6;49203:14;49196:58;49288:14;49283:2;49275:6;49271:15;49264:39;49079:231;:::o;49316:224::-;49456:34;49452:1;49444:6;49440:14;49433:58;49525:7;49520:2;49512:6;49508:15;49501:32;49316:224;:::o;49546:173::-;49686:25;49682:1;49674:6;49670:14;49663:49;49546:173;:::o;49725:177::-;49865:29;49861:1;49853:6;49849:14;49842:53;49725:177;:::o;49908:122::-;49981:24;49999:5;49981:24;:::i;:::-;49974:5;49971:35;49961:63;;50020:1;50017;50010:12;49961:63;49908:122;:::o;50036:116::-;50106:21;50121:5;50106:21;:::i;:::-;50099:5;50096:32;50086:60;;50142:1;50139;50132:12;50086:60;50036:116;:::o;50158:120::-;50230:23;50247:5;50230:23;:::i;:::-;50223:5;50220:34;50210:62;;50268:1;50265;50258:12;50210:62;50158:120;:::o;50284:122::-;50357:24;50375:5;50357:24;:::i;:::-;50350:5;50347:35;50337:63;;50396:1;50393;50386:12;50337:63;50284:122;:::o;50412:118::-;50483:22;50499:5;50483:22;:::i;:::-;50476:5;50473:33;50463:61;;50520:1;50517;50510:12;50463:61;50412:118;:::o
Swarm Source
ipfs://6f3f54a43f58ab9db5b1b36a8999d2d9dfb58aa4e22d9150729076f2742dfe31
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.