ERC-721
Overview
Max Total Supply
168 GKCv2
Holders
21
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Balance
3 GKCv2Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
GlimmerKongsClubV2
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at moonbeam.moonscan.io on 2022-11-04 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.1; abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; return msg.data; } } interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } interface IERC721 is IERC165 { event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); function balanceOf(address owner) external view returns (uint256 balance); function ownerOf(uint256 tokenId) external view returns (address owner); function safeTransferFrom(address from, address to, uint256 tokenId) external; function transferFrom(address from, address to, uint256 tokenId) external; function approve(address to, uint256 tokenId) external; function getApproved(uint256 tokenId) external view returns (address operator); function setApprovalForAll(address operator, bool _approved) external; function isApprovedForAll(address owner, address operator) external view returns (bool); } interface IERC721Metadata is IERC721 { function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); } interface IERC721Enumerable is IERC721 { function totalSupply() external view returns (uint256); function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); function tokenByIndex(uint256 index) external view returns (uint256); } interface IERC721Receiver { function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); } contract ERC165 is IERC165 { bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7; mapping(bytes4 => bool) private _supportedInterfaces; function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return _supportedInterfaces[interfaceId]; } function _registerInterface(bytes4 interfaceId) internal virtual { require(interfaceId != 0xffffffff, "ERC165: invalid interface id"); _supportedInterfaces[interfaceId] = true; } } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } library EnumerableSet { struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } function _length(Set storage set) private view returns (uint256) { return set._values.length; } function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // Bytes32Set struct Bytes32Set { Set _inner; } function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } // AddressSet struct AddressSet { Set _inner; } function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } library EnumerableMap { struct MapEntry { bytes32 _key; bytes32 _value; } struct Map { // Storage of map keys and values MapEntry[] _entries; // Position of the entry defined by a key in the `entries` array, plus 1 // because index 0 means a key is not in the map. mapping (bytes32 => uint256) _indexes; } /** * @dev Adds a key-value pair to a map, or updates the value for an existing * key. O(1). * * Returns true if the key was added to the map, that is if it was not * already present. */ function _set(Map storage map, bytes32 key, bytes32 value) private returns (bool) { // We read and store the key's index to prevent multiple reads from the same storage slot uint256 keyIndex = map._indexes[key]; if (keyIndex == 0) { // Equivalent to !contains(map, key) map._entries.push(MapEntry({ _key: key, _value: value })); // The entry is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value map._indexes[key] = map._entries.length; return true; } else { map._entries[keyIndex - 1]._value = value; return false; } } /** * @dev Removes a key-value pair from a map. O(1). * * Returns true if the key was removed from the map, that is if it was present. */ function _remove(Map storage map, bytes32 key) private returns (bool) { // We read and store the key's index to prevent multiple reads from the same storage slot uint256 keyIndex = map._indexes[key]; if (keyIndex != 0) { // Equivalent to contains(map, key) // To delete a key-value pair from the _entries array in O(1), we swap the entry to delete with the last one // in the array, and then remove the last entry (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = keyIndex - 1; uint256 lastIndex = map._entries.length - 1; // When the entry to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. MapEntry storage lastEntry = map._entries[lastIndex]; // Move the last entry to the index where the entry to delete is map._entries[toDeleteIndex] = lastEntry; // Update the index for the moved entry map._indexes[lastEntry._key] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved entry was stored map._entries.pop(); // Delete the index for the deleted slot delete map._indexes[key]; return true; } else { return false; } } /** * @dev Returns true if the key is in the map. O(1). */ function _contains(Map storage map, bytes32 key) private view returns (bool) { return map._indexes[key] != 0; } /** * @dev Returns the number of key-value pairs in the map. O(1). */ function _length(Map storage map) private view returns (uint256) { return map._entries.length; } /** * @dev Returns the key-value pair stored at position `index` in the map. O(1). * * Note that there are no guarantees on the ordering of entries inside the * array, and it may change when more entries are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Map storage map, uint256 index) private view returns (bytes32, bytes32) { require(map._entries.length > index, "EnumerableMap: index out of bounds"); MapEntry storage entry = map._entries[index]; return (entry._key, entry._value); } /** * @dev Tries to returns the value associated with `key`. O(1). * Does not revert if `key` is not in the map. */ function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) { uint256 keyIndex = map._indexes[key]; if (keyIndex == 0) return (false, 0); // Equivalent to contains(map, key) return (true, map._entries[keyIndex - 1]._value); // All indexes are 1-based } /** * @dev Returns the value associated with `key`. O(1). * * Requirements: * * - `key` must be in the map. */ function _get(Map storage map, bytes32 key) private view returns (bytes32) { uint256 keyIndex = map._indexes[key]; require(keyIndex != 0, "EnumerableMap: nonexistent key"); // Equivalent to contains(map, key) return map._entries[keyIndex - 1]._value; // All indexes are 1-based } /** * @dev Same as {_get}, with a custom error message when `key` is not in the map. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {_tryGet}. */ function _get(Map storage map, bytes32 key, string memory errorMessage) private view returns (bytes32) { uint256 keyIndex = map._indexes[key]; require(keyIndex != 0, errorMessage); // Equivalent to contains(map, key) return map._entries[keyIndex - 1]._value; // All indexes are 1-based } // UintToAddressMap struct UintToAddressMap { Map _inner; } /** * @dev Adds a key-value pair to a map, or updates the value for an existing * key. O(1). * * Returns true if the key was added to the map, that is if it was not * already present. */ function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) { return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the key was removed from the map, that is if it was present. */ function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) { return _remove(map._inner, bytes32(key)); } /** * @dev Returns true if the key is in the map. O(1). */ function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) { return _contains(map._inner, bytes32(key)); } /** * @dev Returns the number of elements in the map. O(1). */ function length(UintToAddressMap storage map) internal view returns (uint256) { return _length(map._inner); } function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) { (bytes32 key, bytes32 value) = _at(map._inner, index); return (uint256(key), address(uint160(uint256(value)))); } /** * @dev Tries to returns the value associated with `key`. O(1). * Does not revert if `key` is not in the map. * * _Available since v3.4._ */ function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) { (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key)); return (success, address(uint160(uint256(value)))); } /** * @dev Returns the value associated with `key`. O(1). * * Requirements: * * - `key` must be in the map. */ function get(UintToAddressMap storage map, uint256 key) internal view returns (address) { return address(uint160(uint256(_get(map._inner, bytes32(key))))); } function get(UintToAddressMap storage map, uint256 key, string memory errorMessage) internal view returns (address) { return address(uint160(uint256(_get(map._inner, bytes32(key), errorMessage)))); } } /** * @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); } } contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using SafeMath for uint256; using Address for address; using EnumerableSet for EnumerableSet.UintSet; using EnumerableMap for EnumerableMap.UintToAddressMap; using Strings for uint256; // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector` bytes4 private constant _ERC721_RECEIVED = 0x150b7a02; // Mapping from holder address to their (enumerable) set of owned tokens mapping (address => EnumerableSet.UintSet) private _holderTokens; // Mapping from owner to list of owned token IDs mapping (address => uint256[]) internal ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) internal ownedTokensIndex; // Enumerable mapping from token ids to their owners EnumerableMap.UintToAddressMap private _tokenOwners; // 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; // Token name string private _name; // Token symbol string private _symbol; // Optional mapping for token URIs mapping (uint256 => string) private _tokenURIs; // Array with all token ids, used for enumeration uint256[] internal allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) internal allTokensIndex; // Base URI string private _baseURI; bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd; bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f; bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63; constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(_INTERFACE_ID_ERC721); _registerInterface(_INTERFACE_ID_ERC721_METADATA); _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE); } modifier onlyOwnerOf(uint256 _tokenId) { require(ownerOf(_tokenId) == msg.sender); _; } modifier canTransfer(uint256 _tokenId) { require(_isApprovedOrOwner(msg.sender, _tokenId)); _; } /** * @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 _holderTokens[owner].length(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { return _tokenOwners.get(tokenId, "ERC721: owner query for nonexistent token"); } /** * @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 _tokenURI = _tokenURIs[tokenId]; string memory base = baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI. return string(abi.encodePacked(base, tokenId.toString())); } /** * @dev Returns the base URI set via {_setBaseURI}. This will be * automatically added as a prefix in {tokenURI} to each token's URI, or * to the token ID if no specific URI is set for that token ID. */ function baseURI() public view virtual returns (string memory) { return _baseURI; } function totalSupplyString() public view virtual returns (string memory) { return _tokenOwners.length().toString(); } function addTokenTo(address _to, uint256 _tokenId) internal { uint256 length = ownedTokens[_to].length; ownedTokens[_to].push(_tokenId); ownedTokensIndex[_tokenId] = length; } function removeTokenFrom(address _from, uint256 _tokenId) internal { uint256 tokenIndex = ownedTokensIndex[_tokenId]; uint256 lastTokenIndex = ownedTokens[_from].length.sub(1); uint256 lastToken = ownedTokens[_from][lastTokenIndex]; ownedTokens[_from][tokenIndex] = lastToken; ownedTokens[_from][lastTokenIndex] = 0; ownedTokens[_from].pop(); ownedTokensIndex[_tokenId] = 0; ownedTokensIndex[lastToken] = tokenIndex; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { return _holderTokens[owner].at(index); } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds return _tokenOwners.length(); } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { (uint256 tokenId, ) = _tokenOwners.at(index); return tokenId; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require(_msgSender() == owner || ERC721.isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom(address from, address to, uint256 tokenId) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId); } function _safeTransfer(address from, address to, uint256 tokenId) internal virtual { _transfer(from, to, tokenId); } function _exists(uint256 tokenId) internal view virtual returns (bool) { return _tokenOwners.contains(tokenId); } function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || ERC721.isApprovedForAll(owner, spender)); } function _safeMint(address to, uint256 tokenId) internal virtual { _mint(to, tokenId); } 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"); allTokensIndex[tokenId] = allTokens.length; allTokens.push(tokenId); _beforeTokenTransfer(address(0), to, tokenId); _holderTokens[to].add(tokenId); addTokenTo(to, tokenId); _tokenOwners.set(tokenId, to); emit Transfer(address(0), to, tokenId); } function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); // internal owner _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); removeTokenFrom(owner, tokenId); // Clear metadata (if any) if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } _holderTokens[owner].remove(tokenId); _tokenOwners.remove(tokenId); emit Transfer(owner, address(0), tokenId); } function _transfer(address from, address to, uint256 tokenId) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); // internal owner require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _holderTokens[from].remove(tokenId); _holderTokens[to].add(tokenId); removeTokenFrom(from, tokenId); addTokenTo(to, tokenId); _tokenOwners.set(tokenId, to); emit Transfer(from, to, tokenId); } function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } function _setBaseURI(string memory baseURI_) internal virtual { _baseURI = baseURI_; } /** * @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()) { return true; } bytes memory returndata = to.functionCall(abi.encodeWithSelector( IERC721Receiver(to).onERC721Received.selector, _msgSender(), from, tokenId, _data ), "ERC721: transfer to non ERC721Receiver implementer"); bytes4 retval = abi.decode(returndata, (bytes4)); return (retval == _ERC721_RECEIVED); } function _approve(address to, uint256 tokenId) private { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); // internal owner } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { } } contract Ownable is Context { address public _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract GlimmerKongsClubV2 is Ownable, ERC721 { using Strings for string; using Strings for uint256; using SafeMath for uint256; constructor () ERC721("GlimmerKongsClubV2" ,"GKCv2"){} uint256 public priceMint = 2.5 ether; uint256 public MAX_KONG = 11111; string public baseExtension = ".json"; bool public pauseMint = false; address payable public marketing = payable(0x1C5d6C8c12e39E74Da75C17254Ab53Da8BcF6719); mapping (uint256 => uint256) public creatorNftMints; address public kong = 0x62E413D4b097b474999CF33d336cD74881084ba5; function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function withdraw() public onlyOwner { payable(msg.sender).transfer(address(this).balance); } function setBaseExtension(string memory _value) public onlyOwner { baseExtension = _value; } function setPriceMint(uint256 _value) public onlyOwner { priceMint = _value; } function setBaseURI(string memory _value) public onlyOwner { _setBaseURI(_value); } function flipPauseMint() public onlyOwner { pauseMint = !pauseMint; } function getOwnedTokens(address _owner) public view returns (uint256[] memory) { return ownedTokens[_owner]; } function mint(uint256 _amount) public payable { require(!pauseMint, "Paused."); require(totalSupply().add(_amount) <= MAX_KONG, "Limit Kongs exceeded."); require(msg.value >= priceMint.mul(_amount <= 0 ? 1 : _amount)); payable(marketing).transfer(msg.value); for(uint256 i = 0; i < _amount; i++){ _mint(msg.sender, totalSupply().add(1)); } } function mintWithId(uint256 _amount, uint256 _id) public { require(!pauseMint, "Paused."); require(totalSupply().add(_amount) <= MAX_KONG, "Limit Kongs exceeded."); require(IERC721(kong).ownerOf(_id) == msg.sender, "You are not holder of this NFT"); require(creatorNftMints[_id] == 0, "ID already used"); _mint(msg.sender, totalSupply().add(1)); creatorNftMints[_id]++; } function createKongs(uint256 _amount) public onlyOwner { require(totalSupply().add(_amount) <= MAX_KONG, "Limit Kongs exceeded."); for(uint256 i = 0; i < _amount; i++){ _mint(msg.sender, totalSupply().add(1)); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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_KONG","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"createKongs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"creatorNftMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipPauseMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getOwnedTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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":"kong","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketing","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"mintWithId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_value","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_value","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setPriceMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupplyString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526722b1c8c1227a0000600f55612b676010556040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506011908051906020019062000063929190620003b5565b506000601260006101000a81548160ff021916908315150217905550731c5d6c8c12e39e74da75c17254ab53da8bcf6719601260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507362e413d4b097b474999cf33d336cd74881084ba5601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200013657600080fd5b506040518060400160405280601281526020017f476c696d6d65724b6f6e6773436c7562563200000000000000000000000000008152506040518060400160405280600581526020017f474b4376320000000000000000000000000000000000000000000000000000008152506000620001b5620002d560201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35081600990805190602001906200026b929190620003b5565b5080600a908051906020019062000284929190620003b5565b506200029d6380ac58cd60e01b620002dd60201b60201c565b620002b5635b5e139f60e01b620002dd60201b60201c565b620002cd63780e9d6360e01b620002dd60201b60201c565b50506200054d565b600033905090565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141562000349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000340906200048c565b60405180910390fd5b6001806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b828054620003c390620004bf565b90600052602060002090601f016020900481019282620003e7576000855562000433565b82601f106200040257805160ff191683800117855562000433565b8280016001018555821562000433579182015b828111156200043257825182559160200191906001019062000415565b5b50905062000442919062000446565b5090565b5b808211156200046157600081600090555060010162000447565b5090565b600062000474601c83620004ae565b9150620004818262000524565b602082019050919050565b60006020820190508181036000830152620004a78162000465565b9050919050565b600082825260208201905092915050565b60006002820490506001821680620004d857607f821691505b60208210811415620004ef57620004ee620004f5565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4552433136353a20696e76616c696420696e7465726661636520696400000000600082015250565b614804806200055d6000396000f3fe6080604052600436106102255760003560e01c806370a0823111610123578063b9f7e218116100ab578063d9d616551161006f578063d9d61655146107fc578063da3ef23f14610839578063da6fa46c14610862578063e985e9c51461088d578063f2fde38b146108ca57610225565b8063b9f7e21814610703578063c668286214610740578063c87b56dd1461076b578063cd85cdb5146107a8578063d775c175146107d357610225565b806395d89b41116100f257806395d89b411461063d578063a0712d6814610668578063a22cb46514610684578063a5b59043146106ad578063b2bdfa7b146106d857610225565b806370a0823114610593578063715018a6146105d05780638537b926146105e75780638da5cb5b1461061257610225565b80633ccfd60b116101b157806355f804b31161017557806355f804b3146104c2578063619230bd146104eb578063626eeff6146105145780636352211e1461052b5780636c0360eb1461056857610225565b80633ccfd60b146103dd57806342842e0e146103f4578063438b63001461041d5780634f6ccce71461045a57806351ce65831461049757610225565b80630dee18e4116101f85780630dee18e4146102f857806318160ddd1461032157806323b872dd1461034c5780632d3e474a146103755780632f745c59146103a057610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063095ea7b3146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613375565b6108f3565b60405161025e91906139b0565b60405180910390f35b34801561027357600080fd5b5061027c61095b565b60405161028991906139cb565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b491906133eb565b6109ed565b6040516102c69190613958565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f19190613335565b610a72565b005b34801561030457600080fd5b5061031f600480360381019061031a91906133eb565b610b8a565b005b34801561032d57600080fd5b50610336610c10565b6040516103439190613ccd565b60405180910390f35b34801561035857600080fd5b50610373600480360381019061036e91906132a2565b610c21565b005b34801561038157600080fd5b5061038a610c81565b6040516103979190613973565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c29190613335565b610ca7565b6040516103d49190613ccd565b60405180910390f35b3480156103e957600080fd5b506103f2610d02565b005b34801561040057600080fd5b5061041b600480360381019061041691906132a2565b610dc7565b005b34801561042957600080fd5b50610444600480360381019061043f9190613208565b610e27565b604051610451919061398e565b60405180910390f35b34801561046657600080fd5b50610481600480360381019061047c91906133eb565b610ed5565b60405161048e9190613ccd565b60405180910390f35b3480156104a357600080fd5b506104ac610ef8565b6040516104b99190613958565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e491906133a2565b610f1e565b005b3480156104f757600080fd5b50610512600480360381019061050d91906133eb565b610fa6565b005b34801561052057600080fd5b506105296110c6565b005b34801561053757600080fd5b50610552600480360381019061054d91906133eb565b61116e565b60405161055f9190613958565b60405180910390f35b34801561057457600080fd5b5061057d6111a5565b60405161058a91906139cb565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b59190613208565b611237565b6040516105c79190613ccd565b60405180910390f35b3480156105dc57600080fd5b506105e56112f6565b005b3480156105f357600080fd5b506105fc611430565b6040516106099190613ccd565b60405180910390f35b34801561061e57600080fd5b50610627611436565b6040516106349190613958565b60405180910390f35b34801561064957600080fd5b5061065261145f565b60405161065f91906139cb565b60405180910390f35b610682600480360381019061067d91906133eb565b6114f1565b005b34801561069057600080fd5b506106ab60048036038101906106a691906132f5565b611680565b005b3480156106b957600080fd5b506106c2611801565b6040516106cf9190613ccd565b60405180910390f35b3480156106e457600080fd5b506106ed611807565b6040516106fa9190613958565b60405180910390f35b34801561070f57600080fd5b5061072a600480360381019061072591906133eb565b61182b565b6040516107379190613ccd565b60405180910390f35b34801561074c57600080fd5b50610755611843565b60405161076291906139cb565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d91906133eb565b6118d1565b60405161079f91906139cb565b60405180910390f35b3480156107b457600080fd5b506107bd61197b565b6040516107ca91906139b0565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f59190613418565b61198e565b005b34801561080857600080fd5b50610823600480360381019061081e9190613208565b611bfb565b604051610830919061398e565b60405180910390f35b34801561084557600080fd5b50610860600480360381019061085b91906133a2565b611c92565b005b34801561086e57600080fd5b50610877611d28565b60405161088491906139cb565b60405180910390f35b34801561089957600080fd5b506108b460048036038101906108af9190613262565b611d41565b6040516108c191906139b0565b60405180910390f35b3480156108d657600080fd5b506108f160048036038101906108ec9190613208565b611dd5565b005b600060016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b60606009805461096a90613f90565b80601f016020809104026020016040519081016040528092919081815260200182805461099690613f90565b80156109e35780601f106109b8576101008083540402835291602001916109e3565b820191906000526020600020905b8154815290600101906020018083116109c657829003601f168201915b5050505050905090565b60006109f882611f7e565b610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e90613bed565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a7d8261116e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae590613c6d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b0d611f9b565b73ffffffffffffffffffffffffffffffffffffffff161480610b3c5750610b3b81610b36611f9b565b611d41565b5b610b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7290613b2d565b60405180910390fd5b610b858383611fa3565b505050565b610b92611f9b565b73ffffffffffffffffffffffffffffffffffffffff16610bb0611436565b73ffffffffffffffffffffffffffffffffffffffff1614610c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfd90613c0d565b60405180910390fd5b80600f8190555050565b6000610c1c600561205c565b905090565b610c32610c2c611f9b565b82612071565b610c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6890613cad565b60405180910390fd5b610c7c83838361214f565b505050565b601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610cfa82600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061237a90919063ffffffff16565b905092915050565b610d0a611f9b565b73ffffffffffffffffffffffffffffffffffffffff16610d28611436565b73ffffffffffffffffffffffffffffffffffffffff1614610d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7590613c0d565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610dc4573d6000803e3d6000fd5b50565b610dd8610dd2611f9b565b82612071565b610e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0e90613cad565b60405180910390fd5b610e22838383612394565b505050565b60606000610e3483611237565b905060008167ffffffffffffffff811115610e5257610e51614158565b5b604051908082528060200260200182016040528015610e805781602001602082028036833780820191505090505b50905060005b82811015610eca57610e988582610ca7565b828281518110610eab57610eaa614129565b5b6020026020010181815250508080610ec290613ff3565b915050610e86565b508092505050919050565b600080610eec8360056123a490919063ffffffff16565b50905080915050919050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f26611f9b565b73ffffffffffffffffffffffffffffffffffffffff16610f44611436565b73ffffffffffffffffffffffffffffffffffffffff1614610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9190613c0d565b60405180910390fd5b610fa3816123d0565b50565b610fae611f9b565b73ffffffffffffffffffffffffffffffffffffffff16610fcc611436565b73ffffffffffffffffffffffffffffffffffffffff1614611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101990613c0d565b60405180910390fd5b60105461103f82611031610c10565b6123ea90919063ffffffff16565b1115611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107790613c8d565b60405180910390fd5b60005b818110156110c2576110af336110aa600161109c610c10565b6123ea90919063ffffffff16565b612448565b80806110ba90613ff3565b915050611083565b5050565b6110ce611f9b565b73ffffffffffffffffffffffffffffffffffffffff166110ec611436565b73ffffffffffffffffffffffffffffffffffffffff1614611142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113990613c0d565b60405180910390fd5b601260009054906101000a900460ff1615601260006101000a81548160ff021916908315150217905550565b600061119e826040518060600160405280602981526020016147a66029913960056126269092919063ffffffff16565b9050919050565b6060600e80546111b490613f90565b80601f01602080910402602001604051908101604052809291908181526020018280546111e090613f90565b801561122d5780601f106112025761010080835404028352916020019161122d565b820191906000526020600020905b81548152906001019060200180831161121057829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129f90613b4d565b60405180910390fd5b6112ef600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612645565b9050919050565b6112fe611f9b565b73ffffffffffffffffffffffffffffffffffffffff1661131c611436565b73ffffffffffffffffffffffffffffffffffffffff1614611372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136990613c0d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60105481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600a805461146e90613f90565b80601f016020809104026020016040519081016040528092919081815260200182805461149a90613f90565b80156114e75780601f106114bc576101008083540402835291602001916114e7565b820191906000526020600020905b8154815290600101906020018083116114ca57829003601f168201915b5050505050905090565b601260009054906101000a900460ff1615611541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153890613acd565b60405180910390fd5b60105461155e82611550610c10565b6123ea90919063ffffffff16565b111561159f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159690613c8d565b60405180910390fd5b6115c560008211156115b157816115b4565b60015b600f5461265a90919063ffffffff16565b3410156115d157600080fd5b601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611639573d6000803e3d6000fd5b5060005b8181101561167c57611669336116646001611656610c10565b6123ea90919063ffffffff16565b612448565b808061167490613ff3565b91505061163d565b5050565b611688611f9b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ed90613aad565b60405180910390fd5b8060086000611703611f9b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117b0611f9b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117f591906139b0565b60405180910390a35050565b600f5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60136020528060005260406000206000915090505481565b6011805461185090613f90565b80601f016020809104026020016040519081016040528092919081815260200182805461187c90613f90565b80156118c95780601f1061189e576101008083540402835291602001916118c9565b820191906000526020600020905b8154815290600101906020018083116118ac57829003601f168201915b505050505081565b60606118dc82611f7e565b61191b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191290613c4d565b60405180910390fd5b60006119256111a5565b905060008151116119455760405180602001604052806000815250611973565b8061194f846126d5565b601160405160200161196393929190613927565b6040516020818303038152906040525b915050919050565b601260009054906101000a900460ff1681565b601260009054906101000a900460ff16156119de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d590613acd565b60405180910390fd5b6010546119fb836119ed610c10565b6123ea90919063ffffffff16565b1115611a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3390613c8d565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611aae9190613ccd565b60206040518083038186803b158015611ac657600080fd5b505afa158015611ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afe9190613235565b73ffffffffffffffffffffffffffffffffffffffff1614611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4b90613b6d565b60405180910390fd5b6000601360008381526020019081526020016000205414611baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba190613a6d565b60405180910390fd5b611bce33611bc96001611bbb610c10565b6123ea90919063ffffffff16565b612448565b601360008281526020019081526020016000206000815480929190611bf290613ff3565b91905055505050565b6060600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611c8657602002820191906000526020600020905b815481526020019060010190808311611c72575b50505050509050919050565b611c9a611f9b565b73ffffffffffffffffffffffffffffffffffffffff16611cb8611436565b73ffffffffffffffffffffffffffffffffffffffff1614611d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0590613c0d565b60405180910390fd5b8060119080519060200190611d2492919061308c565b5050565b6060611d3c611d37600561205c565b6126d5565b905090565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ddd611f9b565b73ffffffffffffffffffffffffffffffffffffffff16611dfb611436565b73ffffffffffffffffffffffffffffffffffffffff1614611e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4890613c0d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb890613a0d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611f9482600561283690919063ffffffff16565b9050919050565b600033905090565b816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120168361116e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061206a82600001612850565b9050919050565b600061207c82611f7e565b6120bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b290613b0d565b60405180910390fd5b60006120c68361116e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061213557508373ffffffffffffffffffffffffffffffffffffffff1661211d846109ed565b73ffffffffffffffffffffffffffffffffffffffff16145b8061214657506121458185611d41565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661216f8261116e565b73ffffffffffffffffffffffffffffffffffffffff16146121c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bc90613c2d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222c90613a8d565b60405180910390fd5b612240838383612861565b61224b600082611fa3565b61229c81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061286690919063ffffffff16565b506122ee81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061288090919063ffffffff16565b506122f9838261289a565b6123038282612aca565b61231981836005612b949092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006123898360000183612bc9565b60001c905092915050565b61239f83838361214f565b505050565b6000806000806123b78660000186612c3d565b915091508160001c8160001c9350935050509250929050565b80600e90805190602001906123e692919061308c565b5050565b60008082846123f99190613db3565b90508381101561243e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243590613a4d565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124af90613bad565b60405180910390fd5b6124c181611f7e565b15612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f890613a2d565b60405180910390fd5b600c80549050600d600083815260200190815260200160002081905550600c81908060018154018082558091505060019003906000526020600020016000909190919091505561255360008383612861565b6125a481600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061288090919063ffffffff16565b506125af8282612aca565b6125c581836005612b949092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612639846000018460001b84612cc7565b60001c90509392505050565b600061265382600001612d68565b9050919050565b60008083141561266d57600090506126cf565b6000828461267b9190613e3a565b905082848261268a9190613e09565b146126ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c190613bcd565b60405180910390fd5b809150505b92915050565b6060600082141561271d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612831565b600082905060005b6000821461274f57808061273890613ff3565b915050600a826127489190613e09565b9150612725565b60008167ffffffffffffffff81111561276b5761276a614158565b5b6040519080825280601f01601f19166020018201604052801561279d5781602001600182028036833780820191505090505b5090505b6000851461282a576001826127b69190613e94565b9150600a856127c5919061403c565b60306127d19190613db3565b60f81b8183815181106127e7576127e6614129565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128239190613e09565b94506127a1565b8093505050505b919050565b6000612848836000018360001b612d79565b905092915050565b600081600001805490509050919050565b505050565b6000612878836000018360001b612d9c565b905092915050565b6000612892836000018360001b612eb4565b905092915050565b600060046000838152602001908152602001600020549050600061290a6001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050612f2490919063ffffffff16565b90506000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061295f5761295e614129565b5b9060005260206000200154905080600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002084815481106129be576129bd614129565b5b90600052602060002001819055506000600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612a1f57612a1e614129565b5b9060005260206000200181905550600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480612a7c57612a7b6140fa565b5b60019003818190600052602060002001600090559055600060046000868152602001908152602001600020819055508260046000838152602001908152602001600020819055505050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020829080600181540180825580915050600190039060005260206000200160009091909190915055806004600084815260200190815260200160002081905550505050565b6000612bc0846000018460001b8473ffffffffffffffffffffffffffffffffffffffff1660001b612f7d565b90509392505050565b600081836000018054905011612c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b906139ed565b60405180910390fd5b826000018281548110612c2a57612c29614129565b5b9060005260206000200154905092915050565b60008082846000018054905011612c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8090613b8d565b60405180910390fd5b6000846000018481548110612ca157612ca0614129565b5b906000526020600020906002020190508060000154816001015492509250509250929050565b60008084600101600085815260200190815260200160002054905060008114158390612d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2091906139cb565b60405180910390fd5b5084600001600182612d3b9190613e94565b81548110612d4c57612d4b614129565b5b9060005260206000209060020201600101549150509392505050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020541415905092915050565b60008083600101600084815260200190815260200160002054905060008114612ea8576000600182612dce9190613e94565b9050600060018660000180549050612de69190613e94565b90506000866000018281548110612e0057612dff614129565b5b9060005260206000200154905080876000018481548110612e2457612e23614129565b5b9060005260206000200181905550600183612e3f9190613db3565b8760010160008381526020019081526020016000208190555086600001805480612e6c57612e6b6140fa565b5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050612eae565b60009150505b92915050565b6000612ec08383613069565b612f19578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612f1e565b600090505b92915050565b600082821115612f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6090613aed565b60405180910390fd5b8183612f759190613e94565b905092915050565b600080846001016000858152602001908152602001600020549050600081141561302457846000016040518060400160405280868152602001858152509080600181540180825580915050600190039060005260206000209060020201600090919091909150600082015181600001556020820151816001015550508460000180549050856001016000868152602001908152602001600020819055506001915050613062565b82856000016001836130369190613e94565b8154811061304757613046614129565b5b90600052602060002090600202016001018190555060009150505b9392505050565b600080836001016000848152602001908152602001600020541415905092915050565b82805461309890613f90565b90600052602060002090601f0160209004810192826130ba5760008555613101565b82601f106130d357805160ff1916838001178555613101565b82800160010185558215613101579182015b828111156131005782518255916020019190600101906130e5565b5b50905061310e9190613112565b5090565b5b8082111561312b576000816000905550600101613113565b5090565b600061314261313d84613d0d565b613ce8565b90508281526020810184848401111561315e5761315d61418c565b5b613169848285613f4e565b509392505050565b60008135905061318081614749565b92915050565b60008151905061319581614749565b92915050565b6000813590506131aa81614760565b92915050565b6000813590506131bf81614777565b92915050565b600082601f8301126131da576131d9614187565b5b81356131ea84826020860161312f565b91505092915050565b6000813590506132028161478e565b92915050565b60006020828403121561321e5761321d614196565b5b600061322c84828501613171565b91505092915050565b60006020828403121561324b5761324a614196565b5b600061325984828501613186565b91505092915050565b6000806040838503121561327957613278614196565b5b600061328785828601613171565b925050602061329885828601613171565b9150509250929050565b6000806000606084860312156132bb576132ba614196565b5b60006132c986828701613171565b93505060206132da86828701613171565b92505060406132eb868287016131f3565b9150509250925092565b6000806040838503121561330c5761330b614196565b5b600061331a85828601613171565b925050602061332b8582860161319b565b9150509250929050565b6000806040838503121561334c5761334b614196565b5b600061335a85828601613171565b925050602061336b858286016131f3565b9150509250929050565b60006020828403121561338b5761338a614196565b5b6000613399848285016131b0565b91505092915050565b6000602082840312156133b8576133b7614196565b5b600082013567ffffffffffffffff8111156133d6576133d5614191565b5b6133e2848285016131c5565b91505092915050565b60006020828403121561340157613400614196565b5b600061340f848285016131f3565b91505092915050565b6000806040838503121561342f5761342e614196565b5b600061343d858286016131f3565b925050602061344e858286016131f3565b9150509250929050565b60006134648383613909565b60208301905092915050565b61347981613eda565b82525050565b61348881613ec8565b82525050565b600061349982613d63565b6134a38185613d86565b93506134ae83613d3e565b8060005b838110156134df5781516134c68882613458565b97506134d183613d79565b9250506001810190506134b2565b5085935050505092915050565b6134f581613eec565b82525050565b600061350682613d6e565b6135108185613d97565b9350613520818560208601613f5d565b6135298161419b565b840191505092915050565b600061353f82613d6e565b6135498185613da8565b9350613559818560208601613f5d565b80840191505092915050565b6000815461357281613f90565b61357c8186613da8565b9450600182166000811461359757600181146135a8576135db565b60ff198316865281860193506135db565b6135b185613d4e565b60005b838110156135d3578154818901526001820191506020810190506135b4565b838801955050505b50505092915050565b60006135f1602283613d97565b91506135fc826141ac565b604082019050919050565b6000613614602683613d97565b915061361f826141fb565b604082019050919050565b6000613637601c83613d97565b91506136428261424a565b602082019050919050565b600061365a601b83613d97565b915061366582614273565b602082019050919050565b600061367d600f83613d97565b91506136888261429c565b602082019050919050565b60006136a0602483613d97565b91506136ab826142c5565b604082019050919050565b60006136c3601983613d97565b91506136ce82614314565b602082019050919050565b60006136e6600783613d97565b91506136f18261433d565b602082019050919050565b6000613709601e83613d97565b915061371482614366565b602082019050919050565b600061372c602c83613d97565b91506137378261438f565b604082019050919050565b600061374f603883613d97565b915061375a826143de565b604082019050919050565b6000613772602a83613d97565b915061377d8261442d565b604082019050919050565b6000613795601e83613d97565b91506137a08261447c565b602082019050919050565b60006137b8602283613d97565b91506137c3826144a5565b604082019050919050565b60006137db602083613d97565b91506137e6826144f4565b602082019050919050565b60006137fe602183613d97565b91506138098261451d565b604082019050919050565b6000613821602c83613d97565b915061382c8261456c565b604082019050919050565b6000613844602083613d97565b915061384f826145bb565b602082019050919050565b6000613867602983613d97565b9150613872826145e4565b604082019050919050565b600061388a602f83613d97565b915061389582614633565b604082019050919050565b60006138ad602183613d97565b91506138b882614682565b604082019050919050565b60006138d0601583613d97565b91506138db826146d1565b602082019050919050565b60006138f3603183613d97565b91506138fe826146fa565b604082019050919050565b61391281613f44565b82525050565b61392181613f44565b82525050565b60006139338286613534565b915061393f8285613534565b915061394b8284613565565b9150819050949350505050565b600060208201905061396d600083018461347f565b92915050565b60006020820190506139886000830184613470565b92915050565b600060208201905081810360008301526139a8818461348e565b905092915050565b60006020820190506139c560008301846134ec565b92915050565b600060208201905081810360008301526139e581846134fb565b905092915050565b60006020820190508181036000830152613a06816135e4565b9050919050565b60006020820190508181036000830152613a2681613607565b9050919050565b60006020820190508181036000830152613a468161362a565b9050919050565b60006020820190508181036000830152613a668161364d565b9050919050565b60006020820190508181036000830152613a8681613670565b9050919050565b60006020820190508181036000830152613aa681613693565b9050919050565b60006020820190508181036000830152613ac6816136b6565b9050919050565b60006020820190508181036000830152613ae6816136d9565b9050919050565b60006020820190508181036000830152613b06816136fc565b9050919050565b60006020820190508181036000830152613b268161371f565b9050919050565b60006020820190508181036000830152613b4681613742565b9050919050565b60006020820190508181036000830152613b6681613765565b9050919050565b60006020820190508181036000830152613b8681613788565b9050919050565b60006020820190508181036000830152613ba6816137ab565b9050919050565b60006020820190508181036000830152613bc6816137ce565b9050919050565b60006020820190508181036000830152613be6816137f1565b9050919050565b60006020820190508181036000830152613c0681613814565b9050919050565b60006020820190508181036000830152613c2681613837565b9050919050565b60006020820190508181036000830152613c468161385a565b9050919050565b60006020820190508181036000830152613c668161387d565b9050919050565b60006020820190508181036000830152613c86816138a0565b9050919050565b60006020820190508181036000830152613ca6816138c3565b9050919050565b60006020820190508181036000830152613cc6816138e6565b9050919050565b6000602082019050613ce26000830184613918565b92915050565b6000613cf2613d03565b9050613cfe8282613fc2565b919050565b6000604051905090565b600067ffffffffffffffff821115613d2857613d27614158565b5b613d318261419b565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613dbe82613f44565b9150613dc983613f44565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613dfe57613dfd61406d565b5b828201905092915050565b6000613e1482613f44565b9150613e1f83613f44565b925082613e2f57613e2e61409c565b5b828204905092915050565b6000613e4582613f44565b9150613e5083613f44565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e8957613e8861406d565b5b828202905092915050565b6000613e9f82613f44565b9150613eaa83613f44565b925082821015613ebd57613ebc61406d565b5b828203905092915050565b6000613ed382613f24565b9050919050565b6000613ee582613f24565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613f7b578082015181840152602081019050613f60565b83811115613f8a576000848401525b50505050565b60006002820490506001821680613fa857607f821691505b60208210811415613fbc57613fbb6140cb565b5b50919050565b613fcb8261419b565b810181811067ffffffffffffffff82111715613fea57613fe9614158565b5b80604052505050565b6000613ffe82613f44565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156140315761403061406d565b5b600182019050919050565b600061404782613f44565b915061405283613f44565b9250826140625761406161409c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f494420616c726561647920757365640000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5061757365642e00000000000000000000000000000000000000000000000000600082015250565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f596f7520617265206e6f7420686f6c646572206f662074686973204e46540000600082015250565b7f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c696d6974204b6f6e67732065786365656465642e0000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b61475281613ec8565b811461475d57600080fd5b50565b61476981613eec565b811461477457600080fd5b50565b61478081613ef8565b811461478b57600080fd5b50565b61479781613f44565b81146147a257600080fd5b5056fe4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea26469706673582212200136c73ace1ad22ef254e8cb9574f267d20b2cff5d67808fa9c2c04c5b9301c364736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102255760003560e01c806370a0823111610123578063b9f7e218116100ab578063d9d616551161006f578063d9d61655146107fc578063da3ef23f14610839578063da6fa46c14610862578063e985e9c51461088d578063f2fde38b146108ca57610225565b8063b9f7e21814610703578063c668286214610740578063c87b56dd1461076b578063cd85cdb5146107a8578063d775c175146107d357610225565b806395d89b41116100f257806395d89b411461063d578063a0712d6814610668578063a22cb46514610684578063a5b59043146106ad578063b2bdfa7b146106d857610225565b806370a0823114610593578063715018a6146105d05780638537b926146105e75780638da5cb5b1461061257610225565b80633ccfd60b116101b157806355f804b31161017557806355f804b3146104c2578063619230bd146104eb578063626eeff6146105145780636352211e1461052b5780636c0360eb1461056857610225565b80633ccfd60b146103dd57806342842e0e146103f4578063438b63001461041d5780634f6ccce71461045a57806351ce65831461049757610225565b80630dee18e4116101f85780630dee18e4146102f857806318160ddd1461032157806323b872dd1461034c5780632d3e474a146103755780632f745c59146103a057610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063095ea7b3146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613375565b6108f3565b60405161025e91906139b0565b60405180910390f35b34801561027357600080fd5b5061027c61095b565b60405161028991906139cb565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b491906133eb565b6109ed565b6040516102c69190613958565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f19190613335565b610a72565b005b34801561030457600080fd5b5061031f600480360381019061031a91906133eb565b610b8a565b005b34801561032d57600080fd5b50610336610c10565b6040516103439190613ccd565b60405180910390f35b34801561035857600080fd5b50610373600480360381019061036e91906132a2565b610c21565b005b34801561038157600080fd5b5061038a610c81565b6040516103979190613973565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c29190613335565b610ca7565b6040516103d49190613ccd565b60405180910390f35b3480156103e957600080fd5b506103f2610d02565b005b34801561040057600080fd5b5061041b600480360381019061041691906132a2565b610dc7565b005b34801561042957600080fd5b50610444600480360381019061043f9190613208565b610e27565b604051610451919061398e565b60405180910390f35b34801561046657600080fd5b50610481600480360381019061047c91906133eb565b610ed5565b60405161048e9190613ccd565b60405180910390f35b3480156104a357600080fd5b506104ac610ef8565b6040516104b99190613958565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e491906133a2565b610f1e565b005b3480156104f757600080fd5b50610512600480360381019061050d91906133eb565b610fa6565b005b34801561052057600080fd5b506105296110c6565b005b34801561053757600080fd5b50610552600480360381019061054d91906133eb565b61116e565b60405161055f9190613958565b60405180910390f35b34801561057457600080fd5b5061057d6111a5565b60405161058a91906139cb565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b59190613208565b611237565b6040516105c79190613ccd565b60405180910390f35b3480156105dc57600080fd5b506105e56112f6565b005b3480156105f357600080fd5b506105fc611430565b6040516106099190613ccd565b60405180910390f35b34801561061e57600080fd5b50610627611436565b6040516106349190613958565b60405180910390f35b34801561064957600080fd5b5061065261145f565b60405161065f91906139cb565b60405180910390f35b610682600480360381019061067d91906133eb565b6114f1565b005b34801561069057600080fd5b506106ab60048036038101906106a691906132f5565b611680565b005b3480156106b957600080fd5b506106c2611801565b6040516106cf9190613ccd565b60405180910390f35b3480156106e457600080fd5b506106ed611807565b6040516106fa9190613958565b60405180910390f35b34801561070f57600080fd5b5061072a600480360381019061072591906133eb565b61182b565b6040516107379190613ccd565b60405180910390f35b34801561074c57600080fd5b50610755611843565b60405161076291906139cb565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d91906133eb565b6118d1565b60405161079f91906139cb565b60405180910390f35b3480156107b457600080fd5b506107bd61197b565b6040516107ca91906139b0565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f59190613418565b61198e565b005b34801561080857600080fd5b50610823600480360381019061081e9190613208565b611bfb565b604051610830919061398e565b60405180910390f35b34801561084557600080fd5b50610860600480360381019061085b91906133a2565b611c92565b005b34801561086e57600080fd5b50610877611d28565b60405161088491906139cb565b60405180910390f35b34801561089957600080fd5b506108b460048036038101906108af9190613262565b611d41565b6040516108c191906139b0565b60405180910390f35b3480156108d657600080fd5b506108f160048036038101906108ec9190613208565b611dd5565b005b600060016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b60606009805461096a90613f90565b80601f016020809104026020016040519081016040528092919081815260200182805461099690613f90565b80156109e35780601f106109b8576101008083540402835291602001916109e3565b820191906000526020600020905b8154815290600101906020018083116109c657829003601f168201915b5050505050905090565b60006109f882611f7e565b610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e90613bed565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a7d8261116e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae590613c6d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b0d611f9b565b73ffffffffffffffffffffffffffffffffffffffff161480610b3c5750610b3b81610b36611f9b565b611d41565b5b610b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7290613b2d565b60405180910390fd5b610b858383611fa3565b505050565b610b92611f9b565b73ffffffffffffffffffffffffffffffffffffffff16610bb0611436565b73ffffffffffffffffffffffffffffffffffffffff1614610c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfd90613c0d565b60405180910390fd5b80600f8190555050565b6000610c1c600561205c565b905090565b610c32610c2c611f9b565b82612071565b610c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6890613cad565b60405180910390fd5b610c7c83838361214f565b505050565b601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610cfa82600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061237a90919063ffffffff16565b905092915050565b610d0a611f9b565b73ffffffffffffffffffffffffffffffffffffffff16610d28611436565b73ffffffffffffffffffffffffffffffffffffffff1614610d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7590613c0d565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610dc4573d6000803e3d6000fd5b50565b610dd8610dd2611f9b565b82612071565b610e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0e90613cad565b60405180910390fd5b610e22838383612394565b505050565b60606000610e3483611237565b905060008167ffffffffffffffff811115610e5257610e51614158565b5b604051908082528060200260200182016040528015610e805781602001602082028036833780820191505090505b50905060005b82811015610eca57610e988582610ca7565b828281518110610eab57610eaa614129565b5b6020026020010181815250508080610ec290613ff3565b915050610e86565b508092505050919050565b600080610eec8360056123a490919063ffffffff16565b50905080915050919050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f26611f9b565b73ffffffffffffffffffffffffffffffffffffffff16610f44611436565b73ffffffffffffffffffffffffffffffffffffffff1614610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9190613c0d565b60405180910390fd5b610fa3816123d0565b50565b610fae611f9b565b73ffffffffffffffffffffffffffffffffffffffff16610fcc611436565b73ffffffffffffffffffffffffffffffffffffffff1614611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101990613c0d565b60405180910390fd5b60105461103f82611031610c10565b6123ea90919063ffffffff16565b1115611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107790613c8d565b60405180910390fd5b60005b818110156110c2576110af336110aa600161109c610c10565b6123ea90919063ffffffff16565b612448565b80806110ba90613ff3565b915050611083565b5050565b6110ce611f9b565b73ffffffffffffffffffffffffffffffffffffffff166110ec611436565b73ffffffffffffffffffffffffffffffffffffffff1614611142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113990613c0d565b60405180910390fd5b601260009054906101000a900460ff1615601260006101000a81548160ff021916908315150217905550565b600061119e826040518060600160405280602981526020016147a66029913960056126269092919063ffffffff16565b9050919050565b6060600e80546111b490613f90565b80601f01602080910402602001604051908101604052809291908181526020018280546111e090613f90565b801561122d5780601f106112025761010080835404028352916020019161122d565b820191906000526020600020905b81548152906001019060200180831161121057829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129f90613b4d565b60405180910390fd5b6112ef600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612645565b9050919050565b6112fe611f9b565b73ffffffffffffffffffffffffffffffffffffffff1661131c611436565b73ffffffffffffffffffffffffffffffffffffffff1614611372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136990613c0d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60105481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600a805461146e90613f90565b80601f016020809104026020016040519081016040528092919081815260200182805461149a90613f90565b80156114e75780601f106114bc576101008083540402835291602001916114e7565b820191906000526020600020905b8154815290600101906020018083116114ca57829003601f168201915b5050505050905090565b601260009054906101000a900460ff1615611541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153890613acd565b60405180910390fd5b60105461155e82611550610c10565b6123ea90919063ffffffff16565b111561159f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159690613c8d565b60405180910390fd5b6115c560008211156115b157816115b4565b60015b600f5461265a90919063ffffffff16565b3410156115d157600080fd5b601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611639573d6000803e3d6000fd5b5060005b8181101561167c57611669336116646001611656610c10565b6123ea90919063ffffffff16565b612448565b808061167490613ff3565b91505061163d565b5050565b611688611f9b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ed90613aad565b60405180910390fd5b8060086000611703611f9b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117b0611f9b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117f591906139b0565b60405180910390a35050565b600f5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60136020528060005260406000206000915090505481565b6011805461185090613f90565b80601f016020809104026020016040519081016040528092919081815260200182805461187c90613f90565b80156118c95780601f1061189e576101008083540402835291602001916118c9565b820191906000526020600020905b8154815290600101906020018083116118ac57829003601f168201915b505050505081565b60606118dc82611f7e565b61191b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191290613c4d565b60405180910390fd5b60006119256111a5565b905060008151116119455760405180602001604052806000815250611973565b8061194f846126d5565b601160405160200161196393929190613927565b6040516020818303038152906040525b915050919050565b601260009054906101000a900460ff1681565b601260009054906101000a900460ff16156119de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d590613acd565b60405180910390fd5b6010546119fb836119ed610c10565b6123ea90919063ffffffff16565b1115611a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3390613c8d565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611aae9190613ccd565b60206040518083038186803b158015611ac657600080fd5b505afa158015611ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afe9190613235565b73ffffffffffffffffffffffffffffffffffffffff1614611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4b90613b6d565b60405180910390fd5b6000601360008381526020019081526020016000205414611baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba190613a6d565b60405180910390fd5b611bce33611bc96001611bbb610c10565b6123ea90919063ffffffff16565b612448565b601360008281526020019081526020016000206000815480929190611bf290613ff3565b91905055505050565b6060600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611c8657602002820191906000526020600020905b815481526020019060010190808311611c72575b50505050509050919050565b611c9a611f9b565b73ffffffffffffffffffffffffffffffffffffffff16611cb8611436565b73ffffffffffffffffffffffffffffffffffffffff1614611d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0590613c0d565b60405180910390fd5b8060119080519060200190611d2492919061308c565b5050565b6060611d3c611d37600561205c565b6126d5565b905090565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ddd611f9b565b73ffffffffffffffffffffffffffffffffffffffff16611dfb611436565b73ffffffffffffffffffffffffffffffffffffffff1614611e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4890613c0d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb890613a0d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611f9482600561283690919063ffffffff16565b9050919050565b600033905090565b816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120168361116e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061206a82600001612850565b9050919050565b600061207c82611f7e565b6120bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b290613b0d565b60405180910390fd5b60006120c68361116e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061213557508373ffffffffffffffffffffffffffffffffffffffff1661211d846109ed565b73ffffffffffffffffffffffffffffffffffffffff16145b8061214657506121458185611d41565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661216f8261116e565b73ffffffffffffffffffffffffffffffffffffffff16146121c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bc90613c2d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222c90613a8d565b60405180910390fd5b612240838383612861565b61224b600082611fa3565b61229c81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061286690919063ffffffff16565b506122ee81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061288090919063ffffffff16565b506122f9838261289a565b6123038282612aca565b61231981836005612b949092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006123898360000183612bc9565b60001c905092915050565b61239f83838361214f565b505050565b6000806000806123b78660000186612c3d565b915091508160001c8160001c9350935050509250929050565b80600e90805190602001906123e692919061308c565b5050565b60008082846123f99190613db3565b90508381101561243e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243590613a4d565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124af90613bad565b60405180910390fd5b6124c181611f7e565b15612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f890613a2d565b60405180910390fd5b600c80549050600d600083815260200190815260200160002081905550600c81908060018154018082558091505060019003906000526020600020016000909190919091505561255360008383612861565b6125a481600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061288090919063ffffffff16565b506125af8282612aca565b6125c581836005612b949092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612639846000018460001b84612cc7565b60001c90509392505050565b600061265382600001612d68565b9050919050565b60008083141561266d57600090506126cf565b6000828461267b9190613e3a565b905082848261268a9190613e09565b146126ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c190613bcd565b60405180910390fd5b809150505b92915050565b6060600082141561271d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612831565b600082905060005b6000821461274f57808061273890613ff3565b915050600a826127489190613e09565b9150612725565b60008167ffffffffffffffff81111561276b5761276a614158565b5b6040519080825280601f01601f19166020018201604052801561279d5781602001600182028036833780820191505090505b5090505b6000851461282a576001826127b69190613e94565b9150600a856127c5919061403c565b60306127d19190613db3565b60f81b8183815181106127e7576127e6614129565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128239190613e09565b94506127a1565b8093505050505b919050565b6000612848836000018360001b612d79565b905092915050565b600081600001805490509050919050565b505050565b6000612878836000018360001b612d9c565b905092915050565b6000612892836000018360001b612eb4565b905092915050565b600060046000838152602001908152602001600020549050600061290a6001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050612f2490919063ffffffff16565b90506000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061295f5761295e614129565b5b9060005260206000200154905080600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002084815481106129be576129bd614129565b5b90600052602060002001819055506000600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612a1f57612a1e614129565b5b9060005260206000200181905550600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480612a7c57612a7b6140fa565b5b60019003818190600052602060002001600090559055600060046000868152602001908152602001600020819055508260046000838152602001908152602001600020819055505050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020829080600181540180825580915050600190039060005260206000200160009091909190915055806004600084815260200190815260200160002081905550505050565b6000612bc0846000018460001b8473ffffffffffffffffffffffffffffffffffffffff1660001b612f7d565b90509392505050565b600081836000018054905011612c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b906139ed565b60405180910390fd5b826000018281548110612c2a57612c29614129565b5b9060005260206000200154905092915050565b60008082846000018054905011612c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8090613b8d565b60405180910390fd5b6000846000018481548110612ca157612ca0614129565b5b906000526020600020906002020190508060000154816001015492509250509250929050565b60008084600101600085815260200190815260200160002054905060008114158390612d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2091906139cb565b60405180910390fd5b5084600001600182612d3b9190613e94565b81548110612d4c57612d4b614129565b5b9060005260206000209060020201600101549150509392505050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020541415905092915050565b60008083600101600084815260200190815260200160002054905060008114612ea8576000600182612dce9190613e94565b9050600060018660000180549050612de69190613e94565b90506000866000018281548110612e0057612dff614129565b5b9060005260206000200154905080876000018481548110612e2457612e23614129565b5b9060005260206000200181905550600183612e3f9190613db3565b8760010160008381526020019081526020016000208190555086600001805480612e6c57612e6b6140fa565b5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050612eae565b60009150505b92915050565b6000612ec08383613069565b612f19578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612f1e565b600090505b92915050565b600082821115612f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6090613aed565b60405180910390fd5b8183612f759190613e94565b905092915050565b600080846001016000858152602001908152602001600020549050600081141561302457846000016040518060400160405280868152602001858152509080600181540180825580915050600190039060005260206000209060020201600090919091909150600082015181600001556020820151816001015550508460000180549050856001016000868152602001908152602001600020819055506001915050613062565b82856000016001836130369190613e94565b8154811061304757613046614129565b5b90600052602060002090600202016001018190555060009150505b9392505050565b600080836001016000848152602001908152602001600020541415905092915050565b82805461309890613f90565b90600052602060002090601f0160209004810192826130ba5760008555613101565b82601f106130d357805160ff1916838001178555613101565b82800160010185558215613101579182015b828111156131005782518255916020019190600101906130e5565b5b50905061310e9190613112565b5090565b5b8082111561312b576000816000905550600101613113565b5090565b600061314261313d84613d0d565b613ce8565b90508281526020810184848401111561315e5761315d61418c565b5b613169848285613f4e565b509392505050565b60008135905061318081614749565b92915050565b60008151905061319581614749565b92915050565b6000813590506131aa81614760565b92915050565b6000813590506131bf81614777565b92915050565b600082601f8301126131da576131d9614187565b5b81356131ea84826020860161312f565b91505092915050565b6000813590506132028161478e565b92915050565b60006020828403121561321e5761321d614196565b5b600061322c84828501613171565b91505092915050565b60006020828403121561324b5761324a614196565b5b600061325984828501613186565b91505092915050565b6000806040838503121561327957613278614196565b5b600061328785828601613171565b925050602061329885828601613171565b9150509250929050565b6000806000606084860312156132bb576132ba614196565b5b60006132c986828701613171565b93505060206132da86828701613171565b92505060406132eb868287016131f3565b9150509250925092565b6000806040838503121561330c5761330b614196565b5b600061331a85828601613171565b925050602061332b8582860161319b565b9150509250929050565b6000806040838503121561334c5761334b614196565b5b600061335a85828601613171565b925050602061336b858286016131f3565b9150509250929050565b60006020828403121561338b5761338a614196565b5b6000613399848285016131b0565b91505092915050565b6000602082840312156133b8576133b7614196565b5b600082013567ffffffffffffffff8111156133d6576133d5614191565b5b6133e2848285016131c5565b91505092915050565b60006020828403121561340157613400614196565b5b600061340f848285016131f3565b91505092915050565b6000806040838503121561342f5761342e614196565b5b600061343d858286016131f3565b925050602061344e858286016131f3565b9150509250929050565b60006134648383613909565b60208301905092915050565b61347981613eda565b82525050565b61348881613ec8565b82525050565b600061349982613d63565b6134a38185613d86565b93506134ae83613d3e565b8060005b838110156134df5781516134c68882613458565b97506134d183613d79565b9250506001810190506134b2565b5085935050505092915050565b6134f581613eec565b82525050565b600061350682613d6e565b6135108185613d97565b9350613520818560208601613f5d565b6135298161419b565b840191505092915050565b600061353f82613d6e565b6135498185613da8565b9350613559818560208601613f5d565b80840191505092915050565b6000815461357281613f90565b61357c8186613da8565b9450600182166000811461359757600181146135a8576135db565b60ff198316865281860193506135db565b6135b185613d4e565b60005b838110156135d3578154818901526001820191506020810190506135b4565b838801955050505b50505092915050565b60006135f1602283613d97565b91506135fc826141ac565b604082019050919050565b6000613614602683613d97565b915061361f826141fb565b604082019050919050565b6000613637601c83613d97565b91506136428261424a565b602082019050919050565b600061365a601b83613d97565b915061366582614273565b602082019050919050565b600061367d600f83613d97565b91506136888261429c565b602082019050919050565b60006136a0602483613d97565b91506136ab826142c5565b604082019050919050565b60006136c3601983613d97565b91506136ce82614314565b602082019050919050565b60006136e6600783613d97565b91506136f18261433d565b602082019050919050565b6000613709601e83613d97565b915061371482614366565b602082019050919050565b600061372c602c83613d97565b91506137378261438f565b604082019050919050565b600061374f603883613d97565b915061375a826143de565b604082019050919050565b6000613772602a83613d97565b915061377d8261442d565b604082019050919050565b6000613795601e83613d97565b91506137a08261447c565b602082019050919050565b60006137b8602283613d97565b91506137c3826144a5565b604082019050919050565b60006137db602083613d97565b91506137e6826144f4565b602082019050919050565b60006137fe602183613d97565b91506138098261451d565b604082019050919050565b6000613821602c83613d97565b915061382c8261456c565b604082019050919050565b6000613844602083613d97565b915061384f826145bb565b602082019050919050565b6000613867602983613d97565b9150613872826145e4565b604082019050919050565b600061388a602f83613d97565b915061389582614633565b604082019050919050565b60006138ad602183613d97565b91506138b882614682565b604082019050919050565b60006138d0601583613d97565b91506138db826146d1565b602082019050919050565b60006138f3603183613d97565b91506138fe826146fa565b604082019050919050565b61391281613f44565b82525050565b61392181613f44565b82525050565b60006139338286613534565b915061393f8285613534565b915061394b8284613565565b9150819050949350505050565b600060208201905061396d600083018461347f565b92915050565b60006020820190506139886000830184613470565b92915050565b600060208201905081810360008301526139a8818461348e565b905092915050565b60006020820190506139c560008301846134ec565b92915050565b600060208201905081810360008301526139e581846134fb565b905092915050565b60006020820190508181036000830152613a06816135e4565b9050919050565b60006020820190508181036000830152613a2681613607565b9050919050565b60006020820190508181036000830152613a468161362a565b9050919050565b60006020820190508181036000830152613a668161364d565b9050919050565b60006020820190508181036000830152613a8681613670565b9050919050565b60006020820190508181036000830152613aa681613693565b9050919050565b60006020820190508181036000830152613ac6816136b6565b9050919050565b60006020820190508181036000830152613ae6816136d9565b9050919050565b60006020820190508181036000830152613b06816136fc565b9050919050565b60006020820190508181036000830152613b268161371f565b9050919050565b60006020820190508181036000830152613b4681613742565b9050919050565b60006020820190508181036000830152613b6681613765565b9050919050565b60006020820190508181036000830152613b8681613788565b9050919050565b60006020820190508181036000830152613ba6816137ab565b9050919050565b60006020820190508181036000830152613bc6816137ce565b9050919050565b60006020820190508181036000830152613be6816137f1565b9050919050565b60006020820190508181036000830152613c0681613814565b9050919050565b60006020820190508181036000830152613c2681613837565b9050919050565b60006020820190508181036000830152613c468161385a565b9050919050565b60006020820190508181036000830152613c668161387d565b9050919050565b60006020820190508181036000830152613c86816138a0565b9050919050565b60006020820190508181036000830152613ca6816138c3565b9050919050565b60006020820190508181036000830152613cc6816138e6565b9050919050565b6000602082019050613ce26000830184613918565b92915050565b6000613cf2613d03565b9050613cfe8282613fc2565b919050565b6000604051905090565b600067ffffffffffffffff821115613d2857613d27614158565b5b613d318261419b565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613dbe82613f44565b9150613dc983613f44565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613dfe57613dfd61406d565b5b828201905092915050565b6000613e1482613f44565b9150613e1f83613f44565b925082613e2f57613e2e61409c565b5b828204905092915050565b6000613e4582613f44565b9150613e5083613f44565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e8957613e8861406d565b5b828202905092915050565b6000613e9f82613f44565b9150613eaa83613f44565b925082821015613ebd57613ebc61406d565b5b828203905092915050565b6000613ed382613f24565b9050919050565b6000613ee582613f24565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613f7b578082015181840152602081019050613f60565b83811115613f8a576000848401525b50505050565b60006002820490506001821680613fa857607f821691505b60208210811415613fbc57613fbb6140cb565b5b50919050565b613fcb8261419b565b810181811067ffffffffffffffff82111715613fea57613fe9614158565b5b80604052505050565b6000613ffe82613f44565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156140315761403061406d565b5b600182019050919050565b600061404782613f44565b915061405283613f44565b9250826140625761406161409c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f494420616c726561647920757365640000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5061757365642e00000000000000000000000000000000000000000000000000600082015250565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f596f7520617265206e6f7420686f6c646572206f662074686973204e46540000600082015250565b7f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c696d6974204b6f6e67732065786365656465642e0000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b61475281613ec8565b811461475d57600080fd5b50565b61476981613eec565b811461477457600080fd5b50565b61478081613ef8565b811461478b57600080fd5b50565b61479781613f44565b81146147a257600080fd5b5056fe4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea26469706673582212200136c73ace1ad22ef254e8cb9574f267d20b2cff5d67808fa9c2c04c5b9301c364736f6c63430008070033
Deployed Bytecode Sourcemap
38106:3298:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2292:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27601:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31246:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30776:404;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39829:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30254:211;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32136:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38486:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30016:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39600:107;;;;;;;;;;;;;:::i;:::-;;32520:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39202:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30542:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38639:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39929:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41140:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40034:83;;;;;;;;;;;;;:::i;:::-;;27357:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28976:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27074:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37699:148;;;;;;;;;;;;;:::i;:::-;;38366:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37476:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27770:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40257:424;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31539:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38320:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37192:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38581:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38404:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38712:482;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38448:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40689:443;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40125:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39715:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29081:131;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31905:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37855:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2292:150;2377:4;2401:20;:33;2422:11;2401:33;;;;;;;;;;;;;;;;;;;;;;;;;;;2394:40;;2292:150;;;:::o;27601:100::-;27655:13;27688:5;27681:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27601:100;:::o;31246:221::-;31322:7;31350:16;31358:7;31350;:16::i;:::-;31342:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31435:15;:24;31451:7;31435:24;;;;;;;;;;;;;;;;;;;;;31428:31;;31246:221;;;:::o;30776:404::-;30857:13;30873:23;30888:7;30873:14;:23::i;:::-;30857:39;;30921:5;30915:11;;:2;:11;;;;30907:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;31001:5;30985:21;;:12;:10;:12::i;:::-;:21;;;:69;;;;31010:44;31034:5;31041:12;:10;:12::i;:::-;31010:23;:44::i;:::-;30985:69;30977:161;;;;;;;;;;;;:::i;:::-;;;;;;;;;31151:21;31160:2;31164:7;31151:8;:21::i;:::-;30846:334;30776:404;;:::o;39829:92::-;37622:12;:10;:12::i;:::-;37611:23;;:7;:5;:7::i;:::-;:23;;;37603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39907:6:::1;39895:9;:18;;;;39829:92:::0;:::o;30254:211::-;30315:7;30436:21;:12;:19;:21::i;:::-;30429:28;;30254:211;:::o;32136:313::-;32297:41;32316:12;:10;:12::i;:::-;32330:7;32297:18;:41::i;:::-;32289:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32413:28;32423:4;32429:2;32433:7;32413:9;:28::i;:::-;32136:313;;;:::o;38486:86::-;;;;;;;;;;;;;:::o;30016:162::-;30113:7;30140:30;30164:5;30140:13;:20;30154:5;30140:20;;;;;;;;;;;;;;;:23;;:30;;;;:::i;:::-;30133:37;;30016:162;;;;:::o;39600:107::-;37622:12;:10;:12::i;:::-;37611:23;;:7;:5;:7::i;:::-;:23;;;37603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39656:10:::1;39648:28;;:51;39677:21;39648:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;39600:107::o:0;32520:258::-;32632:41;32651:12;:10;:12::i;:::-;32665:7;32632:18;:41::i;:::-;32624:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32738:32;32752:4;32758:2;32762:7;32738:13;:32::i;:::-;32520:258;;;:::o;39202:390::-;39289:16;39323:23;39349:17;39359:6;39349:9;:17::i;:::-;39323:43;;39377:25;39419:15;39405:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39377:58;;39451:9;39446:113;39466:15;39462:1;:19;39446:113;;;39517:30;39537:6;39545:1;39517:19;:30::i;:::-;39503:8;39512:1;39503:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;39483:3;;;;;:::i;:::-;;;;39446:113;;;;39576:8;39569:15;;;;39202:390;;;:::o;30542:172::-;30617:7;30638:15;30659:22;30675:5;30659:12;:15;;:22;;;;:::i;:::-;30637:44;;;30699:7;30692:14;;;30542:172;;;:::o;38639:64::-;;;;;;;;;;;;;:::o;39929:97::-;37622:12;:10;:12::i;:::-;37611:23;;:7;:5;:7::i;:::-;:23;;;37603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39999:19:::1;40011:6;39999:11;:19::i;:::-;39929:97:::0;:::o;41140:261::-;37622:12;:10;:12::i;:::-;37611:23;;:7;:5;:7::i;:::-;:23;;;37603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41244:8:::1;;41214:26;41232:7;41214:13;:11;:13::i;:::-;:17;;:26;;;;:::i;:::-;:38;;41206:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;41293:9;41289:105;41312:7;41308:1;:11;41289:105;;;41343:39;41349:10;41361:20;41379:1;41361:13;:11;:13::i;:::-;:17;;:20;;;;:::i;:::-;41343:5;:39::i;:::-;41321:3;;;;;:::i;:::-;;;;41289:105;;;;41140:261:::0;:::o;40034:83::-;37622:12;:10;:12::i;:::-;37611:23;;:7;:5;:7::i;:::-;:23;;;37603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40100:9:::1;;;;;;;;;;;40099:10;40087:9;;:22;;;;;;;;;;;;;;;;;;40034:83::o:0;27357:177::-;27429:7;27456:70;27473:7;27456:70;;;;;;;;;;;;;;;;;:12;:16;;:70;;;;;:::i;:::-;27449:77;;27357:177;;;:::o;28976:97::-;29024:13;29057:8;29050:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28976:97;:::o;27074:221::-;27146:7;27191:1;27174:19;;:5;:19;;;;27166:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27258:29;:13;:20;27272:5;27258:20;;;;;;;;;;;;;;;:27;:29::i;:::-;27251:36;;27074:221;;;:::o;37699:148::-;37622:12;:10;:12::i;:::-;37611:23;;:7;:5;:7::i;:::-;:23;;;37603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37806:1:::1;37769:40;;37790:6;::::0;::::1;;;;;;;;37769:40;;;;;;;;;;;;37837:1;37820:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;37699:148::o:0;38366:31::-;;;;:::o;37476:87::-;37522:7;37549:6;;;;;;;;;;;37542:13;;37476:87;:::o;27770:104::-;27826:13;27859:7;27852:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27770:104;:::o;40257:424::-;40323:9;;;;;;;;;;;40322:10;40314:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;40393:8;;40363:26;40381:7;40363:13;:11;:13::i;:::-;:17;;:26;;;;:::i;:::-;:38;;40355:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;40461:41;40486:1;40475:7;:12;;:26;;40494:7;40475:26;;;40490:1;40475:26;40461:9;;:13;;:41;;;;:::i;:::-;40448:9;:54;;40440:63;;;;;;40526:9;;;;;;;;;;;40518:27;;:38;40546:9;40518:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40573:9;40569:105;40592:7;40588:1;:11;40569:105;;;40623:39;40629:10;40641:20;40659:1;40641:13;:11;:13::i;:::-;:17;;:20;;;;:::i;:::-;40623:5;:39::i;:::-;40601:3;;;;;:::i;:::-;;;;40569:105;;;;40257:424;:::o;31539:295::-;31654:12;:10;:12::i;:::-;31642:24;;:8;:24;;;;31634:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31754:8;31709:18;:32;31728:12;:10;:12::i;:::-;31709:32;;;;;;;;;;;;;;;:42;31742:8;31709:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;31807:8;31778:48;;31793:12;:10;:12::i;:::-;31778:48;;;31817:8;31778:48;;;;;;:::i;:::-;;;;;;;;31539:295;;:::o;38320:37::-;;;;:::o;37192:21::-;;;;;;;;;;;;:::o;38581:51::-;;;;;;;;;;;;;;;;;:::o;38404:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38712:482::-;38830:13;38879:16;38887:7;38879;:16::i;:::-;38861:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;38987:28;39018:9;:7;:9::i;:::-;38987:40;;39076:1;39051:14;39045:28;:32;:141;;;;;;;;;;;;;;;;;39117:14;39133:18;:7;:16;:18::i;:::-;39153:13;39100:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39045:141;39038:148;;;38712:482;;;:::o;38448:29::-;;;;;;;;;;;;;:::o;40689:443::-;40766:9;;;;;;;;;;;40765:10;40757:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;40836:8;;40806:26;40824:7;40806:13;:11;:13::i;:::-;:17;;:26;;;;:::i;:::-;:38;;40798:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;40923:10;40893:40;;40901:4;;;;;;;;;;;40893:21;;;40915:3;40893:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;;40885:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;41011:1;40987:15;:20;41003:3;40987:20;;;;;;;;;;;;:25;40979:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;41047:39;41053:10;41065:20;41083:1;41065:13;:11;:13::i;:::-;:17;;:20;;;;:::i;:::-;41047:5;:39::i;:::-;41102:15;:20;41118:3;41102:20;;;;;;;;;;;;:22;;;;;;;;;:::i;:::-;;;;;;40689:443;;:::o;40125:124::-;40186:16;40222:11;:19;40234:6;40222:19;;;;;;;;;;;;;;;40215:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40125:124;;;:::o;39715:106::-;37622:12;:10;:12::i;:::-;37611:23;;:7;:5;:7::i;:::-;:23;;;37603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39807:6:::1;39791:13;:22;;;;;;;;;;;;:::i;:::-;;39715:106:::0;:::o;29081:131::-;29139:13;29172:32;:21;:12;:19;:21::i;:::-;:30;:32::i;:::-;29165:39;;29081:131;:::o;31905:164::-;32002:4;32026:18;:25;32045:5;32026:25;;;;;;;;;;;;;;;:35;32052:8;32026:35;;;;;;;;;;;;;;;;;;;;;;;;;32019:42;;31905:164;;;;:::o;37855:244::-;37622:12;:10;:12::i;:::-;37611:23;;:7;:5;:7::i;:::-;:23;;;37603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37964:1:::1;37944:22;;:8;:22;;;;37936:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38054:8;38025:38;;38046:6;::::0;::::1;;;;;;;;38025:38;;;;;;;;;;;;38083:8;38074:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;37855:244:::0;:::o;32924:127::-;32989:4;33013:30;33035:7;33013:12;:21;;:30;;;;:::i;:::-;33006:37;;32924:127;;;:::o;95:115::-;148:15;191:10;176:26;;95:115;:::o;36866:183::-;36959:2;36932:15;:24;36948:7;36932:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37015:7;37011:2;36977:46;;36986:23;37001:7;36986:14;:23::i;:::-;36977:46;;;;;;;;;;;;36866:183;;:::o;21082:123::-;21151:7;21178:19;21186:3;:10;;21178:7;:19::i;:::-;21171:26;;21082:123;;;:::o;33061:355::-;33154:4;33179:16;33187:7;33179;:16::i;:::-;33171:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33255:13;33271:23;33286:7;33271:14;:23::i;:::-;33255:39;;33324:5;33313:16;;:7;:16;;;:51;;;;33357:7;33333:31;;:20;33345:7;33333:11;:20::i;:::-;:31;;;33313:51;:94;;;;33368:39;33392:5;33399:7;33368:23;:39::i;:::-;33313:94;33305:103;;;33061:355;;;;:::o;34672:684::-;34797:4;34770:31;;:23;34785:7;34770:14;:23::i;:::-;:31;;;34762:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34898:1;34884:16;;:2;:16;;;;34876:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34954:39;34975:4;34981:2;34985:7;34954:20;:39::i;:::-;35058:29;35075:1;35079:7;35058:8;:29::i;:::-;35100:35;35127:7;35100:13;:19;35114:4;35100:19;;;;;;;;;;;;;;;:26;;:35;;;;:::i;:::-;;35146:30;35168:7;35146:13;:17;35160:2;35146:17;;;;;;;;;;;;;;;:21;;:30;;;;:::i;:::-;;35189;35205:4;35211:7;35189:15;:30::i;:::-;35230:23;35241:2;35245:7;35230:10;:23::i;:::-;35274:29;35291:7;35300:2;35274:12;:16;;:29;;;;;:::i;:::-;;35340:7;35336:2;35321:27;;35330:4;35321:27;;;;;;;;;;;;34672:684;;;:::o;14165:137::-;14236:7;14271:22;14275:3;:10;;14287:5;14271:3;:22::i;:::-;14263:31;;14256:38;;14165:137;;;;:::o;32786:130::-;32880:28;32890:4;32896:2;32900:7;32880:9;:28::i;:::-;32786:130;;;:::o;21215:236::-;21295:7;21304;21325:11;21338:13;21355:22;21359:3;:10;;21371:5;21355:3;:22::i;:::-;21324:53;;;;21404:3;21396:12;;21434:5;21426:14;;21388:55;;;;;;21215:236;;;;;:::o;35589:100::-;35673:8;35662;:19;;;;;;;;;;;;:::i;:::-;;35589:100;:::o;3590:179::-;3648:7;3668:9;3684:1;3680;:5;;;;:::i;:::-;3668:17;;3709:1;3704;:6;;3696:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;3760:1;3753:8;;;3590:179;;;;:::o;33534:529::-;33628:1;33614:16;;:2;:16;;;;33606:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33687:16;33695:7;33687;:16::i;:::-;33686:17;33678:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33775:9;:16;;;;33749:14;:23;33764:7;33749:23;;;;;;;;;;;:42;;;;33802:9;33817:7;33802:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33838:45;33867:1;33871:2;33875:7;33838:20;:45::i;:::-;33896:30;33918:7;33896:13;:17;33910:2;33896:17;;;;;;;;;;;;;;;:21;;:30;;;;:::i;:::-;;33939:23;33950:2;33954:7;33939:10;:23::i;:::-;33975:29;33992:7;34001:2;33975:12;:16;;:29;;;;;:::i;:::-;;34047:7;34043:2;34022:33;;34039:1;34022:33;;;;;;;;;;;;33534:529;;:::o;22223:213::-;22330:7;22381:44;22386:3;:10;;22406:3;22398:12;;22412;22381:4;:44::i;:::-;22373:53;;22350:78;;22223:213;;;;;:::o;14043:114::-;14103:7;14130:19;14138:3;:10;;14130:7;:19::i;:::-;14123:26;;14043:114;;;:::o;3943:220::-;4001:7;4030:1;4025;:6;4021:20;;;4040:1;4033:8;;;;4021:20;4052:9;4068:1;4064;:5;;;;:::i;:::-;4052:17;;4097:1;4092;4088;:5;;;;:::i;:::-;:10;4080:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;4154:1;4147:8;;;3943:220;;;;;:::o;22669:723::-;22725:13;22955:1;22946:5;:10;22942:53;;;22973:10;;;;;;;;;;;;;;;;;;;;;22942:53;23005:12;23020:5;23005:20;;23036:14;23061:78;23076:1;23068:4;:9;23061:78;;23094:8;;;;;:::i;:::-;;;;23125:2;23117:10;;;;;:::i;:::-;;;23061:78;;;23149:19;23181:6;23171:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23149:39;;23199:154;23215:1;23206:5;:10;23199:154;;23243:1;23233:11;;;;;:::i;:::-;;;23310:2;23302:5;:10;;;;:::i;:::-;23289:2;:24;;;;:::i;:::-;23276:39;;23259:6;23266;23259:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;23339:2;23330:11;;;;;:::i;:::-;;;23199:154;;;23377:6;23363:21;;;;;22669:723;;;;:::o;20843:151::-;20927:4;20951:35;20961:3;:10;;20981:3;20973:12;;20951:9;:35::i;:::-;20944:42;;20843:151;;;;:::o;17661:110::-;17717:7;17744:3;:12;;:19;;;;17737:26;;17661:110;;;:::o;37057:93::-;;;;:::o;13588:137::-;13658:4;13682:35;13690:3;:10;;13710:5;13702:14;;13682:7;:35::i;:::-;13675:42;;13588:137;;;;:::o;13281:131::-;13348:4;13372:32;13377:3;:10;;13397:5;13389:14;;13372:4;:32::i;:::-;13365:39;;13281:131;;;;:::o;29435:499::-;29513:18;29534:16;:26;29551:8;29534:26;;;;;;;;;;;;29513:47;;29571:22;29596:32;29626:1;29596:11;:18;29608:5;29596:18;;;;;;;;;;;;;;;:25;;;;:29;;:32;;;;:::i;:::-;29571:57;;29639:17;29659:11;:18;29671:5;29659:18;;;;;;;;;;;;;;;29678:14;29659:34;;;;;;;;:::i;:::-;;;;;;;;;;29639:54;;29739:9;29706:11;:18;29718:5;29706:18;;;;;;;;;;;;;;;29725:10;29706:30;;;;;;;;:::i;:::-;;;;;;;;;:42;;;;29796:1;29759:11;:18;29771:5;29759:18;;;;;;;;;;;;;;;29778:14;29759:34;;;;;;;;:::i;:::-;;;;;;;;;:38;;;;29810:11;:18;29822:5;29810:18;;;;;;;;;;;;;;;:24;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29874:1;29845:16;:26;29862:8;29845:26;;;;;;;;;;;:30;;;;29916:10;29886:16;:27;29903:9;29886:27;;;;;;;;;;;:40;;;;29502:432;;;29435:499;;:::o;29220:207::-;29291:14;29308:11;:16;29320:3;29308:16;;;;;;;;;;;;;;;:23;;;;29291:40;;29342:11;:16;29354:3;29342:16;;;;;;;;;;;;;;;29364:8;29342:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29413:6;29384:16;:26;29401:8;29384:26;;;;;;;;;;;:35;;;;29280:147;29220:207;;:::o;20266:185::-;20355:4;20379:64;20384:3;:10;;20404:3;20396:12;;20434:5;20418:23;;20410:32;;20379:4;:64::i;:::-;20372:71;;20266:185;;;;;:::o;10877:204::-;10944:7;10993:5;10972:3;:11;;:18;;;;:26;10964:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11055:3;:11;;11067:5;11055:18;;;;;;;;:::i;:::-;;;;;;;;;;11048:25;;10877:204;;;;:::o;18126:279::-;18193:7;18202;18252:5;18230:3;:12;;:19;;;;:27;18222:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;18309:22;18334:3;:12;;18347:5;18334:19;;;;;;;;:::i;:::-;;;;;;;;;;;;18309:44;;18372:5;:10;;;18384:5;:12;;;18364:33;;;;;18126:279;;;;;:::o;19623:319::-;19717:7;19737:16;19756:3;:12;;:17;19769:3;19756:17;;;;;;;;;;;;19737:36;;19804:1;19792:8;:13;;19807:12;19784:36;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19874:3;:12;;19898:1;19887:8;:12;;;;:::i;:::-;19874:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:33;;;19867:40;;;19623:319;;;;;:::o;10760:109::-;10816:7;10843:3;:11;;:18;;;;10836:25;;10760:109;;;:::o;17441:125::-;17512:4;17557:1;17536:3;:12;;:17;17549:3;17536:17;;;;;;;;;;;;:22;;17529:29;;17441:125;;;;:::o;9587:1026::-;9653:4;9771:18;9792:3;:12;;:19;9805:5;9792:19;;;;;;;;;;;;9771:40;;9842:1;9828:10;:15;9824:782;;9900:21;9937:1;9924:10;:14;;;;:::i;:::-;9900:38;;9953:17;9994:1;9973:3;:11;;:18;;;;:22;;;;:::i;:::-;9953:42;;10012:17;10032:3;:11;;10044:9;10032:22;;;;;;;;:::i;:::-;;;;;;;;;;10012:42;;10178:9;10149:3;:11;;10161:13;10149:26;;;;;;;;:::i;:::-;;;;;;;;;:38;;;;10297:1;10281:13;:17;;;;:::i;:::-;10255:3;:12;;:23;10268:9;10255:23;;;;;;;;;;;:43;;;;10407:3;:11;;:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10502:3;:12;;:19;10515:5;10502:19;;;;;;;;;;;10495:26;;;10545:4;10538:11;;;;;;;;9824:782;10589:5;10582:12;;;9587:1026;;;;;:::o;9165:414::-;9228:4;9250:21;9260:3;9265:5;9250:9;:21::i;:::-;9245:327;;9288:3;:11;;9305:5;9288:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9471:3;:11;;:18;;;;9449:3;:12;;:19;9462:5;9449:19;;;;;;;;;;;:40;;;;9511:4;9504:11;;;;9245:327;9555:5;9548:12;;9165:414;;;;;:::o;3777:158::-;3835:7;3868:1;3863;:6;;3855:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;3926:1;3922;:5;;;;:::i;:::-;3915:12;;3777:158;;;;:::o;14941:692::-;15017:4;15133:16;15152:3;:12;;:17;15165:3;15152:17;;;;;;;;;;;;15133:36;;15198:1;15186:8;:13;15182:444;;;15253:3;:12;;15271:38;;;;;;;;15288:3;15271:38;;;;15301:5;15271:38;;;15253:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15468:3;:12;;:19;;;;15448:3;:12;;:17;15461:3;15448:17;;;;;;;;;;;:39;;;;15509:4;15502:11;;;;;15182:444;15582:5;15546:3;:12;;15570:1;15559:8;:12;;;;:::i;:::-;15546:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:33;;:41;;;;15609:5;15602:12;;;14941:692;;;;;;:::o;10621:129::-;10694:4;10741:1;10718:3;:12;;:19;10731:5;10718:19;;;;;;;;;;;;:24;;10711:31;;10621:129;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:412:1:-;85:5;110:66;126:49;168:6;126:49;:::i;:::-;110:66;:::i;:::-;101:75;;199:6;192:5;185:21;237:4;230:5;226:16;275:3;266:6;261:3;257:16;254:25;251:112;;;282:79;;:::i;:::-;251:112;372:41;406:6;401:3;396;372:41;:::i;:::-;91:328;7:412;;;;;:::o;425:139::-;471:5;509:6;496:20;487:29;;525:33;552:5;525:33;:::i;:::-;425:139;;;;:::o;570:143::-;627:5;658:6;652:13;643:22;;674:33;701:5;674:33;:::i;:::-;570:143;;;;:::o;719:133::-;762:5;800:6;787:20;778:29;;816:30;840:5;816:30;:::i;:::-;719:133;;;;:::o;858:137::-;903:5;941:6;928:20;919:29;;957:32;983:5;957:32;:::i;:::-;858:137;;;;:::o;1015:340::-;1071:5;1120:3;1113:4;1105:6;1101:17;1097:27;1087:122;;1128:79;;:::i;:::-;1087:122;1245:6;1232:20;1270:79;1345:3;1337:6;1330:4;1322:6;1318:17;1270:79;:::i;:::-;1261:88;;1077:278;1015:340;;;;:::o;1361:139::-;1407:5;1445:6;1432:20;1423:29;;1461:33;1488:5;1461:33;:::i;:::-;1361:139;;;;:::o;1506:329::-;1565:6;1614:2;1602:9;1593:7;1589:23;1585:32;1582:119;;;1620:79;;:::i;:::-;1582:119;1740:1;1765:53;1810:7;1801:6;1790:9;1786:22;1765:53;:::i;:::-;1755:63;;1711:117;1506:329;;;;:::o;1841:351::-;1911:6;1960:2;1948:9;1939:7;1935:23;1931:32;1928:119;;;1966:79;;:::i;:::-;1928:119;2086:1;2111:64;2167:7;2158:6;2147:9;2143:22;2111:64;:::i;:::-;2101:74;;2057:128;1841:351;;;;:::o;2198:474::-;2266:6;2274;2323:2;2311:9;2302:7;2298:23;2294:32;2291:119;;;2329:79;;:::i;:::-;2291:119;2449:1;2474:53;2519:7;2510:6;2499:9;2495:22;2474:53;:::i;:::-;2464:63;;2420:117;2576:2;2602:53;2647:7;2638:6;2627:9;2623:22;2602:53;:::i;:::-;2592:63;;2547:118;2198:474;;;;;:::o;2678:619::-;2755:6;2763;2771;2820:2;2808:9;2799:7;2795:23;2791:32;2788:119;;;2826:79;;:::i;:::-;2788:119;2946:1;2971:53;3016:7;3007:6;2996:9;2992:22;2971:53;:::i;:::-;2961:63;;2917:117;3073:2;3099:53;3144:7;3135:6;3124:9;3120:22;3099:53;:::i;:::-;3089:63;;3044:118;3201:2;3227:53;3272:7;3263:6;3252:9;3248:22;3227:53;:::i;:::-;3217:63;;3172:118;2678:619;;;;;:::o;3303:468::-;3368:6;3376;3425:2;3413:9;3404:7;3400:23;3396:32;3393:119;;;3431:79;;:::i;:::-;3393:119;3551:1;3576:53;3621:7;3612:6;3601:9;3597:22;3576:53;:::i;:::-;3566:63;;3522:117;3678:2;3704:50;3746:7;3737:6;3726:9;3722:22;3704:50;:::i;:::-;3694:60;;3649:115;3303:468;;;;;:::o;3777:474::-;3845:6;3853;3902:2;3890:9;3881:7;3877:23;3873:32;3870:119;;;3908:79;;:::i;:::-;3870:119;4028:1;4053:53;4098:7;4089:6;4078:9;4074:22;4053:53;:::i;:::-;4043:63;;3999:117;4155:2;4181:53;4226:7;4217:6;4206:9;4202:22;4181:53;:::i;:::-;4171:63;;4126:118;3777:474;;;;;:::o;4257:327::-;4315:6;4364:2;4352:9;4343:7;4339:23;4335:32;4332:119;;;4370:79;;:::i;:::-;4332:119;4490:1;4515:52;4559:7;4550:6;4539:9;4535:22;4515:52;:::i;:::-;4505:62;;4461:116;4257:327;;;;:::o;4590:509::-;4659:6;4708:2;4696:9;4687:7;4683:23;4679:32;4676:119;;;4714:79;;:::i;:::-;4676:119;4862:1;4851:9;4847:17;4834:31;4892:18;4884:6;4881:30;4878:117;;;4914:79;;:::i;:::-;4878:117;5019:63;5074:7;5065:6;5054:9;5050:22;5019:63;:::i;:::-;5009:73;;4805:287;4590:509;;;;:::o;5105:329::-;5164:6;5213:2;5201:9;5192:7;5188:23;5184:32;5181:119;;;5219:79;;:::i;:::-;5181:119;5339:1;5364:53;5409:7;5400:6;5389:9;5385:22;5364:53;:::i;:::-;5354:63;;5310:117;5105:329;;;;:::o;5440:474::-;5508:6;5516;5565:2;5553:9;5544:7;5540:23;5536:32;5533:119;;;5571:79;;:::i;:::-;5533:119;5691:1;5716:53;5761:7;5752:6;5741:9;5737:22;5716:53;:::i;:::-;5706:63;;5662:117;5818:2;5844:53;5889:7;5880:6;5869:9;5865:22;5844:53;:::i;:::-;5834:63;;5789:118;5440:474;;;;;:::o;5920:179::-;5989:10;6010:46;6052:3;6044:6;6010:46;:::i;:::-;6088:4;6083:3;6079:14;6065:28;;5920:179;;;;:::o;6105:142::-;6208:32;6234:5;6208:32;:::i;:::-;6203:3;6196:45;6105:142;;:::o;6253:118::-;6340:24;6358:5;6340:24;:::i;:::-;6335:3;6328:37;6253:118;;:::o;6407:732::-;6526:3;6555:54;6603:5;6555:54;:::i;:::-;6625:86;6704:6;6699:3;6625:86;:::i;:::-;6618:93;;6735:56;6785:5;6735:56;:::i;:::-;6814:7;6845:1;6830:284;6855:6;6852:1;6849:13;6830:284;;;6931:6;6925:13;6958:63;7017:3;7002:13;6958:63;:::i;:::-;6951:70;;7044:60;7097:6;7044:60;:::i;:::-;7034:70;;6890:224;6877:1;6874;6870:9;6865:14;;6830:284;;;6834:14;7130:3;7123:10;;6531:608;;;6407:732;;;;:::o;7145:109::-;7226:21;7241:5;7226:21;:::i;:::-;7221:3;7214:34;7145:109;;:::o;7260:364::-;7348:3;7376:39;7409:5;7376:39;:::i;:::-;7431:71;7495:6;7490:3;7431:71;:::i;:::-;7424:78;;7511:52;7556:6;7551:3;7544:4;7537:5;7533:16;7511:52;:::i;:::-;7588:29;7610:6;7588:29;:::i;:::-;7583:3;7579:39;7572:46;;7352:272;7260:364;;;;:::o;7630:377::-;7736:3;7764:39;7797:5;7764:39;:::i;:::-;7819:89;7901:6;7896:3;7819:89;:::i;:::-;7812:96;;7917:52;7962:6;7957:3;7950:4;7943:5;7939:16;7917:52;:::i;:::-;7994:6;7989:3;7985:16;7978:23;;7740:267;7630:377;;;;:::o;8037:845::-;8140:3;8177:5;8171:12;8206:36;8232:9;8206:36;:::i;:::-;8258:89;8340:6;8335:3;8258:89;:::i;:::-;8251:96;;8378:1;8367:9;8363:17;8394:1;8389:137;;;;8540:1;8535:341;;;;8356:520;;8389:137;8473:4;8469:9;8458;8454:25;8449:3;8442:38;8509:6;8504:3;8500:16;8493:23;;8389:137;;8535:341;8602:38;8634:5;8602:38;:::i;:::-;8662:1;8676:154;8690:6;8687:1;8684:13;8676:154;;;8764:7;8758:14;8754:1;8749:3;8745:11;8738:35;8814:1;8805:7;8801:15;8790:26;;8712:4;8709:1;8705:12;8700:17;;8676:154;;;8859:6;8854:3;8850:16;8843:23;;8542:334;;8356:520;;8144:738;;8037:845;;;;:::o;8888:366::-;9030:3;9051:67;9115:2;9110:3;9051:67;:::i;:::-;9044:74;;9127:93;9216:3;9127:93;:::i;:::-;9245:2;9240:3;9236:12;9229:19;;8888:366;;;:::o;9260:::-;9402:3;9423:67;9487:2;9482:3;9423:67;:::i;:::-;9416:74;;9499:93;9588:3;9499:93;:::i;:::-;9617:2;9612:3;9608:12;9601:19;;9260:366;;;:::o;9632:::-;9774:3;9795:67;9859:2;9854:3;9795:67;:::i;:::-;9788:74;;9871:93;9960:3;9871:93;:::i;:::-;9989:2;9984:3;9980:12;9973:19;;9632:366;;;:::o;10004:::-;10146:3;10167:67;10231:2;10226:3;10167:67;:::i;:::-;10160:74;;10243:93;10332:3;10243:93;:::i;:::-;10361:2;10356:3;10352:12;10345:19;;10004:366;;;:::o;10376:::-;10518:3;10539:67;10603:2;10598:3;10539:67;:::i;:::-;10532:74;;10615:93;10704:3;10615:93;:::i;:::-;10733:2;10728:3;10724:12;10717:19;;10376:366;;;:::o;10748:::-;10890:3;10911:67;10975:2;10970:3;10911:67;:::i;:::-;10904:74;;10987:93;11076:3;10987:93;:::i;:::-;11105:2;11100:3;11096:12;11089:19;;10748:366;;;:::o;11120:::-;11262:3;11283:67;11347:2;11342:3;11283:67;:::i;:::-;11276:74;;11359:93;11448:3;11359:93;:::i;:::-;11477:2;11472:3;11468:12;11461:19;;11120:366;;;:::o;11492:365::-;11634:3;11655:66;11719:1;11714:3;11655:66;:::i;:::-;11648:73;;11730:93;11819:3;11730:93;:::i;:::-;11848:2;11843:3;11839:12;11832:19;;11492:365;;;:::o;11863:366::-;12005:3;12026:67;12090:2;12085:3;12026:67;:::i;:::-;12019:74;;12102:93;12191:3;12102:93;:::i;:::-;12220:2;12215:3;12211:12;12204:19;;11863:366;;;:::o;12235:::-;12377:3;12398:67;12462:2;12457:3;12398:67;:::i;:::-;12391:74;;12474:93;12563:3;12474:93;:::i;:::-;12592:2;12587:3;12583:12;12576:19;;12235:366;;;:::o;12607:::-;12749:3;12770:67;12834:2;12829:3;12770:67;:::i;:::-;12763:74;;12846:93;12935:3;12846:93;:::i;:::-;12964:2;12959:3;12955:12;12948:19;;12607:366;;;:::o;12979:::-;13121:3;13142:67;13206:2;13201:3;13142:67;:::i;:::-;13135:74;;13218:93;13307:3;13218:93;:::i;:::-;13336:2;13331:3;13327:12;13320:19;;12979:366;;;:::o;13351:::-;13493:3;13514:67;13578:2;13573:3;13514:67;:::i;:::-;13507:74;;13590:93;13679:3;13590:93;:::i;:::-;13708:2;13703:3;13699:12;13692:19;;13351:366;;;:::o;13723:::-;13865:3;13886:67;13950:2;13945:3;13886:67;:::i;:::-;13879:74;;13962:93;14051:3;13962:93;:::i;:::-;14080:2;14075:3;14071:12;14064:19;;13723:366;;;:::o;14095:::-;14237:3;14258:67;14322:2;14317:3;14258:67;:::i;:::-;14251:74;;14334:93;14423:3;14334:93;:::i;:::-;14452:2;14447:3;14443:12;14436:19;;14095:366;;;:::o;14467:::-;14609:3;14630:67;14694:2;14689:3;14630:67;:::i;:::-;14623:74;;14706:93;14795:3;14706:93;:::i;:::-;14824:2;14819:3;14815:12;14808:19;;14467:366;;;:::o;14839:::-;14981:3;15002:67;15066:2;15061:3;15002:67;:::i;:::-;14995:74;;15078:93;15167:3;15078:93;:::i;:::-;15196:2;15191:3;15187:12;15180:19;;14839:366;;;:::o;15211:::-;15353:3;15374:67;15438:2;15433:3;15374:67;:::i;:::-;15367:74;;15450:93;15539:3;15450:93;:::i;:::-;15568:2;15563:3;15559:12;15552:19;;15211:366;;;:::o;15583:::-;15725:3;15746:67;15810:2;15805:3;15746:67;:::i;:::-;15739:74;;15822:93;15911:3;15822:93;:::i;:::-;15940:2;15935:3;15931:12;15924:19;;15583:366;;;:::o;15955:::-;16097:3;16118:67;16182:2;16177:3;16118:67;:::i;:::-;16111:74;;16194:93;16283:3;16194:93;:::i;:::-;16312:2;16307:3;16303:12;16296:19;;15955:366;;;:::o;16327:::-;16469:3;16490:67;16554:2;16549:3;16490:67;:::i;:::-;16483:74;;16566:93;16655:3;16566:93;:::i;:::-;16684:2;16679:3;16675:12;16668:19;;16327:366;;;:::o;16699:::-;16841:3;16862:67;16926:2;16921:3;16862:67;:::i;:::-;16855:74;;16938:93;17027:3;16938:93;:::i;:::-;17056:2;17051:3;17047:12;17040:19;;16699:366;;;:::o;17071:::-;17213:3;17234:67;17298:2;17293:3;17234:67;:::i;:::-;17227:74;;17310:93;17399:3;17310:93;:::i;:::-;17428:2;17423:3;17419:12;17412:19;;17071:366;;;:::o;17443:108::-;17520:24;17538:5;17520:24;:::i;:::-;17515:3;17508:37;17443:108;;:::o;17557:118::-;17644:24;17662:5;17644:24;:::i;:::-;17639:3;17632:37;17557:118;;:::o;17681:589::-;17906:3;17928:95;18019:3;18010:6;17928:95;:::i;:::-;17921:102;;18040:95;18131:3;18122:6;18040:95;:::i;:::-;18033:102;;18152:92;18240:3;18231:6;18152:92;:::i;:::-;18145:99;;18261:3;18254:10;;17681:589;;;;;;:::o;18276:222::-;18369:4;18407:2;18396:9;18392:18;18384:26;;18420:71;18488:1;18477:9;18473:17;18464:6;18420:71;:::i;:::-;18276:222;;;;:::o;18504:254::-;18613:4;18651:2;18640:9;18636:18;18628:26;;18664:87;18748:1;18737:9;18733:17;18724:6;18664:87;:::i;:::-;18504:254;;;;:::o;18764:373::-;18907:4;18945:2;18934:9;18930:18;18922:26;;18994:9;18988:4;18984:20;18980:1;18969:9;18965:17;18958:47;19022:108;19125:4;19116:6;19022:108;:::i;:::-;19014:116;;18764:373;;;;:::o;19143:210::-;19230:4;19268:2;19257:9;19253:18;19245:26;;19281:65;19343:1;19332:9;19328:17;19319:6;19281:65;:::i;:::-;19143:210;;;;:::o;19359:313::-;19472:4;19510:2;19499:9;19495:18;19487:26;;19559:9;19553:4;19549:20;19545:1;19534:9;19530:17;19523:47;19587:78;19660:4;19651:6;19587:78;:::i;:::-;19579:86;;19359:313;;;;:::o;19678:419::-;19844:4;19882:2;19871:9;19867:18;19859:26;;19931:9;19925:4;19921:20;19917:1;19906:9;19902:17;19895:47;19959:131;20085:4;19959:131;:::i;:::-;19951:139;;19678:419;;;:::o;20103:::-;20269:4;20307:2;20296:9;20292:18;20284:26;;20356:9;20350:4;20346:20;20342:1;20331:9;20327:17;20320:47;20384:131;20510:4;20384:131;:::i;:::-;20376:139;;20103:419;;;:::o;20528:::-;20694:4;20732:2;20721:9;20717:18;20709:26;;20781:9;20775:4;20771:20;20767:1;20756:9;20752:17;20745:47;20809:131;20935:4;20809:131;:::i;:::-;20801:139;;20528:419;;;:::o;20953:::-;21119:4;21157:2;21146:9;21142:18;21134:26;;21206:9;21200:4;21196:20;21192:1;21181:9;21177:17;21170:47;21234:131;21360:4;21234:131;:::i;:::-;21226:139;;20953:419;;;:::o;21378:::-;21544:4;21582:2;21571:9;21567:18;21559:26;;21631:9;21625:4;21621:20;21617:1;21606:9;21602:17;21595:47;21659:131;21785:4;21659:131;:::i;:::-;21651:139;;21378:419;;;:::o;21803:::-;21969:4;22007:2;21996:9;21992:18;21984:26;;22056:9;22050:4;22046:20;22042:1;22031:9;22027:17;22020:47;22084:131;22210:4;22084:131;:::i;:::-;22076:139;;21803:419;;;:::o;22228:::-;22394:4;22432:2;22421:9;22417:18;22409:26;;22481:9;22475:4;22471:20;22467:1;22456:9;22452:17;22445:47;22509:131;22635:4;22509:131;:::i;:::-;22501:139;;22228:419;;;:::o;22653:::-;22819:4;22857:2;22846:9;22842:18;22834:26;;22906:9;22900:4;22896:20;22892:1;22881:9;22877:17;22870:47;22934:131;23060:4;22934:131;:::i;:::-;22926:139;;22653:419;;;:::o;23078:::-;23244:4;23282:2;23271:9;23267:18;23259:26;;23331:9;23325:4;23321:20;23317:1;23306:9;23302:17;23295:47;23359:131;23485:4;23359:131;:::i;:::-;23351:139;;23078:419;;;:::o;23503:::-;23669:4;23707:2;23696:9;23692:18;23684:26;;23756:9;23750:4;23746:20;23742:1;23731:9;23727:17;23720:47;23784:131;23910:4;23784:131;:::i;:::-;23776:139;;23503:419;;;:::o;23928:::-;24094:4;24132:2;24121:9;24117:18;24109:26;;24181:9;24175:4;24171:20;24167:1;24156:9;24152:17;24145:47;24209:131;24335:4;24209:131;:::i;:::-;24201:139;;23928:419;;;:::o;24353:::-;24519:4;24557:2;24546:9;24542:18;24534:26;;24606:9;24600:4;24596:20;24592:1;24581:9;24577:17;24570:47;24634:131;24760:4;24634:131;:::i;:::-;24626:139;;24353:419;;;:::o;24778:::-;24944:4;24982:2;24971:9;24967:18;24959:26;;25031:9;25025:4;25021:20;25017:1;25006:9;25002:17;24995:47;25059:131;25185:4;25059:131;:::i;:::-;25051:139;;24778:419;;;:::o;25203:::-;25369:4;25407:2;25396:9;25392:18;25384:26;;25456:9;25450:4;25446:20;25442:1;25431:9;25427:17;25420:47;25484:131;25610:4;25484:131;:::i;:::-;25476:139;;25203:419;;;:::o;25628:::-;25794:4;25832:2;25821:9;25817:18;25809:26;;25881:9;25875:4;25871:20;25867:1;25856:9;25852:17;25845:47;25909:131;26035:4;25909:131;:::i;:::-;25901:139;;25628:419;;;:::o;26053:::-;26219:4;26257:2;26246:9;26242:18;26234:26;;26306:9;26300:4;26296:20;26292:1;26281:9;26277:17;26270:47;26334:131;26460:4;26334:131;:::i;:::-;26326:139;;26053:419;;;:::o;26478:::-;26644:4;26682:2;26671:9;26667:18;26659:26;;26731:9;26725:4;26721:20;26717:1;26706:9;26702:17;26695:47;26759:131;26885:4;26759:131;:::i;:::-;26751:139;;26478:419;;;:::o;26903:::-;27069:4;27107:2;27096:9;27092:18;27084:26;;27156:9;27150:4;27146:20;27142:1;27131:9;27127:17;27120:47;27184:131;27310:4;27184:131;:::i;:::-;27176:139;;26903:419;;;:::o;27328:::-;27494:4;27532:2;27521:9;27517:18;27509:26;;27581:9;27575:4;27571:20;27567:1;27556:9;27552:17;27545:47;27609:131;27735:4;27609:131;:::i;:::-;27601:139;;27328:419;;;:::o;27753:::-;27919:4;27957:2;27946:9;27942:18;27934:26;;28006:9;28000:4;27996:20;27992:1;27981:9;27977:17;27970:47;28034:131;28160:4;28034:131;:::i;:::-;28026:139;;27753:419;;;:::o;28178:::-;28344:4;28382:2;28371:9;28367:18;28359:26;;28431:9;28425:4;28421:20;28417:1;28406:9;28402:17;28395:47;28459:131;28585:4;28459:131;:::i;:::-;28451:139;;28178:419;;;:::o;28603:::-;28769:4;28807:2;28796:9;28792:18;28784:26;;28856:9;28850:4;28846:20;28842:1;28831:9;28827:17;28820:47;28884:131;29010:4;28884:131;:::i;:::-;28876:139;;28603:419;;;:::o;29028:::-;29194:4;29232:2;29221:9;29217:18;29209:26;;29281:9;29275:4;29271:20;29267:1;29256:9;29252:17;29245:47;29309:131;29435:4;29309:131;:::i;:::-;29301:139;;29028:419;;;:::o;29453:222::-;29546:4;29584:2;29573:9;29569:18;29561:26;;29597:71;29665:1;29654:9;29650:17;29641:6;29597:71;:::i;:::-;29453:222;;;;:::o;29681:129::-;29715:6;29742:20;;:::i;:::-;29732:30;;29771:33;29799:4;29791:6;29771:33;:::i;:::-;29681:129;;;:::o;29816:75::-;29849:6;29882:2;29876:9;29866:19;;29816:75;:::o;29897:308::-;29959:4;30049:18;30041:6;30038:30;30035:56;;;30071:18;;:::i;:::-;30035:56;30109:29;30131:6;30109:29;:::i;:::-;30101:37;;30193:4;30187;30183:15;30175:23;;29897:308;;;:::o;30211:132::-;30278:4;30301:3;30293:11;;30331:4;30326:3;30322:14;30314:22;;30211:132;;;:::o;30349:141::-;30398:4;30421:3;30413:11;;30444:3;30441:1;30434:14;30478:4;30475:1;30465:18;30457:26;;30349:141;;;:::o;30496:114::-;30563:6;30597:5;30591:12;30581:22;;30496:114;;;:::o;30616:99::-;30668:6;30702:5;30696:12;30686:22;;30616:99;;;:::o;30721:113::-;30791:4;30823;30818:3;30814:14;30806:22;;30721:113;;;:::o;30840:184::-;30939:11;30973:6;30968:3;30961:19;31013:4;31008:3;31004:14;30989:29;;30840:184;;;;:::o;31030:169::-;31114:11;31148:6;31143:3;31136:19;31188:4;31183:3;31179:14;31164:29;;31030:169;;;;:::o;31205:148::-;31307:11;31344:3;31329:18;;31205:148;;;;:::o;31359:305::-;31399:3;31418:20;31436:1;31418:20;:::i;:::-;31413:25;;31452:20;31470:1;31452:20;:::i;:::-;31447:25;;31606:1;31538:66;31534:74;31531:1;31528:81;31525:107;;;31612:18;;:::i;:::-;31525:107;31656:1;31653;31649:9;31642:16;;31359:305;;;;:::o;31670:185::-;31710:1;31727:20;31745:1;31727:20;:::i;:::-;31722:25;;31761:20;31779:1;31761:20;:::i;:::-;31756:25;;31800:1;31790:35;;31805:18;;:::i;:::-;31790:35;31847:1;31844;31840:9;31835:14;;31670:185;;;;:::o;31861:348::-;31901:7;31924:20;31942:1;31924:20;:::i;:::-;31919:25;;31958:20;31976:1;31958:20;:::i;:::-;31953:25;;32146:1;32078:66;32074:74;32071:1;32068:81;32063:1;32056:9;32049:17;32045:105;32042:131;;;32153:18;;:::i;:::-;32042:131;32201:1;32198;32194:9;32183:20;;31861:348;;;;:::o;32215:191::-;32255:4;32275:20;32293:1;32275:20;:::i;:::-;32270:25;;32309:20;32327:1;32309:20;:::i;:::-;32304:25;;32348:1;32345;32342:8;32339:34;;;32353:18;;:::i;:::-;32339:34;32398:1;32395;32391:9;32383:17;;32215:191;;;;:::o;32412:96::-;32449:7;32478:24;32496:5;32478:24;:::i;:::-;32467:35;;32412:96;;;:::o;32514:104::-;32559:7;32588:24;32606:5;32588:24;:::i;:::-;32577:35;;32514:104;;;:::o;32624:90::-;32658:7;32701:5;32694:13;32687:21;32676:32;;32624:90;;;:::o;32720:149::-;32756:7;32796:66;32789:5;32785:78;32774:89;;32720:149;;;:::o;32875:126::-;32912:7;32952:42;32945:5;32941:54;32930:65;;32875:126;;;:::o;33007:77::-;33044:7;33073:5;33062:16;;33007:77;;;:::o;33090:154::-;33174:6;33169:3;33164;33151:30;33236:1;33227:6;33222:3;33218:16;33211:27;33090:154;;;:::o;33250:307::-;33318:1;33328:113;33342:6;33339:1;33336:13;33328:113;;;33427:1;33422:3;33418:11;33412:18;33408:1;33403:3;33399:11;33392:39;33364:2;33361:1;33357:10;33352:15;;33328:113;;;33459:6;33456:1;33453:13;33450:101;;;33539:1;33530:6;33525:3;33521:16;33514:27;33450:101;33299:258;33250:307;;;:::o;33563:320::-;33607:6;33644:1;33638:4;33634:12;33624:22;;33691:1;33685:4;33681:12;33712:18;33702:81;;33768:4;33760:6;33756:17;33746:27;;33702:81;33830:2;33822:6;33819:14;33799:18;33796:38;33793:84;;;33849:18;;:::i;:::-;33793:84;33614:269;33563:320;;;:::o;33889:281::-;33972:27;33994:4;33972:27;:::i;:::-;33964:6;33960:40;34102:6;34090:10;34087:22;34066:18;34054:10;34051:34;34048:62;34045:88;;;34113:18;;:::i;:::-;34045:88;34153:10;34149:2;34142:22;33932:238;33889:281;;:::o;34176:233::-;34215:3;34238:24;34256:5;34238:24;:::i;:::-;34229:33;;34284:66;34277:5;34274:77;34271:103;;;34354:18;;:::i;:::-;34271:103;34401:1;34394:5;34390:13;34383:20;;34176:233;;;:::o;34415:176::-;34447:1;34464:20;34482:1;34464:20;:::i;:::-;34459:25;;34498:20;34516:1;34498:20;:::i;:::-;34493:25;;34537:1;34527:35;;34542:18;;:::i;:::-;34527:35;34583:1;34580;34576:9;34571:14;;34415:176;;;;:::o;34597:180::-;34645:77;34642:1;34635:88;34742:4;34739:1;34732:15;34766:4;34763:1;34756:15;34783:180;34831:77;34828:1;34821:88;34928:4;34925:1;34918:15;34952:4;34949:1;34942:15;34969:180;35017:77;35014:1;35007:88;35114:4;35111:1;35104:15;35138:4;35135:1;35128:15;35155:180;35203:77;35200:1;35193:88;35300:4;35297:1;35290:15;35324:4;35321:1;35314:15;35341:180;35389:77;35386:1;35379:88;35486:4;35483:1;35476:15;35510:4;35507:1;35500:15;35527:180;35575:77;35572:1;35565:88;35672:4;35669:1;35662:15;35696:4;35693:1;35686:15;35713:117;35822:1;35819;35812:12;35836:117;35945:1;35942;35935:12;35959:117;36068:1;36065;36058:12;36082:117;36191:1;36188;36181:12;36205:102;36246:6;36297:2;36293:7;36288:2;36281:5;36277:14;36273:28;36263:38;;36205:102;;;:::o;36313:221::-;36453:34;36449:1;36441:6;36437:14;36430:58;36522:4;36517:2;36509:6;36505:15;36498:29;36313:221;:::o;36540:225::-;36680:34;36676:1;36668:6;36664:14;36657:58;36749:8;36744:2;36736:6;36732:15;36725:33;36540:225;:::o;36771:178::-;36911:30;36907:1;36899:6;36895:14;36888:54;36771:178;:::o;36955:177::-;37095:29;37091:1;37083:6;37079:14;37072:53;36955:177;:::o;37138:165::-;37278:17;37274:1;37266:6;37262:14;37255:41;37138:165;:::o;37309:223::-;37449:34;37445:1;37437:6;37433:14;37426:58;37518:6;37513:2;37505:6;37501:15;37494:31;37309:223;:::o;37538:175::-;37678:27;37674:1;37666:6;37662:14;37655:51;37538:175;:::o;37719:157::-;37859:9;37855:1;37847:6;37843:14;37836:33;37719:157;:::o;37882:180::-;38022:32;38018:1;38010:6;38006:14;37999:56;37882:180;:::o;38068:231::-;38208:34;38204:1;38196:6;38192:14;38185:58;38277:14;38272:2;38264:6;38260:15;38253:39;38068:231;:::o;38305:243::-;38445:34;38441:1;38433:6;38429:14;38422:58;38514:26;38509:2;38501:6;38497:15;38490:51;38305:243;:::o;38554:229::-;38694:34;38690:1;38682:6;38678:14;38671:58;38763:12;38758:2;38750:6;38746:15;38739:37;38554:229;:::o;38789:180::-;38929:32;38925:1;38917:6;38913:14;38906:56;38789:180;:::o;38975:221::-;39115:34;39111:1;39103:6;39099:14;39092:58;39184:4;39179:2;39171:6;39167:15;39160:29;38975:221;:::o;39202:182::-;39342:34;39338:1;39330:6;39326:14;39319:58;39202:182;:::o;39390:220::-;39530:34;39526:1;39518:6;39514:14;39507:58;39599:3;39594:2;39586:6;39582:15;39575:28;39390:220;:::o;39616:231::-;39756:34;39752:1;39744:6;39740:14;39733:58;39825:14;39820:2;39812:6;39808:15;39801:39;39616:231;:::o;39853:182::-;39993:34;39989:1;39981:6;39977:14;39970:58;39853:182;:::o;40041:228::-;40181:34;40177:1;40169:6;40165:14;40158:58;40250:11;40245:2;40237:6;40233:15;40226:36;40041:228;:::o;40275:234::-;40415:34;40411:1;40403:6;40399:14;40392:58;40484:17;40479:2;40471:6;40467:15;40460:42;40275:234;:::o;40515:220::-;40655:34;40651:1;40643:6;40639:14;40632:58;40724:3;40719:2;40711:6;40707:15;40700:28;40515:220;:::o;40741:171::-;40881:23;40877:1;40869:6;40865:14;40858:47;40741:171;:::o;40918:236::-;41058:34;41054:1;41046:6;41042:14;41035:58;41127:19;41122:2;41114:6;41110:15;41103:44;40918:236;:::o;41160:122::-;41233:24;41251:5;41233:24;:::i;:::-;41226:5;41223:35;41213:63;;41272:1;41269;41262:12;41213:63;41160:122;:::o;41288:116::-;41358:21;41373:5;41358:21;:::i;:::-;41351:5;41348:32;41338:60;;41394:1;41391;41384:12;41338:60;41288:116;:::o;41410:120::-;41482:23;41499:5;41482:23;:::i;:::-;41475:5;41472:34;41462:62;;41520:1;41517;41510:12;41462:62;41410:120;:::o;41536:122::-;41609:24;41627:5;41609:24;:::i;:::-;41602:5;41599:35;41589:63;;41648:1;41645;41638:12;41589:63;41536:122;:::o
Swarm Source
ipfs://0136c73ace1ad22ef254e8cb9574f267d20b2cff5d67808fa9c2c04c5b9301c3
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.