ERC-721
Overview
Max Total Supply
7,680 LOKG
Holders
2,858
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 LOKGLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
LOKGoods
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-04-13 */ pragma solidity ^0.8.0; // SPDX-License-Identifier: MIT interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); event Mint(address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // OpenZeppelin Contracts v4.3.2 (token/ERC20/extensions/IERC20Metadata.sol) /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) /** * @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); } // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) /** * @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; } // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) /** * @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); } // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) /** * @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); } // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) /** * @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; } } // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) /** * @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; string baseURI; // 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"); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) /** * @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); } // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) /** * @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)) _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[] _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 Membership is Context { address private owner; event MembershipChanged(address indexed owner, uint256 level); event OwnerTransferred(address indexed preOwner, address indexed newOwner); mapping(address => uint256) internal membership; constructor() { owner = _msgSender(); setMembership(_msgSender(), 1); } function transferOwner(address newOwner) public onlyOwner { address preOwner = owner; setMembership(newOwner, 1); setMembership(preOwner, 0); owner = newOwner; emit OwnerTransferred(preOwner, newOwner); } function setMembership(address key, uint256 level) public onlyOwner { membership[key] = level; emit MembershipChanged(key, level); } modifier onlyOwner() { require(isOwner(), "Membership : caller is not the owner"); _; } function isOwner() public view returns (bool) { return _msgSender() == owner; } modifier onlyAdmin() { require(isAdmin(), "Membership : caller is not a admin"); _; } function isAdmin() public view returns (bool) { return membership[_msgSender()] == 1; } modifier onlyMinter() { require(isMinter(), "Memberhsip : caller is not a Minter"); _; } function isMinter() public view returns (bool) { return isOwner() || membership[_msgSender()] == 11; } function getMembership(address account) public view returns (uint256){ return membership[account]; } } contract LOKGoods is ERC721Enumerable, Membership { event Mint(address indexed to, uint256 indexed id); constructor(string memory name, string memory symbol) ERC721(name, symbol) {//임시 setBaseURI("https://lok-nft.leagueofkingdoms.com/api/goods/"); } function setBaseURI(string memory uri) public onlyOwner { baseURI = uri; } function mint(address to, uint256 tokenId) public onlyMinter{ _mint(to, tokenId); emit Mint(to, tokenId); } function mints(address[] memory tos, uint256[] memory tokenIds) public onlyMinter { for (uint256 i = 0; i < tokenIds.length; ++i) { mint(tos[i], tokenIds[i]); } } function mintsTo(address to, uint256[] memory tokenIds) public onlyMinter { for (uint256 i = 0; i < tokenIds.length; ++i) { mint(to, tokenIds[i]); } } function burn(uint256 tokenId) public onlyMinter { _burn(tokenId); } function burns(uint256[] memory tokenIds) public onlyMinter { for (uint256 i = 0; i < tokenIds.length; ++i) { _burn(tokenIds[i]); } } function allTokens() public view returns (uint256[] memory){ return _allTokens; } function ownedTokens(address owner) public view returns (uint256[] memory){ uint256 length = balanceOf(owner); uint256[] memory tokens = new uint256[](length); for(uint256 i=0; i<length; ++i){ tokens[i] = _ownedTokens[owner][i]; } return tokens; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","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":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"level","type":"uint256"}],"name":"MembershipChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"preOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"allTokens","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"burns","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getMembership","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tos","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"mints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"mintsTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"ownedTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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":"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":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"key","type":"address"},{"internalType":"uint256","name":"level","type":"uint256"}],"name":"setMembership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200479e3803806200479e833981810160405281019062000037919062000525565b8181816000908051906020019062000051929190620002d8565b5080600190805190602001906200006a929190620002d8565b5050506200007d6200011160201b60201c565b600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620000df620000d16200011160201b60201c565b60016200011960201b60201c565b620001096040518060600160405280602f81526020016200476f602f91396200020360201b60201c565b5050620006f0565b600033905090565b620001296200027160201b60201c565b6200016b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001629062000631565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167f65efeaf737ce094d287661b6a56bb530dce1fc30853708d1912a74f8ae65ffbb82604051620001f791906200066e565b60405180910390a25050565b620002136200027160201b60201c565b62000255576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200024c9062000631565b60405180910390fd5b80600290805190602001906200026d929190620002d8565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16620002bc6200011160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b828054620002e690620006ba565b90600052602060002090601f0160209004810192826200030a576000855562000356565b82601f106200032557805160ff191683800117855562000356565b8280016001018555821562000356579182015b828111156200035557825182559160200191906001019062000338565b5b50905062000365919062000369565b5090565b5b80821115620003845760008160009055506001016200036a565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003f182620003a6565b810181811067ffffffffffffffff82111715620004135762000412620003b7565b5b80604052505050565b60006200042862000388565b9050620004368282620003e6565b919050565b600067ffffffffffffffff821115620004595762000458620003b7565b5b6200046482620003a6565b9050602081019050919050565b60005b838110156200049157808201518184015260208101905062000474565b83811115620004a1576000848401525b50505050565b6000620004be620004b8846200043b565b6200041c565b905082815260208101848484011115620004dd57620004dc620003a1565b5b620004ea84828562000471565b509392505050565b600082601f8301126200050a57620005096200039c565b5b81516200051c848260208601620004a7565b91505092915050565b600080604083850312156200053f576200053e62000392565b5b600083015167ffffffffffffffff81111562000560576200055f62000397565b5b6200056e85828601620004f2565b925050602083015167ffffffffffffffff81111562000592576200059162000397565b5b620005a085828601620004f2565b9150509250929050565b600082825260208201905092915050565b7f4d656d62657273686970203a2063616c6c6572206973206e6f7420746865206f60008201527f776e657200000000000000000000000000000000000000000000000000000000602082015250565b600062000619602483620005aa565b91506200062682620005bb565b604082019050919050565b600060208201905081810360008301526200064c816200060a565b9050919050565b6000819050919050565b620006688162000653565b82525050565b60006020820190506200068560008301846200065d565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006d357607f821691505b60208210811415620006ea57620006e96200068b565b5b50919050565b61406f80620007006000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806355f804b311610104578063a22cb465116100a2578063c28ab89011610071578063c28ab89014610565578063c87b56dd14610581578063e985e9c5146105b1578063f2bc7a96146105e1576101da565b8063a22cb465146104df578063b12ab40f146104fb578063b6db75a01461052b578063b88d4fde14610549576101da565b806370a08231116100de57806370a0823114610457578063874dae88146104875780638f32d59b146104a357806395d89b41146104c1576101da565b806355f804b3146103ed5780636352211e146104095780636ff97f1d14610439576101da565b806334c5a0441161017c57806342966c681161014b57806342966c68146103675780634f6ccce7146103835780634fb2e45d146103b357806350e59eb3146103cf576101da565b806334c5a044146102e35780633a7ce6ed1461031357806340c10f191461032f57806342842e0e1461034b576101da565b8063095ea7b3116101b8578063095ea7b31461025d57806318160ddd1461027957806323b872dd146102975780632f745c59146102b3576101da565b806301ffc9a7146101df57806306fdde031461020f578063081812fc1461022d575b600080fd5b6101f960048036038101906101f49190612875565b6105fd565b60405161020691906128bd565b60405180910390f35b610217610677565b6040516102249190612971565b60405180910390f35b610247600480360381019061024291906129c9565b610709565b6040516102549190612a37565b60405180910390f35b61027760048036038101906102729190612a7e565b61078e565b005b6102816108a6565b60405161028e9190612acd565b60405180910390f35b6102b160048036038101906102ac9190612ae8565b6108b3565b005b6102cd60048036038101906102c89190612a7e565b610913565b6040516102da9190612acd565b60405180910390f35b6102fd60048036038101906102f89190612b3b565b6109b8565b60405161030a9190612acd565b60405180910390f35b61032d60048036038101906103289190612cb0565b610a01565b005b61034960048036038101906103449190612a7e565b610a8e565b005b61036560048036038101906103609190612ae8565b610b27565b005b610381600480360381019061037c91906129c9565b610b47565b005b61039d600480360381019061039891906129c9565b610b9a565b6040516103aa9190612acd565b60405180910390f35b6103cd60048036038101906103c89190612b3b565b610c0b565b005b6103d7610d2e565b6040516103e491906128bd565b60405180910390f35b61040760048036038101906104029190612dc1565b610d8e565b005b610423600480360381019061041e91906129c9565b610def565b6040516104309190612a37565b60405180910390f35b610441610ea1565b60405161044e9190612ec8565b60405180910390f35b610471600480360381019061046c9190612b3b565b610ef9565b60405161047e9190612acd565b60405180910390f35b6104a1600480360381019061049c9190612a7e565b610fb1565b005b6104ab61108e565b6040516104b891906128bd565b60405180910390f35b6104c96110ed565b6040516104d69190612971565b60405180910390f35b6104f960048036038101906104f49190612f16565b61117f565b005b61051560048036038101906105109190612b3b565b611195565b6040516105229190612ec8565b60405180910390f35b610533611288565b60405161054091906128bd565b60405180910390f35b610563600480360381019061055e9190612ff7565b6112d9565b005b61057f600480360381019061057a919061313d565b61133b565b005b61059b600480360381019061059691906129c9565b6113e2565b6040516105a89190612971565b60405180910390f35b6105cb60048036038101906105c691906131b5565b61148a565b6040516105d891906128bd565b60405180910390f35b6105fb60048036038101906105f691906131f5565b61151e565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610670575061066f826115a9565b5b9050919050565b6060600080546106869061326d565b80601f01602080910402602001604051908101604052809291908181526020018280546106b29061326d565b80156106ff5780601f106106d4576101008083540402835291602001916106ff565b820191906000526020600020905b8154815290600101906020018083116106e257829003601f168201915b5050505050905090565b60006107148261168b565b610753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074a90613311565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061079982610def565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561080a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610801906133a3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108296116f7565b73ffffffffffffffffffffffffffffffffffffffff1614806108585750610857816108526116f7565b61148a565b5b610897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088e90613435565b60405180910390fd5b6108a183836116ff565b505050565b6000600980549050905090565b6108c46108be6116f7565b826117b8565b610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fa906134c7565b60405180910390fd5b61090e838383611896565b505050565b600061091e83610ef9565b821061095f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095690613559565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a09610d2e565b610a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3f906135eb565b60405180910390fd5b60005b8151811015610a8957610a7883838381518110610a6b57610a6a61360b565b5b6020026020010151610a8e565b80610a8290613669565b9050610a4b565b505050565b610a96610d2e565b610ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acc906135eb565b60405180910390fd5b610adf8282611afd565b808273ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688560405160405180910390a35050565b610b42838383604051806020016040528060008152506112d9565b505050565b610b4f610d2e565b610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b85906135eb565b60405180910390fd5b610b9781611cd7565b50565b6000610ba46108a6565b8210610be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdc90613724565b60405180910390fd5b60098281548110610bf957610bf861360b565b5b90600052602060002001549050919050565b610c1361108e565b610c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c49906137b6565b60405180910390fd5b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610c84826001610fb1565b610c8f816000610fb1565b81600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8934ce4adea8d9ce0d714d2c22b86790e41b7731c84b926fbbdc1d40ff6533c960405160405180910390a35050565b6000610d3861108e565b80610d895750600b600c6000610d4c6116f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b905090565b610d9661108e565b610dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcc906137b6565b60405180910390fd5b8060029080519060200190610deb929190612766565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8f90613848565b60405180910390fd5b80915050919050565b60606009805480602002602001604051908101604052809291908181526020018280548015610eef57602002820191906000526020600020905b815481526020019060010190808311610edb575b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f61906138da565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fb961108e565b610ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fef906137b6565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167f65efeaf737ce094d287661b6a56bb530dce1fc30853708d1912a74f8ae65ffbb826040516110829190612acd565b60405180910390a25050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166110d16116f7565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600180546110fc9061326d565b80601f01602080910402602001604051908101604052809291908181526020018280546111289061326d565b80156111755780601f1061114a57610100808354040283529160200191611175565b820191906000526020600020905b81548152906001019060200180831161115857829003601f168201915b5050505050905090565b61119161118a6116f7565b8383611df4565b5050565b606060006111a283610ef9565b905060008167ffffffffffffffff8111156111c0576111bf612b6d565b5b6040519080825280602002602001820160405280156111ee5781602001602082028036833780820191505090505b50905060005b8281101561127d57600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828152602001908152602001600020548282815181106112605761125f61360b565b5b6020026020010181815250508061127690613669565b90506111f4565b508092505050919050565b60006001600c60006112986116f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414905090565b6112ea6112e46116f7565b836117b8565b611329576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611320906134c7565b60405180910390fd5b61133584848484611f61565b50505050565b611343610d2e565b611382576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611379906135eb565b60405180910390fd5b60005b81518110156113dd576113cc8382815181106113a4576113a361360b565b5b60200260200101518383815181106113bf576113be61360b565b5b6020026020010151610a8e565b806113d690613669565b9050611385565b505050565b60606113ed8261168b565b61142c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114239061396c565b60405180910390fd5b60006002805461143b9061326d565b9050116114575760405180602001604052806000815250611483565b600261146283611fbd565b604051602001611473929190613a5c565b6040516020818303038152906040525b9050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611526610d2e565b611565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155c906135eb565b60405180910390fd5b60005b81518110156115a5576115948282815181106115875761158661360b565b5b6020026020010151611cd7565b8061159e90613669565b9050611568565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061167457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061168457506116838261211e565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661177283610def565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006117c38261168b565b611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f990613af2565b60405180910390fd5b600061180d83610def565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061187c57508373ffffffffffffffffffffffffffffffffffffffff1661186484610709565b73ffffffffffffffffffffffffffffffffffffffff16145b8061188d575061188c818561148a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166118b682610def565b73ffffffffffffffffffffffffffffffffffffffff161461190c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190390613b84565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561197c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197390613c16565b60405180910390fd5b611987838383612188565b6119926000826116ff565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119e29190613c36565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a399190613c6a565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611af883838361229c565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6490613d0c565b60405180910390fd5b611b768161168b565b15611bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bad90613d78565b60405180910390fd5b611bc260008383612188565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c129190613c6a565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611cd36000838361229c565b5050565b6000611ce282610def565b9050611cf081600084612188565b611cfb6000836116ff565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d4b9190613c36565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611df08160008461229c565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5a90613de4565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f5491906128bd565b60405180910390a3505050565b611f6c848484611896565b611f78848484846122a1565b611fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fae90613e76565b60405180910390fd5b50505050565b60606000821415612005576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612119565b600082905060005b6000821461203757808061202090613669565b915050600a826120309190613ec5565b915061200d565b60008167ffffffffffffffff81111561205357612052612b6d565b5b6040519080825280601f01601f1916602001820160405280156120855781602001600182028036833780820191505090505b5090505b600085146121125760018261209e9190613c36565b9150600a856120ad9190613ef6565b60306120b99190613c6a565b60f81b8183815181106120cf576120ce61360b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561210b9190613ec5565b9450612089565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612193838383612438565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121d6576121d18161243d565b612215565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612214576122138382612486565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561225857612253816125f3565b612297565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146122965761229582826126c4565b5b5b505050565b505050565b60006122c28473ffffffffffffffffffffffffffffffffffffffff16612743565b1561242b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122eb6116f7565b8786866040518563ffffffff1660e01b815260040161230d9493929190613f7c565b602060405180830381600087803b15801561232757600080fd5b505af192505050801561235857506040513d601f19601f820116820180604052508101906123559190613fdd565b60015b6123db573d8060008114612388576040519150601f19603f3d011682016040523d82523d6000602084013e61238d565b606091505b506000815114156123d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ca90613e76565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612430565b600190505b949350505050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161249384610ef9565b61249d9190613c36565b9050600060086000848152602001908152602001600020549050818114612582576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016009805490506126079190613c36565b90506000600a60008481526020019081526020016000205490506000600983815481106126375761263661360b565b5b9060005260206000200154905080600983815481106126595761265861360b565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a60008581526020019081526020016000206000905560098054806126a8576126a761400a565b5b6001900381819060005260206000200160009055905550505050565b60006126cf83610ef9565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546127729061326d565b90600052602060002090601f01602090048101928261279457600085556127db565b82601f106127ad57805160ff19168380011785556127db565b828001600101855582156127db579182015b828111156127da5782518255916020019190600101906127bf565b5b5090506127e891906127ec565b5090565b5b808211156128055760008160009055506001016127ed565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6128528161281d565b811461285d57600080fd5b50565b60008135905061286f81612849565b92915050565b60006020828403121561288b5761288a612813565b5b600061289984828501612860565b91505092915050565b60008115159050919050565b6128b7816128a2565b82525050565b60006020820190506128d260008301846128ae565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156129125780820151818401526020810190506128f7565b83811115612921576000848401525b50505050565b6000601f19601f8301169050919050565b6000612943826128d8565b61294d81856128e3565b935061295d8185602086016128f4565b61296681612927565b840191505092915050565b6000602082019050818103600083015261298b8184612938565b905092915050565b6000819050919050565b6129a681612993565b81146129b157600080fd5b50565b6000813590506129c38161299d565b92915050565b6000602082840312156129df576129de612813565b5b60006129ed848285016129b4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a21826129f6565b9050919050565b612a3181612a16565b82525050565b6000602082019050612a4c6000830184612a28565b92915050565b612a5b81612a16565b8114612a6657600080fd5b50565b600081359050612a7881612a52565b92915050565b60008060408385031215612a9557612a94612813565b5b6000612aa385828601612a69565b9250506020612ab4858286016129b4565b9150509250929050565b612ac781612993565b82525050565b6000602082019050612ae26000830184612abe565b92915050565b600080600060608486031215612b0157612b00612813565b5b6000612b0f86828701612a69565b9350506020612b2086828701612a69565b9250506040612b31868287016129b4565b9150509250925092565b600060208284031215612b5157612b50612813565b5b6000612b5f84828501612a69565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ba582612927565b810181811067ffffffffffffffff82111715612bc457612bc3612b6d565b5b80604052505050565b6000612bd7612809565b9050612be38282612b9c565b919050565b600067ffffffffffffffff821115612c0357612c02612b6d565b5b602082029050602081019050919050565b600080fd5b6000612c2c612c2784612be8565b612bcd565b90508083825260208201905060208402830185811115612c4f57612c4e612c14565b5b835b81811015612c785780612c6488826129b4565b845260208401935050602081019050612c51565b5050509392505050565b600082601f830112612c9757612c96612b68565b5b8135612ca7848260208601612c19565b91505092915050565b60008060408385031215612cc757612cc6612813565b5b6000612cd585828601612a69565b925050602083013567ffffffffffffffff811115612cf657612cf5612818565b5b612d0285828601612c82565b9150509250929050565b600080fd5b600067ffffffffffffffff821115612d2c57612d2b612b6d565b5b612d3582612927565b9050602081019050919050565b82818337600083830152505050565b6000612d64612d5f84612d11565b612bcd565b905082815260208101848484011115612d8057612d7f612d0c565b5b612d8b848285612d42565b509392505050565b600082601f830112612da857612da7612b68565b5b8135612db8848260208601612d51565b91505092915050565b600060208284031215612dd757612dd6612813565b5b600082013567ffffffffffffffff811115612df557612df4612818565b5b612e0184828501612d93565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612e3f81612993565b82525050565b6000612e518383612e36565b60208301905092915050565b6000602082019050919050565b6000612e7582612e0a565b612e7f8185612e15565b9350612e8a83612e26565b8060005b83811015612ebb578151612ea28882612e45565b9750612ead83612e5d565b925050600181019050612e8e565b5085935050505092915050565b60006020820190508181036000830152612ee28184612e6a565b905092915050565b612ef3816128a2565b8114612efe57600080fd5b50565b600081359050612f1081612eea565b92915050565b60008060408385031215612f2d57612f2c612813565b5b6000612f3b85828601612a69565b9250506020612f4c85828601612f01565b9150509250929050565b600067ffffffffffffffff821115612f7157612f70612b6d565b5b612f7a82612927565b9050602081019050919050565b6000612f9a612f9584612f56565b612bcd565b905082815260208101848484011115612fb657612fb5612d0c565b5b612fc1848285612d42565b509392505050565b600082601f830112612fde57612fdd612b68565b5b8135612fee848260208601612f87565b91505092915050565b6000806000806080858703121561301157613010612813565b5b600061301f87828801612a69565b945050602061303087828801612a69565b9350506040613041878288016129b4565b925050606085013567ffffffffffffffff81111561306257613061612818565b5b61306e87828801612fc9565b91505092959194509250565b600067ffffffffffffffff82111561309557613094612b6d565b5b602082029050602081019050919050565b60006130b96130b48461307a565b612bcd565b905080838252602082019050602084028301858111156130dc576130db612c14565b5b835b8181101561310557806130f18882612a69565b8452602084019350506020810190506130de565b5050509392505050565b600082601f83011261312457613123612b68565b5b81356131348482602086016130a6565b91505092915050565b6000806040838503121561315457613153612813565b5b600083013567ffffffffffffffff81111561317257613171612818565b5b61317e8582860161310f565b925050602083013567ffffffffffffffff81111561319f5761319e612818565b5b6131ab85828601612c82565b9150509250929050565b600080604083850312156131cc576131cb612813565b5b60006131da85828601612a69565b92505060206131eb85828601612a69565b9150509250929050565b60006020828403121561320b5761320a612813565b5b600082013567ffffffffffffffff81111561322957613228612818565b5b61323584828501612c82565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061328557607f821691505b602082108114156132995761329861323e565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006132fb602c836128e3565b91506133068261329f565b604082019050919050565b6000602082019050818103600083015261332a816132ee565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061338d6021836128e3565b915061339882613331565b604082019050919050565b600060208201905081810360008301526133bc81613380565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061341f6038836128e3565b915061342a826133c3565b604082019050919050565b6000602082019050818103600083015261344e81613412565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006134b16031836128e3565b91506134bc82613455565b604082019050919050565b600060208201905081810360008301526134e0816134a4565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613543602b836128e3565b915061354e826134e7565b604082019050919050565b6000602082019050818103600083015261357281613536565b9050919050565b7f4d656d62657268736970203a2063616c6c6572206973206e6f742061204d696e60008201527f7465720000000000000000000000000000000000000000000000000000000000602082015250565b60006135d56023836128e3565b91506135e082613579565b604082019050919050565b60006020820190508181036000830152613604816135c8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061367482612993565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156136a7576136a661363a565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b600061370e602c836128e3565b9150613719826136b2565b604082019050919050565b6000602082019050818103600083015261373d81613701565b9050919050565b7f4d656d62657273686970203a2063616c6c6572206973206e6f7420746865206f60008201527f776e657200000000000000000000000000000000000000000000000000000000602082015250565b60006137a06024836128e3565b91506137ab82613744565b604082019050919050565b600060208201905081810360008301526137cf81613793565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006138326029836128e3565b915061383d826137d6565b604082019050919050565b6000602082019050818103600083015261386181613825565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006138c4602a836128e3565b91506138cf82613868565b604082019050919050565b600060208201905081810360008301526138f3816138b7565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613956602f836128e3565b9150613961826138fa565b604082019050919050565b6000602082019050818103600083015261398581613949565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546139b98161326d565b6139c3818661398c565b945060018216600081146139de57600181146139ef57613a22565b60ff19831686528186019350613a22565b6139f885613997565b60005b83811015613a1a578154818901526001820191506020810190506139fb565b838801955050505b50505092915050565b6000613a36826128d8565b613a40818561398c565b9350613a508185602086016128f4565b80840191505092915050565b6000613a6882856139ac565b9150613a748284613a2b565b91508190509392505050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613adc602c836128e3565b9150613ae782613a80565b604082019050919050565b60006020820190508181036000830152613b0b81613acf565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000613b6e6025836128e3565b9150613b7982613b12565b604082019050919050565b60006020820190508181036000830152613b9d81613b61565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613c006024836128e3565b9150613c0b82613ba4565b604082019050919050565b60006020820190508181036000830152613c2f81613bf3565b9050919050565b6000613c4182612993565b9150613c4c83612993565b925082821015613c5f57613c5e61363a565b5b828203905092915050565b6000613c7582612993565b9150613c8083612993565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613cb557613cb461363a565b5b828201905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613cf66020836128e3565b9150613d0182613cc0565b602082019050919050565b60006020820190508181036000830152613d2581613ce9565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613d62601c836128e3565b9150613d6d82613d2c565b602082019050919050565b60006020820190508181036000830152613d9181613d55565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613dce6019836128e3565b9150613dd982613d98565b602082019050919050565b60006020820190508181036000830152613dfd81613dc1565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613e606032836128e3565b9150613e6b82613e04565b604082019050919050565b60006020820190508181036000830152613e8f81613e53565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ed082612993565b9150613edb83612993565b925082613eeb57613eea613e96565b5b828204905092915050565b6000613f0182612993565b9150613f0c83612993565b925082613f1c57613f1b613e96565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000613f4e82613f27565b613f588185613f32565b9350613f688185602086016128f4565b613f7181612927565b840191505092915050565b6000608082019050613f916000830187612a28565b613f9e6020830186612a28565b613fab6040830185612abe565b8181036060830152613fbd8184613f43565b905095945050505050565b600081519050613fd781612849565b92915050565b600060208284031215613ff357613ff2612813565b5b600061400184828501613fc8565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122005f8f9703e5967205c06add78ccbd97cf8facff8eb4c97c2aa04d7ac2a6c8dd664736f6c6343000809003368747470733a2f2f6c6f6b2d6e66742e6c65616775656f666b696e67646f6d732e636f6d2f6170692f676f6f64732f0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000184c6561677565206f66204b696e67646f6d7320474f4f4453000000000000000000000000000000000000000000000000000000000000000000000000000000044c4f4b4700000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806355f804b311610104578063a22cb465116100a2578063c28ab89011610071578063c28ab89014610565578063c87b56dd14610581578063e985e9c5146105b1578063f2bc7a96146105e1576101da565b8063a22cb465146104df578063b12ab40f146104fb578063b6db75a01461052b578063b88d4fde14610549576101da565b806370a08231116100de57806370a0823114610457578063874dae88146104875780638f32d59b146104a357806395d89b41146104c1576101da565b806355f804b3146103ed5780636352211e146104095780636ff97f1d14610439576101da565b806334c5a0441161017c57806342966c681161014b57806342966c68146103675780634f6ccce7146103835780634fb2e45d146103b357806350e59eb3146103cf576101da565b806334c5a044146102e35780633a7ce6ed1461031357806340c10f191461032f57806342842e0e1461034b576101da565b8063095ea7b3116101b8578063095ea7b31461025d57806318160ddd1461027957806323b872dd146102975780632f745c59146102b3576101da565b806301ffc9a7146101df57806306fdde031461020f578063081812fc1461022d575b600080fd5b6101f960048036038101906101f49190612875565b6105fd565b60405161020691906128bd565b60405180910390f35b610217610677565b6040516102249190612971565b60405180910390f35b610247600480360381019061024291906129c9565b610709565b6040516102549190612a37565b60405180910390f35b61027760048036038101906102729190612a7e565b61078e565b005b6102816108a6565b60405161028e9190612acd565b60405180910390f35b6102b160048036038101906102ac9190612ae8565b6108b3565b005b6102cd60048036038101906102c89190612a7e565b610913565b6040516102da9190612acd565b60405180910390f35b6102fd60048036038101906102f89190612b3b565b6109b8565b60405161030a9190612acd565b60405180910390f35b61032d60048036038101906103289190612cb0565b610a01565b005b61034960048036038101906103449190612a7e565b610a8e565b005b61036560048036038101906103609190612ae8565b610b27565b005b610381600480360381019061037c91906129c9565b610b47565b005b61039d600480360381019061039891906129c9565b610b9a565b6040516103aa9190612acd565b60405180910390f35b6103cd60048036038101906103c89190612b3b565b610c0b565b005b6103d7610d2e565b6040516103e491906128bd565b60405180910390f35b61040760048036038101906104029190612dc1565b610d8e565b005b610423600480360381019061041e91906129c9565b610def565b6040516104309190612a37565b60405180910390f35b610441610ea1565b60405161044e9190612ec8565b60405180910390f35b610471600480360381019061046c9190612b3b565b610ef9565b60405161047e9190612acd565b60405180910390f35b6104a1600480360381019061049c9190612a7e565b610fb1565b005b6104ab61108e565b6040516104b891906128bd565b60405180910390f35b6104c96110ed565b6040516104d69190612971565b60405180910390f35b6104f960048036038101906104f49190612f16565b61117f565b005b61051560048036038101906105109190612b3b565b611195565b6040516105229190612ec8565b60405180910390f35b610533611288565b60405161054091906128bd565b60405180910390f35b610563600480360381019061055e9190612ff7565b6112d9565b005b61057f600480360381019061057a919061313d565b61133b565b005b61059b600480360381019061059691906129c9565b6113e2565b6040516105a89190612971565b60405180910390f35b6105cb60048036038101906105c691906131b5565b61148a565b6040516105d891906128bd565b60405180910390f35b6105fb60048036038101906105f691906131f5565b61151e565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610670575061066f826115a9565b5b9050919050565b6060600080546106869061326d565b80601f01602080910402602001604051908101604052809291908181526020018280546106b29061326d565b80156106ff5780601f106106d4576101008083540402835291602001916106ff565b820191906000526020600020905b8154815290600101906020018083116106e257829003601f168201915b5050505050905090565b60006107148261168b565b610753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074a90613311565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061079982610def565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561080a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610801906133a3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108296116f7565b73ffffffffffffffffffffffffffffffffffffffff1614806108585750610857816108526116f7565b61148a565b5b610897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088e90613435565b60405180910390fd5b6108a183836116ff565b505050565b6000600980549050905090565b6108c46108be6116f7565b826117b8565b610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fa906134c7565b60405180910390fd5b61090e838383611896565b505050565b600061091e83610ef9565b821061095f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095690613559565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a09610d2e565b610a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3f906135eb565b60405180910390fd5b60005b8151811015610a8957610a7883838381518110610a6b57610a6a61360b565b5b6020026020010151610a8e565b80610a8290613669565b9050610a4b565b505050565b610a96610d2e565b610ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acc906135eb565b60405180910390fd5b610adf8282611afd565b808273ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688560405160405180910390a35050565b610b42838383604051806020016040528060008152506112d9565b505050565b610b4f610d2e565b610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b85906135eb565b60405180910390fd5b610b9781611cd7565b50565b6000610ba46108a6565b8210610be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdc90613724565b60405180910390fd5b60098281548110610bf957610bf861360b565b5b90600052602060002001549050919050565b610c1361108e565b610c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c49906137b6565b60405180910390fd5b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610c84826001610fb1565b610c8f816000610fb1565b81600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8934ce4adea8d9ce0d714d2c22b86790e41b7731c84b926fbbdc1d40ff6533c960405160405180910390a35050565b6000610d3861108e565b80610d895750600b600c6000610d4c6116f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b905090565b610d9661108e565b610dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcc906137b6565b60405180910390fd5b8060029080519060200190610deb929190612766565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8f90613848565b60405180910390fd5b80915050919050565b60606009805480602002602001604051908101604052809291908181526020018280548015610eef57602002820191906000526020600020905b815481526020019060010190808311610edb575b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f61906138da565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fb961108e565b610ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fef906137b6565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167f65efeaf737ce094d287661b6a56bb530dce1fc30853708d1912a74f8ae65ffbb826040516110829190612acd565b60405180910390a25050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166110d16116f7565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600180546110fc9061326d565b80601f01602080910402602001604051908101604052809291908181526020018280546111289061326d565b80156111755780601f1061114a57610100808354040283529160200191611175565b820191906000526020600020905b81548152906001019060200180831161115857829003601f168201915b5050505050905090565b61119161118a6116f7565b8383611df4565b5050565b606060006111a283610ef9565b905060008167ffffffffffffffff8111156111c0576111bf612b6d565b5b6040519080825280602002602001820160405280156111ee5781602001602082028036833780820191505090505b50905060005b8281101561127d57600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828152602001908152602001600020548282815181106112605761125f61360b565b5b6020026020010181815250508061127690613669565b90506111f4565b508092505050919050565b60006001600c60006112986116f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414905090565b6112ea6112e46116f7565b836117b8565b611329576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611320906134c7565b60405180910390fd5b61133584848484611f61565b50505050565b611343610d2e565b611382576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611379906135eb565b60405180910390fd5b60005b81518110156113dd576113cc8382815181106113a4576113a361360b565b5b60200260200101518383815181106113bf576113be61360b565b5b6020026020010151610a8e565b806113d690613669565b9050611385565b505050565b60606113ed8261168b565b61142c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114239061396c565b60405180910390fd5b60006002805461143b9061326d565b9050116114575760405180602001604052806000815250611483565b600261146283611fbd565b604051602001611473929190613a5c565b6040516020818303038152906040525b9050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611526610d2e565b611565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155c906135eb565b60405180910390fd5b60005b81518110156115a5576115948282815181106115875761158661360b565b5b6020026020010151611cd7565b8061159e90613669565b9050611568565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061167457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061168457506116838261211e565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661177283610def565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006117c38261168b565b611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f990613af2565b60405180910390fd5b600061180d83610def565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061187c57508373ffffffffffffffffffffffffffffffffffffffff1661186484610709565b73ffffffffffffffffffffffffffffffffffffffff16145b8061188d575061188c818561148a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166118b682610def565b73ffffffffffffffffffffffffffffffffffffffff161461190c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190390613b84565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561197c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197390613c16565b60405180910390fd5b611987838383612188565b6119926000826116ff565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119e29190613c36565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a399190613c6a565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611af883838361229c565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6490613d0c565b60405180910390fd5b611b768161168b565b15611bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bad90613d78565b60405180910390fd5b611bc260008383612188565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c129190613c6a565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611cd36000838361229c565b5050565b6000611ce282610def565b9050611cf081600084612188565b611cfb6000836116ff565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d4b9190613c36565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611df08160008461229c565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5a90613de4565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f5491906128bd565b60405180910390a3505050565b611f6c848484611896565b611f78848484846122a1565b611fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fae90613e76565b60405180910390fd5b50505050565b60606000821415612005576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612119565b600082905060005b6000821461203757808061202090613669565b915050600a826120309190613ec5565b915061200d565b60008167ffffffffffffffff81111561205357612052612b6d565b5b6040519080825280601f01601f1916602001820160405280156120855781602001600182028036833780820191505090505b5090505b600085146121125760018261209e9190613c36565b9150600a856120ad9190613ef6565b60306120b99190613c6a565b60f81b8183815181106120cf576120ce61360b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561210b9190613ec5565b9450612089565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612193838383612438565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121d6576121d18161243d565b612215565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612214576122138382612486565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561225857612253816125f3565b612297565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146122965761229582826126c4565b5b5b505050565b505050565b60006122c28473ffffffffffffffffffffffffffffffffffffffff16612743565b1561242b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122eb6116f7565b8786866040518563ffffffff1660e01b815260040161230d9493929190613f7c565b602060405180830381600087803b15801561232757600080fd5b505af192505050801561235857506040513d601f19601f820116820180604052508101906123559190613fdd565b60015b6123db573d8060008114612388576040519150601f19603f3d011682016040523d82523d6000602084013e61238d565b606091505b506000815114156123d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ca90613e76565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612430565b600190505b949350505050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161249384610ef9565b61249d9190613c36565b9050600060086000848152602001908152602001600020549050818114612582576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016009805490506126079190613c36565b90506000600a60008481526020019081526020016000205490506000600983815481106126375761263661360b565b5b9060005260206000200154905080600983815481106126595761265861360b565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a60008581526020019081526020016000206000905560098054806126a8576126a761400a565b5b6001900381819060005260206000200160009055905550505050565b60006126cf83610ef9565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546127729061326d565b90600052602060002090601f01602090048101928261279457600085556127db565b82601f106127ad57805160ff19168380011785556127db565b828001600101855582156127db579182015b828111156127da5782518255916020019190600101906127bf565b5b5090506127e891906127ec565b5090565b5b808211156128055760008160009055506001016127ed565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6128528161281d565b811461285d57600080fd5b50565b60008135905061286f81612849565b92915050565b60006020828403121561288b5761288a612813565b5b600061289984828501612860565b91505092915050565b60008115159050919050565b6128b7816128a2565b82525050565b60006020820190506128d260008301846128ae565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156129125780820151818401526020810190506128f7565b83811115612921576000848401525b50505050565b6000601f19601f8301169050919050565b6000612943826128d8565b61294d81856128e3565b935061295d8185602086016128f4565b61296681612927565b840191505092915050565b6000602082019050818103600083015261298b8184612938565b905092915050565b6000819050919050565b6129a681612993565b81146129b157600080fd5b50565b6000813590506129c38161299d565b92915050565b6000602082840312156129df576129de612813565b5b60006129ed848285016129b4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a21826129f6565b9050919050565b612a3181612a16565b82525050565b6000602082019050612a4c6000830184612a28565b92915050565b612a5b81612a16565b8114612a6657600080fd5b50565b600081359050612a7881612a52565b92915050565b60008060408385031215612a9557612a94612813565b5b6000612aa385828601612a69565b9250506020612ab4858286016129b4565b9150509250929050565b612ac781612993565b82525050565b6000602082019050612ae26000830184612abe565b92915050565b600080600060608486031215612b0157612b00612813565b5b6000612b0f86828701612a69565b9350506020612b2086828701612a69565b9250506040612b31868287016129b4565b9150509250925092565b600060208284031215612b5157612b50612813565b5b6000612b5f84828501612a69565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ba582612927565b810181811067ffffffffffffffff82111715612bc457612bc3612b6d565b5b80604052505050565b6000612bd7612809565b9050612be38282612b9c565b919050565b600067ffffffffffffffff821115612c0357612c02612b6d565b5b602082029050602081019050919050565b600080fd5b6000612c2c612c2784612be8565b612bcd565b90508083825260208201905060208402830185811115612c4f57612c4e612c14565b5b835b81811015612c785780612c6488826129b4565b845260208401935050602081019050612c51565b5050509392505050565b600082601f830112612c9757612c96612b68565b5b8135612ca7848260208601612c19565b91505092915050565b60008060408385031215612cc757612cc6612813565b5b6000612cd585828601612a69565b925050602083013567ffffffffffffffff811115612cf657612cf5612818565b5b612d0285828601612c82565b9150509250929050565b600080fd5b600067ffffffffffffffff821115612d2c57612d2b612b6d565b5b612d3582612927565b9050602081019050919050565b82818337600083830152505050565b6000612d64612d5f84612d11565b612bcd565b905082815260208101848484011115612d8057612d7f612d0c565b5b612d8b848285612d42565b509392505050565b600082601f830112612da857612da7612b68565b5b8135612db8848260208601612d51565b91505092915050565b600060208284031215612dd757612dd6612813565b5b600082013567ffffffffffffffff811115612df557612df4612818565b5b612e0184828501612d93565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612e3f81612993565b82525050565b6000612e518383612e36565b60208301905092915050565b6000602082019050919050565b6000612e7582612e0a565b612e7f8185612e15565b9350612e8a83612e26565b8060005b83811015612ebb578151612ea28882612e45565b9750612ead83612e5d565b925050600181019050612e8e565b5085935050505092915050565b60006020820190508181036000830152612ee28184612e6a565b905092915050565b612ef3816128a2565b8114612efe57600080fd5b50565b600081359050612f1081612eea565b92915050565b60008060408385031215612f2d57612f2c612813565b5b6000612f3b85828601612a69565b9250506020612f4c85828601612f01565b9150509250929050565b600067ffffffffffffffff821115612f7157612f70612b6d565b5b612f7a82612927565b9050602081019050919050565b6000612f9a612f9584612f56565b612bcd565b905082815260208101848484011115612fb657612fb5612d0c565b5b612fc1848285612d42565b509392505050565b600082601f830112612fde57612fdd612b68565b5b8135612fee848260208601612f87565b91505092915050565b6000806000806080858703121561301157613010612813565b5b600061301f87828801612a69565b945050602061303087828801612a69565b9350506040613041878288016129b4565b925050606085013567ffffffffffffffff81111561306257613061612818565b5b61306e87828801612fc9565b91505092959194509250565b600067ffffffffffffffff82111561309557613094612b6d565b5b602082029050602081019050919050565b60006130b96130b48461307a565b612bcd565b905080838252602082019050602084028301858111156130dc576130db612c14565b5b835b8181101561310557806130f18882612a69565b8452602084019350506020810190506130de565b5050509392505050565b600082601f83011261312457613123612b68565b5b81356131348482602086016130a6565b91505092915050565b6000806040838503121561315457613153612813565b5b600083013567ffffffffffffffff81111561317257613171612818565b5b61317e8582860161310f565b925050602083013567ffffffffffffffff81111561319f5761319e612818565b5b6131ab85828601612c82565b9150509250929050565b600080604083850312156131cc576131cb612813565b5b60006131da85828601612a69565b92505060206131eb85828601612a69565b9150509250929050565b60006020828403121561320b5761320a612813565b5b600082013567ffffffffffffffff81111561322957613228612818565b5b61323584828501612c82565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061328557607f821691505b602082108114156132995761329861323e565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006132fb602c836128e3565b91506133068261329f565b604082019050919050565b6000602082019050818103600083015261332a816132ee565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061338d6021836128e3565b915061339882613331565b604082019050919050565b600060208201905081810360008301526133bc81613380565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061341f6038836128e3565b915061342a826133c3565b604082019050919050565b6000602082019050818103600083015261344e81613412565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006134b16031836128e3565b91506134bc82613455565b604082019050919050565b600060208201905081810360008301526134e0816134a4565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613543602b836128e3565b915061354e826134e7565b604082019050919050565b6000602082019050818103600083015261357281613536565b9050919050565b7f4d656d62657268736970203a2063616c6c6572206973206e6f742061204d696e60008201527f7465720000000000000000000000000000000000000000000000000000000000602082015250565b60006135d56023836128e3565b91506135e082613579565b604082019050919050565b60006020820190508181036000830152613604816135c8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061367482612993565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156136a7576136a661363a565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b600061370e602c836128e3565b9150613719826136b2565b604082019050919050565b6000602082019050818103600083015261373d81613701565b9050919050565b7f4d656d62657273686970203a2063616c6c6572206973206e6f7420746865206f60008201527f776e657200000000000000000000000000000000000000000000000000000000602082015250565b60006137a06024836128e3565b91506137ab82613744565b604082019050919050565b600060208201905081810360008301526137cf81613793565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006138326029836128e3565b915061383d826137d6565b604082019050919050565b6000602082019050818103600083015261386181613825565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006138c4602a836128e3565b91506138cf82613868565b604082019050919050565b600060208201905081810360008301526138f3816138b7565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613956602f836128e3565b9150613961826138fa565b604082019050919050565b6000602082019050818103600083015261398581613949565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546139b98161326d565b6139c3818661398c565b945060018216600081146139de57600181146139ef57613a22565b60ff19831686528186019350613a22565b6139f885613997565b60005b83811015613a1a578154818901526001820191506020810190506139fb565b838801955050505b50505092915050565b6000613a36826128d8565b613a40818561398c565b9350613a508185602086016128f4565b80840191505092915050565b6000613a6882856139ac565b9150613a748284613a2b565b91508190509392505050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613adc602c836128e3565b9150613ae782613a80565b604082019050919050565b60006020820190508181036000830152613b0b81613acf565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000613b6e6025836128e3565b9150613b7982613b12565b604082019050919050565b60006020820190508181036000830152613b9d81613b61565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613c006024836128e3565b9150613c0b82613ba4565b604082019050919050565b60006020820190508181036000830152613c2f81613bf3565b9050919050565b6000613c4182612993565b9150613c4c83612993565b925082821015613c5f57613c5e61363a565b5b828203905092915050565b6000613c7582612993565b9150613c8083612993565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613cb557613cb461363a565b5b828201905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613cf66020836128e3565b9150613d0182613cc0565b602082019050919050565b60006020820190508181036000830152613d2581613ce9565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613d62601c836128e3565b9150613d6d82613d2c565b602082019050919050565b60006020820190508181036000830152613d9181613d55565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613dce6019836128e3565b9150613dd982613d98565b602082019050919050565b60006020820190508181036000830152613dfd81613dc1565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613e606032836128e3565b9150613e6b82613e04565b604082019050919050565b60006020820190508181036000830152613e8f81613e53565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ed082612993565b9150613edb83612993565b925082613eeb57613eea613e96565b5b828204905092915050565b6000613f0182612993565b9150613f0c83612993565b925082613f1c57613f1b613e96565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000613f4e82613f27565b613f588185613f32565b9350613f688185602086016128f4565b613f7181612927565b840191505092915050565b6000608082019050613f916000830187612a28565b613f9e6020830186612a28565b613fab6040830185612abe565b8181036060830152613fbd8184613f43565b905095945050505050565b600081519050613fd781612849565b92915050565b600060208284031215613ff357613ff2612813565b5b600061400184828501613fc8565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122005f8f9703e5967205c06add78ccbd97cf8facff8eb4c97c2aa04d7ac2a6c8dd664736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000184c6561677565206f66204b696e67646f6d7320474f4f4453000000000000000000000000000000000000000000000000000000000000000000000000000000044c4f4b4700000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): League of Kingdoms GOODS
Arg [1] : symbol (string): LOKG
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000018
Arg [3] : 4c6561677565206f66204b696e67646f6d7320474f4f44530000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [5] : 4c4f4b4700000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
46451:1590:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38685:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25066:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26238:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25761:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39325:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26988:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38993:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46328:114;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47170:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46830:130;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27398:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47362:83;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39515:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45210:254;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46200:116;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46736:88;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24760:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47627:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24490:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45472:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45753:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25235:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26531:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47728:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45972:101;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27654:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46966:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25410:289;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26757:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47451:170;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38685:224;38787:4;38826:35;38811:50;;;:11;:50;;;;:90;;;;38865:36;38889:11;38865:23;:36::i;:::-;38811:90;38804:97;;38685:224;;;:::o;25066:100::-;25120:13;25153:5;25146:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25066:100;:::o;26238:221::-;26314:7;26342:16;26350:7;26342;:16::i;:::-;26334:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26427:15;:24;26443:7;26427:24;;;;;;;;;;;;;;;;;;;;;26420:31;;26238:221;;;:::o;25761:411::-;25842:13;25858:23;25873:7;25858:14;:23::i;:::-;25842:39;;25906:5;25900:11;;:2;:11;;;;25892:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26000:5;25984:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26009:37;26026:5;26033:12;:10;:12::i;:::-;26009:16;:37::i;:::-;25984:62;25962:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26143:21;26152:2;26156:7;26143:8;:21::i;:::-;25831:341;25761:411;;:::o;39325:113::-;39386:7;39413:10;:17;;;;39406:24;;39325:113;:::o;26988:339::-;27183:41;27202:12;:10;:12::i;:::-;27216:7;27183:18;:41::i;:::-;27175:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27291:28;27301:4;27307:2;27311:7;27291:9;:28::i;:::-;26988:339;;;:::o;38993:256::-;39090:7;39126:23;39143:5;39126:16;:23::i;:::-;39118:5;:31;39110:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39215:12;:19;39228:5;39215:19;;;;;;;;;;;;;;;:26;39235:5;39215:26;;;;;;;;;;;;39208:33;;38993:256;;;;:::o;46328:114::-;46389:7;46415:10;:19;46426:7;46415:19;;;;;;;;;;;;;;;;46408:26;;46328:114;;;:::o;47170:186::-;46122:10;:8;:10::i;:::-;46114:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;47260:9:::1;47255:94;47279:8;:15;47275:1;:19;47255:94;;;47316:21;47321:2;47325:8;47334:1;47325:11;;;;;;;;:::i;:::-;;;;;;;;47316:4;:21::i;:::-;47296:3;;;;:::i;:::-;;;47255:94;;;;47170:186:::0;;:::o;46830:130::-;46122:10;:8;:10::i;:::-;46114:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;46901:18:::1;46907:2;46911:7;46901:5;:18::i;:::-;46944:7;46940:2;46935:17;;;;;;;;;;;;46830:130:::0;;:::o;27398:185::-;27536:39;27553:4;27559:2;27563:7;27536:39;;;;;;;;;;;;:16;:39::i;:::-;27398:185;;;:::o;47362:83::-;46122:10;:8;:10::i;:::-;46114:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;47423:14:::1;47429:7;47423:5;:14::i;:::-;47362:83:::0;:::o;39515:233::-;39590:7;39626:30;:28;:30::i;:::-;39618:5;:38;39610:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39723:10;39734:5;39723:17;;;;;;;;:::i;:::-;;;;;;;;;;39716:24;;39515:233;;;:::o;45210:254::-;45675:9;:7;:9::i;:::-;45667:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;45279:16:::1;45298:5;;;;;;;;;;;45279:24;;45314:26;45328:8;45338:1;45314:13;:26::i;:::-;45351;45365:8;45375:1;45351:13;:26::i;:::-;45396:8;45388:5;;:16;;;;;;;;;;;;;;;;;;45447:8;45420:36;;45437:8;45420:36;;;;;;;;;;;;45268:196;45210:254:::0;:::o;46200:116::-;46241:4;46265:9;:7;:9::i;:::-;:43;;;;46306:2;46278:10;:24;46289:12;:10;:12::i;:::-;46278:24;;;;;;;;;;;;;;;;:30;46265:43;46258:50;;46200:116;:::o;46736:88::-;45675:9;:7;:9::i;:::-;45667:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;46813:3:::1;46803:7;:13;;;;;;;;;;;;:::i;:::-;;46736:88:::0;:::o;24760:239::-;24832:7;24852:13;24868:7;:16;24876:7;24868:16;;;;;;;;;;;;;;;;;;;;;24852:32;;24920:1;24903:19;;:5;:19;;;;24895:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24986:5;24979:12;;;24760:239;;;:::o;47627:95::-;47669:16;47704:10;47697:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47627:95;:::o;24490:208::-;24562:7;24607:1;24590:19;;:5;:19;;;;24582:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24674:9;:16;24684:5;24674:16;;;;;;;;;;;;;;;;24667:23;;24490:208;;;:::o;45472:155::-;45675:9;:7;:9::i;:::-;45667:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;45569:5:::1;45551:10;:15;45562:3;45551:15;;;;;;;;;;;;;;;:23;;;;45608:3;45590:29;;;45613:5;45590:29;;;;;;:::i;:::-;;;;;;;;45472:155:::0;;:::o;45753:93::-;45793:4;45833:5;;;;;;;;;;;45817:21;;:12;:10;:12::i;:::-;:21;;;45810:28;;45753:93;:::o;25235:104::-;25291:13;25324:7;25317:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25235:104;:::o;26531:155::-;26626:52;26645:12;:10;:12::i;:::-;26659:8;26669;26626:18;:52::i;:::-;26531:155;;:::o;47728:310::-;47785:16;47813:14;47830:16;47840:5;47830:9;:16::i;:::-;47813:33;;47857:23;47897:6;47883:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47857:47;;47919:9;47915:92;47934:6;47932:1;:8;47915:92;;;47973:12;:19;47986:5;47973:19;;;;;;;;;;;;;;;:22;47993:1;47973:22;;;;;;;;;;;;47961:6;47968:1;47961:9;;;;;;;;:::i;:::-;;;;;;;:34;;;;;47942:3;;;;:::i;:::-;;;47915:92;;;;48024:6;48017:13;;;;47728:310;;;:::o;45972:101::-;46012:4;46064:1;46036:10;:24;46047:12;:10;:12::i;:::-;46036:24;;;;;;;;;;;;;;;;:29;46029:36;;45972:101;:::o;27654:328::-;27829:41;27848:12;:10;:12::i;:::-;27862:7;27829:18;:41::i;:::-;27821:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27935:39;27949:4;27955:2;27959:7;27968:5;27935:13;:39::i;:::-;27654:328;;;;:::o;46966:198::-;46122:10;:8;:10::i;:::-;46114:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;47064:9:::1;47059:98;47083:8;:15;47079:1;:19;47059:98;;;47120:25;47125:3;47129:1;47125:6;;;;;;;;:::i;:::-;;;;;;;;47133:8;47142:1;47133:11;;;;;;;;:::i;:::-;;;;;;;;47120:4;:25::i;:::-;47100:3;;;;:::i;:::-;;;47059:98;;;;46966:198:::0;;:::o;25410:289::-;25483:13;25517:16;25525:7;25517;:16::i;:::-;25509:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25629:1;25611:7;25605:21;;;;;:::i;:::-;;;:25;:86;;;;;;;;;;;;;;;;;25657:7;25666:18;:7;:16;:18::i;:::-;25640:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25605:86;25598:93;;25410:289;;;:::o;26757:164::-;26854:4;26878:18;:25;26897:5;26878:25;;;;;;;;;;;;;;;:35;26904:8;26878:35;;;;;;;;;;;;;;;;;;;;;;;;;26871:42;;26757:164;;;;:::o;47451:170::-;46122:10;:8;:10::i;:::-;46114:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;47528:9:::1;47523:91;47547:8;:15;47543:1;:19;47523:91;;;47584:18;47590:8;47599:1;47590:11;;;;;;;;:::i;:::-;;;;;;;;47584:5;:18::i;:::-;47564:3;;;;:::i;:::-;;;47523:91;;;;47451:170:::0;:::o;24121:305::-;24223:4;24275:25;24260:40;;;:11;:40;;;;:105;;;;24332:33;24317:48;;;:11;:48;;;;24260:105;:158;;;;24382:36;24406:11;24382:23;:36::i;:::-;24260:158;24240:178;;24121:305;;;:::o;29492:127::-;29557:4;29609:1;29581:30;;:7;:16;29589:7;29581:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29574:37;;29492:127;;;:::o;19629:98::-;19682:7;19709:10;19702:17;;19629:98;:::o;33638:174::-;33740:2;33713:15;:24;33729:7;33713:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33796:7;33792:2;33758:46;;33767:23;33782:7;33767:14;:23::i;:::-;33758:46;;;;;;;;;;;;33638:174;;:::o;29786:348::-;29879:4;29904:16;29912:7;29904;:16::i;:::-;29896:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29980:13;29996:23;30011:7;29996:14;:23::i;:::-;29980:39;;30049:5;30038:16;;:7;:16;;;:51;;;;30082:7;30058:31;;:20;30070:7;30058:11;:20::i;:::-;:31;;;30038:51;:87;;;;30093:32;30110:5;30117:7;30093:16;:32::i;:::-;30038:87;30030:96;;;29786:348;;;;:::o;32895:625::-;33054:4;33027:31;;:23;33042:7;33027:14;:23::i;:::-;:31;;;33019:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;33133:1;33119:16;;:2;:16;;;;33111:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33189:39;33210:4;33216:2;33220:7;33189:20;:39::i;:::-;33293:29;33310:1;33314:7;33293:8;:29::i;:::-;33354:1;33335:9;:15;33345:4;33335:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33383:1;33366:9;:13;33376:2;33366:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33414:2;33395:7;:16;33403:7;33395:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33453:7;33449:2;33434:27;;33443:4;33434:27;;;;;;;;;;;;33474:38;33494:4;33500:2;33504:7;33474:19;:38::i;:::-;32895:625;;;:::o;31470:439::-;31564:1;31550:16;;:2;:16;;;;31542:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31623:16;31631:7;31623;:16::i;:::-;31622:17;31614:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31685:45;31714:1;31718:2;31722:7;31685:20;:45::i;:::-;31760:1;31743:9;:13;31753:2;31743:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31791:2;31772:7;:16;31780:7;31772:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31836:7;31832:2;31811:33;;31828:1;31811:33;;;;;;;;;;;;31857:44;31885:1;31889:2;31893:7;31857:19;:44::i;:::-;31470:439;;:::o;32138:420::-;32198:13;32214:23;32229:7;32214:14;:23::i;:::-;32198:39;;32250:48;32271:5;32286:1;32290:7;32250:20;:48::i;:::-;32339:29;32356:1;32360:7;32339:8;:29::i;:::-;32401:1;32381:9;:16;32391:5;32381:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;32420:7;:16;32428:7;32420:16;;;;;;;;;;;;32413:23;;;;;;;;;;;32482:7;32478:1;32454:36;;32463:5;32454:36;;;;;;;;;;;;32503:47;32523:5;32538:1;32542:7;32503:19;:47::i;:::-;32187:371;32138:420;:::o;33954:315::-;34109:8;34100:17;;:5;:17;;;;34092:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;34196:8;34158:18;:25;34177:5;34158:25;;;;;;;;;;;;;;;:35;34184:8;34158:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34242:8;34220:41;;34235:5;34220:41;;;34252:8;34220:41;;;;;;:::i;:::-;;;;;;;;33954:315;;;:::o;28864:::-;29021:28;29031:4;29037:2;29041:7;29021:9;:28::i;:::-;29068:48;29091:4;29097:2;29101:7;29110:5;29068:22;:48::i;:::-;29060:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28864:315;;;;:::o;20123:723::-;20179:13;20409:1;20400:5;:10;20396:53;;;20427:10;;;;;;;;;;;;;;;;;;;;;20396:53;20459:12;20474:5;20459:20;;20490:14;20515:78;20530:1;20522:4;:9;20515:78;;20548:8;;;;;:::i;:::-;;;;20579:2;20571:10;;;;;:::i;:::-;;;20515:78;;;20603:19;20635:6;20625:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20603:39;;20653:154;20669:1;20660:5;:10;20653:154;;20697:1;20687:11;;;;;:::i;:::-;;;20764:2;20756:5;:10;;;;:::i;:::-;20743:2;:24;;;;:::i;:::-;20730:39;;20713:6;20720;20713:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;20793:2;20784:11;;;;;:::i;:::-;;;20653:154;;;20831:6;20817:21;;;;;20123:723;;;;:::o;22647:157::-;22732:4;22771:25;22756:40;;;:11;:40;;;;22749:47;;22647:157;;;:::o;40361:589::-;40505:45;40532:4;40538:2;40542:7;40505:26;:45::i;:::-;40583:1;40567:18;;:4;:18;;;40563:187;;;40602:40;40634:7;40602:31;:40::i;:::-;40563:187;;;40672:2;40664:10;;:4;:10;;;40660:90;;40691:47;40724:4;40730:7;40691:32;:47::i;:::-;40660:90;40563:187;40778:1;40764:16;;:2;:16;;;40760:183;;;40797:45;40834:7;40797:36;:45::i;:::-;40760:183;;;40870:4;40864:10;;:2;:10;;;40860:83;;40891:40;40919:2;40923:7;40891:27;:40::i;:::-;40860:83;40760:183;40361:589;;;:::o;36716:125::-;;;;:::o;34834:799::-;34989:4;35010:15;:2;:13;;;:15::i;:::-;35006:620;;;35062:2;35046:36;;;35083:12;:10;:12::i;:::-;35097:4;35103:7;35112:5;35046:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35042:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35305:1;35288:6;:13;:18;35284:272;;;35331:60;;;;;;;;;;:::i;:::-;;;;;;;;35284:272;35506:6;35500:13;35491:6;35487:2;35483:15;35476:38;35042:529;35179:41;;;35169:51;;;:6;:51;;;;35162:58;;;;;35006:620;35610:4;35603:11;;34834:799;;;;;;;:::o;36205:126::-;;;;:::o;41673:164::-;41777:10;:17;;;;41750:15;:24;41766:7;41750:24;;;;;;;;;;;:44;;;;41805:10;41821:7;41805:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41673:164;:::o;42464:988::-;42730:22;42780:1;42755:22;42772:4;42755:16;:22::i;:::-;:26;;;;:::i;:::-;42730:51;;42792:18;42813:17;:26;42831:7;42813:26;;;;;;;;;;;;42792:47;;42960:14;42946:10;:28;42942:328;;42991:19;43013:12;:18;43026:4;43013:18;;;;;;;;;;;;;;;:34;43032:14;43013:34;;;;;;;;;;;;42991:56;;43097:11;43064:12;:18;43077:4;43064:18;;;;;;;;;;;;;;;:30;43083:10;43064:30;;;;;;;;;;;:44;;;;43214:10;43181:17;:30;43199:11;43181:30;;;;;;;;;;;:43;;;;42976:294;42942:328;43366:17;:26;43384:7;43366:26;;;;;;;;;;;43359:33;;;43410:12;:18;43423:4;43410:18;;;;;;;;;;;;;;;:34;43429:14;43410:34;;;;;;;;;;;43403:41;;;42545:907;;42464:988;;:::o;43747:1079::-;44000:22;44045:1;44025:10;:17;;;;:21;;;;:::i;:::-;44000:46;;44057:18;44078:15;:24;44094:7;44078:24;;;;;;;;;;;;44057:45;;44429:19;44451:10;44462:14;44451:26;;;;;;;;:::i;:::-;;;;;;;;;;44429:48;;44515:11;44490:10;44501;44490:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;44626:10;44595:15;:28;44611:11;44595:28;;;;;;;;;;;:41;;;;44767:15;:24;44783:7;44767:24;;;;;;;;;;;44760:31;;;44802:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43818:1008;;;43747:1079;:::o;41251:221::-;41336:14;41353:20;41370:2;41353:16;:20::i;:::-;41336:37;;41411:7;41384:12;:16;41397:2;41384:16;;;;;;;;;;;;;;;:24;41401:6;41384:24;;;;;;;;;;;:34;;;;41458:6;41429:17;:26;41447:7;41429:26;;;;;;;;;;;:35;;;;41325:147;41251:221;;:::o;11765:326::-;11825:4;12082:1;12060:7;:19;;;:23;12053:30;;11765:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:329::-;5974:6;6023:2;6011:9;6002:7;5998:23;5994:32;5991:119;;;6029:79;;:::i;:::-;5991:119;6149:1;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6120:117;5915:329;;;;:::o;6250:117::-;6359:1;6356;6349:12;6373:180;6421:77;6418:1;6411:88;6518:4;6515:1;6508:15;6542:4;6539:1;6532:15;6559:281;6642:27;6664:4;6642:27;:::i;:::-;6634:6;6630:40;6772:6;6760:10;6757:22;6736:18;6724:10;6721:34;6718:62;6715:88;;;6783:18;;:::i;:::-;6715:88;6823:10;6819:2;6812:22;6602:238;6559:281;;:::o;6846:129::-;6880:6;6907:20;;:::i;:::-;6897:30;;6936:33;6964:4;6956:6;6936:33;:::i;:::-;6846:129;;;:::o;6981:311::-;7058:4;7148:18;7140:6;7137:30;7134:56;;;7170:18;;:::i;:::-;7134:56;7220:4;7212:6;7208:17;7200:25;;7280:4;7274;7270:15;7262:23;;6981:311;;;:::o;7298:117::-;7407:1;7404;7397:12;7438:710;7534:5;7559:81;7575:64;7632:6;7575:64;:::i;:::-;7559:81;:::i;:::-;7550:90;;7660:5;7689:6;7682:5;7675:21;7723:4;7716:5;7712:16;7705:23;;7776:4;7768:6;7764:17;7756:6;7752:30;7805:3;7797:6;7794:15;7791:122;;;7824:79;;:::i;:::-;7791:122;7939:6;7922:220;7956:6;7951:3;7948:15;7922:220;;;8031:3;8060:37;8093:3;8081:10;8060:37;:::i;:::-;8055:3;8048:50;8127:4;8122:3;8118:14;8111:21;;7998:144;7982:4;7977:3;7973:14;7966:21;;7922:220;;;7926:21;7540:608;;7438:710;;;;;:::o;8171:370::-;8242:5;8291:3;8284:4;8276:6;8272:17;8268:27;8258:122;;8299:79;;:::i;:::-;8258:122;8416:6;8403:20;8441:94;8531:3;8523:6;8516:4;8508:6;8504:17;8441:94;:::i;:::-;8432:103;;8248:293;8171:370;;;;:::o;8547:684::-;8640:6;8648;8697:2;8685:9;8676:7;8672:23;8668:32;8665:119;;;8703:79;;:::i;:::-;8665:119;8823:1;8848:53;8893:7;8884:6;8873:9;8869:22;8848:53;:::i;:::-;8838:63;;8794:117;8978:2;8967:9;8963:18;8950:32;9009:18;9001:6;8998:30;8995:117;;;9031:79;;:::i;:::-;8995:117;9136:78;9206:7;9197:6;9186:9;9182:22;9136:78;:::i;:::-;9126:88;;8921:303;8547:684;;;;;:::o;9237:117::-;9346:1;9343;9336:12;9360:308;9422:4;9512:18;9504:6;9501:30;9498:56;;;9534:18;;:::i;:::-;9498:56;9572:29;9594:6;9572:29;:::i;:::-;9564:37;;9656:4;9650;9646:15;9638:23;;9360:308;;;:::o;9674:154::-;9758:6;9753:3;9748;9735:30;9820:1;9811:6;9806:3;9802:16;9795:27;9674:154;;;:::o;9834:412::-;9912:5;9937:66;9953:49;9995:6;9953:49;:::i;:::-;9937:66;:::i;:::-;9928:75;;10026:6;10019:5;10012:21;10064:4;10057:5;10053:16;10102:3;10093:6;10088:3;10084:16;10081:25;10078:112;;;10109:79;;:::i;:::-;10078:112;10199:41;10233:6;10228:3;10223;10199:41;:::i;:::-;9918:328;9834:412;;;;;:::o;10266:340::-;10322:5;10371:3;10364:4;10356:6;10352:17;10348:27;10338:122;;10379:79;;:::i;:::-;10338:122;10496:6;10483:20;10521:79;10596:3;10588:6;10581:4;10573:6;10569:17;10521:79;:::i;:::-;10512:88;;10328:278;10266:340;;;;:::o;10612:509::-;10681:6;10730:2;10718:9;10709:7;10705:23;10701:32;10698:119;;;10736:79;;:::i;:::-;10698:119;10884:1;10873:9;10869:17;10856:31;10914:18;10906:6;10903:30;10900:117;;;10936:79;;:::i;:::-;10900:117;11041:63;11096:7;11087:6;11076:9;11072:22;11041:63;:::i;:::-;11031:73;;10827:287;10612:509;;;;:::o;11127:114::-;11194:6;11228:5;11222:12;11212:22;;11127:114;;;:::o;11247:184::-;11346:11;11380:6;11375:3;11368:19;11420:4;11415:3;11411:14;11396:29;;11247:184;;;;:::o;11437:132::-;11504:4;11527:3;11519:11;;11557:4;11552:3;11548:14;11540:22;;11437:132;;;:::o;11575:108::-;11652:24;11670:5;11652:24;:::i;:::-;11647:3;11640:37;11575:108;;:::o;11689:179::-;11758:10;11779:46;11821:3;11813:6;11779:46;:::i;:::-;11857:4;11852:3;11848:14;11834:28;;11689:179;;;;:::o;11874:113::-;11944:4;11976;11971:3;11967:14;11959:22;;11874:113;;;:::o;12023:732::-;12142:3;12171:54;12219:5;12171:54;:::i;:::-;12241:86;12320:6;12315:3;12241:86;:::i;:::-;12234:93;;12351:56;12401:5;12351:56;:::i;:::-;12430:7;12461:1;12446:284;12471:6;12468:1;12465:13;12446:284;;;12547:6;12541:13;12574:63;12633:3;12618:13;12574:63;:::i;:::-;12567:70;;12660:60;12713:6;12660:60;:::i;:::-;12650:70;;12506:224;12493:1;12490;12486:9;12481:14;;12446:284;;;12450:14;12746:3;12739:10;;12147:608;;;12023:732;;;;:::o;12761:373::-;12904:4;12942:2;12931:9;12927:18;12919:26;;12991:9;12985:4;12981:20;12977:1;12966:9;12962:17;12955:47;13019:108;13122:4;13113:6;13019:108;:::i;:::-;13011:116;;12761:373;;;;:::o;13140:116::-;13210:21;13225:5;13210:21;:::i;:::-;13203:5;13200:32;13190:60;;13246:1;13243;13236:12;13190:60;13140:116;:::o;13262:133::-;13305:5;13343:6;13330:20;13321:29;;13359:30;13383:5;13359:30;:::i;:::-;13262:133;;;;:::o;13401:468::-;13466:6;13474;13523:2;13511:9;13502:7;13498:23;13494:32;13491:119;;;13529:79;;:::i;:::-;13491:119;13649:1;13674:53;13719:7;13710:6;13699:9;13695:22;13674:53;:::i;:::-;13664:63;;13620:117;13776:2;13802:50;13844:7;13835:6;13824:9;13820:22;13802:50;:::i;:::-;13792:60;;13747:115;13401:468;;;;;:::o;13875:307::-;13936:4;14026:18;14018:6;14015:30;14012:56;;;14048:18;;:::i;:::-;14012:56;14086:29;14108:6;14086:29;:::i;:::-;14078:37;;14170:4;14164;14160:15;14152:23;;13875:307;;;:::o;14188:410::-;14265:5;14290:65;14306:48;14347:6;14306:48;:::i;:::-;14290:65;:::i;:::-;14281:74;;14378:6;14371:5;14364:21;14416:4;14409:5;14405:16;14454:3;14445:6;14440:3;14436:16;14433:25;14430:112;;;14461:79;;:::i;:::-;14430:112;14551:41;14585:6;14580:3;14575;14551:41;:::i;:::-;14271:327;14188:410;;;;;:::o;14617:338::-;14672:5;14721:3;14714:4;14706:6;14702:17;14698:27;14688:122;;14729:79;;:::i;:::-;14688:122;14846:6;14833:20;14871:78;14945:3;14937:6;14930:4;14922:6;14918:17;14871:78;:::i;:::-;14862:87;;14678:277;14617:338;;;;:::o;14961:943::-;15056:6;15064;15072;15080;15129:3;15117:9;15108:7;15104:23;15100:33;15097:120;;;15136:79;;:::i;:::-;15097:120;15256:1;15281:53;15326:7;15317:6;15306:9;15302:22;15281:53;:::i;:::-;15271:63;;15227:117;15383:2;15409:53;15454:7;15445:6;15434:9;15430:22;15409:53;:::i;:::-;15399:63;;15354:118;15511:2;15537:53;15582:7;15573:6;15562:9;15558:22;15537:53;:::i;:::-;15527:63;;15482:118;15667:2;15656:9;15652:18;15639:32;15698:18;15690:6;15687:30;15684:117;;;15720:79;;:::i;:::-;15684:117;15825:62;15879:7;15870:6;15859:9;15855:22;15825:62;:::i;:::-;15815:72;;15610:287;14961:943;;;;;;;:::o;15910:311::-;15987:4;16077:18;16069:6;16066:30;16063:56;;;16099:18;;:::i;:::-;16063:56;16149:4;16141:6;16137:17;16129:25;;16209:4;16203;16199:15;16191:23;;15910:311;;;:::o;16244:710::-;16340:5;16365:81;16381:64;16438:6;16381:64;:::i;:::-;16365:81;:::i;:::-;16356:90;;16466:5;16495:6;16488:5;16481:21;16529:4;16522:5;16518:16;16511:23;;16582:4;16574:6;16570:17;16562:6;16558:30;16611:3;16603:6;16600:15;16597:122;;;16630:79;;:::i;:::-;16597:122;16745:6;16728:220;16762:6;16757:3;16754:15;16728:220;;;16837:3;16866:37;16899:3;16887:10;16866:37;:::i;:::-;16861:3;16854:50;16933:4;16928:3;16924:14;16917:21;;16804:144;16788:4;16783:3;16779:14;16772:21;;16728:220;;;16732:21;16346:608;;16244:710;;;;;:::o;16977:370::-;17048:5;17097:3;17090:4;17082:6;17078:17;17074:27;17064:122;;17105:79;;:::i;:::-;17064:122;17222:6;17209:20;17247:94;17337:3;17329:6;17322:4;17314:6;17310:17;17247:94;:::i;:::-;17238:103;;17054:293;16977:370;;;;:::o;17353:894::-;17471:6;17479;17528:2;17516:9;17507:7;17503:23;17499:32;17496:119;;;17534:79;;:::i;:::-;17496:119;17682:1;17671:9;17667:17;17654:31;17712:18;17704:6;17701:30;17698:117;;;17734:79;;:::i;:::-;17698:117;17839:78;17909:7;17900:6;17889:9;17885:22;17839:78;:::i;:::-;17829:88;;17625:302;17994:2;17983:9;17979:18;17966:32;18025:18;18017:6;18014:30;18011:117;;;18047:79;;:::i;:::-;18011:117;18152:78;18222:7;18213:6;18202:9;18198:22;18152:78;:::i;:::-;18142:88;;17937:303;17353:894;;;;;:::o;18253:474::-;18321:6;18329;18378:2;18366:9;18357:7;18353:23;18349:32;18346:119;;;18384:79;;:::i;:::-;18346:119;18504:1;18529:53;18574:7;18565:6;18554:9;18550:22;18529:53;:::i;:::-;18519:63;;18475:117;18631:2;18657:53;18702:7;18693:6;18682:9;18678:22;18657:53;:::i;:::-;18647:63;;18602:118;18253:474;;;;;:::o;18733:539::-;18817:6;18866:2;18854:9;18845:7;18841:23;18837:32;18834:119;;;18872:79;;:::i;:::-;18834:119;19020:1;19009:9;19005:17;18992:31;19050:18;19042:6;19039:30;19036:117;;;19072:79;;:::i;:::-;19036:117;19177:78;19247:7;19238:6;19227:9;19223:22;19177:78;:::i;:::-;19167:88;;18963:302;18733:539;;;;:::o;19278:180::-;19326:77;19323:1;19316:88;19423:4;19420:1;19413:15;19447:4;19444:1;19437:15;19464:320;19508:6;19545:1;19539:4;19535:12;19525:22;;19592:1;19586:4;19582:12;19613:18;19603:81;;19669:4;19661:6;19657:17;19647:27;;19603:81;19731:2;19723:6;19720:14;19700:18;19697:38;19694:84;;;19750:18;;:::i;:::-;19694:84;19515:269;19464:320;;;:::o;19790:231::-;19930:34;19926:1;19918:6;19914:14;19907:58;19999:14;19994:2;19986:6;19982:15;19975:39;19790:231;:::o;20027:366::-;20169:3;20190:67;20254:2;20249:3;20190:67;:::i;:::-;20183:74;;20266:93;20355:3;20266:93;:::i;:::-;20384:2;20379:3;20375:12;20368:19;;20027:366;;;:::o;20399:419::-;20565:4;20603:2;20592:9;20588:18;20580:26;;20652:9;20646:4;20642:20;20638:1;20627:9;20623:17;20616:47;20680:131;20806:4;20680:131;:::i;:::-;20672:139;;20399:419;;;:::o;20824:220::-;20964:34;20960:1;20952:6;20948:14;20941:58;21033:3;21028:2;21020:6;21016:15;21009:28;20824:220;:::o;21050:366::-;21192:3;21213:67;21277:2;21272:3;21213:67;:::i;:::-;21206:74;;21289:93;21378:3;21289:93;:::i;:::-;21407:2;21402:3;21398:12;21391:19;;21050:366;;;:::o;21422:419::-;21588:4;21626:2;21615:9;21611:18;21603:26;;21675:9;21669:4;21665:20;21661:1;21650:9;21646:17;21639:47;21703:131;21829:4;21703:131;:::i;:::-;21695:139;;21422:419;;;:::o;21847:243::-;21987:34;21983:1;21975:6;21971:14;21964:58;22056:26;22051:2;22043:6;22039:15;22032:51;21847:243;:::o;22096:366::-;22238:3;22259:67;22323:2;22318:3;22259:67;:::i;:::-;22252:74;;22335:93;22424:3;22335:93;:::i;:::-;22453:2;22448:3;22444:12;22437:19;;22096:366;;;:::o;22468:419::-;22634:4;22672:2;22661:9;22657:18;22649:26;;22721:9;22715:4;22711:20;22707:1;22696:9;22692:17;22685:47;22749:131;22875:4;22749:131;:::i;:::-;22741:139;;22468:419;;;:::o;22893:236::-;23033:34;23029:1;23021:6;23017:14;23010:58;23102:19;23097:2;23089:6;23085:15;23078:44;22893:236;:::o;23135:366::-;23277:3;23298:67;23362:2;23357:3;23298:67;:::i;:::-;23291:74;;23374:93;23463:3;23374:93;:::i;:::-;23492:2;23487:3;23483:12;23476:19;;23135:366;;;:::o;23507:419::-;23673:4;23711:2;23700:9;23696:18;23688:26;;23760:9;23754:4;23750:20;23746:1;23735:9;23731:17;23724:47;23788:131;23914:4;23788:131;:::i;:::-;23780:139;;23507:419;;;:::o;23932:230::-;24072:34;24068:1;24060:6;24056:14;24049:58;24141:13;24136:2;24128:6;24124:15;24117:38;23932:230;:::o;24168:366::-;24310:3;24331:67;24395:2;24390:3;24331:67;:::i;:::-;24324:74;;24407:93;24496:3;24407:93;:::i;:::-;24525:2;24520:3;24516:12;24509:19;;24168:366;;;:::o;24540:419::-;24706:4;24744:2;24733:9;24729:18;24721:26;;24793:9;24787:4;24783:20;24779:1;24768:9;24764:17;24757:47;24821:131;24947:4;24821:131;:::i;:::-;24813:139;;24540:419;;;:::o;24965:222::-;25105:34;25101:1;25093:6;25089:14;25082:58;25174:5;25169:2;25161:6;25157:15;25150:30;24965:222;:::o;25193:366::-;25335:3;25356:67;25420:2;25415:3;25356:67;:::i;:::-;25349:74;;25432:93;25521:3;25432:93;:::i;:::-;25550:2;25545:3;25541:12;25534:19;;25193:366;;;:::o;25565:419::-;25731:4;25769:2;25758:9;25754:18;25746:26;;25818:9;25812:4;25808:20;25804:1;25793:9;25789:17;25782:47;25846:131;25972:4;25846:131;:::i;:::-;25838:139;;25565:419;;;:::o;25990:180::-;26038:77;26035:1;26028:88;26135:4;26132:1;26125:15;26159:4;26156:1;26149:15;26176:180;26224:77;26221:1;26214:88;26321:4;26318:1;26311:15;26345:4;26342:1;26335:15;26362:233;26401:3;26424:24;26442:5;26424:24;:::i;:::-;26415:33;;26470:66;26463:5;26460:77;26457:103;;;26540:18;;:::i;:::-;26457:103;26587:1;26580:5;26576:13;26569:20;;26362:233;;;:::o;26601:231::-;26741:34;26737:1;26729:6;26725:14;26718:58;26810:14;26805:2;26797:6;26793:15;26786:39;26601:231;:::o;26838:366::-;26980:3;27001:67;27065:2;27060:3;27001:67;:::i;:::-;26994:74;;27077:93;27166:3;27077:93;:::i;:::-;27195:2;27190:3;27186:12;27179:19;;26838:366;;;:::o;27210:419::-;27376:4;27414:2;27403:9;27399:18;27391:26;;27463:9;27457:4;27453:20;27449:1;27438:9;27434:17;27427:47;27491:131;27617:4;27491:131;:::i;:::-;27483:139;;27210:419;;;:::o;27635:223::-;27775:34;27771:1;27763:6;27759:14;27752:58;27844:6;27839:2;27831:6;27827:15;27820:31;27635:223;:::o;27864:366::-;28006:3;28027:67;28091:2;28086:3;28027:67;:::i;:::-;28020:74;;28103:93;28192:3;28103:93;:::i;:::-;28221:2;28216:3;28212:12;28205:19;;27864:366;;;:::o;28236:419::-;28402:4;28440:2;28429:9;28425:18;28417:26;;28489:9;28483:4;28479:20;28475:1;28464:9;28460:17;28453:47;28517:131;28643:4;28517:131;:::i;:::-;28509:139;;28236:419;;;:::o;28661:228::-;28801:34;28797:1;28789:6;28785:14;28778:58;28870:11;28865:2;28857:6;28853:15;28846:36;28661:228;:::o;28895:366::-;29037:3;29058:67;29122:2;29117:3;29058:67;:::i;:::-;29051:74;;29134:93;29223:3;29134:93;:::i;:::-;29252:2;29247:3;29243:12;29236:19;;28895:366;;;:::o;29267:419::-;29433:4;29471:2;29460:9;29456:18;29448:26;;29520:9;29514:4;29510:20;29506:1;29495:9;29491:17;29484:47;29548:131;29674:4;29548:131;:::i;:::-;29540:139;;29267:419;;;:::o;29692:229::-;29832:34;29828:1;29820:6;29816:14;29809:58;29901:12;29896:2;29888:6;29884:15;29877:37;29692:229;:::o;29927:366::-;30069:3;30090:67;30154:2;30149:3;30090:67;:::i;:::-;30083:74;;30166:93;30255:3;30166:93;:::i;:::-;30284:2;30279:3;30275:12;30268:19;;29927:366;;;:::o;30299:419::-;30465:4;30503:2;30492:9;30488:18;30480:26;;30552:9;30546:4;30542:20;30538:1;30527:9;30523:17;30516:47;30580:131;30706:4;30580:131;:::i;:::-;30572:139;;30299:419;;;:::o;30724:234::-;30864:34;30860:1;30852:6;30848:14;30841:58;30933:17;30928:2;30920:6;30916:15;30909:42;30724:234;:::o;30964:366::-;31106:3;31127:67;31191:2;31186:3;31127:67;:::i;:::-;31120:74;;31203:93;31292:3;31203:93;:::i;:::-;31321:2;31316:3;31312:12;31305:19;;30964:366;;;:::o;31336:419::-;31502:4;31540:2;31529:9;31525:18;31517:26;;31589:9;31583:4;31579:20;31575:1;31564:9;31560:17;31553:47;31617:131;31743:4;31617:131;:::i;:::-;31609:139;;31336:419;;;:::o;31761:148::-;31863:11;31900:3;31885:18;;31761:148;;;;:::o;31915:141::-;31964:4;31987:3;31979:11;;32010:3;32007:1;32000:14;32044:4;32041:1;32031:18;32023:26;;31915:141;;;:::o;32086:845::-;32189:3;32226:5;32220:12;32255:36;32281:9;32255:36;:::i;:::-;32307:89;32389:6;32384:3;32307:89;:::i;:::-;32300:96;;32427:1;32416:9;32412:17;32443:1;32438:137;;;;32589:1;32584:341;;;;32405:520;;32438:137;32522:4;32518:9;32507;32503:25;32498:3;32491:38;32558:6;32553:3;32549:16;32542:23;;32438:137;;32584:341;32651:38;32683:5;32651:38;:::i;:::-;32711:1;32725:154;32739:6;32736:1;32733:13;32725:154;;;32813:7;32807:14;32803:1;32798:3;32794:11;32787:35;32863:1;32854:7;32850:15;32839:26;;32761:4;32758:1;32754:12;32749:17;;32725:154;;;32908:6;32903:3;32899:16;32892:23;;32591:334;;32405:520;;32193:738;;32086:845;;;;:::o;32937:377::-;33043:3;33071:39;33104:5;33071:39;:::i;:::-;33126:89;33208:6;33203:3;33126:89;:::i;:::-;33119:96;;33224:52;33269:6;33264:3;33257:4;33250:5;33246:16;33224:52;:::i;:::-;33301:6;33296:3;33292:16;33285:23;;33047:267;32937:377;;;;:::o;33320:429::-;33497:3;33519:92;33607:3;33598:6;33519:92;:::i;:::-;33512:99;;33628:95;33719:3;33710:6;33628:95;:::i;:::-;33621:102;;33740:3;33733:10;;33320:429;;;;;:::o;33755:231::-;33895:34;33891:1;33883:6;33879:14;33872:58;33964:14;33959:2;33951:6;33947:15;33940:39;33755:231;:::o;33992:366::-;34134:3;34155:67;34219:2;34214:3;34155:67;:::i;:::-;34148:74;;34231:93;34320:3;34231:93;:::i;:::-;34349:2;34344:3;34340:12;34333:19;;33992:366;;;:::o;34364:419::-;34530:4;34568:2;34557:9;34553:18;34545:26;;34617:9;34611:4;34607:20;34603:1;34592:9;34588:17;34581:47;34645:131;34771:4;34645:131;:::i;:::-;34637:139;;34364:419;;;:::o;34789:224::-;34929:34;34925:1;34917:6;34913:14;34906:58;34998:7;34993:2;34985:6;34981:15;34974:32;34789:224;:::o;35019:366::-;35161:3;35182:67;35246:2;35241:3;35182:67;:::i;:::-;35175:74;;35258:93;35347:3;35258:93;:::i;:::-;35376:2;35371:3;35367:12;35360:19;;35019:366;;;:::o;35391:419::-;35557:4;35595:2;35584:9;35580:18;35572:26;;35644:9;35638:4;35634:20;35630:1;35619:9;35615:17;35608:47;35672:131;35798:4;35672:131;:::i;:::-;35664:139;;35391:419;;;:::o;35816:223::-;35956:34;35952:1;35944:6;35940:14;35933:58;36025:6;36020:2;36012:6;36008:15;36001:31;35816:223;:::o;36045:366::-;36187:3;36208:67;36272:2;36267:3;36208:67;:::i;:::-;36201:74;;36284:93;36373:3;36284:93;:::i;:::-;36402:2;36397:3;36393:12;36386:19;;36045:366;;;:::o;36417:419::-;36583:4;36621:2;36610:9;36606:18;36598:26;;36670:9;36664:4;36660:20;36656:1;36645:9;36641:17;36634:47;36698:131;36824:4;36698:131;:::i;:::-;36690:139;;36417:419;;;:::o;36842:191::-;36882:4;36902:20;36920:1;36902:20;:::i;:::-;36897:25;;36936:20;36954:1;36936:20;:::i;:::-;36931:25;;36975:1;36972;36969:8;36966:34;;;36980:18;;:::i;:::-;36966:34;37025:1;37022;37018:9;37010:17;;36842:191;;;;:::o;37039:305::-;37079:3;37098:20;37116:1;37098:20;:::i;:::-;37093:25;;37132:20;37150:1;37132:20;:::i;:::-;37127:25;;37286:1;37218:66;37214:74;37211:1;37208:81;37205:107;;;37292:18;;:::i;:::-;37205:107;37336:1;37333;37329:9;37322:16;;37039:305;;;;:::o;37350:182::-;37490:34;37486:1;37478:6;37474:14;37467:58;37350:182;:::o;37538:366::-;37680:3;37701:67;37765:2;37760:3;37701:67;:::i;:::-;37694:74;;37777:93;37866:3;37777:93;:::i;:::-;37895:2;37890:3;37886:12;37879:19;;37538:366;;;:::o;37910:419::-;38076:4;38114:2;38103:9;38099:18;38091:26;;38163:9;38157:4;38153:20;38149:1;38138:9;38134:17;38127:47;38191:131;38317:4;38191:131;:::i;:::-;38183:139;;37910:419;;;:::o;38335:178::-;38475:30;38471:1;38463:6;38459:14;38452:54;38335:178;:::o;38519:366::-;38661:3;38682:67;38746:2;38741:3;38682:67;:::i;:::-;38675:74;;38758:93;38847:3;38758:93;:::i;:::-;38876:2;38871:3;38867:12;38860:19;;38519:366;;;:::o;38891:419::-;39057:4;39095:2;39084:9;39080:18;39072:26;;39144:9;39138:4;39134:20;39130:1;39119:9;39115:17;39108:47;39172:131;39298:4;39172:131;:::i;:::-;39164:139;;38891:419;;;:::o;39316:175::-;39456:27;39452:1;39444:6;39440:14;39433:51;39316:175;:::o;39497:366::-;39639:3;39660:67;39724:2;39719:3;39660:67;:::i;:::-;39653:74;;39736:93;39825:3;39736:93;:::i;:::-;39854:2;39849:3;39845:12;39838:19;;39497:366;;;:::o;39869:419::-;40035:4;40073:2;40062:9;40058:18;40050:26;;40122:9;40116:4;40112:20;40108:1;40097:9;40093:17;40086:47;40150:131;40276:4;40150:131;:::i;:::-;40142:139;;39869:419;;;:::o;40294:237::-;40434:34;40430:1;40422:6;40418:14;40411:58;40503:20;40498:2;40490:6;40486:15;40479:45;40294:237;:::o;40537:366::-;40679:3;40700:67;40764:2;40759:3;40700:67;:::i;:::-;40693:74;;40776:93;40865:3;40776:93;:::i;:::-;40894:2;40889:3;40885:12;40878:19;;40537:366;;;:::o;40909:419::-;41075:4;41113:2;41102:9;41098:18;41090:26;;41162:9;41156:4;41152:20;41148:1;41137:9;41133:17;41126:47;41190:131;41316:4;41190:131;:::i;:::-;41182:139;;40909:419;;;:::o;41334:180::-;41382:77;41379:1;41372:88;41479:4;41476:1;41469:15;41503:4;41500:1;41493:15;41520:185;41560:1;41577:20;41595:1;41577:20;:::i;:::-;41572:25;;41611:20;41629:1;41611:20;:::i;:::-;41606:25;;41650:1;41640:35;;41655:18;;:::i;:::-;41640:35;41697:1;41694;41690:9;41685:14;;41520:185;;;;:::o;41711:176::-;41743:1;41760:20;41778:1;41760:20;:::i;:::-;41755:25;;41794:20;41812:1;41794:20;:::i;:::-;41789:25;;41833:1;41823:35;;41838:18;;:::i;:::-;41823:35;41879:1;41876;41872:9;41867:14;;41711:176;;;;:::o;41893:98::-;41944:6;41978:5;41972:12;41962:22;;41893:98;;;:::o;41997:168::-;42080:11;42114:6;42109:3;42102:19;42154:4;42149:3;42145:14;42130:29;;41997:168;;;;:::o;42171:360::-;42257:3;42285:38;42317:5;42285:38;:::i;:::-;42339:70;42402:6;42397:3;42339:70;:::i;:::-;42332:77;;42418:52;42463:6;42458:3;42451:4;42444:5;42440:16;42418:52;:::i;:::-;42495:29;42517:6;42495:29;:::i;:::-;42490:3;42486:39;42479:46;;42261:270;42171:360;;;;:::o;42537:640::-;42732:4;42770:3;42759:9;42755:19;42747:27;;42784:71;42852:1;42841:9;42837:17;42828:6;42784:71;:::i;:::-;42865:72;42933:2;42922:9;42918:18;42909:6;42865:72;:::i;:::-;42947;43015:2;43004:9;43000:18;42991:6;42947:72;:::i;:::-;43066:9;43060:4;43056:20;43051:2;43040:9;43036:18;43029:48;43094:76;43165:4;43156:6;43094:76;:::i;:::-;43086:84;;42537:640;;;;;;;:::o;43183:141::-;43239:5;43270:6;43264:13;43255:22;;43286:32;43312:5;43286:32;:::i;:::-;43183:141;;;;:::o;43330:349::-;43399:6;43448:2;43436:9;43427:7;43423:23;43419:32;43416:119;;;43454:79;;:::i;:::-;43416:119;43574:1;43599:63;43654:7;43645:6;43634:9;43630:22;43599:63;:::i;:::-;43589:73;;43545:127;43330:349;;;;:::o;43685:180::-;43733:77;43730:1;43723:88;43830:4;43827:1;43820:15;43854:4;43851:1;43844:15
Swarm Source
ipfs://05f8f9703e5967205c06add78ccbd97cf8facff8eb4c97c2aa04d7ac2a6c8dd6
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.