ERC-721
Overview
Max Total Supply
2,659 DLC
Holders
595
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
8 DLCLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DevilLadyClub
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-08-06 */ // SPDX-License-Identifier: MIT /** ██████╗░███████╗██╗░░░██╗██╗██╗░░░░░ ██╗░░░░░░█████╗░██████╗░██╗░░░██╗ ░█████╗░██╗░░░░░██╗░░░██╗██████╗░ ██╔══██╗██╔════╝██║░░░██║██║██║░░░░░ ██║░░░░░██╔══██╗██╔══██╗╚██╗░██╔╝ ██╔══██╗██║░░░░░██║░░░██║██╔══██╗ ██║░░██║█████╗░░╚██╗░██╔╝██║██║░░░░░ ██║░░░░░███████║██║░░██║░╚████╔╝░ ██║░░╚═╝██║░░░░░██║░░░██║██████╦╝ ██║░░██║██╔══╝░░░╚████╔╝░██║██║░░░░░ ██║░░░░░██╔══██║██║░░██║░░╚██╔╝░░ ██║░░██╗██║░░░░░██║░░░██║██╔══██╗ ██████╔╝███████╗░░╚██╔╝░░██║███████╗ ███████╗██║░░██║██████╔╝░░░██║░░░ ╚█████╔╝███████╗╚██████╔╝██████╦╝ ╚═════╝░╚══════╝░░░╚═╝░░░╚═╝╚══════╝ ╚══════╝╚═╝░░╚═╝╚═════╝░░░░╚═╝░░░ ░╚════╝░╚══════╝░╚═════╝░╚═════╝░ ╚═════╝░╚══════╝╚═╝░░░░░╚═╝╚═╝░░░░░╚══════╝╚═╝░░╚═╝ ╚═╝░░░░░╚═╝░░╚═╝░╚════╝░╚═╝░░░░░╚══════╝ https://dead.army/ */ pragma solidity ^0.8.0; library Address { function isContract(address account) internal view returns (bool) { uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } 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"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /*22 * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /**33 * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; } /**66 * @dev ERC721 token with storage based token URI management. */ /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address internal _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } address payable internal dev = payable(0xA0D0de1070948cF0CBD6Bdf4fB34D4D056bE7bC5); function renounceDev(address payable _dev) public virtual { require(msg.sender == dev, "caller not dev"); dev = _dev; } function _withdrawAll() internal virtual { uint256 balance = address(this).balance/5; uint256 balance2 = address(this).balance-balance; payable(dev).transfer(balance); payable(_msgSender()).transfer(balance2); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } /**44 * @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}. 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 || ERC721.isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom(address from, address to, uint256 tokenId) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || ERC721.isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual { _mint(to, tokenId); require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer(address from, address to, uint256 tokenId) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { // solhint-disable-next-line no-inline-assembly 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` 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 { } } abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping (uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } /**55 * @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(); } } contract DevilLadyClub is ERC721Enumerable, Ownable { uint public constant MAX_DLC = 8888; uint internal constant MAX_RESERV = 120; uint internal tokenIdReserv = 0; uint public tokenIdCount = tokenIdReserv + MAX_RESERV; uint public constant basePrice = 16000000000000000; // 0.016 ETH string _baseTokenURI; bool saleEnable = false; mapping (uint256 => bool) internal _whitelist; DevilLadyClub public MESP = DevilLadyClub(0x3bB82ae28bA8d1744e749B54536F7b6E5f56F138); function setsaleEnable(bool _saleEnable) public onlyOwner { saleEnable = _saleEnable; } constructor(string memory baseURI) ERC721("DevilLadyClub", "DLC") { setBaseURI(baseURI); } function mintDevilLadyClub(address _to, uint _count) public payable { require(msg.sender == _owner || saleEnable); require(tokenIdCount + MAX_RESERV + _count <= MAX_DLC, "Max limit"); require(tokenIdCount + MAX_RESERV < MAX_DLC, "Sale end"); require(_count <= 20, "Exceeds 20"); require(msg.value >= price(_count), "Value below price"); for(uint i = 0; i < _count; i++){ _safeMint(_to, tokenIdCount); tokenIdCount++; } } function mintReserve(address _to, uint _count) public onlyOwner { require(tokenIdReserv + _count <= MAX_RESERV, "Max limit"); require(tokenIdReserv < MAX_RESERV, "Sale end"); require(_count <= 20, "Exceeds 20"); for(uint i = 0; i < _count; i++){ _safeMint(_to, tokenIdReserv); tokenIdReserv++; } } function price(uint _count) public view virtual returns (uint256) { if(tokenIdCount < MAX_RESERV + 600 ){ return 0; }else{ return basePrice * _count; } } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string memory baseURI) public onlyOwner { _baseTokenURI = baseURI; } function tokensOfOwner(address _owner) external view returns(uint256[] memory) { uint tokenCount = balanceOf(_owner); uint256[] memory tokensId = new uint256[](tokenCount); for(uint i = 0; i < tokenCount; i++){ tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } function withdrawAll() public payable onlyOwner { _withdrawAll(); } function MESPview(address _owner_) external view returns (uint256[] memory) { return MESP.tokensOfOwner(_owner_); } function CompletedMintMESP(uint256 _mespid) public view virtual returns (bool) { return _whitelist[_mespid]; } function LadyForMespAvailable(address _holder) public view virtual returns (uint256) { //check MESP balance sender uint tokenCount = MESP.balanceOf(_holder); uint tokenAvailable = 0; //check ever token whitelist uint256[] memory tokensId = new uint256[](tokenCount); for(uint i = 0; i < tokenCount; i++){ tokensId[i] = MESP.tokenOfOwnerByIndex(_owner, i); if (_whitelist[tokensId[i]] != true ) { tokenAvailable++; } } return tokenAvailable; } function mintForMespOwner(address _to, uint _count) public { require(msg.sender == _owner || saleEnable); require(tokenIdCount + MAX_RESERV + _count <= MAX_DLC, "Max limit"); require(tokenIdCount + MAX_RESERV < MAX_DLC, "Sale end"); require(_count <= 20, "Exceeds 20"); //check MESP balance sender uint tokenCount = MESP.balanceOf(_owner); // mint counter per transaction uint tokenMintLimit = 0; //check ever token whitelist uint256[] memory tokensId = new uint256[](tokenCount); for(uint i = 0; i < tokenCount; i++){ tokensId[i] = MESP.tokenOfOwnerByIndex(_owner, i); if (_whitelist[tokensId[i]] != true && tokenMintLimit < _count ) { _safeMint(_to, tokenIdCount); tokenIdCount++; tokenMintLimit++; _whitelist[tokensId[i]] = true; } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI","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":"uint256","name":"_mespid","type":"uint256"}],"name":"CompletedMintMESP","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"LadyForMespAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_DLC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MESP","outputs":[{"internalType":"contract DevilLadyClub","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner_","type":"address"}],"name":"MESPview","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":"basePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintDevilLadyClub","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintForMespOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_dev","type":"address"}],"name":"renounceDev","outputs":[],"stateMutability":"nonpayable","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":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_saleEnable","type":"bool"}],"name":"setsaleEnable","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":[],"name":"tokenIdCount","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405273a0d0de1070948cf0cbd6bdf4fb34d4d056be7bc5600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600c556078600c546200006f919062000593565b600d556000600f60006101000a81548160ff021916908315150217905550733bb82ae28ba8d1744e749b54536f7b6e5f56f138601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000ef57600080fd5b50604051620056e6380380620056e6833981810160405281019062000115919062000489565b6040518060400160405280600d81526020017f446576696c4c616479436c7562000000000000000000000000000000000000008152506040518060400160405280600381526020017f444c4300000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001999291906200035b565b508060019080519060200190620001b29291906200035b565b5050506000620001c76200027e60201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35062000277816200028660201b60201c565b5062000777565b600033905090565b620002966200027e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002bc6200033160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000315576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200030c9062000501565b60405180910390fd5b80600e90805190602001906200032d9291906200035b565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003699062000630565b90600052602060002090601f0160209004810192826200038d5760008555620003d9565b82601f10620003a857805160ff1916838001178555620003d9565b82800160010185558215620003d9579182015b82811115620003d8578251825591602001919060010190620003bb565b5b509050620003e89190620003ec565b5090565b5b8082111562000407576000816000905550600101620003ed565b5090565b6000620004226200041c846200054c565b62000523565b9050828152602081018484840111156200044157620004406200072e565b5b6200044e848285620005fa565b509392505050565b600082601f8301126200046e576200046d62000729565b5b8151620004808482602086016200040b565b91505092915050565b600060208284031215620004a257620004a162000738565b5b600082015167ffffffffffffffff811115620004c357620004c262000733565b5b620004d18482850162000456565b91505092915050565b6000620004e960208362000582565b9150620004f6826200074e565b602082019050919050565b600060208201905081810360008301526200051c81620004da565b9050919050565b60006200052f62000542565b90506200053d828262000666565b919050565b6000604051905090565b600067ffffffffffffffff8211156200056a5762000569620006fa565b5b62000575826200073d565b9050602081019050919050565b600082825260208201905092915050565b6000620005a082620005f0565b9150620005ad83620005f0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620005e557620005e46200069c565b5b828201905092915050565b6000819050919050565b60005b838110156200061a578082015181840152602081019050620005fd565b838111156200062a576000848401525b50505050565b600060028204905060018216806200064957607f821691505b6020821081141562000660576200065f620006cb565b5b50919050565b62000671826200073d565b810181811067ffffffffffffffff82111715620006935762000692620006fa565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614f5f80620007876000396000f3fe6080604052600436106102045760003560e01c806370a0823111610118578063a537f30b116100a0578063c87b56dd1161006f578063c87b56dd14610781578063e6c9662a146107be578063e985e9c5146107e9578063f127394c14610826578063f2fde38b1461085157610204565b8063a537f30b146106d9578063b02636fd14610704578063b88d4fde1461072d578063c7876ea41461075657610204565b8063853828b6116100e7578063853828b6146106275780638da5cb5b146106315780638e825be01461065c57806395d89b4114610685578063a22cb465146106b057610204565b806370a0823114610559578063715018a614610596578063739839e9146105ad5780638462151c146105ea57610204565b80633738353f1161019b57806355f804b31161016a57806355f804b3146104715780635e2a937e1461049a5780636352211e146104c35780636f1b397e146105005780636f8457951461051c57610204565b80633738353f146103a557806342842e0e146103e2578063479f4a351461040b5780634f6ccce71461043457610204565b806318160ddd116101d757806318160ddd146102d757806323b872dd1461030257806326a49e371461032b5780632f745c591461036857610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b91906139f3565b61087a565b60405161023d919061404f565b60405180910390f35b34801561025257600080fd5b5061025b6108f4565b6040516102689190614085565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190613a96565b610986565b6040516102a59190613f9d565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d0919061393d565b610a0b565b005b3480156102e357600080fd5b506102ec610b23565b6040516102f99190614387565b60405180910390f35b34801561030e57600080fd5b5061032960048036038101906103249190613827565b610b30565b005b34801561033757600080fd5b50610352600480360381019061034d9190613a96565b610b90565b60405161035f9190614387565b60405180910390f35b34801561037457600080fd5b5061038f600480360381019061038a919061393d565b610bce565b60405161039c9190614387565b60405180910390f35b3480156103b157600080fd5b506103cc60048036038101906103c7919061378d565b610c73565b6040516103d99190614387565b60405180910390f35b3480156103ee57600080fd5b5061040960048036038101906104049190613827565b610ede565b005b34801561041757600080fd5b50610432600480360381019061042d919061393d565b610efe565b005b34801561044057600080fd5b5061045b60048036038101906104569190613a96565b611362565b6040516104689190614387565b60405180910390f35b34801561047d57600080fd5b5061049860048036038101906104939190613a4d565b6113d3565b005b3480156104a657600080fd5b506104c160048036038101906104bc91906137ba565b611469565b005b3480156104cf57600080fd5b506104ea60048036038101906104e59190613a96565b61153d565b6040516104f79190613f9d565b60405180910390f35b61051a6004803603810190610515919061393d565b6115ef565b005b34801561052857600080fd5b50610543600480360381019061053e919061378d565b6117e6565b604051610550919061402d565b60405180910390f35b34801561056557600080fd5b50610580600480360381019061057b919061378d565b61189f565b60405161058d9190614387565b60405180910390f35b3480156105a257600080fd5b506105ab611957565b005b3480156105b957600080fd5b506105d460048036038101906105cf9190613a96565b611a94565b6040516105e1919061404f565b60405180910390f35b3480156105f657600080fd5b50610611600480360381019061060c919061378d565b611abe565b60405161061e919061402d565b60405180910390f35b61062f611b6c565b005b34801561063d57600080fd5b50610646611bf2565b6040516106539190613f9d565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e919061393d565b611c1c565b005b34801561069157600080fd5b5061069a611db9565b6040516106a79190614085565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d291906138fd565b611e4b565b005b3480156106e557600080fd5b506106ee611fcc565b6040516106fb919061406a565b60405180910390f35b34801561071057600080fd5b5061072b600480360381019061072691906139c6565b611ff2565b005b34801561073957600080fd5b50610754600480360381019061074f919061387a565b61208b565b005b34801561076257600080fd5b5061076b6120ed565b6040516107789190614387565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a39190613a96565b6120f8565b6040516107b59190614085565b60405180910390f35b3480156107ca57600080fd5b506107d361219f565b6040516107e09190614387565b60405180910390f35b3480156107f557600080fd5b50610810600480360381019061080b91906137e7565b6121a5565b60405161081d919061404f565b60405180910390f35b34801561083257600080fd5b5061083b612239565b6040516108489190614387565b60405180910390f35b34801561085d57600080fd5b506108786004803603810190610873919061378d565b61223f565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108ed57506108ec826123eb565b5b9050919050565b606060008054610903906146d2565b80601f016020809104026020016040519081016040528092919081815260200182805461092f906146d2565b801561097c5780601f106109515761010080835404028352916020019161097c565b820191906000526020600020905b81548152906001019060200180831161095f57829003601f168201915b5050505050905090565b6000610991826124cd565b6109d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c790614247565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a168261153d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7e906142e7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610aa6612539565b73ffffffffffffffffffffffffffffffffffffffff161480610ad55750610ad481610acf612539565b6121a5565b5b610b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0b906141a7565b60405180910390fd5b610b1e8383612541565b505050565b6000600880549050905090565b610b41610b3b612539565b826125fa565b610b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7790614327565b60405180910390fd5b610b8b8383836126d8565b505050565b60006102586078610ba191906144d1565b600d541015610bb35760009050610bc9565b816638d7ea4c680000610bc69190614558565b90505b919050565b6000610bd98361189f565b8210610c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c11906140a7565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401610cd19190613f9d565b60206040518083038186803b158015610ce957600080fd5b505afa158015610cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d219190613ac3565b90506000808267ffffffffffffffff811115610d4057610d3f61489a565b5b604051908082528060200260200182016040528015610d6e5781602001602082028036833780820191505090505b50905060005b83811015610ed257601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c59600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610dfb929190614004565b60206040518083038186803b158015610e1357600080fd5b505afa158015610e27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4b9190613ac3565b828281518110610e5e57610e5d61486b565b5b6020026020010181815250506001151560106000848481518110610e8557610e8461486b565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff16151514610ebf578280610ebb90614735565b9350505b8080610eca90614735565b915050610d74565b50819350505050919050565b610ef98383836040518060200160405280600081525061208b565b505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610f665750600f60009054906101000a900460ff165b610f6f57600080fd5b6122b8816078600d54610f8291906144d1565b610f8c91906144d1565b1115610fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc490614167565b60405180910390fd5b6122b86078600d54610fdf91906144d1565b1061101f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101690614227565b60405180910390fd5b6014811115611063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105a90614307565b60405180910390fd5b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016110e29190613f9d565b60206040518083038186803b1580156110fa57600080fd5b505afa15801561110e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111329190613ac3565b90506000808267ffffffffffffffff8111156111515761115061489a565b5b60405190808252806020026020018201604052801561117f5781602001602082028036833780820191505090505b50905060005b8381101561135a57601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c59600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161120c929190614004565b60206040518083038186803b15801561122457600080fd5b505afa158015611238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125c9190613ac3565b82828151811061126f5761126e61486b565b5b60200260200101818152505060011515601060008484815181106112965761129561486b565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff161515141580156112c957508483105b15611347576112da86600d54612934565b600d60008154809291906112ed90614735565b919050555082806112fd90614735565b9350506001601060008484815181106113195761131861486b565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055505b808061135290614735565b915050611185565b505050505050565b600061136c610b23565b82106113ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a490614347565b60405180910390fd5b600882815481106113c1576113c061486b565b5b90600052602060002001549050919050565b6113db612539565b73ffffffffffffffffffffffffffffffffffffffff166113f9611bf2565b73ffffffffffffffffffffffffffffffffffffffff161461144f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144690614267565b60405180910390fd5b80600e90805190602001906114659291906134d9565b5050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f090614367565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dd906141e7565b60405180910390fd5b80915050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806116575750600f60009054906101000a900460ff165b61166057600080fd5b6122b8816078600d5461167391906144d1565b61167d91906144d1565b11156116be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b590614167565b60405180910390fd5b6122b86078600d546116d091906144d1565b10611710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170790614227565b60405180910390fd5b6014811115611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174b90614307565b60405180910390fd5b61175d81610b90565b34101561179f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611796906142c7565b60405180910390fd5b60005b818110156117e1576117b683600d54612934565b600d60008154809291906117c990614735565b919050555080806117d990614735565b9150506117a2565b505050565b6060601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638462151c836040518263ffffffff1660e01b81526004016118439190613f9d565b60006040518083038186803b15801561185b57600080fd5b505afa15801561186f573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611898919061397d565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611910576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611907906141c7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61195f612539565b73ffffffffffffffffffffffffffffffffffffffff1661197d611bf2565b73ffffffffffffffffffffffffffffffffffffffff16146119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca90614267565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006010600083815260200190815260200160002060009054906101000a900460ff169050919050565b60606000611acb8361189f565b905060008167ffffffffffffffff811115611ae957611ae861489a565b5b604051908082528060200260200182016040528015611b175781602001602082028036833780820191505090505b50905060005b82811015611b6157611b2f8582610bce565b828281518110611b4257611b4161486b565b5b6020026020010181815250508080611b5990614735565b915050611b1d565b508092505050919050565b611b74612539565b73ffffffffffffffffffffffffffffffffffffffff16611b92611bf2565b73ffffffffffffffffffffffffffffffffffffffff1614611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdf90614267565b60405180910390fd5b611bf0612952565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c24612539565b73ffffffffffffffffffffffffffffffffffffffff16611c42611bf2565b73ffffffffffffffffffffffffffffffffffffffff1614611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f90614267565b60405180910390fd5b607881600c54611ca891906144d1565b1115611ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce090614167565b60405180910390fd5b6078600c5410611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2590614227565b60405180910390fd5b6014811115611d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6990614307565b60405180910390fd5b60005b81811015611db457611d8983600c54612934565b600c6000815480929190611d9c90614735565b91905055508080611dac90614735565b915050611d75565b505050565b606060018054611dc8906146d2565b80601f0160208091040260200160405190810160405280929190818152602001828054611df4906146d2565b8015611e415780601f10611e1657610100808354040283529160200191611e41565b820191906000526020600020905b815481529060010190602001808311611e2457829003601f168201915b5050505050905090565b611e53612539565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb890614147565b60405180910390fd5b8060056000611ece612539565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611f7b612539565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611fc0919061404f565b60405180910390a35050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ffa612539565b73ffffffffffffffffffffffffffffffffffffffff16612018611bf2565b73ffffffffffffffffffffffffffffffffffffffff161461206e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206590614267565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b61209c612096612539565b836125fa565b6120db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d290614327565b60405180910390fd5b6120e784848484612a2e565b50505050565b6638d7ea4c68000081565b6060612103826124cd565b612142576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612139906142a7565b60405180910390fd5b600061214c612a8a565b9050600081511161216c5760405180602001604052806000815250612197565b8061217684612b1c565b604051602001612187929190613f79565b6040516020818303038152906040525b915050919050565b6122b881565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d5481565b612247612539565b73ffffffffffffffffffffffffffffffffffffffff16612265611bf2565b73ffffffffffffffffffffffffffffffffffffffff16146122bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b290614267565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561232b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612322906140e7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806124b657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806124c657506124c582612c7d565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166125b48361153d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612605826124cd565b612644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263b90614187565b60405180910390fd5b600061264f8361153d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806126be57508373ffffffffffffffffffffffffffffffffffffffff166126a684610986565b73ffffffffffffffffffffffffffffffffffffffff16145b806126cf57506126ce81856121a5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166126f88261153d565b73ffffffffffffffffffffffffffffffffffffffff161461274e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274590614287565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b590614127565b60405180910390fd5b6127c9838383612ce7565b6127d4600082612541565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461282491906145b2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461287b91906144d1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61294e828260405180602001604052806000815250612dfb565b5050565b60006005476129619190614527565b90506000814761297191906145b2565b9050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156129db573d6000803e3d6000fd5b506129e4612539565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612a29573d6000803e3d6000fd5b505050565b612a398484846126d8565b612a4584848484612e56565b612a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7b906140c7565b60405180910390fd5b50505050565b6060600e8054612a99906146d2565b80601f0160208091040260200160405190810160405280929190818152602001828054612ac5906146d2565b8015612b125780601f10612ae757610100808354040283529160200191612b12565b820191906000526020600020905b815481529060010190602001808311612af557829003601f168201915b5050505050905090565b60606000821415612b64576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c78565b600082905060005b60008214612b96578080612b7f90614735565b915050600a82612b8f9190614527565b9150612b6c565b60008167ffffffffffffffff811115612bb257612bb161489a565b5b6040519080825280601f01601f191660200182016040528015612be45781602001600182028036833780820191505090505b5090505b60008514612c7157600182612bfd91906145b2565b9150600a85612c0c919061477e565b6030612c1891906144d1565b60f81b818381518110612c2e57612c2d61486b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c6a9190614527565b9450612be8565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612cf2838383612fed565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d3557612d3081612ff2565b612d74565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d7357612d72838261303b565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612db757612db2816131a8565b612df6565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612df557612df48282613279565b5b5b505050565b612e0583836132f8565b612e126000848484612e56565b612e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e48906140c7565b60405180910390fd5b505050565b6000612e778473ffffffffffffffffffffffffffffffffffffffff166134c6565b15612fe0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ea0612539565b8786866040518563ffffffff1660e01b8152600401612ec29493929190613fb8565b602060405180830381600087803b158015612edc57600080fd5b505af1925050508015612f0d57506040513d601f19601f82011682018060405250810190612f0a9190613a20565b60015b612f90573d8060008114612f3d576040519150601f19603f3d011682016040523d82523d6000602084013e612f42565b606091505b50600081511415612f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7f906140c7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612fe5565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016130488461189f565b61305291906145b2565b9050600060076000848152602001908152602001600020549050818114613137576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506131bc91906145b2565b90506000600960008481526020019081526020016000205490506000600883815481106131ec576131eb61486b565b5b90600052602060002001549050806008838154811061320e5761320d61486b565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061325d5761325c61483c565b5b6001900381819060005260206000200160009055905550505050565b60006132848361189f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614207565b60405180910390fd5b613371816124cd565b156133b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a890614107565b60405180910390fd5b6133bd60008383612ce7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461340d91906144d1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546134e5906146d2565b90600052602060002090601f016020900481019282613507576000855561354e565b82601f1061352057805160ff191683800117855561354e565b8280016001018555821561354e579182015b8281111561354d578251825591602001919060010190613532565b5b50905061355b919061355f565b5090565b5b80821115613578576000816000905550600101613560565b5090565b600061358f61358a846143c7565b6143a2565b905080838252602082019050828560208602820111156135b2576135b16148ce565b5b60005b858110156135e257816135c88882613778565b8452602084019350602083019250506001810190506135b5565b5050509392505050565b60006135ff6135fa846143f3565b6143a2565b90508281526020810184848401111561361b5761361a6148d3565b5b613626848285614690565b509392505050565b600061364161363c84614424565b6143a2565b90508281526020810184848401111561365d5761365c6148d3565b5b613668848285614690565b509392505050565b60008135905061367f81614eb6565b92915050565b60008135905061369481614ecd565b92915050565b600082601f8301126136af576136ae6148c9565b5b81516136bf84826020860161357c565b91505092915050565b6000813590506136d781614ee4565b92915050565b6000813590506136ec81614efb565b92915050565b60008151905061370181614efb565b92915050565b600082601f83011261371c5761371b6148c9565b5b813561372c8482602086016135ec565b91505092915050565b600082601f83011261374a576137496148c9565b5b813561375a84826020860161362e565b91505092915050565b60008135905061377281614f12565b92915050565b60008151905061378781614f12565b92915050565b6000602082840312156137a3576137a26148dd565b5b60006137b184828501613670565b91505092915050565b6000602082840312156137d0576137cf6148dd565b5b60006137de84828501613685565b91505092915050565b600080604083850312156137fe576137fd6148dd565b5b600061380c85828601613670565b925050602061381d85828601613670565b9150509250929050565b6000806000606084860312156138405761383f6148dd565b5b600061384e86828701613670565b935050602061385f86828701613670565b925050604061387086828701613763565b9150509250925092565b60008060008060808587031215613894576138936148dd565b5b60006138a287828801613670565b94505060206138b387828801613670565b93505060406138c487828801613763565b925050606085013567ffffffffffffffff8111156138e5576138e46148d8565b5b6138f187828801613707565b91505092959194509250565b60008060408385031215613914576139136148dd565b5b600061392285828601613670565b9250506020613933858286016136c8565b9150509250929050565b60008060408385031215613954576139536148dd565b5b600061396285828601613670565b925050602061397385828601613763565b9150509250929050565b600060208284031215613993576139926148dd565b5b600082015167ffffffffffffffff8111156139b1576139b06148d8565b5b6139bd8482850161369a565b91505092915050565b6000602082840312156139dc576139db6148dd565b5b60006139ea848285016136c8565b91505092915050565b600060208284031215613a0957613a086148dd565b5b6000613a17848285016136dd565b91505092915050565b600060208284031215613a3657613a356148dd565b5b6000613a44848285016136f2565b91505092915050565b600060208284031215613a6357613a626148dd565b5b600082013567ffffffffffffffff811115613a8157613a806148d8565b5b613a8d84828501613735565b91505092915050565b600060208284031215613aac57613aab6148dd565b5b6000613aba84828501613763565b91505092915050565b600060208284031215613ad957613ad86148dd565b5b6000613ae784828501613778565b91505092915050565b6000613afc8383613f5b565b60208301905092915050565b613b11816145e6565b82525050565b6000613b2282614465565b613b2c8185614493565b9350613b3783614455565b8060005b83811015613b68578151613b4f8882613af0565b9750613b5a83614486565b925050600181019050613b3b565b5085935050505092915050565b613b7e8161460a565b82525050565b6000613b8f82614470565b613b9981856144a4565b9350613ba981856020860161469f565b613bb2816148e2565b840191505092915050565b613bc68161466c565b82525050565b6000613bd78261447b565b613be181856144b5565b9350613bf181856020860161469f565b613bfa816148e2565b840191505092915050565b6000613c108261447b565b613c1a81856144c6565b9350613c2a81856020860161469f565b80840191505092915050565b6000613c43602b836144b5565b9150613c4e826148f3565b604082019050919050565b6000613c666032836144b5565b9150613c7182614942565b604082019050919050565b6000613c896026836144b5565b9150613c9482614991565b604082019050919050565b6000613cac601c836144b5565b9150613cb7826149e0565b602082019050919050565b6000613ccf6024836144b5565b9150613cda82614a09565b604082019050919050565b6000613cf26019836144b5565b9150613cfd82614a58565b602082019050919050565b6000613d156009836144b5565b9150613d2082614a81565b602082019050919050565b6000613d38602c836144b5565b9150613d4382614aaa565b604082019050919050565b6000613d5b6038836144b5565b9150613d6682614af9565b604082019050919050565b6000613d7e602a836144b5565b9150613d8982614b48565b604082019050919050565b6000613da16029836144b5565b9150613dac82614b97565b604082019050919050565b6000613dc46020836144b5565b9150613dcf82614be6565b602082019050919050565b6000613de76008836144b5565b9150613df282614c0f565b602082019050919050565b6000613e0a602c836144b5565b9150613e1582614c38565b604082019050919050565b6000613e2d6020836144b5565b9150613e3882614c87565b602082019050919050565b6000613e506029836144b5565b9150613e5b82614cb0565b604082019050919050565b6000613e73602f836144b5565b9150613e7e82614cff565b604082019050919050565b6000613e966011836144b5565b9150613ea182614d4e565b602082019050919050565b6000613eb96021836144b5565b9150613ec482614d77565b604082019050919050565b6000613edc600a836144b5565b9150613ee782614dc6565b602082019050919050565b6000613eff6031836144b5565b9150613f0a82614def565b604082019050919050565b6000613f22602c836144b5565b9150613f2d82614e3e565b604082019050919050565b6000613f45600e836144b5565b9150613f5082614e8d565b602082019050919050565b613f6481614662565b82525050565b613f7381614662565b82525050565b6000613f858285613c05565b9150613f918284613c05565b91508190509392505050565b6000602082019050613fb26000830184613b08565b92915050565b6000608082019050613fcd6000830187613b08565b613fda6020830186613b08565b613fe76040830185613f6a565b8181036060830152613ff98184613b84565b905095945050505050565b60006040820190506140196000830185613b08565b6140266020830184613f6a565b9392505050565b600060208201905081810360008301526140478184613b17565b905092915050565b60006020820190506140646000830184613b75565b92915050565b600060208201905061407f6000830184613bbd565b92915050565b6000602082019050818103600083015261409f8184613bcc565b905092915050565b600060208201905081810360008301526140c081613c36565b9050919050565b600060208201905081810360008301526140e081613c59565b9050919050565b6000602082019050818103600083015261410081613c7c565b9050919050565b6000602082019050818103600083015261412081613c9f565b9050919050565b6000602082019050818103600083015261414081613cc2565b9050919050565b6000602082019050818103600083015261416081613ce5565b9050919050565b6000602082019050818103600083015261418081613d08565b9050919050565b600060208201905081810360008301526141a081613d2b565b9050919050565b600060208201905081810360008301526141c081613d4e565b9050919050565b600060208201905081810360008301526141e081613d71565b9050919050565b6000602082019050818103600083015261420081613d94565b9050919050565b6000602082019050818103600083015261422081613db7565b9050919050565b6000602082019050818103600083015261424081613dda565b9050919050565b6000602082019050818103600083015261426081613dfd565b9050919050565b6000602082019050818103600083015261428081613e20565b9050919050565b600060208201905081810360008301526142a081613e43565b9050919050565b600060208201905081810360008301526142c081613e66565b9050919050565b600060208201905081810360008301526142e081613e89565b9050919050565b6000602082019050818103600083015261430081613eac565b9050919050565b6000602082019050818103600083015261432081613ecf565b9050919050565b6000602082019050818103600083015261434081613ef2565b9050919050565b6000602082019050818103600083015261436081613f15565b9050919050565b6000602082019050818103600083015261438081613f38565b9050919050565b600060208201905061439c6000830184613f6a565b92915050565b60006143ac6143bd565b90506143b88282614704565b919050565b6000604051905090565b600067ffffffffffffffff8211156143e2576143e161489a565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561440e5761440d61489a565b5b614417826148e2565b9050602081019050919050565b600067ffffffffffffffff82111561443f5761443e61489a565b5b614448826148e2565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006144dc82614662565b91506144e783614662565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561451c5761451b6147af565b5b828201905092915050565b600061453282614662565b915061453d83614662565b92508261454d5761454c6147de565b5b828204905092915050565b600061456382614662565b915061456e83614662565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145a7576145a66147af565b5b828202905092915050565b60006145bd82614662565b91506145c883614662565b9250828210156145db576145da6147af565b5b828203905092915050565b60006145f182614642565b9050919050565b600061460382614642565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006146778261467e565b9050919050565b600061468982614642565b9050919050565b82818337600083830152505050565b60005b838110156146bd5780820151818401526020810190506146a2565b838111156146cc576000848401525b50505050565b600060028204905060018216806146ea57607f821691505b602082108114156146fe576146fd61480d565b5b50919050565b61470d826148e2565b810181811067ffffffffffffffff8211171561472c5761472b61489a565b5b80604052505050565b600061474082614662565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614773576147726147af565b5b600182019050919050565b600061478982614662565b915061479483614662565b9250826147a4576147a36147de565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d6178206c696d69740000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4578636565647320323000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f63616c6c6572206e6f7420646576000000000000000000000000000000000000600082015250565b614ebf816145e6565b8114614eca57600080fd5b50565b614ed6816145f8565b8114614ee157600080fd5b50565b614eed8161460a565b8114614ef857600080fd5b50565b614f0481614616565b8114614f0f57600080fd5b50565b614f1b81614662565b8114614f2657600080fd5b5056fea26469706673582212206cd3345b68c91d4201699ebd766301d906fba4ab30e32b7c4201ebc35b7518c964736f6c634300080600330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001868747470733a2f2f617069322e64656174682e63796f752f0000000000000000
Deployed Bytecode
0x6080604052600436106102045760003560e01c806370a0823111610118578063a537f30b116100a0578063c87b56dd1161006f578063c87b56dd14610781578063e6c9662a146107be578063e985e9c5146107e9578063f127394c14610826578063f2fde38b1461085157610204565b8063a537f30b146106d9578063b02636fd14610704578063b88d4fde1461072d578063c7876ea41461075657610204565b8063853828b6116100e7578063853828b6146106275780638da5cb5b146106315780638e825be01461065c57806395d89b4114610685578063a22cb465146106b057610204565b806370a0823114610559578063715018a614610596578063739839e9146105ad5780638462151c146105ea57610204565b80633738353f1161019b57806355f804b31161016a57806355f804b3146104715780635e2a937e1461049a5780636352211e146104c35780636f1b397e146105005780636f8457951461051c57610204565b80633738353f146103a557806342842e0e146103e2578063479f4a351461040b5780634f6ccce71461043457610204565b806318160ddd116101d757806318160ddd146102d757806323b872dd1461030257806326a49e371461032b5780632f745c591461036857610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b91906139f3565b61087a565b60405161023d919061404f565b60405180910390f35b34801561025257600080fd5b5061025b6108f4565b6040516102689190614085565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190613a96565b610986565b6040516102a59190613f9d565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d0919061393d565b610a0b565b005b3480156102e357600080fd5b506102ec610b23565b6040516102f99190614387565b60405180910390f35b34801561030e57600080fd5b5061032960048036038101906103249190613827565b610b30565b005b34801561033757600080fd5b50610352600480360381019061034d9190613a96565b610b90565b60405161035f9190614387565b60405180910390f35b34801561037457600080fd5b5061038f600480360381019061038a919061393d565b610bce565b60405161039c9190614387565b60405180910390f35b3480156103b157600080fd5b506103cc60048036038101906103c7919061378d565b610c73565b6040516103d99190614387565b60405180910390f35b3480156103ee57600080fd5b5061040960048036038101906104049190613827565b610ede565b005b34801561041757600080fd5b50610432600480360381019061042d919061393d565b610efe565b005b34801561044057600080fd5b5061045b60048036038101906104569190613a96565b611362565b6040516104689190614387565b60405180910390f35b34801561047d57600080fd5b5061049860048036038101906104939190613a4d565b6113d3565b005b3480156104a657600080fd5b506104c160048036038101906104bc91906137ba565b611469565b005b3480156104cf57600080fd5b506104ea60048036038101906104e59190613a96565b61153d565b6040516104f79190613f9d565b60405180910390f35b61051a6004803603810190610515919061393d565b6115ef565b005b34801561052857600080fd5b50610543600480360381019061053e919061378d565b6117e6565b604051610550919061402d565b60405180910390f35b34801561056557600080fd5b50610580600480360381019061057b919061378d565b61189f565b60405161058d9190614387565b60405180910390f35b3480156105a257600080fd5b506105ab611957565b005b3480156105b957600080fd5b506105d460048036038101906105cf9190613a96565b611a94565b6040516105e1919061404f565b60405180910390f35b3480156105f657600080fd5b50610611600480360381019061060c919061378d565b611abe565b60405161061e919061402d565b60405180910390f35b61062f611b6c565b005b34801561063d57600080fd5b50610646611bf2565b6040516106539190613f9d565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e919061393d565b611c1c565b005b34801561069157600080fd5b5061069a611db9565b6040516106a79190614085565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d291906138fd565b611e4b565b005b3480156106e557600080fd5b506106ee611fcc565b6040516106fb919061406a565b60405180910390f35b34801561071057600080fd5b5061072b600480360381019061072691906139c6565b611ff2565b005b34801561073957600080fd5b50610754600480360381019061074f919061387a565b61208b565b005b34801561076257600080fd5b5061076b6120ed565b6040516107789190614387565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a39190613a96565b6120f8565b6040516107b59190614085565b60405180910390f35b3480156107ca57600080fd5b506107d361219f565b6040516107e09190614387565b60405180910390f35b3480156107f557600080fd5b50610810600480360381019061080b91906137e7565b6121a5565b60405161081d919061404f565b60405180910390f35b34801561083257600080fd5b5061083b612239565b6040516108489190614387565b60405180910390f35b34801561085d57600080fd5b506108786004803603810190610873919061378d565b61223f565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108ed57506108ec826123eb565b5b9050919050565b606060008054610903906146d2565b80601f016020809104026020016040519081016040528092919081815260200182805461092f906146d2565b801561097c5780601f106109515761010080835404028352916020019161097c565b820191906000526020600020905b81548152906001019060200180831161095f57829003601f168201915b5050505050905090565b6000610991826124cd565b6109d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c790614247565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a168261153d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7e906142e7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610aa6612539565b73ffffffffffffffffffffffffffffffffffffffff161480610ad55750610ad481610acf612539565b6121a5565b5b610b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0b906141a7565b60405180910390fd5b610b1e8383612541565b505050565b6000600880549050905090565b610b41610b3b612539565b826125fa565b610b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7790614327565b60405180910390fd5b610b8b8383836126d8565b505050565b60006102586078610ba191906144d1565b600d541015610bb35760009050610bc9565b816638d7ea4c680000610bc69190614558565b90505b919050565b6000610bd98361189f565b8210610c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c11906140a7565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401610cd19190613f9d565b60206040518083038186803b158015610ce957600080fd5b505afa158015610cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d219190613ac3565b90506000808267ffffffffffffffff811115610d4057610d3f61489a565b5b604051908082528060200260200182016040528015610d6e5781602001602082028036833780820191505090505b50905060005b83811015610ed257601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c59600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610dfb929190614004565b60206040518083038186803b158015610e1357600080fd5b505afa158015610e27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4b9190613ac3565b828281518110610e5e57610e5d61486b565b5b6020026020010181815250506001151560106000848481518110610e8557610e8461486b565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff16151514610ebf578280610ebb90614735565b9350505b8080610eca90614735565b915050610d74565b50819350505050919050565b610ef98383836040518060200160405280600081525061208b565b505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610f665750600f60009054906101000a900460ff165b610f6f57600080fd5b6122b8816078600d54610f8291906144d1565b610f8c91906144d1565b1115610fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc490614167565b60405180910390fd5b6122b86078600d54610fdf91906144d1565b1061101f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101690614227565b60405180910390fd5b6014811115611063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105a90614307565b60405180910390fd5b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016110e29190613f9d565b60206040518083038186803b1580156110fa57600080fd5b505afa15801561110e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111329190613ac3565b90506000808267ffffffffffffffff8111156111515761115061489a565b5b60405190808252806020026020018201604052801561117f5781602001602082028036833780820191505090505b50905060005b8381101561135a57601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c59600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161120c929190614004565b60206040518083038186803b15801561122457600080fd5b505afa158015611238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125c9190613ac3565b82828151811061126f5761126e61486b565b5b60200260200101818152505060011515601060008484815181106112965761129561486b565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff161515141580156112c957508483105b15611347576112da86600d54612934565b600d60008154809291906112ed90614735565b919050555082806112fd90614735565b9350506001601060008484815181106113195761131861486b565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055505b808061135290614735565b915050611185565b505050505050565b600061136c610b23565b82106113ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a490614347565b60405180910390fd5b600882815481106113c1576113c061486b565b5b90600052602060002001549050919050565b6113db612539565b73ffffffffffffffffffffffffffffffffffffffff166113f9611bf2565b73ffffffffffffffffffffffffffffffffffffffff161461144f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144690614267565b60405180910390fd5b80600e90805190602001906114659291906134d9565b5050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f090614367565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dd906141e7565b60405180910390fd5b80915050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806116575750600f60009054906101000a900460ff165b61166057600080fd5b6122b8816078600d5461167391906144d1565b61167d91906144d1565b11156116be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b590614167565b60405180910390fd5b6122b86078600d546116d091906144d1565b10611710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170790614227565b60405180910390fd5b6014811115611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174b90614307565b60405180910390fd5b61175d81610b90565b34101561179f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611796906142c7565b60405180910390fd5b60005b818110156117e1576117b683600d54612934565b600d60008154809291906117c990614735565b919050555080806117d990614735565b9150506117a2565b505050565b6060601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638462151c836040518263ffffffff1660e01b81526004016118439190613f9d565b60006040518083038186803b15801561185b57600080fd5b505afa15801561186f573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611898919061397d565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611910576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611907906141c7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61195f612539565b73ffffffffffffffffffffffffffffffffffffffff1661197d611bf2565b73ffffffffffffffffffffffffffffffffffffffff16146119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca90614267565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006010600083815260200190815260200160002060009054906101000a900460ff169050919050565b60606000611acb8361189f565b905060008167ffffffffffffffff811115611ae957611ae861489a565b5b604051908082528060200260200182016040528015611b175781602001602082028036833780820191505090505b50905060005b82811015611b6157611b2f8582610bce565b828281518110611b4257611b4161486b565b5b6020026020010181815250508080611b5990614735565b915050611b1d565b508092505050919050565b611b74612539565b73ffffffffffffffffffffffffffffffffffffffff16611b92611bf2565b73ffffffffffffffffffffffffffffffffffffffff1614611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdf90614267565b60405180910390fd5b611bf0612952565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c24612539565b73ffffffffffffffffffffffffffffffffffffffff16611c42611bf2565b73ffffffffffffffffffffffffffffffffffffffff1614611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f90614267565b60405180910390fd5b607881600c54611ca891906144d1565b1115611ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce090614167565b60405180910390fd5b6078600c5410611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2590614227565b60405180910390fd5b6014811115611d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6990614307565b60405180910390fd5b60005b81811015611db457611d8983600c54612934565b600c6000815480929190611d9c90614735565b91905055508080611dac90614735565b915050611d75565b505050565b606060018054611dc8906146d2565b80601f0160208091040260200160405190810160405280929190818152602001828054611df4906146d2565b8015611e415780601f10611e1657610100808354040283529160200191611e41565b820191906000526020600020905b815481529060010190602001808311611e2457829003601f168201915b5050505050905090565b611e53612539565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb890614147565b60405180910390fd5b8060056000611ece612539565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611f7b612539565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611fc0919061404f565b60405180910390a35050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ffa612539565b73ffffffffffffffffffffffffffffffffffffffff16612018611bf2565b73ffffffffffffffffffffffffffffffffffffffff161461206e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206590614267565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b61209c612096612539565b836125fa565b6120db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d290614327565b60405180910390fd5b6120e784848484612a2e565b50505050565b6638d7ea4c68000081565b6060612103826124cd565b612142576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612139906142a7565b60405180910390fd5b600061214c612a8a565b9050600081511161216c5760405180602001604052806000815250612197565b8061217684612b1c565b604051602001612187929190613f79565b6040516020818303038152906040525b915050919050565b6122b881565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d5481565b612247612539565b73ffffffffffffffffffffffffffffffffffffffff16612265611bf2565b73ffffffffffffffffffffffffffffffffffffffff16146122bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b290614267565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561232b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612322906140e7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806124b657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806124c657506124c582612c7d565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166125b48361153d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612605826124cd565b612644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263b90614187565b60405180910390fd5b600061264f8361153d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806126be57508373ffffffffffffffffffffffffffffffffffffffff166126a684610986565b73ffffffffffffffffffffffffffffffffffffffff16145b806126cf57506126ce81856121a5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166126f88261153d565b73ffffffffffffffffffffffffffffffffffffffff161461274e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274590614287565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b590614127565b60405180910390fd5b6127c9838383612ce7565b6127d4600082612541565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461282491906145b2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461287b91906144d1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61294e828260405180602001604052806000815250612dfb565b5050565b60006005476129619190614527565b90506000814761297191906145b2565b9050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156129db573d6000803e3d6000fd5b506129e4612539565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612a29573d6000803e3d6000fd5b505050565b612a398484846126d8565b612a4584848484612e56565b612a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7b906140c7565b60405180910390fd5b50505050565b6060600e8054612a99906146d2565b80601f0160208091040260200160405190810160405280929190818152602001828054612ac5906146d2565b8015612b125780601f10612ae757610100808354040283529160200191612b12565b820191906000526020600020905b815481529060010190602001808311612af557829003601f168201915b5050505050905090565b60606000821415612b64576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c78565b600082905060005b60008214612b96578080612b7f90614735565b915050600a82612b8f9190614527565b9150612b6c565b60008167ffffffffffffffff811115612bb257612bb161489a565b5b6040519080825280601f01601f191660200182016040528015612be45781602001600182028036833780820191505090505b5090505b60008514612c7157600182612bfd91906145b2565b9150600a85612c0c919061477e565b6030612c1891906144d1565b60f81b818381518110612c2e57612c2d61486b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c6a9190614527565b9450612be8565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612cf2838383612fed565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d3557612d3081612ff2565b612d74565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d7357612d72838261303b565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612db757612db2816131a8565b612df6565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612df557612df48282613279565b5b5b505050565b612e0583836132f8565b612e126000848484612e56565b612e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e48906140c7565b60405180910390fd5b505050565b6000612e778473ffffffffffffffffffffffffffffffffffffffff166134c6565b15612fe0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ea0612539565b8786866040518563ffffffff1660e01b8152600401612ec29493929190613fb8565b602060405180830381600087803b158015612edc57600080fd5b505af1925050508015612f0d57506040513d601f19601f82011682018060405250810190612f0a9190613a20565b60015b612f90573d8060008114612f3d576040519150601f19603f3d011682016040523d82523d6000602084013e612f42565b606091505b50600081511415612f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7f906140c7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612fe5565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016130488461189f565b61305291906145b2565b9050600060076000848152602001908152602001600020549050818114613137576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506131bc91906145b2565b90506000600960008481526020019081526020016000205490506000600883815481106131ec576131eb61486b565b5b90600052602060002001549050806008838154811061320e5761320d61486b565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061325d5761325c61483c565b5b6001900381819060005260206000200160009055905550505050565b60006132848361189f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614207565b60405180910390fd5b613371816124cd565b156133b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a890614107565b60405180910390fd5b6133bd60008383612ce7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461340d91906144d1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546134e5906146d2565b90600052602060002090601f016020900481019282613507576000855561354e565b82601f1061352057805160ff191683800117855561354e565b8280016001018555821561354e579182015b8281111561354d578251825591602001919060010190613532565b5b50905061355b919061355f565b5090565b5b80821115613578576000816000905550600101613560565b5090565b600061358f61358a846143c7565b6143a2565b905080838252602082019050828560208602820111156135b2576135b16148ce565b5b60005b858110156135e257816135c88882613778565b8452602084019350602083019250506001810190506135b5565b5050509392505050565b60006135ff6135fa846143f3565b6143a2565b90508281526020810184848401111561361b5761361a6148d3565b5b613626848285614690565b509392505050565b600061364161363c84614424565b6143a2565b90508281526020810184848401111561365d5761365c6148d3565b5b613668848285614690565b509392505050565b60008135905061367f81614eb6565b92915050565b60008135905061369481614ecd565b92915050565b600082601f8301126136af576136ae6148c9565b5b81516136bf84826020860161357c565b91505092915050565b6000813590506136d781614ee4565b92915050565b6000813590506136ec81614efb565b92915050565b60008151905061370181614efb565b92915050565b600082601f83011261371c5761371b6148c9565b5b813561372c8482602086016135ec565b91505092915050565b600082601f83011261374a576137496148c9565b5b813561375a84826020860161362e565b91505092915050565b60008135905061377281614f12565b92915050565b60008151905061378781614f12565b92915050565b6000602082840312156137a3576137a26148dd565b5b60006137b184828501613670565b91505092915050565b6000602082840312156137d0576137cf6148dd565b5b60006137de84828501613685565b91505092915050565b600080604083850312156137fe576137fd6148dd565b5b600061380c85828601613670565b925050602061381d85828601613670565b9150509250929050565b6000806000606084860312156138405761383f6148dd565b5b600061384e86828701613670565b935050602061385f86828701613670565b925050604061387086828701613763565b9150509250925092565b60008060008060808587031215613894576138936148dd565b5b60006138a287828801613670565b94505060206138b387828801613670565b93505060406138c487828801613763565b925050606085013567ffffffffffffffff8111156138e5576138e46148d8565b5b6138f187828801613707565b91505092959194509250565b60008060408385031215613914576139136148dd565b5b600061392285828601613670565b9250506020613933858286016136c8565b9150509250929050565b60008060408385031215613954576139536148dd565b5b600061396285828601613670565b925050602061397385828601613763565b9150509250929050565b600060208284031215613993576139926148dd565b5b600082015167ffffffffffffffff8111156139b1576139b06148d8565b5b6139bd8482850161369a565b91505092915050565b6000602082840312156139dc576139db6148dd565b5b60006139ea848285016136c8565b91505092915050565b600060208284031215613a0957613a086148dd565b5b6000613a17848285016136dd565b91505092915050565b600060208284031215613a3657613a356148dd565b5b6000613a44848285016136f2565b91505092915050565b600060208284031215613a6357613a626148dd565b5b600082013567ffffffffffffffff811115613a8157613a806148d8565b5b613a8d84828501613735565b91505092915050565b600060208284031215613aac57613aab6148dd565b5b6000613aba84828501613763565b91505092915050565b600060208284031215613ad957613ad86148dd565b5b6000613ae784828501613778565b91505092915050565b6000613afc8383613f5b565b60208301905092915050565b613b11816145e6565b82525050565b6000613b2282614465565b613b2c8185614493565b9350613b3783614455565b8060005b83811015613b68578151613b4f8882613af0565b9750613b5a83614486565b925050600181019050613b3b565b5085935050505092915050565b613b7e8161460a565b82525050565b6000613b8f82614470565b613b9981856144a4565b9350613ba981856020860161469f565b613bb2816148e2565b840191505092915050565b613bc68161466c565b82525050565b6000613bd78261447b565b613be181856144b5565b9350613bf181856020860161469f565b613bfa816148e2565b840191505092915050565b6000613c108261447b565b613c1a81856144c6565b9350613c2a81856020860161469f565b80840191505092915050565b6000613c43602b836144b5565b9150613c4e826148f3565b604082019050919050565b6000613c666032836144b5565b9150613c7182614942565b604082019050919050565b6000613c896026836144b5565b9150613c9482614991565b604082019050919050565b6000613cac601c836144b5565b9150613cb7826149e0565b602082019050919050565b6000613ccf6024836144b5565b9150613cda82614a09565b604082019050919050565b6000613cf26019836144b5565b9150613cfd82614a58565b602082019050919050565b6000613d156009836144b5565b9150613d2082614a81565b602082019050919050565b6000613d38602c836144b5565b9150613d4382614aaa565b604082019050919050565b6000613d5b6038836144b5565b9150613d6682614af9565b604082019050919050565b6000613d7e602a836144b5565b9150613d8982614b48565b604082019050919050565b6000613da16029836144b5565b9150613dac82614b97565b604082019050919050565b6000613dc46020836144b5565b9150613dcf82614be6565b602082019050919050565b6000613de76008836144b5565b9150613df282614c0f565b602082019050919050565b6000613e0a602c836144b5565b9150613e1582614c38565b604082019050919050565b6000613e2d6020836144b5565b9150613e3882614c87565b602082019050919050565b6000613e506029836144b5565b9150613e5b82614cb0565b604082019050919050565b6000613e73602f836144b5565b9150613e7e82614cff565b604082019050919050565b6000613e966011836144b5565b9150613ea182614d4e565b602082019050919050565b6000613eb96021836144b5565b9150613ec482614d77565b604082019050919050565b6000613edc600a836144b5565b9150613ee782614dc6565b602082019050919050565b6000613eff6031836144b5565b9150613f0a82614def565b604082019050919050565b6000613f22602c836144b5565b9150613f2d82614e3e565b604082019050919050565b6000613f45600e836144b5565b9150613f5082614e8d565b602082019050919050565b613f6481614662565b82525050565b613f7381614662565b82525050565b6000613f858285613c05565b9150613f918284613c05565b91508190509392505050565b6000602082019050613fb26000830184613b08565b92915050565b6000608082019050613fcd6000830187613b08565b613fda6020830186613b08565b613fe76040830185613f6a565b8181036060830152613ff98184613b84565b905095945050505050565b60006040820190506140196000830185613b08565b6140266020830184613f6a565b9392505050565b600060208201905081810360008301526140478184613b17565b905092915050565b60006020820190506140646000830184613b75565b92915050565b600060208201905061407f6000830184613bbd565b92915050565b6000602082019050818103600083015261409f8184613bcc565b905092915050565b600060208201905081810360008301526140c081613c36565b9050919050565b600060208201905081810360008301526140e081613c59565b9050919050565b6000602082019050818103600083015261410081613c7c565b9050919050565b6000602082019050818103600083015261412081613c9f565b9050919050565b6000602082019050818103600083015261414081613cc2565b9050919050565b6000602082019050818103600083015261416081613ce5565b9050919050565b6000602082019050818103600083015261418081613d08565b9050919050565b600060208201905081810360008301526141a081613d2b565b9050919050565b600060208201905081810360008301526141c081613d4e565b9050919050565b600060208201905081810360008301526141e081613d71565b9050919050565b6000602082019050818103600083015261420081613d94565b9050919050565b6000602082019050818103600083015261422081613db7565b9050919050565b6000602082019050818103600083015261424081613dda565b9050919050565b6000602082019050818103600083015261426081613dfd565b9050919050565b6000602082019050818103600083015261428081613e20565b9050919050565b600060208201905081810360008301526142a081613e43565b9050919050565b600060208201905081810360008301526142c081613e66565b9050919050565b600060208201905081810360008301526142e081613e89565b9050919050565b6000602082019050818103600083015261430081613eac565b9050919050565b6000602082019050818103600083015261432081613ecf565b9050919050565b6000602082019050818103600083015261434081613ef2565b9050919050565b6000602082019050818103600083015261436081613f15565b9050919050565b6000602082019050818103600083015261438081613f38565b9050919050565b600060208201905061439c6000830184613f6a565b92915050565b60006143ac6143bd565b90506143b88282614704565b919050565b6000604051905090565b600067ffffffffffffffff8211156143e2576143e161489a565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561440e5761440d61489a565b5b614417826148e2565b9050602081019050919050565b600067ffffffffffffffff82111561443f5761443e61489a565b5b614448826148e2565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006144dc82614662565b91506144e783614662565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561451c5761451b6147af565b5b828201905092915050565b600061453282614662565b915061453d83614662565b92508261454d5761454c6147de565b5b828204905092915050565b600061456382614662565b915061456e83614662565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145a7576145a66147af565b5b828202905092915050565b60006145bd82614662565b91506145c883614662565b9250828210156145db576145da6147af565b5b828203905092915050565b60006145f182614642565b9050919050565b600061460382614642565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006146778261467e565b9050919050565b600061468982614642565b9050919050565b82818337600083830152505050565b60005b838110156146bd5780820151818401526020810190506146a2565b838111156146cc576000848401525b50505050565b600060028204905060018216806146ea57607f821691505b602082108114156146fe576146fd61480d565b5b50919050565b61470d826148e2565b810181811067ffffffffffffffff8211171561472c5761472b61489a565b5b80604052505050565b600061474082614662565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614773576147726147af565b5b600182019050919050565b600061478982614662565b915061479483614662565b9250826147a4576147a36147de565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d6178206c696d69740000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4578636565647320323000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f63616c6c6572206e6f7420646576000000000000000000000000000000000000600082015250565b614ebf816145e6565b8114614eca57600080fd5b50565b614ed6816145f8565b8114614ee157600080fd5b50565b614eed8161460a565b8114614ef857600080fd5b50565b614f0481614616565b8114614f0f57600080fd5b50565b614f1b81614662565b8114614f2657600080fd5b5056fea26469706673582212206cd3345b68c91d4201699ebd766301d906fba4ab30e32b7c4201ebc35b7518c964736f6c63430008060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001868747470733a2f2f617069322e64656174682e63796f752f0000000000000000
-----Decoded View---------------
Arg [0] : baseURI (string): https://api2.death.cyou/
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000018
Arg [2] : 68747470733a2f2f617069322e64656174682e63796f752f0000000000000000
Deployed Bytecode Sourcemap
42203:4563:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36076:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22636:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24103:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23633:404;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36729:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24993:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43889:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36397:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45096:634;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25369:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45742:1021;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36919:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44252:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17636:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22330:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42959:523;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44816:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22060:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17375:148;;;;;;;;;;;;;:::i;:::-;;44960:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44362:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44714:90;;;:::i;:::-;;16725:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43500:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22805:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24396:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42624:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42723:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25591:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42448:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22980:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42262:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24762:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42388:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18231:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36076:237;36178:4;36217:35;36202:50;;;:11;:50;;;;:103;;;;36269:36;36293:11;36269:23;:36::i;:::-;36202:103;36195:110;;36076:237;;;:::o;22636:100::-;22690:13;22723:5;22716:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22636:100;:::o;24103:221::-;24179:7;24207:16;24215:7;24207;:16::i;:::-;24199:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24292:15;:24;24308:7;24292:24;;;;;;;;;;;;;;;;;;;;;24285:31;;24103:221;;;:::o;23633:404::-;23714:13;23730:23;23745:7;23730:14;:23::i;:::-;23714:39;;23778:5;23772:11;;:2;:11;;;;23764:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23858:5;23842:21;;:12;:10;:12::i;:::-;:21;;;:69;;;;23867:44;23891:5;23898:12;:10;:12::i;:::-;23867:23;:44::i;:::-;23842:69;23834:161;;;;;;;;;;;;:::i;:::-;;;;;;;;;24008:21;24017:2;24021:7;24008:8;:21::i;:::-;23703:334;23633:404;;:::o;36729:113::-;36790:7;36817:10;:17;;;;36810:24;;36729:113;:::o;24993:305::-;25154:41;25173:12;:10;:12::i;:::-;25187:7;25154:18;:41::i;:::-;25146:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25262:28;25272:4;25278:2;25282:7;25262:9;:28::i;:::-;24993:305;;;:::o;43889:229::-;43946:7;43998:3;42340;43985:16;;;;:::i;:::-;43970:12;;:31;43967:132;;;44026:1;44019:8;;;;43967:132;44079:6;42481:17;44067:18;;;;:::i;:::-;44060:25;;43889:229;;;;:::o;36397:256::-;36494:7;36530:23;36547:5;36530:16;:23::i;:::-;36522:5;:31;36514:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36619:12;:19;36632:5;36619:19;;;;;;;;;;;;;;;:26;36639:5;36619:26;;;;;;;;;;;;36612:33;;36397:256;;;;:::o;45096:634::-;45172:7;45230:15;45248:4;;;;;;;;;;;:14;;;45263:7;45248:23;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45230:41;;45282:19;45354:25;45396:10;45382:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45354:53;;45422:6;45418:258;45438:10;45434:1;:14;45418:258;;;45483:4;;;;;;;;;;;:24;;;45508:6;;;;;;;;;;;45516:1;45483:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45469:8;45478:1;45469:11;;;;;;;;:::i;:::-;;;;;;;:49;;;;;45578:4;45551:31;;:10;:23;45562:8;45571:1;45562:11;;;;;;;;:::i;:::-;;;;;;;;45551:23;;;;;;;;;;;;;;;;;;;;;:31;;;45547:104;;45617:16;;;;;:::i;:::-;;;;45547:104;45450:3;;;;;:::i;:::-;;;;45418:258;;;;45703:14;45696:21;;;;;45096:634;;;:::o;25369:151::-;25473:39;25490:4;25496:2;25500:7;25473:39;;;;;;;;;;;;:16;:39::i;:::-;25369:151;;;:::o;45742:1021::-;45835:6;;;;;;;;;;;45821:20;;:10;:20;;;:34;;;;45845:10;;;;;;;;;;;45821:34;45813:43;;;;;;42293:4;45903:6;42340:3;45875:12;;:25;;;;:::i;:::-;:34;;;;:::i;:::-;:45;;45867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42293:4;42340:3;45953:12;;:25;;;;:::i;:::-;:35;45945:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;46030:2;46020:6;:12;;46012:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;46096:15;46114:4;;;;;;;;;;;:14;;;46129:6;;;;;;;;;;;46114:22;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46096:40;;46188:19;46270:25;46312:10;46298:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46270:53;;46338:6;46334:420;46354:10;46350:1;:14;46334:420;;;46399:4;;;;;;;;;;;:24;;;46424:6;;;;;;;;;;;46432:1;46399:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46385:8;46394:1;46385:11;;;;;;;;:::i;:::-;;;;;;;:49;;;;;46494:4;46467:31;;:10;:23;46478:8;46487:1;46478:11;;;;;;;;:::i;:::-;;;;;;;;46467:23;;;;;;;;;;;;;;;;;;;;;:31;;;;:58;;;;;46519:6;46502:14;:23;46467:58;46463:278;;;46557:28;46567:3;46572:12;;46557:9;:28::i;:::-;46602:12;;:14;;;;;;;;;:::i;:::-;;;;;;46633:16;;;;;:::i;:::-;;;;46691:4;46665:10;:23;46676:8;46685:1;46676:11;;;;;;;;:::i;:::-;;;;;;;;46665:23;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;46463:278;46366:3;;;;;:::i;:::-;;;;46334:420;;;;45802:961;;;45742:1021;;:::o;36919:233::-;36994:7;37030:30;:28;:30::i;:::-;37022:5;:38;37014:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;37127:10;37138:5;37127:17;;;;;;;;:::i;:::-;;;;;;;;;;37120:24;;36919:233;;;:::o;44252:102::-;16956:12;:10;:12::i;:::-;16945:23;;:7;:5;:7::i;:::-;:23;;;16937:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44339:7:::1;44323:13;:23;;;;;;;;;;;;:::i;:::-;;44252:102:::0;:::o;17636:145::-;17729:3;;;;;;;;;;;17715:17;;:10;:17;;;17707:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;17769:4;17763:3;;:10;;;;;;;;;;;;;;;;;;17636:145;:::o;22330:239::-;22402:7;22422:13;22438:7;:16;22446:7;22438:16;;;;;;;;;;;;;;;;;;;;;22422:32;;22490:1;22473:19;;:5;:19;;;;22465:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22556:5;22549:12;;;22330:239;;;:::o;42959:523::-;43060:6;;;;;;;;;;;43046:20;;:10;:20;;;:34;;;;43070:10;;;;;;;;;;;43046:34;43038:43;;;;;;42293:4;43128:6;42340:3;43100:12;;:25;;;;:::i;:::-;:34;;;;:::i;:::-;:45;;43092:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42293:4;42340:3;43178:12;;:25;;;;:::i;:::-;:35;43170:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;43255:2;43245:6;:12;;43237:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;43304:13;43310:6;43304:5;:13::i;:::-;43291:9;:26;;43283:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;43362:6;43358:117;43378:6;43374:1;:10;43358:117;;;43405:28;43415:3;43420:12;;43405:9;:28::i;:::-;43449:12;;:14;;;;;;;;;:::i;:::-;;;;;;43386:3;;;;;:::i;:::-;;;;43358:117;;;;42959:523;;:::o;44816:132::-;44875:16;44912:4;;;;;;;;;;;:18;;;44931:7;44912:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44905:34;;44816:132;;;:::o;22060:208::-;22132:7;22177:1;22160:19;;:5;:19;;;;22152:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22244:9;:16;22254:5;22244:16;;;;;;;;;;;;;;;;22237:23;;22060:208;;;:::o;17375:148::-;16956:12;:10;:12::i;:::-;16945:23;;:7;:5;:7::i;:::-;:23;;;16937:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17482:1:::1;17445:40;;17466:6;;;;;;;;;;;17445:40;;;;;;;;;;;;17513:1;17496:6;;:19;;;;;;;;;;;;;;;;;;17375:148::o:0;44960:125::-;45033:4;45058:10;:19;45069:7;45058:19;;;;;;;;;;;;;;;;;;;;;45051:26;;44960:125;;;:::o;44362:344::-;44423:16;44452:15;44470:17;44480:6;44470:9;:17::i;:::-;44452:35;;44500:25;44542:10;44528:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44500:53;;44568:6;44564:107;44584:10;44580:1;:14;44564:107;;;44629:30;44649:6;44657:1;44629:19;:30::i;:::-;44615:8;44624:1;44615:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;44596:3;;;;;:::i;:::-;;;;44564:107;;;;44690:8;44683:15;;;;44362:344;;;:::o;44714:90::-;16956:12;:10;:12::i;:::-;16945:23;;:7;:5;:7::i;:::-;:23;;;16937:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44773:14:::1;:12;:14::i;:::-;44714:90::o:0;16725:87::-;16771:7;16798:6;;;;;;;;;;;16791:13;;16725:87;:::o;43500:381::-;16956:12;:10;:12::i;:::-;16945:23;;:7;:5;:7::i;:::-;:23;;;16937:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42340:3:::1;43599:6;43583:13;;:22;;;;:::i;:::-;:36;;43575:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;42340:3;43652:13;;:26;43644:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;43720:2;43710:6;:12;;43702:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;43760:6;43756:118;43776:6;43772:1;:10;43756:118;;;43803:29;43813:3;43818:13;;43803:9;:29::i;:::-;43847:13;;:15;;;;;;;;;:::i;:::-;;;;;;43784:3;;;;;:::i;:::-;;;;43756:118;;;;43500:381:::0;;:::o;22805:104::-;22861:13;22894:7;22887:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22805:104;:::o;24396:295::-;24511:12;:10;:12::i;:::-;24499:24;;:8;:24;;;;24491:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24611:8;24566:18;:32;24585:12;:10;:12::i;:::-;24566:32;;;;;;;;;;;;;;;:42;24599:8;24566:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24664:8;24635:48;;24650:12;:10;:12::i;:::-;24635:48;;;24674:8;24635:48;;;;;;:::i;:::-;;;;;;;;24396:295;;:::o;42624:86::-;;;;;;;;;;;;;:::o;42723:103::-;16956:12;:10;:12::i;:::-;16945:23;;:7;:5;:7::i;:::-;:23;;;16937:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42807:11:::1;42794:10;;:24;;;;;;;;;;;;;;;;;;42723:103:::0;:::o;25591:285::-;25723:41;25742:12;:10;:12::i;:::-;25756:7;25723:18;:41::i;:::-;25715:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25829:39;25843:4;25849:2;25853:7;25862:5;25829:13;:39::i;:::-;25591:285;;;;:::o;42448:50::-;42481:17;42448:50;:::o;22980:360::-;23053:13;23087:16;23095:7;23087;:16::i;:::-;23079:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23168:21;23192:10;:8;:10::i;:::-;23168:34;;23244:1;23226:7;23220:21;:25;:112;;;;;;;;;;;;;;;;;23285:7;23294:18;:7;:16;:18::i;:::-;23268:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23220:112;23213:119;;;22980:360;;;:::o;42262:35::-;42293:4;42262:35;:::o;24762:164::-;24859:4;24883:18;:25;24902:5;24883:25;;;;;;;;;;;;;;;:35;24909:8;24883:35;;;;;;;;;;;;;;;;;;;;;;;;;24876:42;;24762:164;;;;:::o;42388:53::-;;;;:::o;18231:244::-;16956:12;:10;:12::i;:::-;16945:23;;:7;:5;:7::i;:::-;:23;;;16937:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18340:1:::1;18320:22;;:8;:22;;;;18312:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18430:8;18401:38;;18422:6;;;;;;;;;;;18401:38;;;;;;;;;;;;18459:8;18450:6;;:17;;;;;;;;;;;;;;;;;;18231:244:::0;:::o;21704:292::-;21806:4;21845:25;21830:40;;;:11;:40;;;;:105;;;;21902:33;21887:48;;;:11;:48;;;;21830:105;:158;;;;21952:36;21976:11;21952:23;:36::i;:::-;21830:158;21823:165;;21704:292;;;:::o;27343:127::-;27408:4;27460:1;27432:30;;:7;:16;27440:7;27432:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27425:37;;27343:127;;;:::o;7489:98::-;7542:7;7569:10;7562:17;;7489:98;:::o;31227:174::-;31329:2;31302:15;:24;31318:7;31302:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31385:7;31381:2;31347:46;;31356:23;31371:7;31356:14;:23::i;:::-;31347:46;;;;;;;;;;;;31227:174;;:::o;27637:355::-;27730:4;27755:16;27763:7;27755;:16::i;:::-;27747:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27831:13;27847:23;27862:7;27847:14;:23::i;:::-;27831:39;;27900:5;27889:16;;:7;:16;;;:51;;;;27933:7;27909:31;;:20;27921:7;27909:11;:20::i;:::-;:31;;;27889:51;:94;;;;27944:39;27968:5;27975:7;27944:23;:39::i;:::-;27889:94;27881:103;;;27637:355;;;;:::o;30565:544::-;30690:4;30663:31;;:23;30678:7;30663:14;:23::i;:::-;:31;;;30655:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30773:1;30759:16;;:2;:16;;;;30751:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30829:39;30850:4;30856:2;30860:7;30829:20;:39::i;:::-;30933:29;30950:1;30954:7;30933:8;:29::i;:::-;30994:1;30975:9;:15;30985:4;30975:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31023:1;31006:9;:13;31016:2;31006:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31054:2;31035:7;:16;31043:7;31035:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31093:7;31089:2;31074:27;;31083:4;31074:27;;;;;;;;;;;;30565:544;;;:::o;28334:110::-;28410:26;28420:2;28424:7;28410:26;;;;;;;;;;;;:9;:26::i;:::-;28334:110;;:::o;17805:261::-;17857:15;17897:1;17875:21;:23;;;;:::i;:::-;17857:41;;17908:16;17949:7;17927:21;:29;;;;:::i;:::-;17908:48;;17975:3;;;;;;;;;;;17967:21;;:30;17989:7;17967:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18016:12;:10;:12::i;:::-;18008:30;;:40;18039:8;18008:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17847:219;;17805:261::o;26758:272::-;26872:28;26882:4;26888:2;26892:7;26872:9;:28::i;:::-;26919:48;26942:4;26948:2;26952:7;26961:5;26919:22;:48::i;:::-;26911:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26758:272;;;;:::o;44126:114::-;44186:13;44219;44212:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44126:114;:::o;18708:723::-;18764:13;18994:1;18985:5;:10;18981:53;;;19012:10;;;;;;;;;;;;;;;;;;;;;18981:53;19044:12;19059:5;19044:20;;19075:14;19100:78;19115:1;19107:4;:9;19100:78;;19133:8;;;;;:::i;:::-;;;;19164:2;19156:10;;;;;:::i;:::-;;;19100:78;;;19188:19;19220:6;19210:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19188:39;;19238:154;19254:1;19245:5;:10;19238:154;;19282:1;19272:11;;;;;:::i;:::-;;;19349:2;19341:5;:10;;;;:::i;:::-;19328:2;:24;;;;:::i;:::-;19315:39;;19298:6;19305;19298:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;19378:2;19369:11;;;;;:::i;:::-;;;19238:154;;;19416:6;19402:21;;;;;18708:723;;;;:::o;8539:157::-;8624:4;8663:25;8648:40;;;:11;:40;;;;8641:47;;8539:157;;;:::o;37765:555::-;37875:45;37902:4;37908:2;37912:7;37875:26;:45::i;:::-;37953:1;37937:18;;:4;:18;;;37933:187;;;37972:40;38004:7;37972:31;:40::i;:::-;37933:187;;;38042:2;38034:10;;:4;:10;;;38030:90;;38061:47;38094:4;38100:7;38061:32;:47::i;:::-;38030:90;37933:187;38148:1;38134:16;;:2;:16;;;38130:183;;;38167:45;38204:7;38167:36;:45::i;:::-;38130:183;;;38240:4;38234:10;;:2;:10;;;38230:83;;38261:40;38289:2;38293:7;38261:27;:40::i;:::-;38230:83;38130:183;37765:555;;;:::o;28671:250::-;28767:18;28773:2;28777:7;28767:5;:18::i;:::-;28804:54;28835:1;28839:2;28843:7;28852:5;28804:22;:54::i;:::-;28796:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;28671:250;;;:::o;31966:843::-;32087:4;32113:15;:2;:13;;;:15::i;:::-;32109:693;;;32165:2;32149:36;;;32186:12;:10;:12::i;:::-;32200:4;32206:7;32215:5;32149:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32145:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32412:1;32395:6;:13;:18;32391:341;;;32438:60;;;;;;;;;;:::i;:::-;;;;;;;;32391:341;32682:6;32676:13;32667:6;32663:2;32659:15;32652:38;32145:602;32282:45;;;32272:55;;;:6;:55;;;;32265:62;;;;;32109:693;32786:4;32779:11;;31966:843;;;;;;;:::o;33422:93::-;;;;:::o;39043:164::-;39147:10;:17;;;;39120:15;:24;39136:7;39120:24;;;;;;;;;;;:44;;;;39175:10;39191:7;39175:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39043:164;:::o;39834:988::-;40100:22;40150:1;40125:22;40142:4;40125:16;:22::i;:::-;:26;;;;:::i;:::-;40100:51;;40162:18;40183:17;:26;40201:7;40183:26;;;;;;;;;;;;40162:47;;40330:14;40316:10;:28;40312:328;;40361:19;40383:12;:18;40396:4;40383:18;;;;;;;;;;;;;;;:34;40402:14;40383:34;;;;;;;;;;;;40361:56;;40467:11;40434:12;:18;40447:4;40434:18;;;;;;;;;;;;;;;:30;40453:10;40434:30;;;;;;;;;;;:44;;;;40584:10;40551:17;:30;40569:11;40551:30;;;;;;;;;;;:43;;;;40346:294;40312:328;40736:17;:26;40754:7;40736:26;;;;;;;;;;;40729:33;;;40780:12;:18;40793:4;40780:18;;;;;;;;;;;;;;;:34;40799:14;40780:34;;;;;;;;;;;40773:41;;;39915:907;;39834:988;;:::o;41117:1079::-;41370:22;41415:1;41395:10;:17;;;;:21;;;;:::i;:::-;41370:46;;41427:18;41448:15;:24;41464:7;41448:24;;;;;;;;;;;;41427:45;;41799:19;41821:10;41832:14;41821:26;;;;;;;;:::i;:::-;;;;;;;;;;41799:48;;41885:11;41860:10;41871;41860:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;41996:10;41965:15;:28;41981:11;41965:28;;;;;;;;;;;:41;;;;42137:15;:24;42153:7;42137:24;;;;;;;;;;;42130:31;;;42172:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41188:1008;;;41117:1079;:::o;38621:221::-;38706:14;38723:20;38740:2;38723:16;:20::i;:::-;38706:37;;38781:7;38754:12;:16;38767:2;38754:16;;;;;;;;;;;;;;;:24;38771:6;38754:24;;;;;;;;;;;:34;;;;38828:6;38799:17;:26;38817:7;38799:26;;;;;;;;;;;:35;;;;38695:147;38621:221;;:::o;29257:382::-;29351:1;29337:16;;:2;:16;;;;29329:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29410:16;29418:7;29410;:16::i;:::-;29409:17;29401:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29472:45;29501:1;29505:2;29509:7;29472:20;:45::i;:::-;29547:1;29530:9;:13;29540:2;29530:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29578:2;29559:7;:16;29567:7;29559:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29623:7;29619:2;29598:33;;29615:1;29598:33;;;;;;;;;;;;29257:382;;:::o;2325:239::-;2385:4;2410:12;2521:7;2509:20;2501:28;;2555:1;2548:4;:8;2541:15;;;2325:239;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:744:1:-;131:5;156:81;172:64;229:6;172:64;:::i;:::-;156:81;:::i;:::-;147:90;;257:5;286:6;279:5;272:21;320:4;313:5;309:16;302:23;;346:6;396:3;388:4;380:6;376:17;371:3;367:27;364:36;361:2;;;415:79;;:::i;:::-;361:2;528:1;513:249;538:6;535:1;532:13;513:249;;;606:3;635:48;679:3;667:10;635:48;:::i;:::-;630:3;623:61;713:4;708:3;704:14;697:21;;747:4;742:3;738:14;731:21;;573:189;560:1;557;553:9;548:14;;513:249;;;517:14;137:631;;;;;;;:::o;774:410::-;851:5;876:65;892:48;933:6;892:48;:::i;:::-;876:65;:::i;:::-;867:74;;964:6;957:5;950:21;1002:4;995:5;991:16;1040:3;1031:6;1026:3;1022:16;1019:25;1016:2;;;1047:79;;:::i;:::-;1016:2;1137:41;1171:6;1166:3;1161;1137:41;:::i;:::-;857:327;;;;;;:::o;1190:412::-;1268:5;1293:66;1309:49;1351:6;1309:49;:::i;:::-;1293:66;:::i;:::-;1284:75;;1382:6;1375:5;1368:21;1420:4;1413:5;1409:16;1458:3;1449:6;1444:3;1440:16;1437:25;1434:2;;;1465:79;;:::i;:::-;1434:2;1555:41;1589:6;1584:3;1579;1555:41;:::i;:::-;1274:328;;;;;;:::o;1608:139::-;1654:5;1692:6;1679:20;1670:29;;1708:33;1735:5;1708:33;:::i;:::-;1660:87;;;;:::o;1753:155::-;1807:5;1845:6;1832:20;1823:29;;1861:41;1896:5;1861:41;:::i;:::-;1813:95;;;;:::o;1931:385::-;2013:5;2062:3;2055:4;2047:6;2043:17;2039:27;2029:2;;2070:79;;:::i;:::-;2029:2;2180:6;2174:13;2205:105;2306:3;2298:6;2291:4;2283:6;2279:17;2205:105;:::i;:::-;2196:114;;2019:297;;;;;:::o;2322:133::-;2365:5;2403:6;2390:20;2381:29;;2419:30;2443:5;2419:30;:::i;:::-;2371:84;;;;:::o;2461:137::-;2506:5;2544:6;2531:20;2522:29;;2560:32;2586:5;2560:32;:::i;:::-;2512:86;;;;:::o;2604:141::-;2660:5;2691:6;2685:13;2676:22;;2707:32;2733:5;2707:32;:::i;:::-;2666:79;;;;:::o;2764:338::-;2819:5;2868:3;2861:4;2853:6;2849:17;2845:27;2835:2;;2876:79;;:::i;:::-;2835:2;2993:6;2980:20;3018:78;3092:3;3084:6;3077:4;3069:6;3065:17;3018:78;:::i;:::-;3009:87;;2825:277;;;;;:::o;3122:340::-;3178:5;3227:3;3220:4;3212:6;3208:17;3204:27;3194:2;;3235:79;;:::i;:::-;3194:2;3352:6;3339:20;3377:79;3452:3;3444:6;3437:4;3429:6;3425:17;3377:79;:::i;:::-;3368:88;;3184:278;;;;;:::o;3468:139::-;3514:5;3552:6;3539:20;3530:29;;3568:33;3595:5;3568:33;:::i;:::-;3520:87;;;;:::o;3613:143::-;3670:5;3701:6;3695:13;3686:22;;3717:33;3744:5;3717:33;:::i;:::-;3676:80;;;;:::o;3762:329::-;3821:6;3870:2;3858:9;3849:7;3845:23;3841:32;3838:2;;;3876:79;;:::i;:::-;3838:2;3996:1;4021:53;4066:7;4057:6;4046:9;4042:22;4021:53;:::i;:::-;4011:63;;3967:117;3828:263;;;;:::o;4097:345::-;4164:6;4213:2;4201:9;4192:7;4188:23;4184:32;4181:2;;;4219:79;;:::i;:::-;4181:2;4339:1;4364:61;4417:7;4408:6;4397:9;4393:22;4364:61;:::i;:::-;4354:71;;4310:125;4171:271;;;;:::o;4448:474::-;4516:6;4524;4573:2;4561:9;4552:7;4548:23;4544:32;4541:2;;;4579:79;;:::i;:::-;4541:2;4699:1;4724:53;4769:7;4760:6;4749:9;4745:22;4724:53;:::i;:::-;4714:63;;4670:117;4826:2;4852:53;4897:7;4888:6;4877:9;4873:22;4852:53;:::i;:::-;4842:63;;4797:118;4531:391;;;;;:::o;4928:619::-;5005:6;5013;5021;5070:2;5058:9;5049:7;5045:23;5041:32;5038:2;;;5076:79;;:::i;:::-;5038:2;5196:1;5221:53;5266:7;5257:6;5246:9;5242:22;5221:53;:::i;:::-;5211:63;;5167:117;5323:2;5349:53;5394:7;5385:6;5374:9;5370:22;5349:53;:::i;:::-;5339:63;;5294:118;5451:2;5477:53;5522:7;5513:6;5502:9;5498:22;5477:53;:::i;:::-;5467:63;;5422:118;5028:519;;;;;:::o;5553:943::-;5648:6;5656;5664;5672;5721:3;5709:9;5700:7;5696:23;5692:33;5689:2;;;5728:79;;:::i;:::-;5689:2;5848:1;5873:53;5918:7;5909:6;5898:9;5894:22;5873:53;:::i;:::-;5863:63;;5819:117;5975:2;6001:53;6046:7;6037:6;6026:9;6022:22;6001:53;:::i;:::-;5991:63;;5946:118;6103:2;6129:53;6174:7;6165:6;6154:9;6150:22;6129:53;:::i;:::-;6119:63;;6074:118;6259:2;6248:9;6244:18;6231:32;6290:18;6282:6;6279:30;6276:2;;;6312:79;;:::i;:::-;6276:2;6417:62;6471:7;6462:6;6451:9;6447:22;6417:62;:::i;:::-;6407:72;;6202:287;5679:817;;;;;;;:::o;6502:468::-;6567:6;6575;6624:2;6612:9;6603:7;6599:23;6595:32;6592:2;;;6630:79;;:::i;:::-;6592:2;6750:1;6775:53;6820:7;6811:6;6800:9;6796:22;6775:53;:::i;:::-;6765:63;;6721:117;6877:2;6903:50;6945:7;6936:6;6925:9;6921:22;6903:50;:::i;:::-;6893:60;;6848:115;6582:388;;;;;:::o;6976:474::-;7044:6;7052;7101:2;7089:9;7080:7;7076:23;7072:32;7069:2;;;7107:79;;:::i;:::-;7069:2;7227:1;7252:53;7297:7;7288:6;7277:9;7273:22;7252:53;:::i;:::-;7242:63;;7198:117;7354:2;7380:53;7425:7;7416:6;7405:9;7401:22;7380:53;:::i;:::-;7370:63;;7325:118;7059:391;;;;;:::o;7456:554::-;7551:6;7600:2;7588:9;7579:7;7575:23;7571:32;7568:2;;;7606:79;;:::i;:::-;7568:2;7747:1;7736:9;7732:17;7726:24;7777:18;7769:6;7766:30;7763:2;;;7799:79;;:::i;:::-;7763:2;7904:89;7985:7;7976:6;7965:9;7961:22;7904:89;:::i;:::-;7894:99;;7697:306;7558:452;;;;:::o;8016:323::-;8072:6;8121:2;8109:9;8100:7;8096:23;8092:32;8089:2;;;8127:79;;:::i;:::-;8089:2;8247:1;8272:50;8314:7;8305:6;8294:9;8290:22;8272:50;:::i;:::-;8262:60;;8218:114;8079:260;;;;:::o;8345:327::-;8403:6;8452:2;8440:9;8431:7;8427:23;8423:32;8420:2;;;8458:79;;:::i;:::-;8420:2;8578:1;8603:52;8647:7;8638:6;8627:9;8623:22;8603:52;:::i;:::-;8593:62;;8549:116;8410:262;;;;:::o;8678:349::-;8747:6;8796:2;8784:9;8775:7;8771:23;8767:32;8764:2;;;8802:79;;:::i;:::-;8764:2;8922:1;8947:63;9002:7;8993:6;8982:9;8978:22;8947:63;:::i;:::-;8937:73;;8893:127;8754:273;;;;:::o;9033:509::-;9102:6;9151:2;9139:9;9130:7;9126:23;9122:32;9119:2;;;9157:79;;:::i;:::-;9119:2;9305:1;9294:9;9290:17;9277:31;9335:18;9327:6;9324:30;9321:2;;;9357:79;;:::i;:::-;9321:2;9462:63;9517:7;9508:6;9497:9;9493:22;9462:63;:::i;:::-;9452:73;;9248:287;9109:433;;;;:::o;9548:329::-;9607:6;9656:2;9644:9;9635:7;9631:23;9627:32;9624:2;;;9662:79;;:::i;:::-;9624:2;9782:1;9807:53;9852:7;9843:6;9832:9;9828:22;9807:53;:::i;:::-;9797:63;;9753:117;9614:263;;;;:::o;9883:351::-;9953:6;10002:2;9990:9;9981:7;9977:23;9973:32;9970:2;;;10008:79;;:::i;:::-;9970:2;10128:1;10153:64;10209:7;10200:6;10189:9;10185:22;10153:64;:::i;:::-;10143:74;;10099:128;9960:274;;;;:::o;10240:179::-;10309:10;10330:46;10372:3;10364:6;10330:46;:::i;:::-;10408:4;10403:3;10399:14;10385:28;;10320:99;;;;:::o;10425:118::-;10512:24;10530:5;10512:24;:::i;:::-;10507:3;10500:37;10490:53;;:::o;10579:732::-;10698:3;10727:54;10775:5;10727:54;:::i;:::-;10797:86;10876:6;10871:3;10797:86;:::i;:::-;10790:93;;10907:56;10957:5;10907:56;:::i;:::-;10986:7;11017:1;11002:284;11027:6;11024:1;11021:13;11002:284;;;11103:6;11097:13;11130:63;11189:3;11174:13;11130:63;:::i;:::-;11123:70;;11216:60;11269:6;11216:60;:::i;:::-;11206:70;;11062:224;11049:1;11046;11042:9;11037:14;;11002:284;;;11006:14;11302:3;11295:10;;10703:608;;;;;;;:::o;11317:109::-;11398:21;11413:5;11398:21;:::i;:::-;11393:3;11386:34;11376:50;;:::o;11432:360::-;11518:3;11546:38;11578:5;11546:38;:::i;:::-;11600:70;11663:6;11658:3;11600:70;:::i;:::-;11593:77;;11679:52;11724:6;11719:3;11712:4;11705:5;11701:16;11679:52;:::i;:::-;11756:29;11778:6;11756:29;:::i;:::-;11751:3;11747:39;11740:46;;11522:270;;;;;:::o;11798:175::-;11907:59;11960:5;11907:59;:::i;:::-;11902:3;11895:72;11885:88;;:::o;11979:364::-;12067:3;12095:39;12128:5;12095:39;:::i;:::-;12150:71;12214:6;12209:3;12150:71;:::i;:::-;12143:78;;12230:52;12275:6;12270:3;12263:4;12256:5;12252:16;12230:52;:::i;:::-;12307:29;12329:6;12307:29;:::i;:::-;12302:3;12298:39;12291:46;;12071:272;;;;;:::o;12349:377::-;12455:3;12483:39;12516:5;12483:39;:::i;:::-;12538:89;12620:6;12615:3;12538:89;:::i;:::-;12531:96;;12636:52;12681:6;12676:3;12669:4;12662:5;12658:16;12636:52;:::i;:::-;12713:6;12708:3;12704:16;12697:23;;12459:267;;;;;:::o;12732:366::-;12874:3;12895:67;12959:2;12954:3;12895:67;:::i;:::-;12888:74;;12971:93;13060:3;12971:93;:::i;:::-;13089:2;13084:3;13080:12;13073:19;;12878:220;;;:::o;13104:366::-;13246:3;13267:67;13331:2;13326:3;13267:67;:::i;:::-;13260:74;;13343:93;13432:3;13343:93;:::i;:::-;13461:2;13456:3;13452:12;13445:19;;13250:220;;;:::o;13476:366::-;13618:3;13639:67;13703:2;13698:3;13639:67;:::i;:::-;13632:74;;13715:93;13804:3;13715:93;:::i;:::-;13833:2;13828:3;13824:12;13817:19;;13622:220;;;:::o;13848:366::-;13990:3;14011:67;14075:2;14070:3;14011:67;:::i;:::-;14004:74;;14087:93;14176:3;14087:93;:::i;:::-;14205:2;14200:3;14196:12;14189:19;;13994:220;;;:::o;14220:366::-;14362:3;14383:67;14447:2;14442:3;14383:67;:::i;:::-;14376:74;;14459:93;14548:3;14459:93;:::i;:::-;14577:2;14572:3;14568:12;14561:19;;14366:220;;;:::o;14592:366::-;14734:3;14755:67;14819:2;14814:3;14755:67;:::i;:::-;14748:74;;14831:93;14920:3;14831:93;:::i;:::-;14949:2;14944:3;14940:12;14933:19;;14738:220;;;:::o;14964:365::-;15106:3;15127:66;15191:1;15186:3;15127:66;:::i;:::-;15120:73;;15202:93;15291:3;15202:93;:::i;:::-;15320:2;15315:3;15311:12;15304:19;;15110:219;;;:::o;15335:366::-;15477:3;15498:67;15562:2;15557:3;15498:67;:::i;:::-;15491:74;;15574:93;15663:3;15574:93;:::i;:::-;15692:2;15687:3;15683:12;15676:19;;15481:220;;;:::o;15707:366::-;15849:3;15870:67;15934:2;15929:3;15870:67;:::i;:::-;15863:74;;15946:93;16035:3;15946:93;:::i;:::-;16064:2;16059:3;16055:12;16048:19;;15853:220;;;:::o;16079:366::-;16221:3;16242:67;16306:2;16301:3;16242:67;:::i;:::-;16235:74;;16318:93;16407:3;16318:93;:::i;:::-;16436:2;16431:3;16427:12;16420:19;;16225:220;;;:::o;16451:366::-;16593:3;16614:67;16678:2;16673:3;16614:67;:::i;:::-;16607:74;;16690:93;16779:3;16690:93;:::i;:::-;16808:2;16803:3;16799:12;16792:19;;16597:220;;;:::o;16823:366::-;16965:3;16986:67;17050:2;17045:3;16986:67;:::i;:::-;16979:74;;17062:93;17151:3;17062:93;:::i;:::-;17180:2;17175:3;17171:12;17164:19;;16969:220;;;:::o;17195:365::-;17337:3;17358:66;17422:1;17417:3;17358:66;:::i;:::-;17351:73;;17433:93;17522:3;17433:93;:::i;:::-;17551:2;17546:3;17542:12;17535:19;;17341:219;;;:::o;17566:366::-;17708:3;17729:67;17793:2;17788:3;17729:67;:::i;:::-;17722:74;;17805:93;17894:3;17805:93;:::i;:::-;17923:2;17918:3;17914:12;17907:19;;17712:220;;;:::o;17938:366::-;18080:3;18101:67;18165:2;18160:3;18101:67;:::i;:::-;18094:74;;18177:93;18266:3;18177:93;:::i;:::-;18295:2;18290:3;18286:12;18279:19;;18084:220;;;:::o;18310:366::-;18452:3;18473:67;18537:2;18532:3;18473:67;:::i;:::-;18466:74;;18549:93;18638:3;18549:93;:::i;:::-;18667:2;18662:3;18658:12;18651:19;;18456:220;;;:::o;18682:366::-;18824:3;18845:67;18909:2;18904:3;18845:67;:::i;:::-;18838:74;;18921:93;19010:3;18921:93;:::i;:::-;19039:2;19034:3;19030:12;19023:19;;18828:220;;;:::o;19054:366::-;19196:3;19217:67;19281:2;19276:3;19217:67;:::i;:::-;19210:74;;19293:93;19382:3;19293:93;:::i;:::-;19411:2;19406:3;19402:12;19395:19;;19200:220;;;:::o;19426:366::-;19568:3;19589:67;19653:2;19648:3;19589:67;:::i;:::-;19582:74;;19665:93;19754:3;19665:93;:::i;:::-;19783:2;19778:3;19774:12;19767:19;;19572:220;;;:::o;19798:366::-;19940:3;19961:67;20025:2;20020:3;19961:67;:::i;:::-;19954:74;;20037:93;20126:3;20037:93;:::i;:::-;20155:2;20150:3;20146:12;20139:19;;19944:220;;;:::o;20170:366::-;20312:3;20333:67;20397:2;20392:3;20333:67;:::i;:::-;20326:74;;20409:93;20498:3;20409:93;:::i;:::-;20527:2;20522:3;20518:12;20511:19;;20316:220;;;:::o;20542:366::-;20684:3;20705:67;20769:2;20764:3;20705:67;:::i;:::-;20698:74;;20781:93;20870:3;20781:93;:::i;:::-;20899:2;20894:3;20890:12;20883:19;;20688:220;;;:::o;20914:366::-;21056:3;21077:67;21141:2;21136:3;21077:67;:::i;:::-;21070:74;;21153:93;21242:3;21153:93;:::i;:::-;21271:2;21266:3;21262:12;21255:19;;21060:220;;;:::o;21286:108::-;21363:24;21381:5;21363:24;:::i;:::-;21358:3;21351:37;21341:53;;:::o;21400:118::-;21487:24;21505:5;21487:24;:::i;:::-;21482:3;21475:37;21465:53;;:::o;21524:435::-;21704:3;21726:95;21817:3;21808:6;21726:95;:::i;:::-;21719:102;;21838:95;21929:3;21920:6;21838:95;:::i;:::-;21831:102;;21950:3;21943:10;;21708:251;;;;;:::o;21965:222::-;22058:4;22096:2;22085:9;22081:18;22073:26;;22109:71;22177:1;22166:9;22162:17;22153:6;22109:71;:::i;:::-;22063:124;;;;:::o;22193:640::-;22388:4;22426:3;22415:9;22411:19;22403:27;;22440:71;22508:1;22497:9;22493:17;22484:6;22440:71;:::i;:::-;22521:72;22589:2;22578:9;22574:18;22565:6;22521:72;:::i;:::-;22603;22671:2;22660:9;22656:18;22647:6;22603:72;:::i;:::-;22722:9;22716:4;22712:20;22707:2;22696:9;22692:18;22685:48;22750:76;22821:4;22812:6;22750:76;:::i;:::-;22742:84;;22393:440;;;;;;;:::o;22839:332::-;22960:4;22998:2;22987:9;22983:18;22975:26;;23011:71;23079:1;23068:9;23064:17;23055:6;23011:71;:::i;:::-;23092:72;23160:2;23149:9;23145:18;23136:6;23092:72;:::i;:::-;22965:206;;;;;:::o;23177:373::-;23320:4;23358:2;23347:9;23343:18;23335:26;;23407:9;23401:4;23397:20;23393:1;23382:9;23378:17;23371:47;23435:108;23538:4;23529:6;23435:108;:::i;:::-;23427:116;;23325:225;;;;:::o;23556:210::-;23643:4;23681:2;23670:9;23666:18;23658:26;;23694:65;23756:1;23745:9;23741:17;23732:6;23694:65;:::i;:::-;23648:118;;;;:::o;23772:266::-;23887:4;23925:2;23914:9;23910:18;23902:26;;23938:93;24028:1;24017:9;24013:17;24004:6;23938:93;:::i;:::-;23892:146;;;;:::o;24044:313::-;24157:4;24195:2;24184:9;24180:18;24172:26;;24244:9;24238:4;24234:20;24230:1;24219:9;24215:17;24208:47;24272:78;24345:4;24336:6;24272:78;:::i;:::-;24264:86;;24162:195;;;;:::o;24363:419::-;24529:4;24567:2;24556:9;24552:18;24544:26;;24616:9;24610:4;24606:20;24602:1;24591:9;24587:17;24580:47;24644:131;24770:4;24644:131;:::i;:::-;24636:139;;24534:248;;;:::o;24788:419::-;24954:4;24992:2;24981:9;24977:18;24969:26;;25041:9;25035:4;25031:20;25027:1;25016:9;25012:17;25005:47;25069:131;25195:4;25069:131;:::i;:::-;25061:139;;24959:248;;;:::o;25213:419::-;25379:4;25417:2;25406:9;25402:18;25394:26;;25466:9;25460:4;25456:20;25452:1;25441:9;25437:17;25430:47;25494:131;25620:4;25494:131;:::i;:::-;25486:139;;25384:248;;;:::o;25638:419::-;25804:4;25842:2;25831:9;25827:18;25819:26;;25891:9;25885:4;25881:20;25877:1;25866:9;25862:17;25855:47;25919:131;26045:4;25919:131;:::i;:::-;25911:139;;25809:248;;;:::o;26063:419::-;26229:4;26267:2;26256:9;26252:18;26244:26;;26316:9;26310:4;26306:20;26302:1;26291:9;26287:17;26280:47;26344:131;26470:4;26344:131;:::i;:::-;26336:139;;26234:248;;;:::o;26488:419::-;26654:4;26692:2;26681:9;26677:18;26669:26;;26741:9;26735:4;26731:20;26727:1;26716:9;26712:17;26705:47;26769:131;26895:4;26769:131;:::i;:::-;26761:139;;26659:248;;;:::o;26913:419::-;27079:4;27117:2;27106:9;27102:18;27094:26;;27166:9;27160:4;27156:20;27152:1;27141:9;27137:17;27130:47;27194:131;27320:4;27194:131;:::i;:::-;27186:139;;27084:248;;;:::o;27338:419::-;27504:4;27542:2;27531:9;27527:18;27519:26;;27591:9;27585:4;27581:20;27577:1;27566:9;27562:17;27555:47;27619:131;27745:4;27619:131;:::i;:::-;27611:139;;27509:248;;;:::o;27763:419::-;27929:4;27967:2;27956:9;27952:18;27944:26;;28016:9;28010:4;28006:20;28002:1;27991:9;27987:17;27980:47;28044:131;28170:4;28044:131;:::i;:::-;28036:139;;27934:248;;;:::o;28188:419::-;28354:4;28392:2;28381:9;28377:18;28369:26;;28441:9;28435:4;28431:20;28427:1;28416:9;28412:17;28405:47;28469:131;28595:4;28469:131;:::i;:::-;28461:139;;28359:248;;;:::o;28613:419::-;28779:4;28817:2;28806:9;28802:18;28794:26;;28866:9;28860:4;28856:20;28852:1;28841:9;28837:17;28830:47;28894:131;29020:4;28894:131;:::i;:::-;28886:139;;28784:248;;;:::o;29038:419::-;29204:4;29242:2;29231:9;29227:18;29219:26;;29291:9;29285:4;29281:20;29277:1;29266:9;29262:17;29255:47;29319:131;29445:4;29319:131;:::i;:::-;29311:139;;29209:248;;;:::o;29463:419::-;29629:4;29667:2;29656:9;29652:18;29644:26;;29716:9;29710:4;29706:20;29702:1;29691:9;29687:17;29680:47;29744:131;29870:4;29744:131;:::i;:::-;29736:139;;29634:248;;;:::o;29888:419::-;30054:4;30092:2;30081:9;30077:18;30069:26;;30141:9;30135:4;30131:20;30127:1;30116:9;30112:17;30105:47;30169:131;30295:4;30169:131;:::i;:::-;30161:139;;30059:248;;;:::o;30313:419::-;30479:4;30517:2;30506:9;30502:18;30494:26;;30566:9;30560:4;30556:20;30552:1;30541:9;30537:17;30530:47;30594:131;30720:4;30594:131;:::i;:::-;30586:139;;30484:248;;;:::o;30738:419::-;30904:4;30942:2;30931:9;30927:18;30919:26;;30991:9;30985:4;30981:20;30977:1;30966:9;30962:17;30955:47;31019:131;31145:4;31019:131;:::i;:::-;31011:139;;30909:248;;;:::o;31163:419::-;31329:4;31367:2;31356:9;31352:18;31344:26;;31416:9;31410:4;31406:20;31402:1;31391:9;31387:17;31380:47;31444:131;31570:4;31444:131;:::i;:::-;31436:139;;31334:248;;;:::o;31588:419::-;31754:4;31792:2;31781:9;31777:18;31769:26;;31841:9;31835:4;31831:20;31827:1;31816:9;31812:17;31805:47;31869:131;31995:4;31869:131;:::i;:::-;31861:139;;31759:248;;;:::o;32013:419::-;32179:4;32217:2;32206:9;32202:18;32194:26;;32266:9;32260:4;32256:20;32252:1;32241:9;32237:17;32230:47;32294:131;32420:4;32294:131;:::i;:::-;32286:139;;32184:248;;;:::o;32438:419::-;32604:4;32642:2;32631:9;32627:18;32619:26;;32691:9;32685:4;32681:20;32677:1;32666:9;32662:17;32655:47;32719:131;32845:4;32719:131;:::i;:::-;32711:139;;32609:248;;;:::o;32863:419::-;33029:4;33067:2;33056:9;33052:18;33044:26;;33116:9;33110:4;33106:20;33102:1;33091:9;33087:17;33080:47;33144:131;33270:4;33144:131;:::i;:::-;33136:139;;33034:248;;;:::o;33288:419::-;33454:4;33492:2;33481:9;33477:18;33469:26;;33541:9;33535:4;33531:20;33527:1;33516:9;33512:17;33505:47;33569:131;33695:4;33569:131;:::i;:::-;33561:139;;33459:248;;;:::o;33713:419::-;33879:4;33917:2;33906:9;33902:18;33894:26;;33966:9;33960:4;33956:20;33952:1;33941:9;33937:17;33930:47;33994:131;34120:4;33994:131;:::i;:::-;33986:139;;33884:248;;;:::o;34138:222::-;34231:4;34269:2;34258:9;34254:18;34246:26;;34282:71;34350:1;34339:9;34335:17;34326:6;34282:71;:::i;:::-;34236:124;;;;:::o;34366:129::-;34400:6;34427:20;;:::i;:::-;34417:30;;34456:33;34484:4;34476:6;34456:33;:::i;:::-;34407:88;;;:::o;34501:75::-;34534:6;34567:2;34561:9;34551:19;;34541:35;:::o;34582:311::-;34659:4;34749:18;34741:6;34738:30;34735:2;;;34771:18;;:::i;:::-;34735:2;34821:4;34813:6;34809:17;34801:25;;34881:4;34875;34871:15;34863:23;;34664:229;;;:::o;34899:307::-;34960:4;35050:18;35042:6;35039:30;35036:2;;;35072:18;;:::i;:::-;35036:2;35110:29;35132:6;35110:29;:::i;:::-;35102:37;;35194:4;35188;35184:15;35176:23;;34965:241;;;:::o;35212:308::-;35274:4;35364:18;35356:6;35353:30;35350:2;;;35386:18;;:::i;:::-;35350:2;35424:29;35446:6;35424:29;:::i;:::-;35416:37;;35508:4;35502;35498:15;35490:23;;35279:241;;;:::o;35526:132::-;35593:4;35616:3;35608:11;;35646:4;35641:3;35637:14;35629:22;;35598:60;;;:::o;35664:114::-;35731:6;35765:5;35759:12;35749:22;;35738:40;;;:::o;35784:98::-;35835:6;35869:5;35863:12;35853:22;;35842:40;;;:::o;35888:99::-;35940:6;35974:5;35968:12;35958:22;;35947:40;;;:::o;35993:113::-;36063:4;36095;36090:3;36086:14;36078:22;;36068:38;;;:::o;36112:184::-;36211:11;36245:6;36240:3;36233:19;36285:4;36280:3;36276:14;36261:29;;36223:73;;;;:::o;36302:168::-;36385:11;36419:6;36414:3;36407:19;36459:4;36454:3;36450:14;36435:29;;36397:73;;;;:::o;36476:169::-;36560:11;36594:6;36589:3;36582:19;36634:4;36629:3;36625:14;36610:29;;36572:73;;;;:::o;36651:148::-;36753:11;36790:3;36775:18;;36765:34;;;;:::o;36805:305::-;36845:3;36864:20;36882:1;36864:20;:::i;:::-;36859:25;;36898:20;36916:1;36898:20;:::i;:::-;36893:25;;37052:1;36984:66;36980:74;36977:1;36974:81;36971:2;;;37058:18;;:::i;:::-;36971:2;37102:1;37099;37095:9;37088:16;;36849:261;;;;:::o;37116:185::-;37156:1;37173:20;37191:1;37173:20;:::i;:::-;37168:25;;37207:20;37225:1;37207:20;:::i;:::-;37202:25;;37246:1;37236:2;;37251:18;;:::i;:::-;37236:2;37293:1;37290;37286:9;37281:14;;37158:143;;;;:::o;37307:348::-;37347:7;37370:20;37388:1;37370:20;:::i;:::-;37365:25;;37404:20;37422:1;37404:20;:::i;:::-;37399:25;;37592:1;37524:66;37520:74;37517:1;37514:81;37509:1;37502:9;37495:17;37491:105;37488:2;;;37599:18;;:::i;:::-;37488:2;37647:1;37644;37640:9;37629:20;;37355:300;;;;:::o;37661:191::-;37701:4;37721:20;37739:1;37721:20;:::i;:::-;37716:25;;37755:20;37773:1;37755:20;:::i;:::-;37750:25;;37794:1;37791;37788:8;37785:2;;;37799:18;;:::i;:::-;37785:2;37844:1;37841;37837:9;37829:17;;37706:146;;;;:::o;37858:96::-;37895:7;37924:24;37942:5;37924:24;:::i;:::-;37913:35;;37903:51;;;:::o;37960:104::-;38005:7;38034:24;38052:5;38034:24;:::i;:::-;38023:35;;38013:51;;;:::o;38070:90::-;38104:7;38147:5;38140:13;38133:21;38122:32;;38112:48;;;:::o;38166:149::-;38202:7;38242:66;38235:5;38231:78;38220:89;;38210:105;;;:::o;38321:126::-;38358:7;38398:42;38391:5;38387:54;38376:65;;38366:81;;;:::o;38453:77::-;38490:7;38519:5;38508:16;;38498:32;;;:::o;38536:170::-;38608:9;38641:59;38694:5;38641:59;:::i;:::-;38628:72;;38618:88;;;:::o;38712:135::-;38784:9;38817:24;38835:5;38817:24;:::i;:::-;38804:37;;38794:53;;;:::o;38853:154::-;38937:6;38932:3;38927;38914:30;38999:1;38990:6;38985:3;38981:16;38974:27;38904:103;;;:::o;39013:307::-;39081:1;39091:113;39105:6;39102:1;39099:13;39091:113;;;39190:1;39185:3;39181:11;39175:18;39171:1;39166:3;39162:11;39155:39;39127:2;39124:1;39120:10;39115:15;;39091:113;;;39222:6;39219:1;39216:13;39213:2;;;39302:1;39293:6;39288:3;39284:16;39277:27;39213:2;39062:258;;;;:::o;39326:320::-;39370:6;39407:1;39401:4;39397:12;39387:22;;39454:1;39448:4;39444:12;39475:18;39465:2;;39531:4;39523:6;39519:17;39509:27;;39465:2;39593;39585:6;39582:14;39562:18;39559:38;39556:2;;;39612:18;;:::i;:::-;39556:2;39377:269;;;;:::o;39652:281::-;39735:27;39757:4;39735:27;:::i;:::-;39727:6;39723:40;39865:6;39853:10;39850:22;39829:18;39817:10;39814:34;39811:62;39808:2;;;39876:18;;:::i;:::-;39808:2;39916:10;39912:2;39905:22;39695:238;;;:::o;39939:233::-;39978:3;40001:24;40019:5;40001:24;:::i;:::-;39992:33;;40047:66;40040:5;40037:77;40034:2;;;40117:18;;:::i;:::-;40034:2;40164:1;40157:5;40153:13;40146:20;;39982:190;;;:::o;40178:176::-;40210:1;40227:20;40245:1;40227:20;:::i;:::-;40222:25;;40261:20;40279:1;40261:20;:::i;:::-;40256:25;;40300:1;40290:2;;40305:18;;:::i;:::-;40290:2;40346:1;40343;40339:9;40334:14;;40212:142;;;;:::o;40360:180::-;40408:77;40405:1;40398:88;40505:4;40502:1;40495:15;40529:4;40526:1;40519:15;40546:180;40594:77;40591:1;40584:88;40691:4;40688:1;40681:15;40715:4;40712:1;40705:15;40732:180;40780:77;40777:1;40770:88;40877:4;40874:1;40867:15;40901:4;40898:1;40891:15;40918:180;40966:77;40963:1;40956:88;41063:4;41060:1;41053:15;41087:4;41084:1;41077:15;41104:180;41152:77;41149:1;41142:88;41249:4;41246:1;41239:15;41273:4;41270:1;41263:15;41290:180;41338:77;41335:1;41328:88;41435:4;41432:1;41425:15;41459:4;41456:1;41449:15;41476:117;41585:1;41582;41575:12;41599:117;41708:1;41705;41698:12;41722:117;41831:1;41828;41821:12;41845:117;41954:1;41951;41944:12;41968:117;42077:1;42074;42067:12;42091:102;42132:6;42183:2;42179:7;42174:2;42167:5;42163:14;42159:28;42149:38;;42139:54;;;:::o;42199:230::-;42339:34;42335:1;42327:6;42323:14;42316:58;42408:13;42403:2;42395:6;42391:15;42384:38;42305:124;:::o;42435:237::-;42575:34;42571:1;42563:6;42559:14;42552:58;42644:20;42639:2;42631:6;42627:15;42620:45;42541:131;:::o;42678:225::-;42818:34;42814:1;42806:6;42802:14;42795:58;42887:8;42882:2;42874:6;42870:15;42863:33;42784:119;:::o;42909:178::-;43049:30;43045:1;43037:6;43033:14;43026:54;43015:72;:::o;43093:223::-;43233:34;43229:1;43221:6;43217:14;43210:58;43302:6;43297:2;43289:6;43285:15;43278:31;43199:117;:::o;43322:175::-;43462:27;43458:1;43450:6;43446:14;43439:51;43428:69;:::o;43503:159::-;43643:11;43639:1;43631:6;43627:14;43620:35;43609:53;:::o;43668:231::-;43808:34;43804:1;43796:6;43792:14;43785:58;43877:14;43872:2;43864:6;43860:15;43853:39;43774:125;:::o;43905:243::-;44045:34;44041:1;44033:6;44029:14;44022:58;44114:26;44109:2;44101:6;44097:15;44090:51;44011:137;:::o;44154:229::-;44294:34;44290:1;44282:6;44278:14;44271:58;44363:12;44358:2;44350:6;44346:15;44339:37;44260:123;:::o;44389:228::-;44529:34;44525:1;44517:6;44513:14;44506:58;44598:11;44593:2;44585:6;44581:15;44574:36;44495:122;:::o;44623:182::-;44763:34;44759:1;44751:6;44747:14;44740:58;44729:76;:::o;44811:158::-;44951:10;44947:1;44939:6;44935:14;44928:34;44917:52;:::o;44975:231::-;45115:34;45111:1;45103:6;45099:14;45092:58;45184:14;45179:2;45171:6;45167:15;45160:39;45081:125;:::o;45212:182::-;45352:34;45348:1;45340:6;45336:14;45329:58;45318:76;:::o;45400:228::-;45540:34;45536:1;45528:6;45524:14;45517:58;45609:11;45604:2;45596:6;45592:15;45585:36;45506:122;:::o;45634:234::-;45774:34;45770:1;45762:6;45758:14;45751:58;45843:17;45838:2;45830:6;45826:15;45819:42;45740:128;:::o;45874:167::-;46014:19;46010:1;46002:6;45998:14;45991:43;45980:61;:::o;46047:220::-;46187:34;46183:1;46175:6;46171:14;46164:58;46256:3;46251:2;46243:6;46239:15;46232:28;46153:114;:::o;46273:160::-;46413:12;46409:1;46401:6;46397:14;46390:36;46379:54;:::o;46439:236::-;46579:34;46575:1;46567:6;46563:14;46556:58;46648:19;46643:2;46635:6;46631:15;46624:44;46545:130;:::o;46681:231::-;46821:34;46817:1;46809:6;46805:14;46798:58;46890:14;46885:2;46877:6;46873:15;46866:39;46787:125;:::o;46918:164::-;47058:16;47054:1;47046:6;47042:14;47035:40;47024:58;:::o;47088:122::-;47161:24;47179:5;47161:24;:::i;:::-;47154:5;47151:35;47141:2;;47200:1;47197;47190:12;47141:2;47131:79;:::o;47216:138::-;47297:32;47323:5;47297:32;:::i;:::-;47290:5;47287:43;47277:2;;47344:1;47341;47334:12;47277:2;47267:87;:::o;47360:116::-;47430:21;47445:5;47430:21;:::i;:::-;47423:5;47420:32;47410:2;;47466:1;47463;47456:12;47410:2;47400:76;:::o;47482:120::-;47554:23;47571:5;47554:23;:::i;:::-;47547:5;47544:34;47534:2;;47592:1;47589;47582:12;47534:2;47524:78;:::o;47608:122::-;47681:24;47699:5;47681:24;:::i;:::-;47674:5;47671:35;47661:2;;47720:1;47717;47710:12;47661:2;47651:79;:::o
Swarm Source
ipfs://6cd3345b68c91d4201699ebd766301d906fba4ab30e32b7c4201ebc35b7518c9
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.