ERC-721
Overview
Max Total Supply
347 RUSTYKEY
Holders
334
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 RUSTYKEYLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
rustyKeys
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity >=0.4.22 <0.9.0; import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol"; import "@openzeppelin/contracts/utils/math/SafeMath.sol"; // import "@openzeppelin/contracts/utils/Counters.sol"; contract rustyKeys is Ownable, ERC721{ using SafeMath for uint256; // address private mainContract = ""; bool public isURIFrozen = false; string public baseURI = "https://"; uint256 public MAX_SUPPLY = 350; bool public mintIsActive = true; uint256 public totalSupply = 0; address public upComing; bool public mtrac; bytes public dta; constructor(string memory name, string memory symbol) ERC721(name, symbol) { } function _baseURI() internal view override returns (string memory) { return baseURI; } function toggleURI() external onlyOwner { isURIFrozen = !isURIFrozen; } function toggleMint() external onlyOwner { mintIsActive = !mintIsActive; } function setBaseURI(string calldata newURI) external onlyOwner { require(!isURIFrozen, "URI is Frozen"); baseURI = newURI; } function setUpcoming(address upcomingContract) external onlyOwner { upComing = upcomingContract; } function airdropRustyKeys( address[] memory recepients) external onlyOwner { require(mintIsActive, "Minting has not commenced or has ended"); require(totalSupply < MAX_SUPPLY, "All Airdropped!"); for(uint i = 0; i < recepients.length; i++) { if(balanceOf(recepients[i]) == 0){ totalSupply++; _safeMint(recepients[i], totalSupply); } } } function burn(uint256 _tokenId) public { require(!mintIsActive, "Ongoing Sale"); require(_exists(_tokenId), "Token Does Not Exist"); require(msg.sender == ownerOf(_tokenId), "Unauthorised Burn"); totalSupply -= 1; _burn(_tokenId); } function burnAndMint(uint256 _tokenId) public { require(!mintIsActive, "Ongoing Sale"); require(_exists(_tokenId), "Token Does Not Exist"); require(msg.sender == ownerOf(_tokenId), "Unauthorised Burn"); (bool success, bytes memory data) = upComing.call( abi.encodeWithSignature("mintNFT(uint256,address)", _tokenId, msg.sender) ); require(success, "Minting Failed"); mtrac = success; dta = data; totalSupply -= 1; _burn(_tokenId); } function withdrawAll(address treasury) external payable onlyOwner { require(payable(treasury).send(address(this).balance)); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./extensions/IERC721Metadata.sol"; import "../../utils/Address.sol"; import "../../utils/Context.sol"; import "../../utils/Strings.sol"; import "../../utils/introspection/ERC165.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; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.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; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../ERC721.sol"; import "./IERC721Enumerable.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)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../IERC721.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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../IERC721.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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.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; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
{ "remappings": [], "optimizer": { "enabled": false, "runs": 200 }, "evmVersion": "london", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recepients","type":"address[]"}],"name":"airdropRustyKeys","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"burnAndMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dta","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isURIFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mtrac","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"upcomingContract","type":"address"}],"name":"setUpcoming","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":[],"name":"toggleMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"upComing","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"treasury","type":"address"}],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526000600760006101000a81548160ff0219169083151502179055506040518060400160405280600881526020017f68747470733a2f2f000000000000000000000000000000000000000000000000815250600890805190602001906200006c929190620001f0565b5061015e6009556001600a60006101000a81548160ff0219169083151502179055506000600b55348015620000a057600080fd5b5060405162004719380380620047198339818101604052810190620000c691906200043d565b8181620000e8620000dc6200012460201b60201c565b6200012c60201b60201c565b816001908051906020019062000100929190620001f0565b50806002908051906020019062000119929190620001f0565b505050505062000527565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001fe90620004f1565b90600052602060002090601f0160209004810192826200022257600085556200026e565b82601f106200023d57805160ff19168380011785556200026e565b828001600101855582156200026e579182015b828111156200026d57825182559160200191906001019062000250565b5b5090506200027d919062000281565b5090565b5b808211156200029c57600081600090555060010162000282565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200030982620002be565b810181811067ffffffffffffffff821117156200032b576200032a620002cf565b5b80604052505050565b600062000340620002a0565b90506200034e8282620002fe565b919050565b600067ffffffffffffffff821115620003715762000370620002cf565b5b6200037c82620002be565b9050602081019050919050565b60005b83811015620003a95780820151818401526020810190506200038c565b83811115620003b9576000848401525b50505050565b6000620003d6620003d08462000353565b62000334565b905082815260208101848484011115620003f557620003f4620002b9565b5b6200040284828562000389565b509392505050565b600082601f830112620004225762000421620002b4565b5b815162000434848260208601620003bf565b91505092915050565b60008060408385031215620004575762000456620002aa565b5b600083015167ffffffffffffffff811115620004785762000477620002af565b5b62000486858286016200040a565b925050602083015167ffffffffffffffff811115620004aa57620004a9620002af565b5b620004b8858286016200040a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200050a57607f821691505b60208210811415620005215762000520620004c2565b5b50919050565b6141e280620005376000396000f3fe6080604052600436106101e35760003560e01c80636c0360eb11610102578063d09854d911610095578063f2fde38b11610064578063f2fde38b146106cc578063fa09e630146106f5578063fcd4b21214610711578063fe79f2111461073c576101e3565b8063d09854d914610624578063d3dd5fe01461064f578063e985e9c514610666578063eead0ea9146106a3576101e3565b806395d89b41116100d157806395d89b411461056a578063a22cb46514610595578063b88d4fde146105be578063c87b56dd146105e7576101e3565b80636c0360eb146104c057806370a08231146104eb578063715018a6146105285780638da5cb5b1461053f576101e3565b806332cb6b0c1161017a578063471a429411610149578063471a429414610406578063485db2fc1461043157806355f804b31461045a5780636352211e14610483576101e3565b806332cb6b0c1461035e578063341a50df1461038957806342842e0e146103b457806342966c68146103dd576101e3565b8063095ea7b3116101b6578063095ea7b3146102b857806311104e94146102e157806318160ddd1461030a57806323b872dd14610335576101e3565b806301ffc9a7146101e857806303baecec1461022557806306fdde0314610250578063081812fc1461027b575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190612af6565b610753565b60405161021c9190612b3e565b60405180910390f35b34801561023157600080fd5b5061023a610835565b6040516102479190612b3e565b60405180910390f35b34801561025c57600080fd5b50610265610848565b6040516102729190612bf2565b60405180910390f35b34801561028757600080fd5b506102a2600480360381019061029d9190612c4a565b6108da565b6040516102af9190612cb8565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da9190612cff565b61095f565b005b3480156102ed57600080fd5b5061030860048036038101906103039190612c4a565b610a77565b005b34801561031657600080fd5b5061031f610d3e565b60405161032c9190612d4e565b60405180910390f35b34801561034157600080fd5b5061035c60048036038101906103579190612d69565b610d44565b005b34801561036a57600080fd5b50610373610da4565b6040516103809190612d4e565b60405180910390f35b34801561039557600080fd5b5061039e610daa565b6040516103ab9190612e11565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d69190612d69565b610e38565b005b3480156103e957600080fd5b5061040460048036038101906103ff9190612c4a565b610e58565b005b34801561041257600080fd5b5061041b610f8c565b6040516104289190612b3e565b60405180910390f35b34801561043d57600080fd5b5061045860048036038101906104539190612f7b565b610f9f565b005b34801561046657600080fd5b50610481600480360381019061047c919061301f565b61113d565b005b34801561048f57600080fd5b506104aa60048036038101906104a59190612c4a565b61121f565b6040516104b79190612cb8565b60405180910390f35b3480156104cc57600080fd5b506104d56112d1565b6040516104e29190612bf2565b60405180910390f35b3480156104f757600080fd5b50610512600480360381019061050d919061306c565b61135f565b60405161051f9190612d4e565b60405180910390f35b34801561053457600080fd5b5061053d611417565b005b34801561054b57600080fd5b5061055461149f565b6040516105619190612cb8565b60405180910390f35b34801561057657600080fd5b5061057f6114c8565b60405161058c9190612bf2565b60405180910390f35b3480156105a157600080fd5b506105bc60048036038101906105b791906130c5565b61155a565b005b3480156105ca57600080fd5b506105e560048036038101906105e091906131ba565b6116db565b005b3480156105f357600080fd5b5061060e60048036038101906106099190612c4a565b61173d565b60405161061b9190612bf2565b60405180910390f35b34801561063057600080fd5b506106396117e4565b6040516106469190612cb8565b60405180910390f35b34801561065b57600080fd5b5061066461180a565b005b34801561067257600080fd5b5061068d6004803603810190610688919061323d565b6118b2565b60405161069a9190612b3e565b60405180910390f35b3480156106af57600080fd5b506106ca60048036038101906106c5919061306c565b611946565b005b3480156106d857600080fd5b506106f360048036038101906106ee919061306c565b611a06565b005b61070f600480360381019061070a919061306c565b611afe565b005b34801561071d57600080fd5b50610726611bbb565b6040516107339190612b3e565b60405180910390f35b34801561074857600080fd5b50610751611bce565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061081e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061082e575061082d82611c76565b5b9050919050565b600c60149054906101000a900460ff1681565b606060018054610857906132ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610883906132ac565b80156108d05780601f106108a5576101008083540402835291602001916108d0565b820191906000526020600020905b8154815290600101906020018083116108b357829003601f168201915b5050505050905090565b60006108e582611ce0565b610924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091b90613350565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061096a8261121f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d2906133e2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109fa611d4c565b73ffffffffffffffffffffffffffffffffffffffff161480610a295750610a2881610a23611d4c565b6118b2565b5b610a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5f90613474565b60405180910390fd5b610a728383611d54565b505050565b600a60009054906101000a900460ff1615610ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abe906134e0565b60405180910390fd5b610ad081611ce0565b610b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b069061354c565b60405180910390fd5b610b188161121f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c906135b8565b60405180910390fd5b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168333604051602401610bd49291906135d8565b6040516020818303038152906040527f669f5a51000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610c5e919061363d565b6000604051808303816000865af19150503d8060008114610c9b576040519150601f19603f3d011682016040523d82523d6000602084013e610ca0565b606091505b509150915081610ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdc906136a0565b60405180910390fd5b81600c60146101000a81548160ff02191690831515021790555080600d9080519060200190610d15929190612961565b506001600b6000828254610d2991906136ef565b92505081905550610d3983611e0d565b505050565b600b5481565b610d55610d4f611d4c565b82611f1e565b610d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8b90613795565b60405180910390fd5b610d9f838383611ffc565b505050565b60095481565b600d8054610db7906132ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610de3906132ac565b8015610e305780601f10610e0557610100808354040283529160200191610e30565b820191906000526020600020905b815481529060010190602001808311610e1357829003601f168201915b505050505081565b610e53838383604051806020016040528060008152506116db565b505050565b600a60009054906101000a900460ff1615610ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9f906134e0565b60405180910390fd5b610eb181611ce0565b610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee79061354c565b60405180910390fd5b610ef98161121f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d906135b8565b60405180910390fd5b6001600b6000828254610f7991906136ef565b92505081905550610f8981611e0d565b50565b600a60009054906101000a900460ff1681565b610fa7611d4c565b73ffffffffffffffffffffffffffffffffffffffff16610fc561149f565b73ffffffffffffffffffffffffffffffffffffffff161461101b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101290613801565b60405180910390fd5b600a60009054906101000a900460ff1661106a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106190613893565b60405180910390fd5b600954600b54106110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a7906138ff565b60405180910390fd5b60005b81518110156111395760006110e18383815181106110d4576110d361391f565b5b602002602001015161135f565b141561112657600b60008154809291906110fa9061394e565b91905055506111258282815181106111155761111461391f565b5b6020026020010151600b54612258565b5b80806111319061394e565b9150506110b3565b5050565b611145611d4c565b73ffffffffffffffffffffffffffffffffffffffff1661116361149f565b73ffffffffffffffffffffffffffffffffffffffff16146111b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b090613801565b60405180910390fd5b600760009054906101000a900460ff1615611209576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611200906139e3565b60405180910390fd5b81816008919061121a9291906129e7565b505050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bf90613a75565b60405180910390fd5b80915050919050565b600880546112de906132ac565b80601f016020809104026020016040519081016040528092919081815260200182805461130a906132ac565b80156113575780601f1061132c57610100808354040283529160200191611357565b820191906000526020600020905b81548152906001019060200180831161133a57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c790613b07565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61141f611d4c565b73ffffffffffffffffffffffffffffffffffffffff1661143d61149f565b73ffffffffffffffffffffffffffffffffffffffff1614611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148a90613801565b60405180910390fd5b61149d6000612276565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546114d7906132ac565b80601f0160208091040260200160405190810160405280929190818152602001828054611503906132ac565b80156115505780601f1061152557610100808354040283529160200191611550565b820191906000526020600020905b81548152906001019060200180831161153357829003601f168201915b5050505050905090565b611562611d4c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c790613b73565b60405180910390fd5b80600660006115dd611d4c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661168a611d4c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116cf9190612b3e565b60405180910390a35050565b6116ec6116e6611d4c565b83611f1e565b61172b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172290613795565b60405180910390fd5b6117378484848461233a565b50505050565b606061174882611ce0565b611787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177e90613c05565b60405180910390fd5b6000611791612396565b905060008151116117b157604051806020016040528060008152506117dc565b806117bb84612428565b6040516020016117cc929190613c61565b6040516020818303038152906040525b915050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611812611d4c565b73ffffffffffffffffffffffffffffffffffffffff1661183061149f565b73ffffffffffffffffffffffffffffffffffffffff1614611886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187d90613801565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61194e611d4c565b73ffffffffffffffffffffffffffffffffffffffff1661196c61149f565b73ffffffffffffffffffffffffffffffffffffffff16146119c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b990613801565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611a0e611d4c565b73ffffffffffffffffffffffffffffffffffffffff16611a2c61149f565b73ffffffffffffffffffffffffffffffffffffffff1614611a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7990613801565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae990613cf7565b60405180910390fd5b611afb81612276565b50565b611b06611d4c565b73ffffffffffffffffffffffffffffffffffffffff16611b2461149f565b73ffffffffffffffffffffffffffffffffffffffff1614611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7190613801565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050611bb857600080fd5b50565b600760009054906101000a900460ff1681565b611bd6611d4c565b73ffffffffffffffffffffffffffffffffffffffff16611bf461149f565b73ffffffffffffffffffffffffffffffffffffffff1614611c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4190613801565b60405180910390fd5b600760009054906101000a900460ff1615600760006101000a81548160ff021916908315150217905550565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611dc78361121f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e188261121f565b9050611e2681600084612589565b611e31600083611d54565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e8191906136ef565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000611f2982611ce0565b611f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5f90613d89565b60405180910390fd5b6000611f738361121f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611fe257508373ffffffffffffffffffffffffffffffffffffffff16611fca846108da565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ff35750611ff281856118b2565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661201c8261121f565b73ffffffffffffffffffffffffffffffffffffffff1614612072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206990613e1b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d990613ead565b60405180910390fd5b6120ed838383612589565b6120f8600082611d54565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461214891906136ef565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461219f9190613ecd565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61227282826040518060200160405280600081525061258e565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612345848484611ffc565b612351848484846125e9565b612390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238790613f95565b60405180910390fd5b50505050565b6060600880546123a5906132ac565b80601f01602080910402602001604051908101604052809291908181526020018280546123d1906132ac565b801561241e5780601f106123f35761010080835404028352916020019161241e565b820191906000526020600020905b81548152906001019060200180831161240157829003601f168201915b5050505050905090565b60606000821415612470576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612584565b600082905060005b600082146124a257808061248b9061394e565b915050600a8261249b9190613fe4565b9150612478565b60008167ffffffffffffffff8111156124be576124bd612e38565b5b6040519080825280601f01601f1916602001820160405280156124f05781602001600182028036833780820191505090505b5090505b6000851461257d5760018261250991906136ef565b9150600a856125189190614015565b60306125249190613ecd565b60f81b81838151811061253a5761253961391f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125769190613fe4565b94506124f4565b8093505050505b919050565b505050565b6125988383612780565b6125a560008484846125e9565b6125e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125db90613f95565b60405180910390fd5b505050565b600061260a8473ffffffffffffffffffffffffffffffffffffffff1661294e565b15612773578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612633611d4c565b8786866040518563ffffffff1660e01b81526004016126559493929190614046565b602060405180830381600087803b15801561266f57600080fd5b505af19250505080156126a057506040513d601f19601f8201168201806040525081019061269d91906140a7565b60015b612723573d80600081146126d0576040519150601f19603f3d011682016040523d82523d6000602084013e6126d5565b606091505b5060008151141561271b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271290613f95565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612778565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e790614120565b60405180910390fd5b6127f981611ce0565b15612839576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128309061418c565b60405180910390fd5b61284560008383612589565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128959190613ecd565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461296d906132ac565b90600052602060002090601f01602090048101928261298f57600085556129d6565b82601f106129a857805160ff19168380011785556129d6565b828001600101855582156129d6579182015b828111156129d55782518255916020019190600101906129ba565b5b5090506129e39190612a6d565b5090565b8280546129f3906132ac565b90600052602060002090601f016020900481019282612a155760008555612a5c565b82601f10612a2e57803560ff1916838001178555612a5c565b82800160010185558215612a5c579182015b82811115612a5b578235825591602001919060010190612a40565b5b509050612a699190612a6d565b5090565b5b80821115612a86576000816000905550600101612a6e565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612ad381612a9e565b8114612ade57600080fd5b50565b600081359050612af081612aca565b92915050565b600060208284031215612b0c57612b0b612a94565b5b6000612b1a84828501612ae1565b91505092915050565b60008115159050919050565b612b3881612b23565b82525050565b6000602082019050612b536000830184612b2f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b93578082015181840152602081019050612b78565b83811115612ba2576000848401525b50505050565b6000601f19601f8301169050919050565b6000612bc482612b59565b612bce8185612b64565b9350612bde818560208601612b75565b612be781612ba8565b840191505092915050565b60006020820190508181036000830152612c0c8184612bb9565b905092915050565b6000819050919050565b612c2781612c14565b8114612c3257600080fd5b50565b600081359050612c4481612c1e565b92915050565b600060208284031215612c6057612c5f612a94565b5b6000612c6e84828501612c35565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ca282612c77565b9050919050565b612cb281612c97565b82525050565b6000602082019050612ccd6000830184612ca9565b92915050565b612cdc81612c97565b8114612ce757600080fd5b50565b600081359050612cf981612cd3565b92915050565b60008060408385031215612d1657612d15612a94565b5b6000612d2485828601612cea565b9250506020612d3585828601612c35565b9150509250929050565b612d4881612c14565b82525050565b6000602082019050612d636000830184612d3f565b92915050565b600080600060608486031215612d8257612d81612a94565b5b6000612d9086828701612cea565b9350506020612da186828701612cea565b9250506040612db286828701612c35565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000612de382612dbc565b612ded8185612dc7565b9350612dfd818560208601612b75565b612e0681612ba8565b840191505092915050565b60006020820190508181036000830152612e2b8184612dd8565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612e7082612ba8565b810181811067ffffffffffffffff82111715612e8f57612e8e612e38565b5b80604052505050565b6000612ea2612a8a565b9050612eae8282612e67565b919050565b600067ffffffffffffffff821115612ece57612ecd612e38565b5b602082029050602081019050919050565b600080fd5b6000612ef7612ef284612eb3565b612e98565b90508083825260208201905060208402830185811115612f1a57612f19612edf565b5b835b81811015612f435780612f2f8882612cea565b845260208401935050602081019050612f1c565b5050509392505050565b600082601f830112612f6257612f61612e33565b5b8135612f72848260208601612ee4565b91505092915050565b600060208284031215612f9157612f90612a94565b5b600082013567ffffffffffffffff811115612faf57612fae612a99565b5b612fbb84828501612f4d565b91505092915050565b600080fd5b60008083601f840112612fdf57612fde612e33565b5b8235905067ffffffffffffffff811115612ffc57612ffb612fc4565b5b60208301915083600182028301111561301857613017612edf565b5b9250929050565b6000806020838503121561303657613035612a94565b5b600083013567ffffffffffffffff81111561305457613053612a99565b5b61306085828601612fc9565b92509250509250929050565b60006020828403121561308257613081612a94565b5b600061309084828501612cea565b91505092915050565b6130a281612b23565b81146130ad57600080fd5b50565b6000813590506130bf81613099565b92915050565b600080604083850312156130dc576130db612a94565b5b60006130ea85828601612cea565b92505060206130fb858286016130b0565b9150509250929050565b600080fd5b600067ffffffffffffffff82111561312557613124612e38565b5b61312e82612ba8565b9050602081019050919050565b82818337600083830152505050565b600061315d6131588461310a565b612e98565b90508281526020810184848401111561317957613178613105565b5b61318484828561313b565b509392505050565b600082601f8301126131a1576131a0612e33565b5b81356131b184826020860161314a565b91505092915050565b600080600080608085870312156131d4576131d3612a94565b5b60006131e287828801612cea565b94505060206131f387828801612cea565b935050604061320487828801612c35565b925050606085013567ffffffffffffffff81111561322557613224612a99565b5b6132318782880161318c565b91505092959194509250565b6000806040838503121561325457613253612a94565b5b600061326285828601612cea565b925050602061327385828601612cea565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806132c457607f821691505b602082108114156132d8576132d761327d565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061333a602c83612b64565b9150613345826132de565b604082019050919050565b600060208201905081810360008301526133698161332d565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006133cc602183612b64565b91506133d782613370565b604082019050919050565b600060208201905081810360008301526133fb816133bf565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061345e603883612b64565b915061346982613402565b604082019050919050565b6000602082019050818103600083015261348d81613451565b9050919050565b7f4f6e676f696e672053616c650000000000000000000000000000000000000000600082015250565b60006134ca600c83612b64565b91506134d582613494565b602082019050919050565b600060208201905081810360008301526134f9816134bd565b9050919050565b7f546f6b656e20446f6573204e6f74204578697374000000000000000000000000600082015250565b6000613536601483612b64565b915061354182613500565b602082019050919050565b6000602082019050818103600083015261356581613529565b9050919050565b7f556e617574686f7269736564204275726e000000000000000000000000000000600082015250565b60006135a2601183612b64565b91506135ad8261356c565b602082019050919050565b600060208201905081810360008301526135d181613595565b9050919050565b60006040820190506135ed6000830185612d3f565b6135fa6020830184612ca9565b9392505050565b600081905092915050565b600061361782612dbc565b6136218185613601565b9350613631818560208601612b75565b80840191505092915050565b6000613649828461360c565b915081905092915050565b7f4d696e74696e67204661696c6564000000000000000000000000000000000000600082015250565b600061368a600e83612b64565b915061369582613654565b602082019050919050565b600060208201905081810360008301526136b98161367d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006136fa82612c14565b915061370583612c14565b925082821015613718576137176136c0565b5b828203905092915050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061377f603183612b64565b915061378a82613723565b604082019050919050565b600060208201905081810360008301526137ae81613772565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006137eb602083612b64565b91506137f6826137b5565b602082019050919050565b6000602082019050818103600083015261381a816137de565b9050919050565b7f4d696e74696e6720686173206e6f7420636f6d6d656e636564206f722068617360008201527f20656e6465640000000000000000000000000000000000000000000000000000602082015250565b600061387d602683612b64565b915061388882613821565b604082019050919050565b600060208201905081810360008301526138ac81613870565b9050919050565b7f416c6c2041697264726f70706564210000000000000000000000000000000000600082015250565b60006138e9600f83612b64565b91506138f4826138b3565b602082019050919050565b60006020820190508181036000830152613918816138dc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061395982612c14565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561398c5761398b6136c0565b5b600182019050919050565b7f5552492069732046726f7a656e00000000000000000000000000000000000000600082015250565b60006139cd600d83612b64565b91506139d882613997565b602082019050919050565b600060208201905081810360008301526139fc816139c0565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613a5f602983612b64565b9150613a6a82613a03565b604082019050919050565b60006020820190508181036000830152613a8e81613a52565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613af1602a83612b64565b9150613afc82613a95565b604082019050919050565b60006020820190508181036000830152613b2081613ae4565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613b5d601983612b64565b9150613b6882613b27565b602082019050919050565b60006020820190508181036000830152613b8c81613b50565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613bef602f83612b64565b9150613bfa82613b93565b604082019050919050565b60006020820190508181036000830152613c1e81613be2565b9050919050565b600081905092915050565b6000613c3b82612b59565b613c458185613c25565b9350613c55818560208601612b75565b80840191505092915050565b6000613c6d8285613c30565b9150613c798284613c30565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ce1602683612b64565b9150613cec82613c85565b604082019050919050565b60006020820190508181036000830152613d1081613cd4565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613d73602c83612b64565b9150613d7e82613d17565b604082019050919050565b60006020820190508181036000830152613da281613d66565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000613e05602983612b64565b9150613e1082613da9565b604082019050919050565b60006020820190508181036000830152613e3481613df8565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e97602483612b64565b9150613ea282613e3b565b604082019050919050565b60006020820190508181036000830152613ec681613e8a565b9050919050565b6000613ed882612c14565b9150613ee383612c14565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f1857613f176136c0565b5b828201905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613f7f603283612b64565b9150613f8a82613f23565b604082019050919050565b60006020820190508181036000830152613fae81613f72565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fef82612c14565b9150613ffa83612c14565b92508261400a57614009613fb5565b5b828204905092915050565b600061402082612c14565b915061402b83612c14565b92508261403b5761403a613fb5565b5b828206905092915050565b600060808201905061405b6000830187612ca9565b6140686020830186612ca9565b6140756040830185612d3f565b81810360608301526140878184612dd8565b905095945050505050565b6000815190506140a181612aca565b92915050565b6000602082840312156140bd576140bc612a94565b5b60006140cb84828501614092565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061410a602083612b64565b9150614115826140d4565b602082019050919050565b60006020820190508181036000830152614139816140fd565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614176601c83612b64565b915061418182614140565b602082019050919050565b600060208201905081810360008301526141a581614169565b905091905056fea2646970667358221220efcb405ced375c602be2d624b5074045c03b5d339e44f5ae73a11e9745ca20d464736f6c6343000809003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000e546865205275737479204b657973000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000852555354594b4559000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101e35760003560e01c80636c0360eb11610102578063d09854d911610095578063f2fde38b11610064578063f2fde38b146106cc578063fa09e630146106f5578063fcd4b21214610711578063fe79f2111461073c576101e3565b8063d09854d914610624578063d3dd5fe01461064f578063e985e9c514610666578063eead0ea9146106a3576101e3565b806395d89b41116100d157806395d89b411461056a578063a22cb46514610595578063b88d4fde146105be578063c87b56dd146105e7576101e3565b80636c0360eb146104c057806370a08231146104eb578063715018a6146105285780638da5cb5b1461053f576101e3565b806332cb6b0c1161017a578063471a429411610149578063471a429414610406578063485db2fc1461043157806355f804b31461045a5780636352211e14610483576101e3565b806332cb6b0c1461035e578063341a50df1461038957806342842e0e146103b457806342966c68146103dd576101e3565b8063095ea7b3116101b6578063095ea7b3146102b857806311104e94146102e157806318160ddd1461030a57806323b872dd14610335576101e3565b806301ffc9a7146101e857806303baecec1461022557806306fdde0314610250578063081812fc1461027b575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190612af6565b610753565b60405161021c9190612b3e565b60405180910390f35b34801561023157600080fd5b5061023a610835565b6040516102479190612b3e565b60405180910390f35b34801561025c57600080fd5b50610265610848565b6040516102729190612bf2565b60405180910390f35b34801561028757600080fd5b506102a2600480360381019061029d9190612c4a565b6108da565b6040516102af9190612cb8565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da9190612cff565b61095f565b005b3480156102ed57600080fd5b5061030860048036038101906103039190612c4a565b610a77565b005b34801561031657600080fd5b5061031f610d3e565b60405161032c9190612d4e565b60405180910390f35b34801561034157600080fd5b5061035c60048036038101906103579190612d69565b610d44565b005b34801561036a57600080fd5b50610373610da4565b6040516103809190612d4e565b60405180910390f35b34801561039557600080fd5b5061039e610daa565b6040516103ab9190612e11565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d69190612d69565b610e38565b005b3480156103e957600080fd5b5061040460048036038101906103ff9190612c4a565b610e58565b005b34801561041257600080fd5b5061041b610f8c565b6040516104289190612b3e565b60405180910390f35b34801561043d57600080fd5b5061045860048036038101906104539190612f7b565b610f9f565b005b34801561046657600080fd5b50610481600480360381019061047c919061301f565b61113d565b005b34801561048f57600080fd5b506104aa60048036038101906104a59190612c4a565b61121f565b6040516104b79190612cb8565b60405180910390f35b3480156104cc57600080fd5b506104d56112d1565b6040516104e29190612bf2565b60405180910390f35b3480156104f757600080fd5b50610512600480360381019061050d919061306c565b61135f565b60405161051f9190612d4e565b60405180910390f35b34801561053457600080fd5b5061053d611417565b005b34801561054b57600080fd5b5061055461149f565b6040516105619190612cb8565b60405180910390f35b34801561057657600080fd5b5061057f6114c8565b60405161058c9190612bf2565b60405180910390f35b3480156105a157600080fd5b506105bc60048036038101906105b791906130c5565b61155a565b005b3480156105ca57600080fd5b506105e560048036038101906105e091906131ba565b6116db565b005b3480156105f357600080fd5b5061060e60048036038101906106099190612c4a565b61173d565b60405161061b9190612bf2565b60405180910390f35b34801561063057600080fd5b506106396117e4565b6040516106469190612cb8565b60405180910390f35b34801561065b57600080fd5b5061066461180a565b005b34801561067257600080fd5b5061068d6004803603810190610688919061323d565b6118b2565b60405161069a9190612b3e565b60405180910390f35b3480156106af57600080fd5b506106ca60048036038101906106c5919061306c565b611946565b005b3480156106d857600080fd5b506106f360048036038101906106ee919061306c565b611a06565b005b61070f600480360381019061070a919061306c565b611afe565b005b34801561071d57600080fd5b50610726611bbb565b6040516107339190612b3e565b60405180910390f35b34801561074857600080fd5b50610751611bce565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061081e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061082e575061082d82611c76565b5b9050919050565b600c60149054906101000a900460ff1681565b606060018054610857906132ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610883906132ac565b80156108d05780601f106108a5576101008083540402835291602001916108d0565b820191906000526020600020905b8154815290600101906020018083116108b357829003601f168201915b5050505050905090565b60006108e582611ce0565b610924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091b90613350565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061096a8261121f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d2906133e2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109fa611d4c565b73ffffffffffffffffffffffffffffffffffffffff161480610a295750610a2881610a23611d4c565b6118b2565b5b610a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5f90613474565b60405180910390fd5b610a728383611d54565b505050565b600a60009054906101000a900460ff1615610ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abe906134e0565b60405180910390fd5b610ad081611ce0565b610b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b069061354c565b60405180910390fd5b610b188161121f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c906135b8565b60405180910390fd5b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168333604051602401610bd49291906135d8565b6040516020818303038152906040527f669f5a51000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610c5e919061363d565b6000604051808303816000865af19150503d8060008114610c9b576040519150601f19603f3d011682016040523d82523d6000602084013e610ca0565b606091505b509150915081610ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdc906136a0565b60405180910390fd5b81600c60146101000a81548160ff02191690831515021790555080600d9080519060200190610d15929190612961565b506001600b6000828254610d2991906136ef565b92505081905550610d3983611e0d565b505050565b600b5481565b610d55610d4f611d4c565b82611f1e565b610d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8b90613795565b60405180910390fd5b610d9f838383611ffc565b505050565b60095481565b600d8054610db7906132ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610de3906132ac565b8015610e305780601f10610e0557610100808354040283529160200191610e30565b820191906000526020600020905b815481529060010190602001808311610e1357829003601f168201915b505050505081565b610e53838383604051806020016040528060008152506116db565b505050565b600a60009054906101000a900460ff1615610ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9f906134e0565b60405180910390fd5b610eb181611ce0565b610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee79061354c565b60405180910390fd5b610ef98161121f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d906135b8565b60405180910390fd5b6001600b6000828254610f7991906136ef565b92505081905550610f8981611e0d565b50565b600a60009054906101000a900460ff1681565b610fa7611d4c565b73ffffffffffffffffffffffffffffffffffffffff16610fc561149f565b73ffffffffffffffffffffffffffffffffffffffff161461101b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101290613801565b60405180910390fd5b600a60009054906101000a900460ff1661106a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106190613893565b60405180910390fd5b600954600b54106110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a7906138ff565b60405180910390fd5b60005b81518110156111395760006110e18383815181106110d4576110d361391f565b5b602002602001015161135f565b141561112657600b60008154809291906110fa9061394e565b91905055506111258282815181106111155761111461391f565b5b6020026020010151600b54612258565b5b80806111319061394e565b9150506110b3565b5050565b611145611d4c565b73ffffffffffffffffffffffffffffffffffffffff1661116361149f565b73ffffffffffffffffffffffffffffffffffffffff16146111b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b090613801565b60405180910390fd5b600760009054906101000a900460ff1615611209576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611200906139e3565b60405180910390fd5b81816008919061121a9291906129e7565b505050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bf90613a75565b60405180910390fd5b80915050919050565b600880546112de906132ac565b80601f016020809104026020016040519081016040528092919081815260200182805461130a906132ac565b80156113575780601f1061132c57610100808354040283529160200191611357565b820191906000526020600020905b81548152906001019060200180831161133a57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c790613b07565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61141f611d4c565b73ffffffffffffffffffffffffffffffffffffffff1661143d61149f565b73ffffffffffffffffffffffffffffffffffffffff1614611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148a90613801565b60405180910390fd5b61149d6000612276565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546114d7906132ac565b80601f0160208091040260200160405190810160405280929190818152602001828054611503906132ac565b80156115505780601f1061152557610100808354040283529160200191611550565b820191906000526020600020905b81548152906001019060200180831161153357829003601f168201915b5050505050905090565b611562611d4c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c790613b73565b60405180910390fd5b80600660006115dd611d4c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661168a611d4c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116cf9190612b3e565b60405180910390a35050565b6116ec6116e6611d4c565b83611f1e565b61172b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172290613795565b60405180910390fd5b6117378484848461233a565b50505050565b606061174882611ce0565b611787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177e90613c05565b60405180910390fd5b6000611791612396565b905060008151116117b157604051806020016040528060008152506117dc565b806117bb84612428565b6040516020016117cc929190613c61565b6040516020818303038152906040525b915050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611812611d4c565b73ffffffffffffffffffffffffffffffffffffffff1661183061149f565b73ffffffffffffffffffffffffffffffffffffffff1614611886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187d90613801565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61194e611d4c565b73ffffffffffffffffffffffffffffffffffffffff1661196c61149f565b73ffffffffffffffffffffffffffffffffffffffff16146119c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b990613801565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611a0e611d4c565b73ffffffffffffffffffffffffffffffffffffffff16611a2c61149f565b73ffffffffffffffffffffffffffffffffffffffff1614611a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7990613801565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae990613cf7565b60405180910390fd5b611afb81612276565b50565b611b06611d4c565b73ffffffffffffffffffffffffffffffffffffffff16611b2461149f565b73ffffffffffffffffffffffffffffffffffffffff1614611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7190613801565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050611bb857600080fd5b50565b600760009054906101000a900460ff1681565b611bd6611d4c565b73ffffffffffffffffffffffffffffffffffffffff16611bf461149f565b73ffffffffffffffffffffffffffffffffffffffff1614611c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4190613801565b60405180910390fd5b600760009054906101000a900460ff1615600760006101000a81548160ff021916908315150217905550565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611dc78361121f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e188261121f565b9050611e2681600084612589565b611e31600083611d54565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e8191906136ef565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000611f2982611ce0565b611f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5f90613d89565b60405180910390fd5b6000611f738361121f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611fe257508373ffffffffffffffffffffffffffffffffffffffff16611fca846108da565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ff35750611ff281856118b2565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661201c8261121f565b73ffffffffffffffffffffffffffffffffffffffff1614612072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206990613e1b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d990613ead565b60405180910390fd5b6120ed838383612589565b6120f8600082611d54565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461214891906136ef565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461219f9190613ecd565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61227282826040518060200160405280600081525061258e565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612345848484611ffc565b612351848484846125e9565b612390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238790613f95565b60405180910390fd5b50505050565b6060600880546123a5906132ac565b80601f01602080910402602001604051908101604052809291908181526020018280546123d1906132ac565b801561241e5780601f106123f35761010080835404028352916020019161241e565b820191906000526020600020905b81548152906001019060200180831161240157829003601f168201915b5050505050905090565b60606000821415612470576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612584565b600082905060005b600082146124a257808061248b9061394e565b915050600a8261249b9190613fe4565b9150612478565b60008167ffffffffffffffff8111156124be576124bd612e38565b5b6040519080825280601f01601f1916602001820160405280156124f05781602001600182028036833780820191505090505b5090505b6000851461257d5760018261250991906136ef565b9150600a856125189190614015565b60306125249190613ecd565b60f81b81838151811061253a5761253961391f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125769190613fe4565b94506124f4565b8093505050505b919050565b505050565b6125988383612780565b6125a560008484846125e9565b6125e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125db90613f95565b60405180910390fd5b505050565b600061260a8473ffffffffffffffffffffffffffffffffffffffff1661294e565b15612773578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612633611d4c565b8786866040518563ffffffff1660e01b81526004016126559493929190614046565b602060405180830381600087803b15801561266f57600080fd5b505af19250505080156126a057506040513d601f19601f8201168201806040525081019061269d91906140a7565b60015b612723573d80600081146126d0576040519150601f19603f3d011682016040523d82523d6000602084013e6126d5565b606091505b5060008151141561271b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271290613f95565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612778565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e790614120565b60405180910390fd5b6127f981611ce0565b15612839576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128309061418c565b60405180910390fd5b61284560008383612589565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128959190613ecd565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461296d906132ac565b90600052602060002090601f01602090048101928261298f57600085556129d6565b82601f106129a857805160ff19168380011785556129d6565b828001600101855582156129d6579182015b828111156129d55782518255916020019190600101906129ba565b5b5090506129e39190612a6d565b5090565b8280546129f3906132ac565b90600052602060002090601f016020900481019282612a155760008555612a5c565b82601f10612a2e57803560ff1916838001178555612a5c565b82800160010185558215612a5c579182015b82811115612a5b578235825591602001919060010190612a40565b5b509050612a699190612a6d565b5090565b5b80821115612a86576000816000905550600101612a6e565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612ad381612a9e565b8114612ade57600080fd5b50565b600081359050612af081612aca565b92915050565b600060208284031215612b0c57612b0b612a94565b5b6000612b1a84828501612ae1565b91505092915050565b60008115159050919050565b612b3881612b23565b82525050565b6000602082019050612b536000830184612b2f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b93578082015181840152602081019050612b78565b83811115612ba2576000848401525b50505050565b6000601f19601f8301169050919050565b6000612bc482612b59565b612bce8185612b64565b9350612bde818560208601612b75565b612be781612ba8565b840191505092915050565b60006020820190508181036000830152612c0c8184612bb9565b905092915050565b6000819050919050565b612c2781612c14565b8114612c3257600080fd5b50565b600081359050612c4481612c1e565b92915050565b600060208284031215612c6057612c5f612a94565b5b6000612c6e84828501612c35565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ca282612c77565b9050919050565b612cb281612c97565b82525050565b6000602082019050612ccd6000830184612ca9565b92915050565b612cdc81612c97565b8114612ce757600080fd5b50565b600081359050612cf981612cd3565b92915050565b60008060408385031215612d1657612d15612a94565b5b6000612d2485828601612cea565b9250506020612d3585828601612c35565b9150509250929050565b612d4881612c14565b82525050565b6000602082019050612d636000830184612d3f565b92915050565b600080600060608486031215612d8257612d81612a94565b5b6000612d9086828701612cea565b9350506020612da186828701612cea565b9250506040612db286828701612c35565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000612de382612dbc565b612ded8185612dc7565b9350612dfd818560208601612b75565b612e0681612ba8565b840191505092915050565b60006020820190508181036000830152612e2b8184612dd8565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612e7082612ba8565b810181811067ffffffffffffffff82111715612e8f57612e8e612e38565b5b80604052505050565b6000612ea2612a8a565b9050612eae8282612e67565b919050565b600067ffffffffffffffff821115612ece57612ecd612e38565b5b602082029050602081019050919050565b600080fd5b6000612ef7612ef284612eb3565b612e98565b90508083825260208201905060208402830185811115612f1a57612f19612edf565b5b835b81811015612f435780612f2f8882612cea565b845260208401935050602081019050612f1c565b5050509392505050565b600082601f830112612f6257612f61612e33565b5b8135612f72848260208601612ee4565b91505092915050565b600060208284031215612f9157612f90612a94565b5b600082013567ffffffffffffffff811115612faf57612fae612a99565b5b612fbb84828501612f4d565b91505092915050565b600080fd5b60008083601f840112612fdf57612fde612e33565b5b8235905067ffffffffffffffff811115612ffc57612ffb612fc4565b5b60208301915083600182028301111561301857613017612edf565b5b9250929050565b6000806020838503121561303657613035612a94565b5b600083013567ffffffffffffffff81111561305457613053612a99565b5b61306085828601612fc9565b92509250509250929050565b60006020828403121561308257613081612a94565b5b600061309084828501612cea565b91505092915050565b6130a281612b23565b81146130ad57600080fd5b50565b6000813590506130bf81613099565b92915050565b600080604083850312156130dc576130db612a94565b5b60006130ea85828601612cea565b92505060206130fb858286016130b0565b9150509250929050565b600080fd5b600067ffffffffffffffff82111561312557613124612e38565b5b61312e82612ba8565b9050602081019050919050565b82818337600083830152505050565b600061315d6131588461310a565b612e98565b90508281526020810184848401111561317957613178613105565b5b61318484828561313b565b509392505050565b600082601f8301126131a1576131a0612e33565b5b81356131b184826020860161314a565b91505092915050565b600080600080608085870312156131d4576131d3612a94565b5b60006131e287828801612cea565b94505060206131f387828801612cea565b935050604061320487828801612c35565b925050606085013567ffffffffffffffff81111561322557613224612a99565b5b6132318782880161318c565b91505092959194509250565b6000806040838503121561325457613253612a94565b5b600061326285828601612cea565b925050602061327385828601612cea565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806132c457607f821691505b602082108114156132d8576132d761327d565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061333a602c83612b64565b9150613345826132de565b604082019050919050565b600060208201905081810360008301526133698161332d565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006133cc602183612b64565b91506133d782613370565b604082019050919050565b600060208201905081810360008301526133fb816133bf565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061345e603883612b64565b915061346982613402565b604082019050919050565b6000602082019050818103600083015261348d81613451565b9050919050565b7f4f6e676f696e672053616c650000000000000000000000000000000000000000600082015250565b60006134ca600c83612b64565b91506134d582613494565b602082019050919050565b600060208201905081810360008301526134f9816134bd565b9050919050565b7f546f6b656e20446f6573204e6f74204578697374000000000000000000000000600082015250565b6000613536601483612b64565b915061354182613500565b602082019050919050565b6000602082019050818103600083015261356581613529565b9050919050565b7f556e617574686f7269736564204275726e000000000000000000000000000000600082015250565b60006135a2601183612b64565b91506135ad8261356c565b602082019050919050565b600060208201905081810360008301526135d181613595565b9050919050565b60006040820190506135ed6000830185612d3f565b6135fa6020830184612ca9565b9392505050565b600081905092915050565b600061361782612dbc565b6136218185613601565b9350613631818560208601612b75565b80840191505092915050565b6000613649828461360c565b915081905092915050565b7f4d696e74696e67204661696c6564000000000000000000000000000000000000600082015250565b600061368a600e83612b64565b915061369582613654565b602082019050919050565b600060208201905081810360008301526136b98161367d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006136fa82612c14565b915061370583612c14565b925082821015613718576137176136c0565b5b828203905092915050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061377f603183612b64565b915061378a82613723565b604082019050919050565b600060208201905081810360008301526137ae81613772565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006137eb602083612b64565b91506137f6826137b5565b602082019050919050565b6000602082019050818103600083015261381a816137de565b9050919050565b7f4d696e74696e6720686173206e6f7420636f6d6d656e636564206f722068617360008201527f20656e6465640000000000000000000000000000000000000000000000000000602082015250565b600061387d602683612b64565b915061388882613821565b604082019050919050565b600060208201905081810360008301526138ac81613870565b9050919050565b7f416c6c2041697264726f70706564210000000000000000000000000000000000600082015250565b60006138e9600f83612b64565b91506138f4826138b3565b602082019050919050565b60006020820190508181036000830152613918816138dc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061395982612c14565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561398c5761398b6136c0565b5b600182019050919050565b7f5552492069732046726f7a656e00000000000000000000000000000000000000600082015250565b60006139cd600d83612b64565b91506139d882613997565b602082019050919050565b600060208201905081810360008301526139fc816139c0565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613a5f602983612b64565b9150613a6a82613a03565b604082019050919050565b60006020820190508181036000830152613a8e81613a52565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613af1602a83612b64565b9150613afc82613a95565b604082019050919050565b60006020820190508181036000830152613b2081613ae4565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613b5d601983612b64565b9150613b6882613b27565b602082019050919050565b60006020820190508181036000830152613b8c81613b50565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613bef602f83612b64565b9150613bfa82613b93565b604082019050919050565b60006020820190508181036000830152613c1e81613be2565b9050919050565b600081905092915050565b6000613c3b82612b59565b613c458185613c25565b9350613c55818560208601612b75565b80840191505092915050565b6000613c6d8285613c30565b9150613c798284613c30565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ce1602683612b64565b9150613cec82613c85565b604082019050919050565b60006020820190508181036000830152613d1081613cd4565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613d73602c83612b64565b9150613d7e82613d17565b604082019050919050565b60006020820190508181036000830152613da281613d66565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000613e05602983612b64565b9150613e1082613da9565b604082019050919050565b60006020820190508181036000830152613e3481613df8565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e97602483612b64565b9150613ea282613e3b565b604082019050919050565b60006020820190508181036000830152613ec681613e8a565b9050919050565b6000613ed882612c14565b9150613ee383612c14565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f1857613f176136c0565b5b828201905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613f7f603283612b64565b9150613f8a82613f23565b604082019050919050565b60006020820190508181036000830152613fae81613f72565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fef82612c14565b9150613ffa83612c14565b92508261400a57614009613fb5565b5b828204905092915050565b600061402082612c14565b915061402b83612c14565b92508261403b5761403a613fb5565b5b828206905092915050565b600060808201905061405b6000830187612ca9565b6140686020830186612ca9565b6140756040830185612d3f565b81810360608301526140878184612dd8565b905095945050505050565b6000815190506140a181612aca565b92915050565b6000602082840312156140bd576140bc612a94565b5b60006140cb84828501614092565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061410a602083612b64565b9150614115826140d4565b602082019050919050565b60006020820190508181036000830152614139816140fd565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614176601c83612b64565b915061418182614140565b602082019050919050565b600060208201905081810360008301526141a581614169565b905091905056fea2646970667358221220efcb405ced375c602be2d624b5074045c03b5d339e44f5ae73a11e9745ca20d464736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000e546865205275737479204b657973000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000852555354594b4559000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): The Rusty Keys
Arg [1] : symbol (string): RUSTYKEY
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [3] : 546865205275737479204b657973000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [5] : 52555354594b4559000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
382:2604:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1496:300:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;771:17:13;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2414:98:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3925:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3463:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2280:556:13;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;696:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4789:330:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;608:31:13;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;801:16;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5185:179:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1986:282:13;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;652:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1537:437;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1254:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2117:235:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;561:34:13;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1855:205:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1605:92:0;;;;;;;;;;;;;:::i;:::-;;973:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2576:102:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4209:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5430:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2744:329;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;739:23:13;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1154:88;;;;;;;;;;;;;:::i;:::-;;4565:162:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1413:112:13;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1846:189:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2844:139:13;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;517:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1057:85;;;;;;;;;;;;;:::i;:::-;;1496:300:1;1598:4;1648:25;1633:40;;;:11;:40;;;;:104;;;;1704:33;1689:48;;;:11;:48;;;;1633:104;:156;;;;1753:36;1777:11;1753:23;:36::i;:::-;1633:156;1614:175;;1496:300;;;:::o;771:17:13:-;;;;;;;;;;;;;:::o;2414:98:1:-;2468:13;2500:5;2493:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2414:98;:::o;3925:217::-;4001:7;4028:16;4036:7;4028;:16::i;:::-;4020:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4111:15;:24;4127:7;4111:24;;;;;;;;;;;;;;;;;;;;;4104:31;;3925:217;;;:::o;3463:401::-;3543:13;3559:23;3574:7;3559:14;:23::i;:::-;3543:39;;3606:5;3600:11;;:2;:11;;;;3592:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3697:5;3681:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3706:37;3723:5;3730:12;:10;:12::i;:::-;3706:16;:37::i;:::-;3681:62;3660:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3836:21;3845:2;3849:7;3836:8;:21::i;:::-;3533:331;3463:401;;:::o;2280:556:13:-;2346:12;;;;;;;;;;;2345:13;2337:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;2394:17;2402:8;2394:7;:17::i;:::-;2386:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;2469:17;2477:8;2469:7;:17::i;:::-;2455:31;;:10;:31;;;2447:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;2520:12;2534:17;2555:8;;;;;;;;;;;:13;;2635:8;2645:10;2583:73;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2555:112;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2519:148;;;;2696:7;2688:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;2741:7;2733:5;;:15;;;;;;;;;;;;;;;;;;2765:4;2759:3;:10;;;;;;;;;;;;:::i;:::-;;2801:1;2786:11;;:16;;;;;;;:::i;:::-;;;;;;;;2813:15;2819:8;2813:5;:15::i;:::-;2326:510;;2280:556;:::o;696:30::-;;;;:::o;4789:330:1:-;4978:41;4997:12;:10;:12::i;:::-;5011:7;4978:18;:41::i;:::-;4970:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5084:28;5094:4;5100:2;5104:7;5084:9;:28::i;:::-;4789:330;;;:::o;608:31:13:-;;;;:::o;801:16::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5185:179:1:-;5318:39;5335:4;5341:2;5345:7;5318:39;;;;;;;;;;;;:16;:39::i;:::-;5185:179;;;:::o;1986:282:13:-;2045:12;;;;;;;;;;;2044:13;2036:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;2093:17;2101:8;2093:7;:17::i;:::-;2085:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;2168:17;2176:8;2168:7;:17::i;:::-;2154:31;;:10;:31;;;2146:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;2233:1;2218:11;;:16;;;;;;;:::i;:::-;;;;;;;;2245:15;2251:8;2245:5;:15::i;:::-;1986:282;:::o;652:31::-;;;;;;;;;;;;;:::o;1537:437::-;1196:12:0;:10;:12::i;:::-;1185:23;;:7;:5;:7::i;:::-;:23;;;1177:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1631:12:13::1;;;;;;;;;;;1623:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1719:10;;1705:11;;:24;1697:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;1764:6;1760:207;1780:10;:17;1776:1;:21;1760:207;;;1850:1;1822:24;1832:10;1843:1;1832:13;;;;;;;;:::i;:::-;;;;;;;;1822:9;:24::i;:::-;:29;1819:137;;;1871:11;;:13;;;;;;;;;:::i;:::-;;;;;;1903:37;1913:10;1924:1;1913:13;;;;;;;;:::i;:::-;;;;;;;;1928:11;;1903:9;:37::i;:::-;1819:137;1799:3;;;;;:::i;:::-;;;;1760:207;;;;1537:437:::0;:::o;1254:147::-;1196:12:0;:10;:12::i;:::-;1185:23;;:7;:5;:7::i;:::-;:23;;;1177:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1337:11:13::1;;;;;;;;;;;1336:12;1328:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;1387:6;;1377:7;:16;;;;;;;:::i;:::-;;1254:147:::0;;:::o;2117:235:1:-;2189:7;2208:13;2224:7;:16;2232:7;2224:16;;;;;;;;;;;;;;;;;;;;;2208:32;;2275:1;2258:19;;:5;:19;;;;2250:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2340:5;2333:12;;;2117:235;;;:::o;561:34:13:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1855:205:1:-;1927:7;1971:1;1954:19;;:5;:19;;;;1946:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2037:9;:16;2047:5;2037:16;;;;;;;;;;;;;;;;2030:23;;1855:205;;;:::o;1605:92:0:-;1196:12;:10;:12::i;:::-;1185:23;;:7;:5;:7::i;:::-;:23;;;1177:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1669:21:::1;1687:1;1669:9;:21::i;:::-;1605:92::o:0;973:85::-;1019:7;1045:6;;;;;;;;;;;1038:13;;973:85;:::o;2576:102:1:-;2632:13;2664:7;2657:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2576:102;:::o;4209:290::-;4323:12;:10;:12::i;:::-;4311:24;;:8;:24;;;;4303:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4421:8;4376:18;:32;4395:12;:10;:12::i;:::-;4376:32;;;;;;;;;;;;;;;:42;4409:8;4376:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;4473:8;4444:48;;4459:12;:10;:12::i;:::-;4444:48;;;4483:8;4444:48;;;;;;:::i;:::-;;;;;;;;4209:290;;:::o;5430:320::-;5599:41;5618:12;:10;:12::i;:::-;5632:7;5599:18;:41::i;:::-;5591:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5704:39;5718:4;5724:2;5728:7;5737:5;5704:13;:39::i;:::-;5430:320;;;;:::o;2744:329::-;2817:13;2850:16;2858:7;2850;:16::i;:::-;2842:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;2929:21;2953:10;:8;:10::i;:::-;2929:34;;3004:1;2986:7;2980:21;:25;:86;;;;;;;;;;;;;;;;;3032:7;3041:18;:7;:16;:18::i;:::-;3015:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2980:86;2973:93;;;2744:329;;;:::o;739:23:13:-;;;;;;;;;;;;;:::o;1154:88::-;1196:12:0;:10;:12::i;:::-;1185:23;;:7;:5;:7::i;:::-;:23;;;1177:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1222:12:13::1;;;;;;;;;;;1221:13;1206:12;;:28;;;;;;;;;;;;;;;;;;1154:88::o:0;4565:162:1:-;4662:4;4685:18;:25;4704:5;4685:25;;;;;;;;;;;;;;;:35;4711:8;4685:35;;;;;;;;;;;;;;;;;;;;;;;;;4678:42;;4565:162;;;;:::o;1413:112:13:-;1196:12:0;:10;:12::i;:::-;1185:23;;:7;:5;:7::i;:::-;:23;;;1177:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1501:16:13::1;1490:8;;:27;;;;;;;;;;;;;;;;;;1413:112:::0;:::o;1846:189:0:-;1196:12;:10;:12::i;:::-;1185:23;;:7;:5;:7::i;:::-;:23;;;1177:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1954:1:::1;1934:22;;:8;:22;;;;1926:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2009:19;2019:8;2009:9;:19::i;:::-;1846:189:::0;:::o;2844:139:13:-;1196:12:0;:10;:12::i;:::-;1185:23;;:7;:5;:7::i;:::-;:23;;;1177:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2937:8:13::1;2929:22;;:45;2952:21;2929:45;;;;;;;;;;;;;;;;;;;;;;;2921:54;;;::::0;::::1;;2844:139:::0;:::o;517:31::-;;;;;;;;;;;;;:::o;1057:85::-;1196:12:0;:10;:12::i;:::-;1185:23;;:7;:5;:7::i;:::-;:23;;;1177:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1123:11:13::1;;;;;;;;;;;1122:12;1108:11;;:26;;;;;;;;;;;;;;;;;;1057:85::o:0;763:155:10:-;848:4;886:25;871:40;;;:11;:40;;;;864:47;;763:155;;;:::o;7222:125:1:-;7287:4;7338:1;7310:30;;:7;:16;7318:7;7310:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7303:37;;7222:125;;;:::o;587:96:8:-;640:7;666:10;659:17;;587:96;:::o;11073:171:1:-;11174:2;11147:15;:24;11163:7;11147:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11229:7;11225:2;11191:46;;11200:23;11215:7;11200:14;:23::i;:::-;11191:46;;;;;;;;;;;;11073:171;;:::o;9730:348::-;9789:13;9805:23;9820:7;9805:14;:23::i;:::-;9789:39;;9839:48;9860:5;9875:1;9879:7;9839:20;:48::i;:::-;9925:29;9942:1;9946:7;9925:8;:29::i;:::-;9985:1;9965:9;:16;9975:5;9965:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;10003:7;:16;10011:7;10003:16;;;;;;;;;;;;9996:23;;;;;;;;;;;10063:7;10059:1;10035:36;;10044:5;10035:36;;;;;;;;;;;;9779:299;9730:348;:::o;7505:344::-;7598:4;7622:16;7630:7;7622;:16::i;:::-;7614:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7697:13;7713:23;7728:7;7713:14;:23::i;:::-;7697:39;;7765:5;7754:16;;:7;:16;;;:51;;;;7798:7;7774:31;;:20;7786:7;7774:11;:20::i;:::-;:31;;;7754:51;:87;;;;7809:32;7826:5;7833:7;7809:16;:32::i;:::-;7754:87;7746:96;;;7505:344;;;;:::o;10402:560::-;10556:4;10529:31;;:23;10544:7;10529:14;:23::i;:::-;:31;;;10521:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10638:1;10624:16;;:2;:16;;;;10616:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10692:39;10713:4;10719:2;10723:7;10692:20;:39::i;:::-;10793:29;10810:1;10814:7;10793:8;:29::i;:::-;10852:1;10833:9;:15;10843:4;10833:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10880:1;10863:9;:13;10873:2;10863:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10910:2;10891:7;:16;10899:7;10891:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10947:7;10943:2;10928:27;;10937:4;10928:27;;;;;;;;;;;;10402:560;;;:::o;8179:108::-;8254:26;8264:2;8268:7;8254:26;;;;;;;;;;;;:9;:26::i;:::-;8179:108;;:::o;2041:169:0:-;2096:16;2115:6;;;;;;;;;;;2096:25;;2140:8;2131:6;;:17;;;;;;;;;;;;;;;;;;2194:8;2163:40;;2184:8;2163:40;;;;;;;;;;;;2086:124;2041:169;:::o;6612:307:1:-;6763:28;6773:4;6779:2;6783:7;6763:9;:28::i;:::-;6809:48;6832:4;6838:2;6842:7;6851:5;6809:22;:48::i;:::-;6801:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6612:307;;;;:::o;944:101:13:-;996:13;1030:7;1023:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;944:101;:::o;275:703:9:-;331:13;557:1;548:5;:10;544:51;;;574:10;;;;;;;;;;;;;;;;;;;;;544:51;604:12;619:5;604:20;;634:14;658:75;673:1;665:4;:9;658:75;;690:8;;;;;:::i;:::-;;;;720:2;712:10;;;;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;742:39;;791:150;807:1;798:5;:10;791:150;;834:1;824:11;;;;;:::i;:::-;;;900:2;892:5;:10;;;;:::i;:::-;879:2;:24;;;;:::i;:::-;866:39;;849:6;856;849:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;928:2;919:11;;;;;:::i;:::-;;;791:150;;;964:6;950:21;;;;;275:703;;;;:::o;13131:122:1:-;;;;:::o;8508:311::-;8633:18;8639:2;8643:7;8633:5;:18::i;:::-;8682:54;8713:1;8717:2;8721:7;8730:5;8682:22;:54::i;:::-;8661:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;8508:311;;;:::o;11797:778::-;11947:4;11967:15;:2;:13;;;:15::i;:::-;11963:606;;;12018:2;12002:36;;;12039:12;:10;:12::i;:::-;12053:4;12059:7;12068:5;12002:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11998:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12258:1;12241:6;:13;:18;12237:266;;;12283:60;;;;;;;;;;:::i;:::-;;;;;;;;12237:266;12455:6;12449:13;12440:6;12436:2;12432:15;12425:38;11998:519;12134:41;;;12124:51;;;:6;:51;;;;12117:58;;;;;11963:606;12554:4;12547:11;;11797:778;;;;;;;:::o;9141:372::-;9234:1;9220:16;;:2;:16;;;;9212:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9292:16;9300:7;9292;:16::i;:::-;9291:17;9283:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9352:45;9381:1;9385:2;9389:7;9352:20;:45::i;:::-;9425:1;9408:9;:13;9418:2;9408:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9455:2;9436:7;:16;9444:7;9436:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9498:7;9494:2;9473:33;;9490:1;9473:33;;;;;;;;;;;;9141:372;;:::o;718:377:7:-;778:4;981:12;1046:7;1034:20;1026:28;;1087:1;1080:4;:8;1073:15;;;718:377;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:14:-;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:98::-;5966:6;6000:5;5994:12;5984:22;;5915:98;;;:::o;6019:168::-;6102:11;6136:6;6131:3;6124:19;6176:4;6171:3;6167:14;6152:29;;6019:168;;;;:::o;6193:360::-;6279:3;6307:38;6339:5;6307:38;:::i;:::-;6361:70;6424:6;6419:3;6361:70;:::i;:::-;6354:77;;6440:52;6485:6;6480:3;6473:4;6466:5;6462:16;6440:52;:::i;:::-;6517:29;6539:6;6517:29;:::i;:::-;6512:3;6508:39;6501:46;;6283:270;6193:360;;;;:::o;6559:309::-;6670:4;6708:2;6697:9;6693:18;6685:26;;6757:9;6751:4;6747:20;6743:1;6732:9;6728:17;6721:47;6785:76;6856:4;6847:6;6785:76;:::i;:::-;6777:84;;6559:309;;;;:::o;6874:117::-;6983:1;6980;6973:12;6997:180;7045:77;7042:1;7035:88;7142:4;7139:1;7132:15;7166:4;7163:1;7156:15;7183:281;7266:27;7288:4;7266:27;:::i;:::-;7258:6;7254:40;7396:6;7384:10;7381:22;7360:18;7348:10;7345:34;7342:62;7339:88;;;7407:18;;:::i;:::-;7339:88;7447:10;7443:2;7436:22;7226:238;7183:281;;:::o;7470:129::-;7504:6;7531:20;;:::i;:::-;7521:30;;7560:33;7588:4;7580:6;7560:33;:::i;:::-;7470:129;;;:::o;7605:311::-;7682:4;7772:18;7764:6;7761:30;7758:56;;;7794:18;;:::i;:::-;7758:56;7844:4;7836:6;7832:17;7824:25;;7904:4;7898;7894:15;7886:23;;7605:311;;;:::o;7922:117::-;8031:1;8028;8021:12;8062:710;8158:5;8183:81;8199:64;8256:6;8199:64;:::i;:::-;8183:81;:::i;:::-;8174:90;;8284:5;8313:6;8306:5;8299:21;8347:4;8340:5;8336:16;8329:23;;8400:4;8392:6;8388:17;8380:6;8376:30;8429:3;8421:6;8418:15;8415:122;;;8448:79;;:::i;:::-;8415:122;8563:6;8546:220;8580:6;8575:3;8572:15;8546:220;;;8655:3;8684:37;8717:3;8705:10;8684:37;:::i;:::-;8679:3;8672:50;8751:4;8746:3;8742:14;8735:21;;8622:144;8606:4;8601:3;8597:14;8590:21;;8546:220;;;8550:21;8164:608;;8062:710;;;;;:::o;8795:370::-;8866:5;8915:3;8908:4;8900:6;8896:17;8892:27;8882:122;;8923:79;;:::i;:::-;8882:122;9040:6;9027:20;9065:94;9155:3;9147:6;9140:4;9132:6;9128:17;9065:94;:::i;:::-;9056:103;;8872:293;8795:370;;;;:::o;9171:539::-;9255:6;9304:2;9292:9;9283:7;9279:23;9275:32;9272:119;;;9310:79;;:::i;:::-;9272:119;9458:1;9447:9;9443:17;9430:31;9488:18;9480:6;9477:30;9474:117;;;9510:79;;:::i;:::-;9474:117;9615:78;9685:7;9676:6;9665:9;9661:22;9615:78;:::i;:::-;9605:88;;9401:302;9171:539;;;;:::o;9716:117::-;9825:1;9822;9815:12;9853:553;9911:8;9921:6;9971:3;9964:4;9956:6;9952:17;9948:27;9938:122;;9979:79;;:::i;:::-;9938:122;10092:6;10079:20;10069:30;;10122:18;10114:6;10111:30;10108:117;;;10144:79;;:::i;:::-;10108:117;10258:4;10250:6;10246:17;10234:29;;10312:3;10304:4;10296:6;10292:17;10282:8;10278:32;10275:41;10272:128;;;10319:79;;:::i;:::-;10272:128;9853:553;;;;;:::o;10412:529::-;10483:6;10491;10540:2;10528:9;10519:7;10515:23;10511:32;10508:119;;;10546:79;;:::i;:::-;10508:119;10694:1;10683:9;10679:17;10666:31;10724:18;10716:6;10713:30;10710:117;;;10746:79;;:::i;:::-;10710:117;10859:65;10916:7;10907:6;10896:9;10892:22;10859:65;:::i;:::-;10841:83;;;;10637:297;10412:529;;;;;:::o;10947:329::-;11006:6;11055:2;11043:9;11034:7;11030:23;11026:32;11023:119;;;11061:79;;:::i;:::-;11023:119;11181:1;11206:53;11251:7;11242:6;11231:9;11227:22;11206:53;:::i;:::-;11196:63;;11152:117;10947:329;;;;:::o;11282:116::-;11352:21;11367:5;11352:21;:::i;:::-;11345:5;11342:32;11332:60;;11388:1;11385;11378:12;11332:60;11282:116;:::o;11404:133::-;11447:5;11485:6;11472:20;11463:29;;11501:30;11525:5;11501:30;:::i;:::-;11404:133;;;;:::o;11543:468::-;11608:6;11616;11665:2;11653:9;11644:7;11640:23;11636:32;11633:119;;;11671:79;;:::i;:::-;11633:119;11791:1;11816:53;11861:7;11852:6;11841:9;11837:22;11816:53;:::i;:::-;11806:63;;11762:117;11918:2;11944:50;11986:7;11977:6;11966:9;11962:22;11944:50;:::i;:::-;11934:60;;11889:115;11543:468;;;;;:::o;12017:117::-;12126:1;12123;12116:12;12140:307;12201:4;12291:18;12283:6;12280:30;12277:56;;;12313:18;;:::i;:::-;12277:56;12351:29;12373:6;12351:29;:::i;:::-;12343:37;;12435:4;12429;12425:15;12417:23;;12140:307;;;:::o;12453:154::-;12537:6;12532:3;12527;12514:30;12599:1;12590:6;12585:3;12581:16;12574:27;12453:154;;;:::o;12613:410::-;12690:5;12715:65;12731:48;12772:6;12731:48;:::i;:::-;12715:65;:::i;:::-;12706:74;;12803:6;12796:5;12789:21;12841:4;12834:5;12830:16;12879:3;12870:6;12865:3;12861:16;12858:25;12855:112;;;12886:79;;:::i;:::-;12855:112;12976:41;13010:6;13005:3;13000;12976:41;:::i;:::-;12696:327;12613:410;;;;;:::o;13042:338::-;13097:5;13146:3;13139:4;13131:6;13127:17;13123:27;13113:122;;13154:79;;:::i;:::-;13113:122;13271:6;13258:20;13296:78;13370:3;13362:6;13355:4;13347:6;13343:17;13296:78;:::i;:::-;13287:87;;13103:277;13042:338;;;;:::o;13386:943::-;13481:6;13489;13497;13505;13554:3;13542:9;13533:7;13529:23;13525:33;13522:120;;;13561:79;;:::i;:::-;13522:120;13681:1;13706:53;13751:7;13742:6;13731:9;13727:22;13706:53;:::i;:::-;13696:63;;13652:117;13808:2;13834:53;13879:7;13870:6;13859:9;13855:22;13834:53;:::i;:::-;13824:63;;13779:118;13936:2;13962:53;14007:7;13998:6;13987:9;13983:22;13962:53;:::i;:::-;13952:63;;13907:118;14092:2;14081:9;14077:18;14064:32;14123:18;14115:6;14112:30;14109:117;;;14145:79;;:::i;:::-;14109:117;14250:62;14304:7;14295:6;14284:9;14280:22;14250:62;:::i;:::-;14240:72;;14035:287;13386:943;;;;;;;:::o;14335:474::-;14403:6;14411;14460:2;14448:9;14439:7;14435:23;14431:32;14428:119;;;14466:79;;:::i;:::-;14428:119;14586:1;14611:53;14656:7;14647:6;14636:9;14632:22;14611:53;:::i;:::-;14601:63;;14557:117;14713:2;14739:53;14784:7;14775:6;14764:9;14760:22;14739:53;:::i;:::-;14729:63;;14684:118;14335:474;;;;;:::o;14815:180::-;14863:77;14860:1;14853:88;14960:4;14957:1;14950:15;14984:4;14981:1;14974:15;15001:320;15045:6;15082:1;15076:4;15072:12;15062:22;;15129:1;15123:4;15119:12;15150:18;15140:81;;15206:4;15198:6;15194:17;15184:27;;15140:81;15268:2;15260:6;15257:14;15237:18;15234:38;15231:84;;;15287:18;;:::i;:::-;15231:84;15052:269;15001:320;;;:::o;15327:231::-;15467:34;15463:1;15455:6;15451:14;15444:58;15536:14;15531:2;15523:6;15519:15;15512:39;15327:231;:::o;15564:366::-;15706:3;15727:67;15791:2;15786:3;15727:67;:::i;:::-;15720:74;;15803:93;15892:3;15803:93;:::i;:::-;15921:2;15916:3;15912:12;15905:19;;15564:366;;;:::o;15936:419::-;16102:4;16140:2;16129:9;16125:18;16117:26;;16189:9;16183:4;16179:20;16175:1;16164:9;16160:17;16153:47;16217:131;16343:4;16217:131;:::i;:::-;16209:139;;15936:419;;;:::o;16361:220::-;16501:34;16497:1;16489:6;16485:14;16478:58;16570:3;16565:2;16557:6;16553:15;16546:28;16361:220;:::o;16587:366::-;16729:3;16750:67;16814:2;16809:3;16750:67;:::i;:::-;16743:74;;16826:93;16915:3;16826:93;:::i;:::-;16944:2;16939:3;16935:12;16928:19;;16587:366;;;:::o;16959:419::-;17125:4;17163:2;17152:9;17148:18;17140:26;;17212:9;17206:4;17202:20;17198:1;17187:9;17183:17;17176:47;17240:131;17366:4;17240:131;:::i;:::-;17232:139;;16959:419;;;:::o;17384:243::-;17524:34;17520:1;17512:6;17508:14;17501:58;17593:26;17588:2;17580:6;17576:15;17569:51;17384:243;:::o;17633:366::-;17775:3;17796:67;17860:2;17855:3;17796:67;:::i;:::-;17789:74;;17872:93;17961:3;17872:93;:::i;:::-;17990:2;17985:3;17981:12;17974:19;;17633:366;;;:::o;18005:419::-;18171:4;18209:2;18198:9;18194:18;18186:26;;18258:9;18252:4;18248:20;18244:1;18233:9;18229:17;18222:47;18286:131;18412:4;18286:131;:::i;:::-;18278:139;;18005:419;;;:::o;18430:162::-;18570:14;18566:1;18558:6;18554:14;18547:38;18430:162;:::o;18598:366::-;18740:3;18761:67;18825:2;18820:3;18761:67;:::i;:::-;18754:74;;18837:93;18926:3;18837:93;:::i;:::-;18955:2;18950:3;18946:12;18939:19;;18598:366;;;:::o;18970:419::-;19136:4;19174:2;19163:9;19159:18;19151:26;;19223:9;19217:4;19213:20;19209:1;19198:9;19194:17;19187:47;19251:131;19377:4;19251:131;:::i;:::-;19243:139;;18970:419;;;:::o;19395:170::-;19535:22;19531:1;19523:6;19519:14;19512:46;19395:170;:::o;19571:366::-;19713:3;19734:67;19798:2;19793:3;19734:67;:::i;:::-;19727:74;;19810:93;19899:3;19810:93;:::i;:::-;19928:2;19923:3;19919:12;19912:19;;19571:366;;;:::o;19943:419::-;20109:4;20147:2;20136:9;20132:18;20124:26;;20196:9;20190:4;20186:20;20182:1;20171:9;20167:17;20160:47;20224:131;20350:4;20224:131;:::i;:::-;20216:139;;19943:419;;;:::o;20368:167::-;20508:19;20504:1;20496:6;20492:14;20485:43;20368:167;:::o;20541:366::-;20683:3;20704:67;20768:2;20763:3;20704:67;:::i;:::-;20697:74;;20780:93;20869:3;20780:93;:::i;:::-;20898:2;20893:3;20889:12;20882:19;;20541:366;;;:::o;20913:419::-;21079:4;21117:2;21106:9;21102:18;21094:26;;21166:9;21160:4;21156:20;21152:1;21141:9;21137:17;21130:47;21194:131;21320:4;21194:131;:::i;:::-;21186:139;;20913:419;;;:::o;21338:332::-;21459:4;21497:2;21486:9;21482:18;21474:26;;21510:71;21578:1;21567:9;21563:17;21554:6;21510:71;:::i;:::-;21591:72;21659:2;21648:9;21644:18;21635:6;21591:72;:::i;:::-;21338:332;;;;;:::o;21676:147::-;21777:11;21814:3;21799:18;;21676:147;;;;:::o;21829:373::-;21933:3;21961:38;21993:5;21961:38;:::i;:::-;22015:88;22096:6;22091:3;22015:88;:::i;:::-;22008:95;;22112:52;22157:6;22152:3;22145:4;22138:5;22134:16;22112:52;:::i;:::-;22189:6;22184:3;22180:16;22173:23;;21937:265;21829:373;;;;:::o;22208:271::-;22338:3;22360:93;22449:3;22440:6;22360:93;:::i;:::-;22353:100;;22470:3;22463:10;;22208:271;;;;:::o;22485:164::-;22625:16;22621:1;22613:6;22609:14;22602:40;22485:164;:::o;22655:366::-;22797:3;22818:67;22882:2;22877:3;22818:67;:::i;:::-;22811:74;;22894:93;22983:3;22894:93;:::i;:::-;23012:2;23007:3;23003:12;22996:19;;22655:366;;;:::o;23027:419::-;23193:4;23231:2;23220:9;23216:18;23208:26;;23280:9;23274:4;23270:20;23266:1;23255:9;23251:17;23244:47;23308:131;23434:4;23308:131;:::i;:::-;23300:139;;23027:419;;;:::o;23452:180::-;23500:77;23497:1;23490:88;23597:4;23594:1;23587:15;23621:4;23618:1;23611:15;23638:191;23678:4;23698:20;23716:1;23698:20;:::i;:::-;23693:25;;23732:20;23750:1;23732:20;:::i;:::-;23727:25;;23771:1;23768;23765:8;23762:34;;;23776:18;;:::i;:::-;23762:34;23821:1;23818;23814:9;23806:17;;23638:191;;;;:::o;23835:236::-;23975:34;23971:1;23963:6;23959:14;23952:58;24044:19;24039:2;24031:6;24027:15;24020:44;23835:236;:::o;24077:366::-;24219:3;24240:67;24304:2;24299:3;24240:67;:::i;:::-;24233:74;;24316:93;24405:3;24316:93;:::i;:::-;24434:2;24429:3;24425:12;24418:19;;24077:366;;;:::o;24449:419::-;24615:4;24653:2;24642:9;24638:18;24630:26;;24702:9;24696:4;24692:20;24688:1;24677:9;24673:17;24666:47;24730:131;24856:4;24730:131;:::i;:::-;24722:139;;24449:419;;;:::o;24874:182::-;25014:34;25010:1;25002:6;24998:14;24991:58;24874:182;:::o;25062:366::-;25204:3;25225:67;25289:2;25284:3;25225:67;:::i;:::-;25218:74;;25301:93;25390:3;25301:93;:::i;:::-;25419:2;25414:3;25410:12;25403:19;;25062:366;;;:::o;25434:419::-;25600:4;25638:2;25627:9;25623:18;25615:26;;25687:9;25681:4;25677:20;25673:1;25662:9;25658:17;25651:47;25715:131;25841:4;25715:131;:::i;:::-;25707:139;;25434:419;;;:::o;25859:225::-;25999:34;25995:1;25987:6;25983:14;25976:58;26068:8;26063:2;26055:6;26051:15;26044:33;25859:225;:::o;26090:366::-;26232:3;26253:67;26317:2;26312:3;26253:67;:::i;:::-;26246:74;;26329:93;26418:3;26329:93;:::i;:::-;26447:2;26442:3;26438:12;26431:19;;26090:366;;;:::o;26462:419::-;26628:4;26666:2;26655:9;26651:18;26643:26;;26715:9;26709:4;26705:20;26701:1;26690:9;26686:17;26679:47;26743:131;26869:4;26743:131;:::i;:::-;26735:139;;26462:419;;;:::o;26887:165::-;27027:17;27023:1;27015:6;27011:14;27004:41;26887:165;:::o;27058:366::-;27200:3;27221:67;27285:2;27280:3;27221:67;:::i;:::-;27214:74;;27297:93;27386:3;27297:93;:::i;:::-;27415:2;27410:3;27406:12;27399:19;;27058:366;;;:::o;27430:419::-;27596:4;27634:2;27623:9;27619:18;27611:26;;27683:9;27677:4;27673:20;27669:1;27658:9;27654:17;27647:47;27711:131;27837:4;27711:131;:::i;:::-;27703:139;;27430:419;;;:::o;27855:180::-;27903:77;27900:1;27893:88;28000:4;27997:1;27990:15;28024:4;28021:1;28014:15;28041:233;28080:3;28103:24;28121:5;28103:24;:::i;:::-;28094:33;;28149:66;28142:5;28139:77;28136:103;;;28219:18;;:::i;:::-;28136:103;28266:1;28259:5;28255:13;28248:20;;28041:233;;;:::o;28280:163::-;28420:15;28416:1;28408:6;28404:14;28397:39;28280:163;:::o;28449:366::-;28591:3;28612:67;28676:2;28671:3;28612:67;:::i;:::-;28605:74;;28688:93;28777:3;28688:93;:::i;:::-;28806:2;28801:3;28797:12;28790:19;;28449:366;;;:::o;28821:419::-;28987:4;29025:2;29014:9;29010:18;29002:26;;29074:9;29068:4;29064:20;29060:1;29049:9;29045:17;29038:47;29102:131;29228:4;29102:131;:::i;:::-;29094:139;;28821:419;;;:::o;29246:228::-;29386:34;29382:1;29374:6;29370:14;29363:58;29455:11;29450:2;29442:6;29438:15;29431:36;29246:228;:::o;29480:366::-;29622:3;29643:67;29707:2;29702:3;29643:67;:::i;:::-;29636:74;;29719:93;29808:3;29719:93;:::i;:::-;29837:2;29832:3;29828:12;29821:19;;29480:366;;;:::o;29852:419::-;30018:4;30056:2;30045:9;30041:18;30033:26;;30105:9;30099:4;30095:20;30091:1;30080:9;30076:17;30069:47;30133:131;30259:4;30133:131;:::i;:::-;30125:139;;29852:419;;;:::o;30277:229::-;30417:34;30413:1;30405:6;30401:14;30394:58;30486:12;30481:2;30473:6;30469:15;30462:37;30277:229;:::o;30512:366::-;30654:3;30675:67;30739:2;30734:3;30675:67;:::i;:::-;30668:74;;30751:93;30840:3;30751:93;:::i;:::-;30869:2;30864:3;30860:12;30853:19;;30512:366;;;:::o;30884:419::-;31050:4;31088:2;31077:9;31073:18;31065:26;;31137:9;31131:4;31127:20;31123:1;31112:9;31108:17;31101:47;31165:131;31291:4;31165:131;:::i;:::-;31157:139;;30884:419;;;:::o;31309:175::-;31449:27;31445:1;31437:6;31433:14;31426:51;31309:175;:::o;31490:366::-;31632:3;31653:67;31717:2;31712:3;31653:67;:::i;:::-;31646:74;;31729:93;31818:3;31729:93;:::i;:::-;31847:2;31842:3;31838:12;31831:19;;31490:366;;;:::o;31862:419::-;32028:4;32066:2;32055:9;32051:18;32043:26;;32115:9;32109:4;32105:20;32101:1;32090:9;32086:17;32079:47;32143:131;32269:4;32143:131;:::i;:::-;32135:139;;31862:419;;;:::o;32287:234::-;32427:34;32423:1;32415:6;32411:14;32404:58;32496:17;32491:2;32483:6;32479:15;32472:42;32287:234;:::o;32527:366::-;32669:3;32690:67;32754:2;32749:3;32690:67;:::i;:::-;32683:74;;32766:93;32855:3;32766:93;:::i;:::-;32884:2;32879:3;32875:12;32868:19;;32527:366;;;:::o;32899:419::-;33065:4;33103:2;33092:9;33088:18;33080:26;;33152:9;33146:4;33142:20;33138:1;33127:9;33123:17;33116:47;33180:131;33306:4;33180:131;:::i;:::-;33172:139;;32899:419;;;:::o;33324:148::-;33426:11;33463:3;33448:18;;33324:148;;;;:::o;33478:377::-;33584:3;33612:39;33645:5;33612:39;:::i;:::-;33667:89;33749:6;33744:3;33667:89;:::i;:::-;33660:96;;33765:52;33810:6;33805:3;33798:4;33791:5;33787:16;33765:52;:::i;:::-;33842:6;33837:3;33833:16;33826:23;;33588:267;33478:377;;;;:::o;33861:435::-;34041:3;34063:95;34154:3;34145:6;34063:95;:::i;:::-;34056:102;;34175:95;34266:3;34257:6;34175:95;:::i;:::-;34168:102;;34287:3;34280:10;;33861:435;;;;;:::o;34302:225::-;34442:34;34438:1;34430:6;34426:14;34419:58;34511:8;34506:2;34498:6;34494:15;34487:33;34302:225;:::o;34533:366::-;34675:3;34696:67;34760:2;34755:3;34696:67;:::i;:::-;34689:74;;34772:93;34861:3;34772:93;:::i;:::-;34890:2;34885:3;34881:12;34874:19;;34533:366;;;:::o;34905:419::-;35071:4;35109:2;35098:9;35094:18;35086:26;;35158:9;35152:4;35148:20;35144:1;35133:9;35129:17;35122:47;35186:131;35312:4;35186:131;:::i;:::-;35178:139;;34905:419;;;:::o;35330:231::-;35470:34;35466:1;35458:6;35454:14;35447:58;35539:14;35534:2;35526:6;35522:15;35515:39;35330:231;:::o;35567:366::-;35709:3;35730:67;35794:2;35789:3;35730:67;:::i;:::-;35723:74;;35806:93;35895:3;35806:93;:::i;:::-;35924:2;35919:3;35915:12;35908:19;;35567:366;;;:::o;35939:419::-;36105:4;36143:2;36132:9;36128:18;36120:26;;36192:9;36186:4;36182:20;36178:1;36167:9;36163:17;36156:47;36220:131;36346:4;36220:131;:::i;:::-;36212:139;;35939:419;;;:::o;36364:228::-;36504:34;36500:1;36492:6;36488:14;36481:58;36573:11;36568:2;36560:6;36556:15;36549:36;36364:228;:::o;36598:366::-;36740:3;36761:67;36825:2;36820:3;36761:67;:::i;:::-;36754:74;;36837:93;36926:3;36837:93;:::i;:::-;36955:2;36950:3;36946:12;36939:19;;36598:366;;;:::o;36970:419::-;37136:4;37174:2;37163:9;37159:18;37151:26;;37223:9;37217:4;37213:20;37209:1;37198:9;37194:17;37187:47;37251:131;37377:4;37251:131;:::i;:::-;37243:139;;36970:419;;;:::o;37395:223::-;37535:34;37531:1;37523:6;37519:14;37512:58;37604:6;37599:2;37591:6;37587:15;37580:31;37395:223;:::o;37624:366::-;37766:3;37787:67;37851:2;37846:3;37787:67;:::i;:::-;37780:74;;37863:93;37952:3;37863:93;:::i;:::-;37981:2;37976:3;37972:12;37965:19;;37624:366;;;:::o;37996:419::-;38162:4;38200:2;38189:9;38185:18;38177:26;;38249:9;38243:4;38239:20;38235:1;38224:9;38220:17;38213:47;38277:131;38403:4;38277:131;:::i;:::-;38269:139;;37996:419;;;:::o;38421:305::-;38461:3;38480:20;38498:1;38480:20;:::i;:::-;38475:25;;38514:20;38532:1;38514:20;:::i;:::-;38509:25;;38668:1;38600:66;38596:74;38593:1;38590:81;38587:107;;;38674:18;;:::i;:::-;38587:107;38718:1;38715;38711:9;38704:16;;38421:305;;;;:::o;38732:237::-;38872:34;38868:1;38860:6;38856:14;38849:58;38941:20;38936:2;38928:6;38924:15;38917:45;38732:237;:::o;38975:366::-;39117:3;39138:67;39202:2;39197:3;39138:67;:::i;:::-;39131:74;;39214:93;39303:3;39214:93;:::i;:::-;39332:2;39327:3;39323:12;39316:19;;38975:366;;;:::o;39347:419::-;39513:4;39551:2;39540:9;39536:18;39528:26;;39600:9;39594:4;39590:20;39586:1;39575:9;39571:17;39564:47;39628:131;39754:4;39628:131;:::i;:::-;39620:139;;39347:419;;;:::o;39772:180::-;39820:77;39817:1;39810:88;39917:4;39914:1;39907:15;39941:4;39938:1;39931:15;39958:185;39998:1;40015:20;40033:1;40015:20;:::i;:::-;40010:25;;40049:20;40067:1;40049:20;:::i;:::-;40044:25;;40088:1;40078:35;;40093:18;;:::i;:::-;40078:35;40135:1;40132;40128:9;40123:14;;39958:185;;;;:::o;40149:176::-;40181:1;40198:20;40216:1;40198:20;:::i;:::-;40193:25;;40232:20;40250:1;40232:20;:::i;:::-;40227:25;;40271:1;40261:35;;40276:18;;:::i;:::-;40261:35;40317:1;40314;40310:9;40305:14;;40149:176;;;;:::o;40331:640::-;40526:4;40564:3;40553:9;40549:19;40541:27;;40578:71;40646:1;40635:9;40631:17;40622:6;40578:71;:::i;:::-;40659:72;40727:2;40716:9;40712:18;40703:6;40659:72;:::i;:::-;40741;40809:2;40798:9;40794:18;40785:6;40741:72;:::i;:::-;40860:9;40854:4;40850:20;40845:2;40834:9;40830:18;40823:48;40888:76;40959:4;40950:6;40888:76;:::i;:::-;40880:84;;40331:640;;;;;;;:::o;40977:141::-;41033:5;41064:6;41058:13;41049:22;;41080:32;41106:5;41080:32;:::i;:::-;40977:141;;;;:::o;41124:349::-;41193:6;41242:2;41230:9;41221:7;41217:23;41213:32;41210:119;;;41248:79;;:::i;:::-;41210:119;41368:1;41393:63;41448:7;41439:6;41428:9;41424:22;41393:63;:::i;:::-;41383:73;;41339:127;41124:349;;;;:::o;41479:182::-;41619:34;41615:1;41607:6;41603:14;41596:58;41479:182;:::o;41667:366::-;41809:3;41830:67;41894:2;41889:3;41830:67;:::i;:::-;41823:74;;41906:93;41995:3;41906:93;:::i;:::-;42024:2;42019:3;42015:12;42008:19;;41667:366;;;:::o;42039:419::-;42205:4;42243:2;42232:9;42228:18;42220:26;;42292:9;42286:4;42282:20;42278:1;42267:9;42263:17;42256:47;42320:131;42446:4;42320:131;:::i;:::-;42312:139;;42039:419;;;:::o;42464:178::-;42604:30;42600:1;42592:6;42588:14;42581:54;42464:178;:::o;42648:366::-;42790:3;42811:67;42875:2;42870:3;42811:67;:::i;:::-;42804:74;;42887:93;42976:3;42887:93;:::i;:::-;43005:2;43000:3;42996:12;42989:19;;42648:366;;;:::o;43020:419::-;43186:4;43224:2;43213:9;43209:18;43201:26;;43273:9;43267:4;43263:20;43259:1;43248:9;43244:17;43237:47;43301:131;43427:4;43301:131;:::i;:::-;43293:139;;43020:419;;;:::o
Swarm Source
ipfs://efcb405ced375c602be2d624b5074045c03b5d339e44f5ae73a11e9745ca20d4
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.