Overview
GLMR Balance
GLMR Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 745 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Set Approval For... | 5974131 | 651 days ago | IN | 0 GLMR | 0.01044416 | ||||
| Set Approval For... | 5973121 | 651 days ago | IN | 0 GLMR | 0.00914949 | ||||
| Transfer From | 5802425 | 676 days ago | IN | 0 GLMR | 0.02348643 | ||||
| Transfer From | 5802424 | 676 days ago | IN | 0 GLMR | 0.02603161 | ||||
| Transfer From | 5802419 | 676 days ago | IN | 0 GLMR | 0.03214825 | ||||
| Set Approval For... | 5213363 | 759 days ago | IN | 0 GLMR | 0.01068284 | ||||
| Transfer From | 4725330 | 828 days ago | IN | 0 GLMR | 0.0249837 | ||||
| Transfer From | 4725326 | 828 days ago | IN | 0 GLMR | 0.04106277 | ||||
| Transfer From | 4725271 | 828 days ago | IN | 0 GLMR | 0.02982947 | ||||
| Set Approval For... | 4708054 | 830 days ago | IN | 0 GLMR | 0.01204141 | ||||
| Set Approval For... | 4519873 | 857 days ago | IN | 0 GLMR | 0.00975011 | ||||
| Set Approval For... | 3939376 | 938 days ago | IN | 0 GLMR | 0.0031406 | ||||
| Set Approval For... | 3522623 | 997 days ago | IN | 0 GLMR | 0.00447818 | ||||
| Set Approval For... | 3283910 | 1032 days ago | IN | 0 GLMR | 0.00251851 | ||||
| Set Approval For... | 2900901 | 1087 days ago | IN | 0 GLMR | 0.00474258 | ||||
| Set Approval For... | 2532224 | 1139 days ago | IN | 0 GLMR | 0.00474258 | ||||
| Set Approval For... | 2517632 | 1141 days ago | IN | 0 GLMR | 0.00474258 | ||||
| Set Approval For... | 2486814 | 1146 days ago | IN | 0 GLMR | 0.00474258 | ||||
| Set Approval For... | 2410862 | 1157 days ago | IN | 0 GLMR | 0.00251851 | ||||
| Set Approval For... | 2397819 | 1158 days ago | IN | 0 GLMR | 0.00474258 | ||||
| Set Approval For... | 2332275 | 1168 days ago | IN | 0 GLMR | 0.00476595 | ||||
| Set Approval For... | 2315173 | 1170 days ago | IN | 0 GLMR | 0.00478931 | ||||
| Set Approval For... | 2228545 | 1182 days ago | IN | 0 GLMR | 0.00481267 | ||||
| Set Approval For... | 2226446 | 1183 days ago | IN | 0 GLMR | 0.00474258 | ||||
| Set Approval For... | 2226360 | 1183 days ago | IN | 0 GLMR | 0.00474258 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 615880 | 1416 days ago | 1.8 GLMR | ||||
| 615858 | 1416 days ago | 2.7 GLMR | ||||
| 615823 | 1416 days ago | 0.9 GLMR | ||||
| 615681 | 1416 days ago | 0.9 GLMR | ||||
| 615672 | 1416 days ago | 9 GLMR | ||||
| 615672 | 1416 days ago | 0.9 GLMR | ||||
| 614336 | 1416 days ago | 2.7 GLMR | ||||
| 614066 | 1416 days ago | 13.5 GLMR | ||||
| 614057 | 1416 days ago | 13.5 GLMR | ||||
| 613535 | 1416 days ago | 0.9 GLMR | ||||
| 612970 | 1416 days ago | 0.9 GLMR | ||||
| 612873 | 1416 days ago | 0.9 GLMR | ||||
| 612839 | 1416 days ago | 0.9 GLMR | ||||
| 612145 | 1416 days ago | 0.9 GLMR | ||||
| 612029 | 1416 days ago | 0.9 GLMR | ||||
| 611996 | 1416 days ago | 1.8 GLMR | ||||
| 611842 | 1416 days ago | 1.8 GLMR | ||||
| 611782 | 1416 days ago | 9 GLMR | ||||
| 611782 | 1416 days ago | 9 GLMR | ||||
| 611777 | 1416 days ago | 9 GLMR | ||||
| 611774 | 1416 days ago | 9 GLMR | ||||
| 611772 | 1416 days ago | 9 GLMR | ||||
| 611766 | 1416 days ago | 5.4 GLMR | ||||
| 611742 | 1416 days ago | 9 GLMR | ||||
| 611717 | 1416 days ago | 4.5 GLMR |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
GlimmerKongsClub
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at moonbeam.moonscan.io on 2022-03-03
*/
// 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 GlimmerKongsClub is Ownable, ERC721 {
using Strings for string;
using Strings for uint256;
using SafeMath for uint256;
constructor () ERC721("GlimmerKongsClub" ,"GKC"){}
uint256 public priceMint = 2300000000000000000;
uint256 public MAX_KONG = 11111;
string public baseExtension = ".json";
bool public pauseMint = false;
address payable public marketing = payable(0x1C5d6C8c12e39E74Da75C17254Ab53Da8BcF6719);
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 setPauseMint(bool _value) public onlyOwner {
pauseMint = _value;
}
function getOwnedTokens(address _owner) public view returns (uint256[] memory) {
return ownedTokens[_owner];
}
function mintKong(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 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
Contract ABI
API[{"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":"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":"marketing","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintKong","outputs":[],"stateMutability":"payable","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":"bool","name":"_value","type":"bool"}],"name":"setPauseMint","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
6080604052671feb3dd067660000600f55612b676010556040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250601190805190602001906200006392919062000360565b506000601260006101000a81548160ff021916908315150217905550731c5d6c8c12e39e74da75c17254ab53da8bcf6719601260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000e157600080fd5b506040518060400160405280601081526020017f476c696d6d65724b6f6e6773436c7562000000000000000000000000000000008152506040518060400160405280600381526020017f474b4300000000000000000000000000000000000000000000000000000000008152506000620001606200028060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35081600990805190602001906200021692919062000360565b5080600a90805190602001906200022f92919062000360565b50620002486380ac58cd60e01b6200028860201b60201c565b62000260635b5e139f60e01b6200028860201b60201c565b6200027863780e9d6360e01b6200028860201b60201c565b5050620004f8565b600033905090565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415620002f4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002eb9062000437565b60405180910390fd5b6001806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b8280546200036e906200046a565b90600052602060002090601f016020900481019282620003925760008555620003de565b82601f10620003ad57805160ff1916838001178555620003de565b82800160010185558215620003de579182015b82811115620003dd578251825591602001919060010190620003c0565b5b509050620003ed9190620003f1565b5090565b5b808211156200040c576000816000905550600101620003f2565b5090565b60006200041f601c8362000459565b91506200042c82620004cf565b602082019050919050565b60006020820190508181036000830152620004528162000410565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200048357607f821691505b602082108114156200049a5762000499620004a0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4552433136353a20696e76616c696420696e7465726661636520696400000000600082015250565b61437d80620005086000396000f3fe6080604052600436106102045760003560e01c806370a0823111610118578063c87b56dd116100a0578063da6fa46c1161006f578063da6fa46c1461077d578063dc7edc53146107a8578063e985e9c5146107c4578063f2fde38b14610801578063f59e26d01461082a57610204565b8063c87b56dd146106af578063cd85cdb5146106ec578063d9d6165514610717578063da3ef23f1461075457610204565b806395d89b41116100e757806395d89b41146105da578063a22cb46514610605578063a5b590431461062e578063b2bdfa7b14610659578063c66828621461068457610204565b806370a0823114610530578063715018a61461056d5780638537b926146105845780638da5cb5b146105af57610204565b80632f745c591161019b5780634f6ccce71161016a5780634f6ccce71461043957806355f804b314610476578063619230bd1461049f5780636352211e146104c85780636c0360eb1461050557610204565b80632f745c591461037f5780633ccfd60b146103bc57806342842e0e146103d3578063438b6300146103fc57610204565b80630dee18e4116101d75780630dee18e4146102d757806318160ddd1461030057806323b872dd1461032b5780632d3e474a1461035457610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190613006565b610853565b60405161023d91906135bb565b60405180910390f35b34801561025257600080fd5b5061025b6108bb565b60405161026891906135d6565b60405180910390f35b34801561027d57600080fd5b506102986004803603810190610293919061307c565b61094d565b6040516102a59190613563565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190612f99565b6109d2565b005b3480156102e357600080fd5b506102fe60048036038101906102f9919061307c565b610aea565b005b34801561030c57600080fd5b50610315610b70565b6040516103229190613898565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d9190612f06565b610b81565b005b34801561036057600080fd5b50610369610be1565b604051610376919061357e565b60405180910390f35b34801561038b57600080fd5b506103a660048036038101906103a19190612f99565b610c07565b6040516103b39190613898565b60405180910390f35b3480156103c857600080fd5b506103d1610c62565b005b3480156103df57600080fd5b506103fa60048036038101906103f59190612f06565b610d27565b005b34801561040857600080fd5b50610423600480360381019061041e9190612e99565b610d87565b6040516104309190613599565b60405180910390f35b34801561044557600080fd5b50610460600480360381019061045b919061307c565b610e35565b60405161046d9190613898565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190613033565b610e58565b005b3480156104ab57600080fd5b506104c660048036038101906104c1919061307c565b610ee0565b005b3480156104d457600080fd5b506104ef60048036038101906104ea919061307c565b611000565b6040516104fc9190613563565b60405180910390f35b34801561051157600080fd5b5061051a611037565b60405161052791906135d6565b60405180910390f35b34801561053c57600080fd5b5061055760048036038101906105529190612e99565b6110c9565b6040516105649190613898565b60405180910390f35b34801561057957600080fd5b50610582611188565b005b34801561059057600080fd5b506105996112c2565b6040516105a69190613898565b60405180910390f35b3480156105bb57600080fd5b506105c46112c8565b6040516105d19190613563565b60405180910390f35b3480156105e657600080fd5b506105ef6112f1565b6040516105fc91906135d6565b60405180910390f35b34801561061157600080fd5b5061062c60048036038101906106279190612f59565b611383565b005b34801561063a57600080fd5b50610643611504565b6040516106509190613898565b60405180910390f35b34801561066557600080fd5b5061066e61150a565b60405161067b9190613563565b60405180910390f35b34801561069057600080fd5b5061069961152e565b6040516106a691906135d6565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d1919061307c565b6115bc565b6040516106e391906135d6565b60405180910390f35b3480156106f857600080fd5b50610701611666565b60405161070e91906135bb565b60405180910390f35b34801561072357600080fd5b5061073e60048036038101906107399190612e99565b611679565b60405161074b9190613599565b60405180910390f35b34801561076057600080fd5b5061077b60048036038101906107769190613033565b611710565b005b34801561078957600080fd5b506107926117a6565b60405161079f91906135d6565b60405180910390f35b6107c260048036038101906107bd919061307c565b6117bf565b005b3480156107d057600080fd5b506107eb60048036038101906107e69190612ec6565b61194e565b6040516107f891906135bb565b60405180910390f35b34801561080d57600080fd5b5061082860048036038101906108239190612e99565b6119e2565b005b34801561083657600080fd5b50610851600480360381019061084c9190612fd9565b611b8b565b005b600060016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b6060600980546108ca90613b5b565b80601f01602080910402602001604051908101604052809291908181526020018280546108f690613b5b565b80156109435780601f1061091857610100808354040283529160200191610943565b820191906000526020600020905b81548152906001019060200180831161092657829003601f168201915b5050505050905090565b600061095882611c24565b610997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098e906137b8565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109dd82611000565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4590613838565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a6d611c41565b73ffffffffffffffffffffffffffffffffffffffff161480610a9c5750610a9b81610a96611c41565b61194e565b5b610adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad290613718565b60405180910390fd5b610ae58383611c49565b505050565b610af2611c41565b73ffffffffffffffffffffffffffffffffffffffff16610b106112c8565b73ffffffffffffffffffffffffffffffffffffffff1614610b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5d906137d8565b60405180910390fd5b80600f8190555050565b6000610b7c6005611d02565b905090565b610b92610b8c611c41565b82611d17565b610bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc890613878565b60405180910390fd5b610bdc838383611df5565b505050565b601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610c5a82600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061202090919063ffffffff16565b905092915050565b610c6a611c41565b73ffffffffffffffffffffffffffffffffffffffff16610c886112c8565b73ffffffffffffffffffffffffffffffffffffffff1614610cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd5906137d8565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610d24573d6000803e3d6000fd5b50565b610d38610d32611c41565b82611d17565b610d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6e90613878565b60405180910390fd5b610d8283838361203a565b505050565b60606000610d94836110c9565b905060008167ffffffffffffffff811115610db257610db1613d23565b5b604051908082528060200260200182016040528015610de05781602001602082028036833780820191505090505b50905060005b82811015610e2a57610df88582610c07565b828281518110610e0b57610e0a613cf4565b5b6020026020010181815250508080610e2290613bbe565b915050610de6565b508092505050919050565b600080610e4c83600561204a90919063ffffffff16565b50905080915050919050565b610e60611c41565b73ffffffffffffffffffffffffffffffffffffffff16610e7e6112c8565b73ffffffffffffffffffffffffffffffffffffffff1614610ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecb906137d8565b60405180910390fd5b610edd81612076565b50565b610ee8611c41565b73ffffffffffffffffffffffffffffffffffffffff16610f066112c8565b73ffffffffffffffffffffffffffffffffffffffff1614610f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f53906137d8565b60405180910390fd5b601054610f7982610f6b610b70565b61209090919063ffffffff16565b1115610fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb190613858565b60405180910390fd5b60005b81811015610ffc57610fe933610fe46001610fd6610b70565b61209090919063ffffffff16565b6120ee565b8080610ff490613bbe565b915050610fbd565b5050565b60006110308260405180606001604052806029815260200161431f6029913960056122cc9092919063ffffffff16565b9050919050565b6060600e805461104690613b5b565b80601f016020809104026020016040519081016040528092919081815260200182805461107290613b5b565b80156110bf5780601f10611094576101008083540402835291602001916110bf565b820191906000526020600020905b8154815290600101906020018083116110a257829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561113a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113190613738565b60405180910390fd5b611181600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206122eb565b9050919050565b611190611c41565b73ffffffffffffffffffffffffffffffffffffffff166111ae6112c8565b73ffffffffffffffffffffffffffffffffffffffff1614611204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fb906137d8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60105481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600a805461130090613b5b565b80601f016020809104026020016040519081016040528092919081815260200182805461132c90613b5b565b80156113795780601f1061134e57610100808354040283529160200191611379565b820191906000526020600020905b81548152906001019060200180831161135c57829003601f168201915b5050505050905090565b61138b611c41565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f090613698565b60405180910390fd5b8060086000611406611c41565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114b3611c41565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114f891906135bb565b60405180910390a35050565b600f5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6011805461153b90613b5b565b80601f016020809104026020016040519081016040528092919081815260200182805461156790613b5b565b80156115b45780601f10611589576101008083540402835291602001916115b4565b820191906000526020600020905b81548152906001019060200180831161159757829003601f168201915b505050505081565b60606115c782611c24565b611606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fd90613818565b60405180910390fd5b6000611610611037565b90506000815111611630576040518060200160405280600081525061165e565b8061163a84612300565b601160405160200161164e93929190613532565b6040516020818303038152906040525b915050919050565b601260009054906101000a900460ff1681565b6060600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561170457602002820191906000526020600020905b8154815260200190600101908083116116f0575b50505050509050919050565b611718611c41565b73ffffffffffffffffffffffffffffffffffffffff166117366112c8565b73ffffffffffffffffffffffffffffffffffffffff161461178c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611783906137d8565b60405180910390fd5b80601190805190602001906117a2929190612d32565b5050565b60606117ba6117b56005611d02565b612300565b905090565b601260009054906101000a900460ff161561180f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611806906136b8565b60405180910390fd5b60105461182c8261181e610b70565b61209090919063ffffffff16565b111561186d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186490613858565b60405180910390fd5b611893600082111561187f5781611882565b60015b600f5461246190919063ffffffff16565b34101561189f57600080fd5b601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611907573d6000803e3d6000fd5b5060005b8181101561194a57611937336119326001611924610b70565b61209090919063ffffffff16565b6120ee565b808061194290613bbe565b91505061190b565b5050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119ea611c41565b73ffffffffffffffffffffffffffffffffffffffff16611a086112c8565b73ffffffffffffffffffffffffffffffffffffffff1614611a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a55906137d8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac590613618565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b93611c41565b73ffffffffffffffffffffffffffffffffffffffff16611bb16112c8565b73ffffffffffffffffffffffffffffffffffffffff1614611c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfe906137d8565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b6000611c3a8260056124dc90919063ffffffff16565b9050919050565b600033905090565b816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611cbc83611000565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611d10826000016124f6565b9050919050565b6000611d2282611c24565b611d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d58906136f8565b60405180910390fd5b6000611d6c83611000565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ddb57508373ffffffffffffffffffffffffffffffffffffffff16611dc38461094d565b73ffffffffffffffffffffffffffffffffffffffff16145b80611dec5750611deb818561194e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e1582611000565b73ffffffffffffffffffffffffffffffffffffffff1614611e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e62906137f8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed290613678565b60405180910390fd5b611ee6838383612507565b611ef1600082611c49565b611f4281600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061250c90919063ffffffff16565b50611f9481600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061252690919063ffffffff16565b50611f9f8382612540565b611fa98282612770565b611fbf8183600561283a9092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061202f836000018361286f565b60001c905092915050565b612045838383611df5565b505050565b60008060008061205d86600001866128e3565b915091508160001c8160001c9350935050509250929050565b80600e908051906020019061208c929190612d32565b5050565b600080828461209f919061397e565b9050838110156120e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120db90613658565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561215e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215590613778565b60405180910390fd5b61216781611c24565b156121a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219e90613638565b60405180910390fd5b600c80549050600d600083815260200190815260200160002081905550600c8190806001815401808255809150506001900390600052602060002001600090919091909150556121f960008383612507565b61224a81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061252690919063ffffffff16565b506122558282612770565b61226b8183600561283a9092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006122df846000018460001b8461296d565b60001c90509392505050565b60006122f982600001612a0e565b9050919050565b60606000821415612348576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061245c565b600082905060005b6000821461237a57808061236390613bbe565b915050600a8261237391906139d4565b9150612350565b60008167ffffffffffffffff81111561239657612395613d23565b5b6040519080825280601f01601f1916602001820160405280156123c85781602001600182028036833780820191505090505b5090505b60008514612455576001826123e19190613a5f565b9150600a856123f09190613c07565b60306123fc919061397e565b60f81b81838151811061241257612411613cf4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561244e91906139d4565b94506123cc565b8093505050505b919050565b60008083141561247457600090506124d6565b600082846124829190613a05565b905082848261249191906139d4565b146124d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c890613798565b60405180910390fd5b809150505b92915050565b60006124ee836000018360001b612a1f565b905092915050565b600081600001805490509050919050565b505050565b600061251e836000018360001b612a42565b905092915050565b6000612538836000018360001b612b5a565b905092915050565b60006004600083815260200190815260200160002054905060006125b06001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050612bca90919063ffffffff16565b90506000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061260557612604613cf4565b5b9060005260206000200154905080600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020848154811061266457612663613cf4565b5b90600052602060002001819055506000600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106126c5576126c4613cf4565b5b9060005260206000200181905550600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061272257612721613cc5565b5b60019003818190600052602060002001600090559055600060046000868152602001908152602001600020819055508260046000838152602001908152602001600020819055505050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020829080600181540180825580915050600190039060005260206000200160009091909190915055806004600084815260200190815260200160002081905550505050565b6000612866846000018460001b8473ffffffffffffffffffffffffffffffffffffffff1660001b612c23565b90509392505050565b6000818360000180549050116128ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b1906135f8565b60405180910390fd5b8260000182815481106128d0576128cf613cf4565b5b9060005260206000200154905092915050565b6000808284600001805490501161292f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292690613758565b60405180910390fd5b600084600001848154811061294757612946613cf4565b5b906000526020600020906002020190508060000154816001015492509250509250929050565b600080846001016000858152602001908152602001600020549050600081141583906129cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c691906135d6565b60405180910390fd5b50846000016001826129e19190613a5f565b815481106129f2576129f1613cf4565b5b9060005260206000209060020201600101549150509392505050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020541415905092915050565b60008083600101600084815260200190815260200160002054905060008114612b4e576000600182612a749190613a5f565b9050600060018660000180549050612a8c9190613a5f565b90506000866000018281548110612aa657612aa5613cf4565b5b9060005260206000200154905080876000018481548110612aca57612ac9613cf4565b5b9060005260206000200181905550600183612ae5919061397e565b8760010160008381526020019081526020016000208190555086600001805480612b1257612b11613cc5565b5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050612b54565b60009150505b92915050565b6000612b668383612d0f565b612bbf578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612bc4565b600090505b92915050565b600082821115612c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c06906136d8565b60405180910390fd5b8183612c1b9190613a5f565b905092915050565b6000808460010160008581526020019081526020016000205490506000811415612cca57846000016040518060400160405280868152602001858152509080600181540180825580915050600190039060005260206000209060020201600090919091909150600082015181600001556020820151816001015550508460000180549050856001016000868152602001908152602001600020819055506001915050612d08565b8285600001600183612cdc9190613a5f565b81548110612ced57612cec613cf4565b5b90600052602060002090600202016001018190555060009150505b9392505050565b600080836001016000848152602001908152602001600020541415905092915050565b828054612d3e90613b5b565b90600052602060002090601f016020900481019282612d605760008555612da7565b82601f10612d7957805160ff1916838001178555612da7565b82800160010185558215612da7579182015b82811115612da6578251825591602001919060010190612d8b565b5b509050612db49190612db8565b5090565b5b80821115612dd1576000816000905550600101612db9565b5090565b6000612de8612de3846138d8565b6138b3565b905082815260208101848484011115612e0457612e03613d57565b5b612e0f848285613b19565b509392505050565b600081359050612e26816142c2565b92915050565b600081359050612e3b816142d9565b92915050565b600081359050612e50816142f0565b92915050565b600082601f830112612e6b57612e6a613d52565b5b8135612e7b848260208601612dd5565b91505092915050565b600081359050612e9381614307565b92915050565b600060208284031215612eaf57612eae613d61565b5b6000612ebd84828501612e17565b91505092915050565b60008060408385031215612edd57612edc613d61565b5b6000612eeb85828601612e17565b9250506020612efc85828601612e17565b9150509250929050565b600080600060608486031215612f1f57612f1e613d61565b5b6000612f2d86828701612e17565b9350506020612f3e86828701612e17565b9250506040612f4f86828701612e84565b9150509250925092565b60008060408385031215612f7057612f6f613d61565b5b6000612f7e85828601612e17565b9250506020612f8f85828601612e2c565b9150509250929050565b60008060408385031215612fb057612faf613d61565b5b6000612fbe85828601612e17565b9250506020612fcf85828601612e84565b9150509250929050565b600060208284031215612fef57612fee613d61565b5b6000612ffd84828501612e2c565b91505092915050565b60006020828403121561301c5761301b613d61565b5b600061302a84828501612e41565b91505092915050565b60006020828403121561304957613048613d61565b5b600082013567ffffffffffffffff81111561306757613066613d5c565b5b61307384828501612e56565b91505092915050565b60006020828403121561309257613091613d61565b5b60006130a084828501612e84565b91505092915050565b60006130b58383613514565b60208301905092915050565b6130ca81613aa5565b82525050565b6130d981613a93565b82525050565b60006130ea8261392e565b6130f48185613951565b93506130ff83613909565b8060005b8381101561313057815161311788826130a9565b975061312283613944565b925050600181019050613103565b5085935050505092915050565b61314681613ab7565b82525050565b600061315782613939565b6131618185613962565b9350613171818560208601613b28565b61317a81613d66565b840191505092915050565b600061319082613939565b61319a8185613973565b93506131aa818560208601613b28565b80840191505092915050565b600081546131c381613b5b565b6131cd8186613973565b945060018216600081146131e857600181146131f95761322c565b60ff1983168652818601935061322c565b61320285613919565b60005b8381101561322457815481890152600182019150602081019050613205565b838801955050505b50505092915050565b6000613242602283613962565b915061324d82613d77565b604082019050919050565b6000613265602683613962565b915061327082613dc6565b604082019050919050565b6000613288601c83613962565b915061329382613e15565b602082019050919050565b60006132ab601b83613962565b91506132b682613e3e565b602082019050919050565b60006132ce602483613962565b91506132d982613e67565b604082019050919050565b60006132f1601983613962565b91506132fc82613eb6565b602082019050919050565b6000613314600783613962565b915061331f82613edf565b602082019050919050565b6000613337601e83613962565b915061334282613f08565b602082019050919050565b600061335a602c83613962565b915061336582613f31565b604082019050919050565b600061337d603883613962565b915061338882613f80565b604082019050919050565b60006133a0602a83613962565b91506133ab82613fcf565b604082019050919050565b60006133c3602283613962565b91506133ce8261401e565b604082019050919050565b60006133e6602083613962565b91506133f18261406d565b602082019050919050565b6000613409602183613962565b915061341482614096565b604082019050919050565b600061342c602c83613962565b9150613437826140e5565b604082019050919050565b600061344f602083613962565b915061345a82614134565b602082019050919050565b6000613472602983613962565b915061347d8261415d565b604082019050919050565b6000613495602f83613962565b91506134a0826141ac565b604082019050919050565b60006134b8602183613962565b91506134c3826141fb565b604082019050919050565b60006134db601583613962565b91506134e68261424a565b602082019050919050565b60006134fe603183613962565b915061350982614273565b604082019050919050565b61351d81613b0f565b82525050565b61352c81613b0f565b82525050565b600061353e8286613185565b915061354a8285613185565b915061355682846131b6565b9150819050949350505050565b600060208201905061357860008301846130d0565b92915050565b600060208201905061359360008301846130c1565b92915050565b600060208201905081810360008301526135b381846130df565b905092915050565b60006020820190506135d0600083018461313d565b92915050565b600060208201905081810360008301526135f0818461314c565b905092915050565b6000602082019050818103600083015261361181613235565b9050919050565b6000602082019050818103600083015261363181613258565b9050919050565b600060208201905081810360008301526136518161327b565b9050919050565b600060208201905081810360008301526136718161329e565b9050919050565b60006020820190508181036000830152613691816132c1565b9050919050565b600060208201905081810360008301526136b1816132e4565b9050919050565b600060208201905081810360008301526136d181613307565b9050919050565b600060208201905081810360008301526136f18161332a565b9050919050565b600060208201905081810360008301526137118161334d565b9050919050565b6000602082019050818103600083015261373181613370565b9050919050565b6000602082019050818103600083015261375181613393565b9050919050565b60006020820190508181036000830152613771816133b6565b9050919050565b60006020820190508181036000830152613791816133d9565b9050919050565b600060208201905081810360008301526137b1816133fc565b9050919050565b600060208201905081810360008301526137d18161341f565b9050919050565b600060208201905081810360008301526137f181613442565b9050919050565b6000602082019050818103600083015261381181613465565b9050919050565b6000602082019050818103600083015261383181613488565b9050919050565b60006020820190508181036000830152613851816134ab565b9050919050565b60006020820190508181036000830152613871816134ce565b9050919050565b60006020820190508181036000830152613891816134f1565b9050919050565b60006020820190506138ad6000830184613523565b92915050565b60006138bd6138ce565b90506138c98282613b8d565b919050565b6000604051905090565b600067ffffffffffffffff8211156138f3576138f2613d23565b5b6138fc82613d66565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061398982613b0f565b915061399483613b0f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139c9576139c8613c38565b5b828201905092915050565b60006139df82613b0f565b91506139ea83613b0f565b9250826139fa576139f9613c67565b5b828204905092915050565b6000613a1082613b0f565b9150613a1b83613b0f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a5457613a53613c38565b5b828202905092915050565b6000613a6a82613b0f565b9150613a7583613b0f565b925082821015613a8857613a87613c38565b5b828203905092915050565b6000613a9e82613aef565b9050919050565b6000613ab082613aef565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613b46578082015181840152602081019050613b2b565b83811115613b55576000848401525b50505050565b60006002820490506001821680613b7357607f821691505b60208210811415613b8757613b86613c96565b5b50919050565b613b9682613d66565b810181811067ffffffffffffffff82111715613bb557613bb4613d23565b5b80604052505050565b6000613bc982613b0f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bfc57613bfb613c38565b5b600182019050919050565b6000613c1282613b0f565b9150613c1d83613b0f565b925082613c2d57613c2c613c67565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5061757365642e00000000000000000000000000000000000000000000000000600082015250565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c696d6974204b6f6e67732065786365656465642e0000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6142cb81613a93565b81146142d657600080fd5b50565b6142e281613ab7565b81146142ed57600080fd5b50565b6142f981613ac3565b811461430457600080fd5b50565b61431081613b0f565b811461431b57600080fd5b5056fe4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea2646970667358221220a060d3b70dfe4e785eb2270578332ca63633b488524f38eb3bb07f119714322164736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102045760003560e01c806370a0823111610118578063c87b56dd116100a0578063da6fa46c1161006f578063da6fa46c1461077d578063dc7edc53146107a8578063e985e9c5146107c4578063f2fde38b14610801578063f59e26d01461082a57610204565b8063c87b56dd146106af578063cd85cdb5146106ec578063d9d6165514610717578063da3ef23f1461075457610204565b806395d89b41116100e757806395d89b41146105da578063a22cb46514610605578063a5b590431461062e578063b2bdfa7b14610659578063c66828621461068457610204565b806370a0823114610530578063715018a61461056d5780638537b926146105845780638da5cb5b146105af57610204565b80632f745c591161019b5780634f6ccce71161016a5780634f6ccce71461043957806355f804b314610476578063619230bd1461049f5780636352211e146104c85780636c0360eb1461050557610204565b80632f745c591461037f5780633ccfd60b146103bc57806342842e0e146103d3578063438b6300146103fc57610204565b80630dee18e4116101d75780630dee18e4146102d757806318160ddd1461030057806323b872dd1461032b5780632d3e474a1461035457610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190613006565b610853565b60405161023d91906135bb565b60405180910390f35b34801561025257600080fd5b5061025b6108bb565b60405161026891906135d6565b60405180910390f35b34801561027d57600080fd5b506102986004803603810190610293919061307c565b61094d565b6040516102a59190613563565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190612f99565b6109d2565b005b3480156102e357600080fd5b506102fe60048036038101906102f9919061307c565b610aea565b005b34801561030c57600080fd5b50610315610b70565b6040516103229190613898565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d9190612f06565b610b81565b005b34801561036057600080fd5b50610369610be1565b604051610376919061357e565b60405180910390f35b34801561038b57600080fd5b506103a660048036038101906103a19190612f99565b610c07565b6040516103b39190613898565b60405180910390f35b3480156103c857600080fd5b506103d1610c62565b005b3480156103df57600080fd5b506103fa60048036038101906103f59190612f06565b610d27565b005b34801561040857600080fd5b50610423600480360381019061041e9190612e99565b610d87565b6040516104309190613599565b60405180910390f35b34801561044557600080fd5b50610460600480360381019061045b919061307c565b610e35565b60405161046d9190613898565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190613033565b610e58565b005b3480156104ab57600080fd5b506104c660048036038101906104c1919061307c565b610ee0565b005b3480156104d457600080fd5b506104ef60048036038101906104ea919061307c565b611000565b6040516104fc9190613563565b60405180910390f35b34801561051157600080fd5b5061051a611037565b60405161052791906135d6565b60405180910390f35b34801561053c57600080fd5b5061055760048036038101906105529190612e99565b6110c9565b6040516105649190613898565b60405180910390f35b34801561057957600080fd5b50610582611188565b005b34801561059057600080fd5b506105996112c2565b6040516105a69190613898565b60405180910390f35b3480156105bb57600080fd5b506105c46112c8565b6040516105d19190613563565b60405180910390f35b3480156105e657600080fd5b506105ef6112f1565b6040516105fc91906135d6565b60405180910390f35b34801561061157600080fd5b5061062c60048036038101906106279190612f59565b611383565b005b34801561063a57600080fd5b50610643611504565b6040516106509190613898565b60405180910390f35b34801561066557600080fd5b5061066e61150a565b60405161067b9190613563565b60405180910390f35b34801561069057600080fd5b5061069961152e565b6040516106a691906135d6565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d1919061307c565b6115bc565b6040516106e391906135d6565b60405180910390f35b3480156106f857600080fd5b50610701611666565b60405161070e91906135bb565b60405180910390f35b34801561072357600080fd5b5061073e60048036038101906107399190612e99565b611679565b60405161074b9190613599565b60405180910390f35b34801561076057600080fd5b5061077b60048036038101906107769190613033565b611710565b005b34801561078957600080fd5b506107926117a6565b60405161079f91906135d6565b60405180910390f35b6107c260048036038101906107bd919061307c565b6117bf565b005b3480156107d057600080fd5b506107eb60048036038101906107e69190612ec6565b61194e565b6040516107f891906135bb565b60405180910390f35b34801561080d57600080fd5b5061082860048036038101906108239190612e99565b6119e2565b005b34801561083657600080fd5b50610851600480360381019061084c9190612fd9565b611b8b565b005b600060016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b6060600980546108ca90613b5b565b80601f01602080910402602001604051908101604052809291908181526020018280546108f690613b5b565b80156109435780601f1061091857610100808354040283529160200191610943565b820191906000526020600020905b81548152906001019060200180831161092657829003601f168201915b5050505050905090565b600061095882611c24565b610997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098e906137b8565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109dd82611000565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4590613838565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a6d611c41565b73ffffffffffffffffffffffffffffffffffffffff161480610a9c5750610a9b81610a96611c41565b61194e565b5b610adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad290613718565b60405180910390fd5b610ae58383611c49565b505050565b610af2611c41565b73ffffffffffffffffffffffffffffffffffffffff16610b106112c8565b73ffffffffffffffffffffffffffffffffffffffff1614610b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5d906137d8565b60405180910390fd5b80600f8190555050565b6000610b7c6005611d02565b905090565b610b92610b8c611c41565b82611d17565b610bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc890613878565b60405180910390fd5b610bdc838383611df5565b505050565b601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610c5a82600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061202090919063ffffffff16565b905092915050565b610c6a611c41565b73ffffffffffffffffffffffffffffffffffffffff16610c886112c8565b73ffffffffffffffffffffffffffffffffffffffff1614610cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd5906137d8565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610d24573d6000803e3d6000fd5b50565b610d38610d32611c41565b82611d17565b610d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6e90613878565b60405180910390fd5b610d8283838361203a565b505050565b60606000610d94836110c9565b905060008167ffffffffffffffff811115610db257610db1613d23565b5b604051908082528060200260200182016040528015610de05781602001602082028036833780820191505090505b50905060005b82811015610e2a57610df88582610c07565b828281518110610e0b57610e0a613cf4565b5b6020026020010181815250508080610e2290613bbe565b915050610de6565b508092505050919050565b600080610e4c83600561204a90919063ffffffff16565b50905080915050919050565b610e60611c41565b73ffffffffffffffffffffffffffffffffffffffff16610e7e6112c8565b73ffffffffffffffffffffffffffffffffffffffff1614610ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecb906137d8565b60405180910390fd5b610edd81612076565b50565b610ee8611c41565b73ffffffffffffffffffffffffffffffffffffffff16610f066112c8565b73ffffffffffffffffffffffffffffffffffffffff1614610f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f53906137d8565b60405180910390fd5b601054610f7982610f6b610b70565b61209090919063ffffffff16565b1115610fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb190613858565b60405180910390fd5b60005b81811015610ffc57610fe933610fe46001610fd6610b70565b61209090919063ffffffff16565b6120ee565b8080610ff490613bbe565b915050610fbd565b5050565b60006110308260405180606001604052806029815260200161431f6029913960056122cc9092919063ffffffff16565b9050919050565b6060600e805461104690613b5b565b80601f016020809104026020016040519081016040528092919081815260200182805461107290613b5b565b80156110bf5780601f10611094576101008083540402835291602001916110bf565b820191906000526020600020905b8154815290600101906020018083116110a257829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561113a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113190613738565b60405180910390fd5b611181600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206122eb565b9050919050565b611190611c41565b73ffffffffffffffffffffffffffffffffffffffff166111ae6112c8565b73ffffffffffffffffffffffffffffffffffffffff1614611204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fb906137d8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60105481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600a805461130090613b5b565b80601f016020809104026020016040519081016040528092919081815260200182805461132c90613b5b565b80156113795780601f1061134e57610100808354040283529160200191611379565b820191906000526020600020905b81548152906001019060200180831161135c57829003601f168201915b5050505050905090565b61138b611c41565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f090613698565b60405180910390fd5b8060086000611406611c41565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114b3611c41565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114f891906135bb565b60405180910390a35050565b600f5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6011805461153b90613b5b565b80601f016020809104026020016040519081016040528092919081815260200182805461156790613b5b565b80156115b45780601f10611589576101008083540402835291602001916115b4565b820191906000526020600020905b81548152906001019060200180831161159757829003601f168201915b505050505081565b60606115c782611c24565b611606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fd90613818565b60405180910390fd5b6000611610611037565b90506000815111611630576040518060200160405280600081525061165e565b8061163a84612300565b601160405160200161164e93929190613532565b6040516020818303038152906040525b915050919050565b601260009054906101000a900460ff1681565b6060600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561170457602002820191906000526020600020905b8154815260200190600101908083116116f0575b50505050509050919050565b611718611c41565b73ffffffffffffffffffffffffffffffffffffffff166117366112c8565b73ffffffffffffffffffffffffffffffffffffffff161461178c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611783906137d8565b60405180910390fd5b80601190805190602001906117a2929190612d32565b5050565b60606117ba6117b56005611d02565b612300565b905090565b601260009054906101000a900460ff161561180f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611806906136b8565b60405180910390fd5b60105461182c8261181e610b70565b61209090919063ffffffff16565b111561186d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186490613858565b60405180910390fd5b611893600082111561187f5781611882565b60015b600f5461246190919063ffffffff16565b34101561189f57600080fd5b601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611907573d6000803e3d6000fd5b5060005b8181101561194a57611937336119326001611924610b70565b61209090919063ffffffff16565b6120ee565b808061194290613bbe565b91505061190b565b5050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119ea611c41565b73ffffffffffffffffffffffffffffffffffffffff16611a086112c8565b73ffffffffffffffffffffffffffffffffffffffff1614611a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a55906137d8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac590613618565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b93611c41565b73ffffffffffffffffffffffffffffffffffffffff16611bb16112c8565b73ffffffffffffffffffffffffffffffffffffffff1614611c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfe906137d8565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b6000611c3a8260056124dc90919063ffffffff16565b9050919050565b600033905090565b816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611cbc83611000565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611d10826000016124f6565b9050919050565b6000611d2282611c24565b611d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d58906136f8565b60405180910390fd5b6000611d6c83611000565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ddb57508373ffffffffffffffffffffffffffffffffffffffff16611dc38461094d565b73ffffffffffffffffffffffffffffffffffffffff16145b80611dec5750611deb818561194e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e1582611000565b73ffffffffffffffffffffffffffffffffffffffff1614611e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e62906137f8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed290613678565b60405180910390fd5b611ee6838383612507565b611ef1600082611c49565b611f4281600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061250c90919063ffffffff16565b50611f9481600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061252690919063ffffffff16565b50611f9f8382612540565b611fa98282612770565b611fbf8183600561283a9092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061202f836000018361286f565b60001c905092915050565b612045838383611df5565b505050565b60008060008061205d86600001866128e3565b915091508160001c8160001c9350935050509250929050565b80600e908051906020019061208c929190612d32565b5050565b600080828461209f919061397e565b9050838110156120e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120db90613658565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561215e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215590613778565b60405180910390fd5b61216781611c24565b156121a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219e90613638565b60405180910390fd5b600c80549050600d600083815260200190815260200160002081905550600c8190806001815401808255809150506001900390600052602060002001600090919091909150556121f960008383612507565b61224a81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061252690919063ffffffff16565b506122558282612770565b61226b8183600561283a9092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006122df846000018460001b8461296d565b60001c90509392505050565b60006122f982600001612a0e565b9050919050565b60606000821415612348576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061245c565b600082905060005b6000821461237a57808061236390613bbe565b915050600a8261237391906139d4565b9150612350565b60008167ffffffffffffffff81111561239657612395613d23565b5b6040519080825280601f01601f1916602001820160405280156123c85781602001600182028036833780820191505090505b5090505b60008514612455576001826123e19190613a5f565b9150600a856123f09190613c07565b60306123fc919061397e565b60f81b81838151811061241257612411613cf4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561244e91906139d4565b94506123cc565b8093505050505b919050565b60008083141561247457600090506124d6565b600082846124829190613a05565b905082848261249191906139d4565b146124d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c890613798565b60405180910390fd5b809150505b92915050565b60006124ee836000018360001b612a1f565b905092915050565b600081600001805490509050919050565b505050565b600061251e836000018360001b612a42565b905092915050565b6000612538836000018360001b612b5a565b905092915050565b60006004600083815260200190815260200160002054905060006125b06001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050612bca90919063ffffffff16565b90506000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061260557612604613cf4565b5b9060005260206000200154905080600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020848154811061266457612663613cf4565b5b90600052602060002001819055506000600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106126c5576126c4613cf4565b5b9060005260206000200181905550600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061272257612721613cc5565b5b60019003818190600052602060002001600090559055600060046000868152602001908152602001600020819055508260046000838152602001908152602001600020819055505050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020829080600181540180825580915050600190039060005260206000200160009091909190915055806004600084815260200190815260200160002081905550505050565b6000612866846000018460001b8473ffffffffffffffffffffffffffffffffffffffff1660001b612c23565b90509392505050565b6000818360000180549050116128ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b1906135f8565b60405180910390fd5b8260000182815481106128d0576128cf613cf4565b5b9060005260206000200154905092915050565b6000808284600001805490501161292f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292690613758565b60405180910390fd5b600084600001848154811061294757612946613cf4565b5b906000526020600020906002020190508060000154816001015492509250509250929050565b600080846001016000858152602001908152602001600020549050600081141583906129cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c691906135d6565b60405180910390fd5b50846000016001826129e19190613a5f565b815481106129f2576129f1613cf4565b5b9060005260206000209060020201600101549150509392505050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020541415905092915050565b60008083600101600084815260200190815260200160002054905060008114612b4e576000600182612a749190613a5f565b9050600060018660000180549050612a8c9190613a5f565b90506000866000018281548110612aa657612aa5613cf4565b5b9060005260206000200154905080876000018481548110612aca57612ac9613cf4565b5b9060005260206000200181905550600183612ae5919061397e565b8760010160008381526020019081526020016000208190555086600001805480612b1257612b11613cc5565b5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050612b54565b60009150505b92915050565b6000612b668383612d0f565b612bbf578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612bc4565b600090505b92915050565b600082821115612c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c06906136d8565b60405180910390fd5b8183612c1b9190613a5f565b905092915050565b6000808460010160008581526020019081526020016000205490506000811415612cca57846000016040518060400160405280868152602001858152509080600181540180825580915050600190039060005260206000209060020201600090919091909150600082015181600001556020820151816001015550508460000180549050856001016000868152602001908152602001600020819055506001915050612d08565b8285600001600183612cdc9190613a5f565b81548110612ced57612cec613cf4565b5b90600052602060002090600202016001018190555060009150505b9392505050565b600080836001016000848152602001908152602001600020541415905092915050565b828054612d3e90613b5b565b90600052602060002090601f016020900481019282612d605760008555612da7565b82601f10612d7957805160ff1916838001178555612da7565b82800160010185558215612da7579182015b82811115612da6578251825591602001919060010190612d8b565b5b509050612db49190612db8565b5090565b5b80821115612dd1576000816000905550600101612db9565b5090565b6000612de8612de3846138d8565b6138b3565b905082815260208101848484011115612e0457612e03613d57565b5b612e0f848285613b19565b509392505050565b600081359050612e26816142c2565b92915050565b600081359050612e3b816142d9565b92915050565b600081359050612e50816142f0565b92915050565b600082601f830112612e6b57612e6a613d52565b5b8135612e7b848260208601612dd5565b91505092915050565b600081359050612e9381614307565b92915050565b600060208284031215612eaf57612eae613d61565b5b6000612ebd84828501612e17565b91505092915050565b60008060408385031215612edd57612edc613d61565b5b6000612eeb85828601612e17565b9250506020612efc85828601612e17565b9150509250929050565b600080600060608486031215612f1f57612f1e613d61565b5b6000612f2d86828701612e17565b9350506020612f3e86828701612e17565b9250506040612f4f86828701612e84565b9150509250925092565b60008060408385031215612f7057612f6f613d61565b5b6000612f7e85828601612e17565b9250506020612f8f85828601612e2c565b9150509250929050565b60008060408385031215612fb057612faf613d61565b5b6000612fbe85828601612e17565b9250506020612fcf85828601612e84565b9150509250929050565b600060208284031215612fef57612fee613d61565b5b6000612ffd84828501612e2c565b91505092915050565b60006020828403121561301c5761301b613d61565b5b600061302a84828501612e41565b91505092915050565b60006020828403121561304957613048613d61565b5b600082013567ffffffffffffffff81111561306757613066613d5c565b5b61307384828501612e56565b91505092915050565b60006020828403121561309257613091613d61565b5b60006130a084828501612e84565b91505092915050565b60006130b58383613514565b60208301905092915050565b6130ca81613aa5565b82525050565b6130d981613a93565b82525050565b60006130ea8261392e565b6130f48185613951565b93506130ff83613909565b8060005b8381101561313057815161311788826130a9565b975061312283613944565b925050600181019050613103565b5085935050505092915050565b61314681613ab7565b82525050565b600061315782613939565b6131618185613962565b9350613171818560208601613b28565b61317a81613d66565b840191505092915050565b600061319082613939565b61319a8185613973565b93506131aa818560208601613b28565b80840191505092915050565b600081546131c381613b5b565b6131cd8186613973565b945060018216600081146131e857600181146131f95761322c565b60ff1983168652818601935061322c565b61320285613919565b60005b8381101561322457815481890152600182019150602081019050613205565b838801955050505b50505092915050565b6000613242602283613962565b915061324d82613d77565b604082019050919050565b6000613265602683613962565b915061327082613dc6565b604082019050919050565b6000613288601c83613962565b915061329382613e15565b602082019050919050565b60006132ab601b83613962565b91506132b682613e3e565b602082019050919050565b60006132ce602483613962565b91506132d982613e67565b604082019050919050565b60006132f1601983613962565b91506132fc82613eb6565b602082019050919050565b6000613314600783613962565b915061331f82613edf565b602082019050919050565b6000613337601e83613962565b915061334282613f08565b602082019050919050565b600061335a602c83613962565b915061336582613f31565b604082019050919050565b600061337d603883613962565b915061338882613f80565b604082019050919050565b60006133a0602a83613962565b91506133ab82613fcf565b604082019050919050565b60006133c3602283613962565b91506133ce8261401e565b604082019050919050565b60006133e6602083613962565b91506133f18261406d565b602082019050919050565b6000613409602183613962565b915061341482614096565b604082019050919050565b600061342c602c83613962565b9150613437826140e5565b604082019050919050565b600061344f602083613962565b915061345a82614134565b602082019050919050565b6000613472602983613962565b915061347d8261415d565b604082019050919050565b6000613495602f83613962565b91506134a0826141ac565b604082019050919050565b60006134b8602183613962565b91506134c3826141fb565b604082019050919050565b60006134db601583613962565b91506134e68261424a565b602082019050919050565b60006134fe603183613962565b915061350982614273565b604082019050919050565b61351d81613b0f565b82525050565b61352c81613b0f565b82525050565b600061353e8286613185565b915061354a8285613185565b915061355682846131b6565b9150819050949350505050565b600060208201905061357860008301846130d0565b92915050565b600060208201905061359360008301846130c1565b92915050565b600060208201905081810360008301526135b381846130df565b905092915050565b60006020820190506135d0600083018461313d565b92915050565b600060208201905081810360008301526135f0818461314c565b905092915050565b6000602082019050818103600083015261361181613235565b9050919050565b6000602082019050818103600083015261363181613258565b9050919050565b600060208201905081810360008301526136518161327b565b9050919050565b600060208201905081810360008301526136718161329e565b9050919050565b60006020820190508181036000830152613691816132c1565b9050919050565b600060208201905081810360008301526136b1816132e4565b9050919050565b600060208201905081810360008301526136d181613307565b9050919050565b600060208201905081810360008301526136f18161332a565b9050919050565b600060208201905081810360008301526137118161334d565b9050919050565b6000602082019050818103600083015261373181613370565b9050919050565b6000602082019050818103600083015261375181613393565b9050919050565b60006020820190508181036000830152613771816133b6565b9050919050565b60006020820190508181036000830152613791816133d9565b9050919050565b600060208201905081810360008301526137b1816133fc565b9050919050565b600060208201905081810360008301526137d18161341f565b9050919050565b600060208201905081810360008301526137f181613442565b9050919050565b6000602082019050818103600083015261381181613465565b9050919050565b6000602082019050818103600083015261383181613488565b9050919050565b60006020820190508181036000830152613851816134ab565b9050919050565b60006020820190508181036000830152613871816134ce565b9050919050565b60006020820190508181036000830152613891816134f1565b9050919050565b60006020820190506138ad6000830184613523565b92915050565b60006138bd6138ce565b90506138c98282613b8d565b919050565b6000604051905090565b600067ffffffffffffffff8211156138f3576138f2613d23565b5b6138fc82613d66565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061398982613b0f565b915061399483613b0f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139c9576139c8613c38565b5b828201905092915050565b60006139df82613b0f565b91506139ea83613b0f565b9250826139fa576139f9613c67565b5b828204905092915050565b6000613a1082613b0f565b9150613a1b83613b0f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a5457613a53613c38565b5b828202905092915050565b6000613a6a82613b0f565b9150613a7583613b0f565b925082821015613a8857613a87613c38565b5b828203905092915050565b6000613a9e82613aef565b9050919050565b6000613ab082613aef565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613b46578082015181840152602081019050613b2b565b83811115613b55576000848401525b50505050565b60006002820490506001821680613b7357607f821691505b60208210811415613b8757613b86613c96565b5b50919050565b613b9682613d66565b810181811067ffffffffffffffff82111715613bb557613bb4613d23565b5b80604052505050565b6000613bc982613b0f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bfc57613bfb613c38565b5b600182019050919050565b6000613c1282613b0f565b9150613c1d83613b0f565b925082613c2d57613c2c613c67565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5061757365642e00000000000000000000000000000000000000000000000000600082015250565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c696d6974204b6f6e67732065786365656465642e0000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6142cb81613a93565b81146142d657600080fd5b50565b6142e281613ab7565b81146142ed57600080fd5b50565b6142f981613ac3565b811461430457600080fd5b50565b61431081613b0f565b811461431b57600080fd5b5056fe4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea2646970667358221220a060d3b70dfe4e785eb2270578332ca63633b488524f38eb3bb07f119714322164736f6c63430008070033
Deployed Bytecode Sourcemap
38106:2730:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2292:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27601:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31246:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30776:404;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39702:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30254:211;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32136:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38490:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30016:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39473:107;;;;;;;;;;;;;:::i;:::-;;32520:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39075:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30542:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39802:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40572:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27357:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28976:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27074:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37699:148;;;;;;;;;;;;;:::i;:::-;;38370:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37476:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27770:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31539:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38314:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37192:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38408:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38585:482;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38452:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40004:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39588:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29081:131;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40136:428;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31905:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37855:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39907:89;;;;;;;;;;;;;;;;;;;;;;;:::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;39702:92::-;37622:12;:10;:12::i;:::-;37611:23;;:7;:5;:7::i;:::-;:23;;;37603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39780:6:::1;39768:9;:18;;;;39702: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;38490: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;39473:107::-;37622:12;:10;:12::i;:::-;37611:23;;:7;:5;:7::i;:::-;:23;;;37603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39529:10:::1;39521:28;;:51;39550:21;39521:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;39473: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;39075:390::-;39162:16;39196:23;39222:17;39232:6;39222:9;:17::i;:::-;39196:43;;39250:25;39292:15;39278:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39250:58;;39324:9;39319:113;39339:15;39335:1;:19;39319:113;;;39390:30;39410:6;39418:1;39390:19;:30::i;:::-;39376:8;39385:1;39376:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;39356:3;;;;;:::i;:::-;;;;39319:113;;;;39449:8;39442:15;;;;39075: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;39802:97::-;37622:12;:10;:12::i;:::-;37611:23;;:7;:5;:7::i;:::-;:23;;;37603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39872:19:::1;39884:6;39872:11;:19::i;:::-;39802:97:::0;:::o;40572:261::-;37622:12;:10;:12::i;:::-;37611:23;;:7;:5;:7::i;:::-;:23;;;37603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40676:8:::1;;40646:26;40664:7;40646:13;:11;:13::i;:::-;:17;;:26;;;;:::i;:::-;:38;;40638:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;40725:9;40721:105;40744:7;40740:1;:11;40721:105;;;40775:39;40781:10;40793:20;40811:1;40793:13;:11;:13::i;:::-;:17;;:20;;;;:::i;:::-;40775:5;:39::i;:::-;40753:3;;;;;:::i;:::-;;;;40721:105;;;;40572:261:::0;:::o;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;38370: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;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;38314:47::-;;;;:::o;37192:21::-;;;;;;;;;;;;:::o;38408:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38585:482::-;38703:13;38752:16;38760:7;38752;:16::i;:::-;38734:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;38860:28;38891:9;:7;:9::i;:::-;38860:40;;38949:1;38924:14;38918:28;:32;:141;;;;;;;;;;;;;;;;;38990:14;39006:18;:7;:16;:18::i;:::-;39026:13;38973:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38918:141;38911:148;;;38585:482;;;:::o;38452:29::-;;;;;;;;;;;;;:::o;40004:124::-;40065:16;40101:11;:19;40113:6;40101:19;;;;;;;;;;;;;;;40094:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40004:124;;;:::o;39588:106::-;37622:12;:10;:12::i;:::-;37611:23;;:7;:5;:7::i;:::-;:23;;;37603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39680:6:::1;39664:13;:22;;;;;;;;;;;;:::i;:::-;;39588:106:::0;:::o;29081:131::-;29139:13;29172:32;:21;:12;:19;:21::i;:::-;:30;:32::i;:::-;29165:39;;29081:131;:::o;40136:428::-;40206:9;;;;;;;;;;;40205:10;40197:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;40276:8;;40246:26;40264:7;40246:13;:11;:13::i;:::-;:17;;:26;;;;:::i;:::-;:38;;40238:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;40344:41;40369:1;40358:7;:12;;:26;;40377:7;40358:26;;;40373:1;40358:26;40344:9;;:13;;:41;;;;:::i;:::-;40331:9;:54;;40323:63;;;;;;40409:9;;;;;;;;;;;40401:27;;:38;40429:9;40401:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40456:9;40452:105;40475:7;40471:1;:11;40452:105;;;40506:39;40512:10;40524:20;40542:1;40524:13;:11;:13::i;:::-;:17;;:20;;;;:::i;:::-;40506:5;:39::i;:::-;40484:3;;;;;:::i;:::-;;;;40452:105;;;;40136:428;:::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;39907:89::-;37622:12;:10;:12::i;:::-;37611:23;;:7;:5;:7::i;:::-;:23;;;37603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39982:6:::1;39970:9;;:18;;;;;;;;;;;;;;;;;;39907:89:::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;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;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;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:133::-;613:5;651:6;638:20;629:29;;667:30;691:5;667:30;:::i;:::-;570:133;;;;:::o;709:137::-;754:5;792:6;779:20;770:29;;808:32;834:5;808:32;:::i;:::-;709:137;;;;:::o;866:340::-;922:5;971:3;964:4;956:6;952:17;948:27;938:122;;979:79;;:::i;:::-;938:122;1096:6;1083:20;1121:79;1196:3;1188:6;1181:4;1173:6;1169:17;1121:79;:::i;:::-;1112:88;;928:278;866:340;;;;:::o;1212:139::-;1258:5;1296:6;1283:20;1274:29;;1312:33;1339:5;1312:33;:::i;:::-;1212:139;;;;:::o;1357:329::-;1416:6;1465:2;1453:9;1444:7;1440:23;1436:32;1433:119;;;1471:79;;:::i;:::-;1433:119;1591:1;1616:53;1661:7;1652:6;1641:9;1637:22;1616:53;:::i;:::-;1606:63;;1562:117;1357:329;;;;:::o;1692:474::-;1760:6;1768;1817:2;1805:9;1796:7;1792:23;1788:32;1785:119;;;1823:79;;:::i;:::-;1785:119;1943:1;1968:53;2013:7;2004:6;1993:9;1989:22;1968:53;:::i;:::-;1958:63;;1914:117;2070:2;2096:53;2141:7;2132:6;2121:9;2117:22;2096:53;:::i;:::-;2086:63;;2041:118;1692:474;;;;;:::o;2172:619::-;2249:6;2257;2265;2314:2;2302:9;2293:7;2289:23;2285:32;2282:119;;;2320:79;;:::i;:::-;2282:119;2440:1;2465:53;2510:7;2501:6;2490:9;2486:22;2465:53;:::i;:::-;2455:63;;2411:117;2567:2;2593:53;2638:7;2629:6;2618:9;2614:22;2593:53;:::i;:::-;2583:63;;2538:118;2695:2;2721:53;2766:7;2757:6;2746:9;2742:22;2721:53;:::i;:::-;2711:63;;2666:118;2172:619;;;;;:::o;2797:468::-;2862:6;2870;2919:2;2907:9;2898:7;2894:23;2890:32;2887:119;;;2925:79;;:::i;:::-;2887:119;3045:1;3070:53;3115:7;3106:6;3095:9;3091:22;3070:53;:::i;:::-;3060:63;;3016:117;3172:2;3198:50;3240:7;3231:6;3220:9;3216:22;3198:50;:::i;:::-;3188:60;;3143:115;2797:468;;;;;:::o;3271:474::-;3339:6;3347;3396:2;3384:9;3375:7;3371:23;3367:32;3364:119;;;3402:79;;:::i;:::-;3364:119;3522:1;3547:53;3592:7;3583:6;3572:9;3568:22;3547:53;:::i;:::-;3537:63;;3493:117;3649:2;3675:53;3720:7;3711:6;3700:9;3696:22;3675:53;:::i;:::-;3665:63;;3620:118;3271:474;;;;;:::o;3751:323::-;3807:6;3856:2;3844:9;3835:7;3831:23;3827:32;3824:119;;;3862:79;;:::i;:::-;3824:119;3982:1;4007:50;4049:7;4040:6;4029:9;4025:22;4007:50;:::i;:::-;3997:60;;3953:114;3751:323;;;;:::o;4080:327::-;4138:6;4187:2;4175:9;4166:7;4162:23;4158:32;4155:119;;;4193:79;;:::i;:::-;4155:119;4313:1;4338:52;4382:7;4373:6;4362:9;4358:22;4338:52;:::i;:::-;4328:62;;4284:116;4080:327;;;;:::o;4413:509::-;4482:6;4531:2;4519:9;4510:7;4506:23;4502:32;4499:119;;;4537:79;;:::i;:::-;4499:119;4685:1;4674:9;4670:17;4657:31;4715:18;4707:6;4704:30;4701:117;;;4737:79;;:::i;:::-;4701:117;4842:63;4897:7;4888:6;4877:9;4873:22;4842:63;:::i;:::-;4832:73;;4628:287;4413:509;;;;:::o;4928:329::-;4987:6;5036:2;5024:9;5015:7;5011:23;5007:32;5004:119;;;5042:79;;:::i;:::-;5004:119;5162:1;5187:53;5232:7;5223:6;5212:9;5208:22;5187:53;:::i;:::-;5177:63;;5133:117;4928:329;;;;:::o;5263:179::-;5332:10;5353:46;5395:3;5387:6;5353:46;:::i;:::-;5431:4;5426:3;5422:14;5408:28;;5263:179;;;;:::o;5448:142::-;5551:32;5577:5;5551:32;:::i;:::-;5546:3;5539:45;5448:142;;:::o;5596:118::-;5683:24;5701:5;5683:24;:::i;:::-;5678:3;5671:37;5596:118;;:::o;5750:732::-;5869:3;5898:54;5946:5;5898:54;:::i;:::-;5968:86;6047:6;6042:3;5968:86;:::i;:::-;5961:93;;6078:56;6128:5;6078:56;:::i;:::-;6157:7;6188:1;6173:284;6198:6;6195:1;6192:13;6173:284;;;6274:6;6268:13;6301:63;6360:3;6345:13;6301:63;:::i;:::-;6294:70;;6387:60;6440:6;6387:60;:::i;:::-;6377:70;;6233:224;6220:1;6217;6213:9;6208:14;;6173:284;;;6177:14;6473:3;6466:10;;5874:608;;;5750:732;;;;:::o;6488:109::-;6569:21;6584:5;6569:21;:::i;:::-;6564:3;6557:34;6488:109;;:::o;6603:364::-;6691:3;6719:39;6752:5;6719:39;:::i;:::-;6774:71;6838:6;6833:3;6774:71;:::i;:::-;6767:78;;6854:52;6899:6;6894:3;6887:4;6880:5;6876:16;6854:52;:::i;:::-;6931:29;6953:6;6931:29;:::i;:::-;6926:3;6922:39;6915:46;;6695:272;6603:364;;;;:::o;6973:377::-;7079:3;7107:39;7140:5;7107:39;:::i;:::-;7162:89;7244:6;7239:3;7162:89;:::i;:::-;7155:96;;7260:52;7305:6;7300:3;7293:4;7286:5;7282:16;7260:52;:::i;:::-;7337:6;7332:3;7328:16;7321:23;;7083:267;6973:377;;;;:::o;7380:845::-;7483:3;7520:5;7514:12;7549:36;7575:9;7549:36;:::i;:::-;7601:89;7683:6;7678:3;7601:89;:::i;:::-;7594:96;;7721:1;7710:9;7706:17;7737:1;7732:137;;;;7883:1;7878:341;;;;7699:520;;7732:137;7816:4;7812:9;7801;7797:25;7792:3;7785:38;7852:6;7847:3;7843:16;7836:23;;7732:137;;7878:341;7945:38;7977:5;7945:38;:::i;:::-;8005:1;8019:154;8033:6;8030:1;8027:13;8019:154;;;8107:7;8101:14;8097:1;8092:3;8088:11;8081:35;8157:1;8148:7;8144:15;8133:26;;8055:4;8052:1;8048:12;8043:17;;8019:154;;;8202:6;8197:3;8193:16;8186:23;;7885:334;;7699:520;;7487:738;;7380:845;;;;:::o;8231:366::-;8373:3;8394:67;8458:2;8453:3;8394:67;:::i;:::-;8387:74;;8470:93;8559:3;8470:93;:::i;:::-;8588:2;8583:3;8579:12;8572:19;;8231:366;;;:::o;8603:::-;8745:3;8766:67;8830:2;8825:3;8766:67;:::i;:::-;8759:74;;8842:93;8931:3;8842:93;:::i;:::-;8960:2;8955:3;8951:12;8944:19;;8603:366;;;:::o;8975:::-;9117:3;9138:67;9202:2;9197:3;9138:67;:::i;:::-;9131:74;;9214:93;9303:3;9214:93;:::i;:::-;9332:2;9327:3;9323:12;9316:19;;8975:366;;;:::o;9347:::-;9489:3;9510:67;9574:2;9569:3;9510:67;:::i;:::-;9503:74;;9586:93;9675:3;9586:93;:::i;:::-;9704:2;9699:3;9695:12;9688:19;;9347:366;;;:::o;9719:::-;9861:3;9882:67;9946:2;9941:3;9882:67;:::i;:::-;9875:74;;9958:93;10047:3;9958:93;:::i;:::-;10076:2;10071:3;10067:12;10060:19;;9719:366;;;:::o;10091:::-;10233:3;10254:67;10318:2;10313:3;10254:67;:::i;:::-;10247:74;;10330:93;10419:3;10330:93;:::i;:::-;10448:2;10443:3;10439:12;10432:19;;10091:366;;;:::o;10463:365::-;10605:3;10626:66;10690:1;10685:3;10626:66;:::i;:::-;10619:73;;10701:93;10790:3;10701:93;:::i;:::-;10819:2;10814:3;10810:12;10803:19;;10463:365;;;:::o;10834:366::-;10976:3;10997:67;11061:2;11056:3;10997:67;:::i;:::-;10990:74;;11073:93;11162:3;11073:93;:::i;:::-;11191:2;11186:3;11182:12;11175:19;;10834:366;;;:::o;11206:::-;11348:3;11369:67;11433:2;11428:3;11369:67;:::i;:::-;11362:74;;11445:93;11534:3;11445:93;:::i;:::-;11563:2;11558:3;11554:12;11547:19;;11206:366;;;:::o;11578:::-;11720:3;11741:67;11805:2;11800:3;11741:67;:::i;:::-;11734:74;;11817:93;11906:3;11817:93;:::i;:::-;11935:2;11930:3;11926:12;11919:19;;11578:366;;;:::o;11950:::-;12092:3;12113:67;12177:2;12172:3;12113:67;:::i;:::-;12106:74;;12189:93;12278:3;12189:93;:::i;:::-;12307:2;12302:3;12298:12;12291:19;;11950:366;;;:::o;12322:::-;12464:3;12485:67;12549:2;12544:3;12485:67;:::i;:::-;12478:74;;12561:93;12650:3;12561:93;:::i;:::-;12679:2;12674:3;12670:12;12663:19;;12322:366;;;:::o;12694:::-;12836:3;12857:67;12921:2;12916:3;12857:67;:::i;:::-;12850:74;;12933:93;13022:3;12933:93;:::i;:::-;13051:2;13046:3;13042:12;13035:19;;12694:366;;;:::o;13066:::-;13208:3;13229:67;13293:2;13288:3;13229:67;:::i;:::-;13222:74;;13305:93;13394:3;13305:93;:::i;:::-;13423:2;13418:3;13414:12;13407:19;;13066:366;;;:::o;13438:::-;13580:3;13601:67;13665:2;13660:3;13601:67;:::i;:::-;13594:74;;13677:93;13766:3;13677:93;:::i;:::-;13795:2;13790:3;13786:12;13779:19;;13438:366;;;:::o;13810:::-;13952:3;13973:67;14037:2;14032:3;13973:67;:::i;:::-;13966:74;;14049:93;14138:3;14049:93;:::i;:::-;14167:2;14162:3;14158:12;14151:19;;13810:366;;;:::o;14182:::-;14324:3;14345:67;14409:2;14404:3;14345:67;:::i;:::-;14338:74;;14421:93;14510:3;14421:93;:::i;:::-;14539:2;14534:3;14530:12;14523:19;;14182:366;;;:::o;14554:::-;14696:3;14717:67;14781:2;14776:3;14717:67;:::i;:::-;14710:74;;14793:93;14882:3;14793:93;:::i;:::-;14911:2;14906:3;14902:12;14895:19;;14554:366;;;:::o;14926:::-;15068:3;15089:67;15153:2;15148:3;15089:67;:::i;:::-;15082:74;;15165:93;15254:3;15165:93;:::i;:::-;15283:2;15278:3;15274:12;15267:19;;14926:366;;;:::o;15298:::-;15440:3;15461:67;15525:2;15520:3;15461:67;:::i;:::-;15454:74;;15537:93;15626:3;15537:93;:::i;:::-;15655:2;15650:3;15646:12;15639:19;;15298:366;;;:::o;15670:::-;15812:3;15833:67;15897:2;15892:3;15833:67;:::i;:::-;15826:74;;15909:93;15998:3;15909:93;:::i;:::-;16027:2;16022:3;16018:12;16011:19;;15670:366;;;:::o;16042:108::-;16119:24;16137:5;16119:24;:::i;:::-;16114:3;16107:37;16042:108;;:::o;16156:118::-;16243:24;16261:5;16243:24;:::i;:::-;16238:3;16231:37;16156:118;;:::o;16280:589::-;16505:3;16527:95;16618:3;16609:6;16527:95;:::i;:::-;16520:102;;16639:95;16730:3;16721:6;16639:95;:::i;:::-;16632:102;;16751:92;16839:3;16830:6;16751:92;:::i;:::-;16744:99;;16860:3;16853:10;;16280:589;;;;;;:::o;16875:222::-;16968:4;17006:2;16995:9;16991:18;16983:26;;17019:71;17087:1;17076:9;17072:17;17063:6;17019:71;:::i;:::-;16875:222;;;;:::o;17103:254::-;17212:4;17250:2;17239:9;17235:18;17227:26;;17263:87;17347:1;17336:9;17332:17;17323:6;17263:87;:::i;:::-;17103:254;;;;:::o;17363:373::-;17506:4;17544:2;17533:9;17529:18;17521:26;;17593:9;17587:4;17583:20;17579:1;17568:9;17564:17;17557:47;17621:108;17724:4;17715:6;17621:108;:::i;:::-;17613:116;;17363:373;;;;:::o;17742:210::-;17829:4;17867:2;17856:9;17852:18;17844:26;;17880:65;17942:1;17931:9;17927:17;17918:6;17880:65;:::i;:::-;17742:210;;;;:::o;17958:313::-;18071:4;18109:2;18098:9;18094:18;18086:26;;18158:9;18152:4;18148:20;18144:1;18133:9;18129:17;18122:47;18186:78;18259:4;18250:6;18186:78;:::i;:::-;18178:86;;17958:313;;;;:::o;18277:419::-;18443:4;18481:2;18470:9;18466:18;18458:26;;18530:9;18524:4;18520:20;18516:1;18505:9;18501:17;18494:47;18558:131;18684:4;18558:131;:::i;:::-;18550:139;;18277:419;;;:::o;18702:::-;18868:4;18906:2;18895:9;18891:18;18883:26;;18955:9;18949:4;18945:20;18941:1;18930:9;18926:17;18919:47;18983:131;19109:4;18983:131;:::i;:::-;18975:139;;18702:419;;;:::o;19127:::-;19293:4;19331:2;19320:9;19316:18;19308:26;;19380:9;19374:4;19370:20;19366:1;19355:9;19351:17;19344:47;19408:131;19534:4;19408:131;:::i;:::-;19400:139;;19127:419;;;:::o;19552:::-;19718:4;19756:2;19745:9;19741:18;19733:26;;19805:9;19799:4;19795:20;19791:1;19780:9;19776:17;19769:47;19833:131;19959:4;19833:131;:::i;:::-;19825:139;;19552:419;;;:::o;19977:::-;20143:4;20181:2;20170:9;20166:18;20158:26;;20230:9;20224:4;20220:20;20216:1;20205:9;20201:17;20194:47;20258:131;20384:4;20258:131;:::i;:::-;20250:139;;19977:419;;;:::o;20402:::-;20568:4;20606:2;20595:9;20591:18;20583:26;;20655:9;20649:4;20645:20;20641:1;20630:9;20626:17;20619:47;20683:131;20809:4;20683:131;:::i;:::-;20675:139;;20402:419;;;:::o;20827:::-;20993:4;21031:2;21020:9;21016:18;21008:26;;21080:9;21074:4;21070:20;21066:1;21055:9;21051:17;21044:47;21108:131;21234:4;21108:131;:::i;:::-;21100:139;;20827:419;;;:::o;21252:::-;21418:4;21456:2;21445:9;21441:18;21433:26;;21505:9;21499:4;21495:20;21491:1;21480:9;21476:17;21469:47;21533:131;21659:4;21533:131;:::i;:::-;21525:139;;21252:419;;;:::o;21677:::-;21843:4;21881:2;21870:9;21866:18;21858:26;;21930:9;21924:4;21920:20;21916:1;21905:9;21901:17;21894:47;21958:131;22084:4;21958:131;:::i;:::-;21950:139;;21677:419;;;:::o;22102:::-;22268:4;22306:2;22295:9;22291:18;22283:26;;22355:9;22349:4;22345:20;22341:1;22330:9;22326:17;22319:47;22383:131;22509:4;22383:131;:::i;:::-;22375:139;;22102:419;;;:::o;22527:::-;22693:4;22731:2;22720:9;22716:18;22708:26;;22780:9;22774:4;22770:20;22766:1;22755:9;22751:17;22744:47;22808:131;22934:4;22808:131;:::i;:::-;22800:139;;22527:419;;;:::o;22952:::-;23118:4;23156:2;23145:9;23141:18;23133:26;;23205:9;23199:4;23195:20;23191:1;23180:9;23176:17;23169:47;23233:131;23359:4;23233:131;:::i;:::-;23225:139;;22952:419;;;:::o;23377:::-;23543:4;23581:2;23570:9;23566:18;23558:26;;23630:9;23624:4;23620:20;23616:1;23605:9;23601:17;23594:47;23658:131;23784:4;23658:131;:::i;:::-;23650:139;;23377:419;;;:::o;23802:::-;23968:4;24006:2;23995:9;23991:18;23983:26;;24055:9;24049:4;24045:20;24041:1;24030:9;24026:17;24019:47;24083:131;24209:4;24083:131;:::i;:::-;24075:139;;23802:419;;;:::o;24227:::-;24393:4;24431:2;24420:9;24416:18;24408:26;;24480:9;24474:4;24470:20;24466:1;24455:9;24451:17;24444:47;24508:131;24634:4;24508:131;:::i;:::-;24500:139;;24227:419;;;:::o;24652:::-;24818:4;24856:2;24845:9;24841:18;24833:26;;24905:9;24899:4;24895:20;24891:1;24880:9;24876:17;24869:47;24933:131;25059:4;24933:131;:::i;:::-;24925:139;;24652:419;;;:::o;25077:::-;25243:4;25281:2;25270:9;25266:18;25258:26;;25330:9;25324:4;25320:20;25316:1;25305:9;25301:17;25294:47;25358:131;25484:4;25358:131;:::i;:::-;25350:139;;25077:419;;;:::o;25502:::-;25668:4;25706:2;25695:9;25691:18;25683:26;;25755:9;25749:4;25745:20;25741:1;25730:9;25726:17;25719:47;25783:131;25909:4;25783:131;:::i;:::-;25775:139;;25502:419;;;:::o;25927:::-;26093:4;26131:2;26120:9;26116:18;26108:26;;26180:9;26174:4;26170:20;26166:1;26155:9;26151:17;26144:47;26208:131;26334:4;26208:131;:::i;:::-;26200:139;;25927:419;;;:::o;26352:::-;26518:4;26556:2;26545:9;26541:18;26533:26;;26605:9;26599:4;26595:20;26591:1;26580:9;26576:17;26569:47;26633:131;26759:4;26633:131;:::i;:::-;26625:139;;26352:419;;;:::o;26777:::-;26943:4;26981:2;26970:9;26966:18;26958:26;;27030:9;27024:4;27020:20;27016:1;27005:9;27001:17;26994:47;27058:131;27184:4;27058:131;:::i;:::-;27050:139;;26777:419;;;:::o;27202:222::-;27295:4;27333:2;27322:9;27318:18;27310:26;;27346:71;27414:1;27403:9;27399:17;27390:6;27346:71;:::i;:::-;27202:222;;;;:::o;27430:129::-;27464:6;27491:20;;:::i;:::-;27481:30;;27520:33;27548:4;27540:6;27520:33;:::i;:::-;27430:129;;;:::o;27565:75::-;27598:6;27631:2;27625:9;27615:19;;27565:75;:::o;27646:308::-;27708:4;27798:18;27790:6;27787:30;27784:56;;;27820:18;;:::i;:::-;27784:56;27858:29;27880:6;27858:29;:::i;:::-;27850:37;;27942:4;27936;27932:15;27924:23;;27646:308;;;:::o;27960:132::-;28027:4;28050:3;28042:11;;28080:4;28075:3;28071:14;28063:22;;27960:132;;;:::o;28098:141::-;28147:4;28170:3;28162:11;;28193:3;28190:1;28183:14;28227:4;28224:1;28214:18;28206:26;;28098:141;;;:::o;28245:114::-;28312:6;28346:5;28340:12;28330:22;;28245:114;;;:::o;28365:99::-;28417:6;28451:5;28445:12;28435:22;;28365:99;;;:::o;28470:113::-;28540:4;28572;28567:3;28563:14;28555:22;;28470:113;;;:::o;28589:184::-;28688:11;28722:6;28717:3;28710:19;28762:4;28757:3;28753:14;28738:29;;28589:184;;;;:::o;28779:169::-;28863:11;28897:6;28892:3;28885:19;28937:4;28932:3;28928:14;28913:29;;28779:169;;;;:::o;28954:148::-;29056:11;29093:3;29078:18;;28954:148;;;;:::o;29108:305::-;29148:3;29167:20;29185:1;29167:20;:::i;:::-;29162:25;;29201:20;29219:1;29201:20;:::i;:::-;29196:25;;29355:1;29287:66;29283:74;29280:1;29277:81;29274:107;;;29361:18;;:::i;:::-;29274:107;29405:1;29402;29398:9;29391:16;;29108:305;;;;:::o;29419:185::-;29459:1;29476:20;29494:1;29476:20;:::i;:::-;29471:25;;29510:20;29528:1;29510:20;:::i;:::-;29505:25;;29549:1;29539:35;;29554:18;;:::i;:::-;29539:35;29596:1;29593;29589:9;29584:14;;29419:185;;;;:::o;29610:348::-;29650:7;29673:20;29691:1;29673:20;:::i;:::-;29668:25;;29707:20;29725:1;29707:20;:::i;:::-;29702:25;;29895:1;29827:66;29823:74;29820:1;29817:81;29812:1;29805:9;29798:17;29794:105;29791:131;;;29902:18;;:::i;:::-;29791:131;29950:1;29947;29943:9;29932:20;;29610:348;;;;:::o;29964:191::-;30004:4;30024:20;30042:1;30024:20;:::i;:::-;30019:25;;30058:20;30076:1;30058:20;:::i;:::-;30053:25;;30097:1;30094;30091:8;30088:34;;;30102:18;;:::i;:::-;30088:34;30147:1;30144;30140:9;30132:17;;29964:191;;;;:::o;30161:96::-;30198:7;30227:24;30245:5;30227:24;:::i;:::-;30216:35;;30161:96;;;:::o;30263:104::-;30308:7;30337:24;30355:5;30337:24;:::i;:::-;30326:35;;30263:104;;;:::o;30373:90::-;30407:7;30450:5;30443:13;30436:21;30425:32;;30373:90;;;:::o;30469:149::-;30505:7;30545:66;30538:5;30534:78;30523:89;;30469:149;;;:::o;30624:126::-;30661:7;30701:42;30694:5;30690:54;30679:65;;30624:126;;;:::o;30756:77::-;30793:7;30822:5;30811:16;;30756:77;;;:::o;30839:154::-;30923:6;30918:3;30913;30900:30;30985:1;30976:6;30971:3;30967:16;30960:27;30839:154;;;:::o;30999:307::-;31067:1;31077:113;31091:6;31088:1;31085:13;31077:113;;;31176:1;31171:3;31167:11;31161:18;31157:1;31152:3;31148:11;31141:39;31113:2;31110:1;31106:10;31101:15;;31077:113;;;31208:6;31205:1;31202:13;31199:101;;;31288:1;31279:6;31274:3;31270:16;31263:27;31199:101;31048:258;30999:307;;;:::o;31312:320::-;31356:6;31393:1;31387:4;31383:12;31373:22;;31440:1;31434:4;31430:12;31461:18;31451:81;;31517:4;31509:6;31505:17;31495:27;;31451:81;31579:2;31571:6;31568:14;31548:18;31545:38;31542:84;;;31598:18;;:::i;:::-;31542:84;31363:269;31312:320;;;:::o;31638:281::-;31721:27;31743:4;31721:27;:::i;:::-;31713:6;31709:40;31851:6;31839:10;31836:22;31815:18;31803:10;31800:34;31797:62;31794:88;;;31862:18;;:::i;:::-;31794:88;31902:10;31898:2;31891:22;31681:238;31638:281;;:::o;31925:233::-;31964:3;31987:24;32005:5;31987:24;:::i;:::-;31978:33;;32033:66;32026:5;32023:77;32020:103;;;32103:18;;:::i;:::-;32020:103;32150:1;32143:5;32139:13;32132:20;;31925:233;;;:::o;32164:176::-;32196:1;32213:20;32231:1;32213:20;:::i;:::-;32208:25;;32247:20;32265:1;32247:20;:::i;:::-;32242:25;;32286:1;32276:35;;32291:18;;:::i;:::-;32276:35;32332:1;32329;32325:9;32320:14;;32164:176;;;;:::o;32346:180::-;32394:77;32391:1;32384:88;32491:4;32488:1;32481:15;32515:4;32512:1;32505:15;32532:180;32580:77;32577:1;32570:88;32677:4;32674:1;32667:15;32701:4;32698:1;32691:15;32718:180;32766:77;32763:1;32756:88;32863:4;32860:1;32853:15;32887:4;32884:1;32877:15;32904:180;32952:77;32949:1;32942:88;33049:4;33046:1;33039:15;33073:4;33070:1;33063:15;33090:180;33138:77;33135:1;33128:88;33235:4;33232:1;33225:15;33259:4;33256:1;33249:15;33276:180;33324:77;33321:1;33314:88;33421:4;33418:1;33411:15;33445:4;33442:1;33435:15;33462:117;33571:1;33568;33561:12;33585:117;33694:1;33691;33684:12;33708:117;33817:1;33814;33807:12;33831:117;33940:1;33937;33930:12;33954:102;33995:6;34046:2;34042:7;34037:2;34030:5;34026:14;34022:28;34012:38;;33954:102;;;:::o;34062:221::-;34202:34;34198:1;34190:6;34186:14;34179:58;34271:4;34266:2;34258:6;34254:15;34247:29;34062:221;:::o;34289:225::-;34429:34;34425:1;34417:6;34413:14;34406:58;34498:8;34493:2;34485:6;34481:15;34474:33;34289:225;:::o;34520:178::-;34660:30;34656:1;34648:6;34644:14;34637:54;34520:178;:::o;34704:177::-;34844:29;34840:1;34832:6;34828:14;34821:53;34704:177;:::o;34887:223::-;35027:34;35023:1;35015:6;35011:14;35004:58;35096:6;35091:2;35083:6;35079:15;35072:31;34887:223;:::o;35116:175::-;35256:27;35252:1;35244:6;35240:14;35233:51;35116:175;:::o;35297:157::-;35437:9;35433:1;35425:6;35421:14;35414:33;35297:157;:::o;35460:180::-;35600:32;35596:1;35588:6;35584:14;35577:56;35460:180;:::o;35646:231::-;35786:34;35782:1;35774:6;35770:14;35763:58;35855:14;35850:2;35842:6;35838:15;35831:39;35646:231;:::o;35883:243::-;36023:34;36019:1;36011:6;36007:14;36000:58;36092:26;36087:2;36079:6;36075:15;36068:51;35883:243;:::o;36132:229::-;36272:34;36268:1;36260:6;36256:14;36249:58;36341:12;36336:2;36328:6;36324:15;36317:37;36132:229;:::o;36367:221::-;36507:34;36503:1;36495:6;36491:14;36484:58;36576:4;36571:2;36563:6;36559:15;36552:29;36367:221;:::o;36594:182::-;36734:34;36730:1;36722:6;36718:14;36711:58;36594:182;:::o;36782:220::-;36922:34;36918:1;36910:6;36906:14;36899:58;36991:3;36986:2;36978:6;36974:15;36967:28;36782:220;:::o;37008:231::-;37148:34;37144:1;37136:6;37132:14;37125:58;37217:14;37212:2;37204:6;37200:15;37193:39;37008:231;:::o;37245:182::-;37385:34;37381:1;37373:6;37369:14;37362:58;37245:182;:::o;37433:228::-;37573:34;37569:1;37561:6;37557:14;37550:58;37642:11;37637:2;37629:6;37625:15;37618:36;37433:228;:::o;37667:234::-;37807:34;37803:1;37795:6;37791:14;37784:58;37876:17;37871:2;37863:6;37859:15;37852:42;37667:234;:::o;37907:220::-;38047:34;38043:1;38035:6;38031:14;38024:58;38116:3;38111:2;38103:6;38099:15;38092:28;37907:220;:::o;38133:171::-;38273:23;38269:1;38261:6;38257:14;38250:47;38133:171;:::o;38310:236::-;38450:34;38446:1;38438:6;38434:14;38427:58;38519:19;38514:2;38506:6;38502:15;38495:44;38310:236;:::o;38552:122::-;38625:24;38643:5;38625:24;:::i;:::-;38618:5;38615:35;38605:63;;38664:1;38661;38654:12;38605:63;38552:122;:::o;38680:116::-;38750:21;38765:5;38750:21;:::i;:::-;38743:5;38740:32;38730:60;;38786:1;38783;38776:12;38730:60;38680:116;:::o;38802:120::-;38874:23;38891:5;38874:23;:::i;:::-;38867:5;38864:34;38854:62;;38912:1;38909;38902:12;38854:62;38802:120;:::o;38928:122::-;39001:24;39019:5;39001:24;:::i;:::-;38994:5;38991:35;38981:63;;39040:1;39037;39030:12;38981:63;38928:122;:::o
Swarm Source
ipfs://a060d3b70dfe4e785eb2270578332ca63633b488524f38eb3bb07f1197143221
Loading...
Loading
Loading...
Loading
OVERVIEW
A collection of 11111 Glimmer Kongs on Moonbeam Network for you to have the oportunity to be part of our Kong Club DAO.Loading...
Loading
Net Worth in USD
$0.00
Net Worth in GLMR
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.