Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 121 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 18732288 | 395 days ago | IN | 0 ETH | 0.001673 | ||||
Withdraw Funds | 18537899 | 422 days ago | IN | 0 ETH | 0.00129884 | ||||
Set Approval For... | 18195813 | 470 days ago | IN | 0 ETH | 0.00034078 | ||||
Set Approval For... | 18138443 | 478 days ago | IN | 0 ETH | 0.00106193 | ||||
Set Approval For... | 17718514 | 537 days ago | IN | 0 ETH | 0.0003686 | ||||
Mint | 17566956 | 558 days ago | IN | 0 ETH | 0.00183706 | ||||
Set Approval For... | 17544245 | 562 days ago | IN | 0 ETH | 0.00066812 | ||||
Set Approval For... | 17544225 | 562 days ago | IN | 0 ETH | 0.00081585 | ||||
Mint | 17536837 | 563 days ago | IN | 0 ETH | 0.00229483 | ||||
Mint | 17536833 | 563 days ago | IN | 0 ETH | 0.00221989 | ||||
Mint | 17524990 | 564 days ago | IN | 0 ETH | 0.00155068 | ||||
Mint | 17524787 | 564 days ago | IN | 0 ETH | 0.00217433 | ||||
Mint | 17524749 | 564 days ago | IN | 0 ETH | 0.00203273 | ||||
Mint | 17524738 | 564 days ago | IN | 0 ETH | 0.00192932 | ||||
Set Approval For... | 17512396 | 566 days ago | IN | 0 ETH | 0.00064517 | ||||
Set Approval For... | 17512384 | 566 days ago | IN | 0 ETH | 0.00060678 | ||||
Mint | 17512377 | 566 days ago | IN | 0 ETH | 0.00187229 | ||||
Mint | 17512370 | 566 days ago | IN | 0 ETH | 0.00207498 | ||||
Mint | 17512354 | 566 days ago | IN | 0 ETH | 0.00168644 | ||||
Mint | 17512340 | 566 days ago | IN | 0 ETH | 0.00189681 | ||||
Mint | 17512204 | 566 days ago | IN | 0 ETH | 0.0015854 | ||||
Transfer From | 17506440 | 567 days ago | IN | 0 ETH | 0.00098297 | ||||
Mint | 17505927 | 567 days ago | IN | 0 ETH | 0.00158251 | ||||
Mint | 17505903 | 567 days ago | IN | 0 ETH | 0.00162915 | ||||
Change Supply Pe... | 17504863 | 567 days ago | IN | 0 ETH | 0.0004212 |
Loading...
Loading
Contract Name:
LoyalGang
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-06-17 */ // SPDX-License-Identifier: MIT // BEST NFT SUPPORTING THE LOYAL IDEA OF LEGENDARY BEN.ETH pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } pragma solidity ^0.8.0; abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } modifier onlyOwner() { _checkOwner(); _; } function owner() public view virtual returns (address) { return _owner; } function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } modifier nonReentrant() { require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); _status = _ENTERED; _; _status = _NOT_ENTERED; } } pragma solidity ^0.8.0; library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; function toString(uint256 value) internal pure returns (string memory) { 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); } 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); } 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); } function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } pragma solidity ^0.8.0; library EnumerableSet { struct Set { // Storage of set values bytes32[] _values; mapping(bytes32 => uint256) _indexes; } function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); set._indexes[value] = set._values.length; return true; } else { return false; } } function _remove(Set storage set, bytes32 value) private returns (bool) { uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastValue = set._values[lastIndex]; set._values[toDeleteIndex] = lastValue; set._indexes[lastValue] = valueIndex; } set._values.pop(); 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) { return set._values[index]; } function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } 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); } function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } 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); } function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { return _values(set._inner); } 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)))); } function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } 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)))); } function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; assembly { result := store } return result; } struct UintSet { Set _inner; } function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } 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)); } function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } } pragma solidity ^0.8.4; interface IERC721A { error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); error MintERC2309QuantityExceedsLimit(); error OwnershipNotInitializedForExtraData(); struct TokenOwnership { address addr; uint64 startTimestamp; bool burned; uint24 extraData; } function totalSupply() external view returns (uint256); function supportsInterface(bytes4 interfaceId) external view returns (bool); 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, bytes calldata data ) external payable; function safeTransferFrom( address from, address to, uint256 tokenId ) external payable; function transferFrom( address from, address to, uint256 tokenId ) external payable; function approve(address to, uint256 tokenId) external payable; function setApprovalForAll(address operator, bool _approved) external; function getApproved(uint256 tokenId) external view returns (address operator); function isApprovedForAll(address owner, address operator) external view returns (bool); function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to); } pragma solidity ^0.8.4; interface ERC721A__IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } contract ERC721A is IERC721A { struct TokenApprovalRef { address value; } uint256 private constant _BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1; uint256 private constant _BITPOS_NUMBER_MINTED = 64; uint256 private constant _BITPOS_NUMBER_BURNED = 128; uint256 private constant _BITPOS_AUX = 192; uint256 private constant _BITMASK_AUX_COMPLEMENT = (1 << 192) - 1; uint256 private constant _BITPOS_START_TIMESTAMP = 160; uint256 private constant _BITMASK_BURNED = 1 << 224; uint256 private constant _BITPOS_NEXT_INITIALIZED = 225; uint256 private constant _BITMASK_NEXT_INITIALIZED = 1 << 225; uint256 private constant _BITPOS_EXTRA_DATA = 232; uint256 private constant _BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1; uint256 private constant _BITMASK_ADDRESS = (1 << 160) - 1; uint256 private constant _MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000; bytes32 private constant _TRANSFER_EVENT_SIGNATURE = 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef; uint256 private _currentIndex; uint256 private _burnCounter; string private _name; string private _symbol; mapping(uint256 => uint256) private _packedOwnerships; mapping(address => uint256) private _packedAddressData; mapping(uint256 => TokenApprovalRef) private _tokenApprovals; mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } function _startTokenId() internal view virtual returns (uint256) { return 0; } function _nextTokenId() internal view virtual returns (uint256) { return _currentIndex; } function totalSupply() public view virtual override returns (uint256) { unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } function _totalMinted() internal view virtual returns (uint256) { unchecked { return _currentIndex - _startTokenId(); } } function _totalBurned() internal view virtual returns (uint256) { return _burnCounter; } function balanceOf(address owner) public view virtual override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return _packedAddressData[owner] & _BITMASK_ADDRESS_DATA_ENTRY; } function _numberMinted(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> _BITPOS_NUMBER_MINTED) & _BITMASK_ADDRESS_DATA_ENTRY; } function _numberBurned(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> _BITPOS_NUMBER_BURNED) & _BITMASK_ADDRESS_DATA_ENTRY; } function _getAux(address owner) internal view returns (uint64) { return uint64(_packedAddressData[owner] >> _BITPOS_AUX); } function _setAux(address owner, uint64 aux) internal virtual { uint256 packed = _packedAddressData[owner]; uint256 auxCasted; // Cast `aux` with assembly to avoid redundant masking. assembly { auxCasted := aux } packed = (packed & _BITMASK_AUX_COMPLEMENT) | (auxCasted << _BITPOS_AUX); _packedAddressData[owner] = packed; } function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == 0x01ffc9a7 || interfaceId == 0x80ac58cd || interfaceId == 0x5b5e139f; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : ''; } function _baseURI() internal view virtual returns (string memory) { return ''; } function ownerOf(uint256 tokenId) public view virtual override returns (address) { return address(uint160(_packedOwnershipOf(tokenId))); } function _ownershipOf(uint256 tokenId) internal view virtual returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnershipOf(tokenId)); } function _ownershipAt(uint256 index) internal view virtual returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnerships[index]); } function _initializeOwnershipAt(uint256 index) internal virtual { if (_packedOwnerships[index] == 0) { _packedOwnerships[index] = _packedOwnershipOf(index); } } function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr) if (curr < _currentIndex) { uint256 packed = _packedOwnerships[curr]; if (packed & _BITMASK_BURNED == 0) { while (packed == 0) { packed = _packedOwnerships[--curr]; } return packed; } } } revert OwnerQueryForNonexistentToken(); } function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) { ownership.addr = address(uint160(packed)); ownership.startTimestamp = uint64(packed >> _BITPOS_START_TIMESTAMP); ownership.burned = packed & _BITMASK_BURNED != 0; ownership.extraData = uint24(packed >> _BITPOS_EXTRA_DATA); } function _packOwnershipData(address owner, uint256 flags) private view returns (uint256 result) { assembly { // Mask `owner` to the lower 160 bits, in case the upper bits somehow aren't clean. owner := and(owner, _BITMASK_ADDRESS) // `owner | (block.timestamp << _BITPOS_START_TIMESTAMP) | flags`. result := or(owner, or(shl(_BITPOS_START_TIMESTAMP, timestamp()), flags)) } } function _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) { // For branchless setting of the `nextInitialized` flag. assembly { // `(quantity == 1) << _BITPOS_NEXT_INITIALIZED`. result := shl(_BITPOS_NEXT_INITIALIZED, eq(quantity, 1)) } } function approve(address to, uint256 tokenId) public payable virtual override { address owner = ownerOf(tokenId); if (_msgSenderERC721A() != owner) if (!isApprovedForAll(owner, _msgSenderERC721A())) { revert ApprovalCallerNotOwnerNorApproved(); } _tokenApprovals[tokenId].value = to; emit Approval(owner, to, tokenId); } function getApproved(uint256 tokenId) public view virtual override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId].value; } function setApprovalForAll(address operator, bool approved) public virtual override { _operatorApprovals[_msgSenderERC721A()][operator] = approved; emit ApprovalForAll(_msgSenderERC721A(), operator, approved); } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } function _exists(uint256 tokenId) internal view virtual returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && // If within bounds, _packedOwnerships[tokenId] & _BITMASK_BURNED == 0; // and not burned. } function _isSenderApprovedOrOwner( address approvedAddress, address owner, address msgSender ) private pure returns (bool result) { assembly { owner := and(owner, _BITMASK_ADDRESS) msgSender := and(msgSender, _BITMASK_ADDRESS) result := or(eq(msgSender, owner), eq(msgSender, approvedAddress)) } } function _getApprovedSlotAndAddress(uint256 tokenId) private view returns (uint256 approvedAddressSlot, address approvedAddress) { TokenApprovalRef storage tokenApproval = _tokenApprovals[tokenId]; assembly { approvedAddressSlot := tokenApproval.slot approvedAddress := sload(approvedAddressSlot) } } function transferFrom( address from, address to, uint256 tokenId ) public payable virtual override { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner(); (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId); if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A())) if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); assembly { if approvedAddress { sstore(approvedAddressSlot, 0) } } unchecked { --_packedAddressData[from]; ++_packedAddressData[to]; _packedOwnerships[tokenId] = _packOwnershipData( to, _BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked) ); if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; if (_packedOwnerships[nextTokenId] == 0) { if (nextTokenId != _currentIndex) { _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } function safeTransferFrom( address from, address to, uint256 tokenId ) public payable virtual override { safeTransferFrom(from, to, tokenId, ''); } function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public payable virtual override { transferFrom(from, to, tokenId); if (to.code.length != 0) if (!_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns ( bytes4 retval ) { return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } function _mint(address to, uint256 quantity) internal virtual { uint256 startTokenId = _currentIndex; if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); unchecked { _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1); _packedOwnerships[startTokenId] = _packOwnershipData( to, _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0) ); uint256 toMasked; uint256 end = startTokenId + quantity; assembly { toMasked := and(to, _BITMASK_ADDRESS) log4( 0, 0, _TRANSFER_EVENT_SIGNATURE, 0, toMasked, startTokenId ) for { let tokenId := add(startTokenId, 1) } iszero(eq(tokenId, end)) { tokenId := add(tokenId, 1) } { log4(0, 0, _TRANSFER_EVENT_SIGNATURE, 0, toMasked, tokenId) } } if (toMasked == 0) revert MintToZeroAddress(); _currentIndex = end; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } function _mintERC2309(address to, uint256 quantity) internal virtual { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); if (quantity > _MAX_MINT_ERC2309_QUANTITY_LIMIT) revert MintERC2309QuantityExceedsLimit(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); unchecked { _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1); _packedOwnerships[startTokenId] = _packOwnershipData( to, _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0) ); emit ConsecutiveTransfer(startTokenId, startTokenId + quantity - 1, address(0), to); _currentIndex = startTokenId + quantity; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } function _safeMint( address to, uint256 quantity, bytes memory _data ) internal virtual { _mint(to, quantity); unchecked { if (to.code.length != 0) { uint256 end = _currentIndex; uint256 index = end - quantity; do { if (!_checkContractOnERC721Received(address(0), to, index++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (index < end); // Reentrancy protection. if (_currentIndex != end) revert(); } } } function _safeMint(address to, uint256 quantity) internal virtual { _safeMint(to, quantity, ''); } function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } function _burn(uint256 tokenId, bool approvalCheck) internal virtual { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); address from = address(uint160(prevOwnershipPacked)); (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId); if (approvalCheck) { if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A())) if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); assembly { if approvedAddress { sstore(approvedAddressSlot, 0) } } unchecked { _packedAddressData[from] += (1 << _BITPOS_NUMBER_BURNED) - 1; _packedOwnerships[tokenId] = _packOwnershipData( from, (_BITMASK_BURNED | _BITMASK_NEXT_INITIALIZED) | _nextExtraData(from, address(0), prevOwnershipPacked) ); if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; if (_packedOwnerships[nextTokenId] == 0) { if (nextTokenId != _currentIndex) { _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); unchecked { _burnCounter++; } } function _setExtraDataAt(uint256 index, uint24 extraData) internal virtual { uint256 packed = _packedOwnerships[index]; if (packed == 0) revert OwnershipNotInitializedForExtraData(); uint256 extraDataCasted; assembly { extraDataCasted := extraData } packed = (packed & _BITMASK_EXTRA_DATA_COMPLEMENT) | (extraDataCasted << _BITPOS_EXTRA_DATA); _packedOwnerships[index] = packed; } function _extraData( address from, address to, uint24 previousExtraData ) internal view virtual returns (uint24) {} function _nextExtraData( address from, address to, uint256 prevOwnershipPacked ) private view returns (uint256) { uint24 extraData = uint24(prevOwnershipPacked >> _BITPOS_EXTRA_DATA); return uint256(_extraData(from, to, extraData)) << _BITPOS_EXTRA_DATA; } function _msgSenderERC721A() internal view virtual returns (address) { return msg.sender; } function _toString(uint256 value) internal pure virtual returns (string memory str) { assembly { let m := add(mload(0x40), 0xa0) mstore(0x40, m) str := sub(m, 0x20) mstore(str, 0) let end := str for { let temp := value } 1 {} { str := sub(str, 1) mstore8(str, add(48, mod(temp, 10))) temp := div(temp, 10) if iszero(temp) { break } } let length := sub(end, str) str := sub(str, 0x20) mstore(str, length) } } } pragma solidity ^0.8.13; contract OperatorFilterer { error OperatorNotAllowed(address operator); IOperatorFilterRegistry constant operatorFilterRegistry = IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E); constructor(address subscriptionOrRegistrantToCopy, bool subscribe) { if (address(operatorFilterRegistry).code.length > 0) { if (subscribe) { operatorFilterRegistry.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy); } else { if (subscriptionOrRegistrantToCopy != address(0)) { operatorFilterRegistry.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy); } else { operatorFilterRegistry.register(address(this)); } } } } modifier onlyAllowedOperator() virtual { if (address(operatorFilterRegistry).code.length > 0) { if (!operatorFilterRegistry.isOperatorAllowed(address(this), msg.sender)) { revert OperatorNotAllowed(msg.sender); } } _; } } pragma solidity ^0.8.13; contract DefaultOperatorFilterer is OperatorFilterer { address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6); constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {} } pragma solidity ^0.8.13; interface IOperatorFilterRegistry { function isOperatorAllowed(address registrant, address operator) external returns (bool); function register(address registrant) external; function registerAndSubscribe(address registrant, address subscription) external; function registerAndCopyEntries(address registrant, address registrantToCopy) external; function updateOperator(address registrant, address operator, bool filtered) external; function updateOperators(address registrant, address[] calldata operators, bool filtered) external; function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external; function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external; function subscribe(address registrant, address registrantToSubscribe) external; function unsubscribe(address registrant, bool copyExistingEntries) external; function subscriptionOf(address addr) external returns (address registrant); function subscribers(address registrant) external returns (address[] memory); function subscriberAt(address registrant, uint256 index) external returns (address); function copyEntriesOf(address registrant, address registrantToCopy) external; function isOperatorFiltered(address registrant, address operator) external returns (bool); function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool); function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool); function filteredOperators(address addr) external returns (address[] memory); function filteredCodeHashes(address addr) external returns (bytes32[] memory); function filteredOperatorAt(address registrant, uint256 index) external returns (address); function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32); function isRegistered(address addr) external returns (bool); function codeHashOf(address addr) external returns (bytes32); } pragma solidity ^0.8.4; interface IERC721ABurnable is IERC721A { function burn(uint256 tokenId) external; } pragma solidity ^0.8.4; abstract contract ERC721ABurnable is ERC721A, IERC721ABurnable { function burn(uint256 tokenId) public virtual override { _burn(tokenId, true); } } pragma solidity ^0.8.16; contract LoyalGang is Ownable, ERC721A, ReentrancyGuard, ERC721ABurnable, DefaultOperatorFilterer{ string public CONTRACT_URI = ""; mapping(address => uint) public userHasMinted; bool public REVEALED; string public UNREVEALED_URI = ""; string public BASE_URI = ""; bool public isPublicMintEnabled = false; uint public COLLECTION_SIZE = 10000; uint public MINT_PRICE = 0.003 ether; uint public MAX_BATCH_SIZE = 25; uint public SUPPLY_PER_WALLET = 57; uint public FREE_SUPPLY_PER_WALLET = 2; constructor() ERC721A("LOYAL GANG", "LOGANG") {} function TeamMint(uint256 quantity, address receiver) public onlyOwner { require( totalSupply() + quantity <= COLLECTION_SIZE, "No more LOYALY in stock!" ); _safeMint(receiver, quantity); } modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } function getPrice(uint quantity) public view returns(uint){ uint price; uint free = FREE_SUPPLY_PER_WALLET - userHasMinted[msg.sender]; if (quantity >= free) { price = (MINT_PRICE) * (quantity - free); } else { price = 0; } return price; } function mint(uint quantity) external payable callerIsUser nonReentrant { uint price; uint free = FREE_SUPPLY_PER_WALLET - userHasMinted[msg.sender]; if (quantity >= free) { price = (MINT_PRICE) * (quantity - free); userHasMinted[msg.sender] = userHasMinted[msg.sender] + free; } else { price = 0; userHasMinted[msg.sender] = userHasMinted[msg.sender] + quantity; } require(isPublicMintEnabled, "Mint not ready yet!"); require(totalSupply() + quantity <= COLLECTION_SIZE, "No more left!"); require(balanceOf(msg.sender) + quantity <= SUPPLY_PER_WALLET, "Tried to mint over over limit"); require(quantity <= MAX_BATCH_SIZE, "Tried to mint over limit, retry with reduced quantity"); require(msg.value >= price, "Must send more money!"); _safeMint(msg.sender, quantity); if (msg.value > price) { payable(msg.sender).transfer(msg.value - price); } } function setPublicMintEnabled() public onlyOwner { isPublicMintEnabled = !isPublicMintEnabled; } function withdrawFunds() external onlyOwner nonReentrant { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Transfer failed."); } function CollectionUrI(bool _revealed, string memory _baseURI) public onlyOwner { BASE_URI = _baseURI; REVEALED = _revealed; } function contractURI() public view returns (string memory) { return CONTRACT_URI; } function setContract(string memory _contractURI) public onlyOwner { CONTRACT_URI = _contractURI; } function ChangeCollectionSupply(uint256 _new) external onlyOwner { COLLECTION_SIZE = _new; } function ChangePrice(uint256 _newPrice) external onlyOwner { MINT_PRICE = _newPrice; } function ChangeFreePerWallet(uint256 _new) external onlyOwner { FREE_SUPPLY_PER_WALLET = _new; } function ChangeSupplyPerWallet(uint256 _new) external onlyOwner { SUPPLY_PER_WALLET = _new; } function SetMaxBatchSize(uint256 _new) external onlyOwner { MAX_BATCH_SIZE = _new; } function transferFrom(address from, address to, uint256 tokenId) public payable override (ERC721A, IERC721A) onlyAllowedOperator { super.transferFrom(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId) public payable override (ERC721A, IERC721A) onlyAllowedOperator { super.safeTransferFrom(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public payable override (ERC721A, IERC721A) onlyAllowedOperator { super.safeTransferFrom(from, to, tokenId, data); } function tokenURI(uint256 _tokenId) public view override (ERC721A, IERC721A) returns (string memory) { if (REVEALED) { return string(abi.encodePacked(BASE_URI, Strings.toString(_tokenId))); } else { return UNREVEALED_URI; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"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":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","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":"BASE_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COLLECTION_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONTRACT_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"ChangeCollectionSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"ChangeFreePerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"ChangePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"ChangeSupplyPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_revealed","type":"bool"},{"internalType":"string","name":"_baseURI","type":"string"}],"name":"CollectionUrI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"FREE_SUPPLY_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BATCH_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REVEALED","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLY_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"SetMaxBatchSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"TeamMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"UNREVEALED_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"getPrice","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":"isPublicMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","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":"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":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","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":"_contractURI","type":"string"}],"name":"setContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPublicMintEnabled","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":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userHasMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a060405260006080908152600a906200001a908262000374565b50604080516020810190915260008152600d9062000039908262000374565b50604080516020810190915260008152600e9062000058908262000374565b50600f805460ff19169055612710601055660aa87bee5380006011556019601255603960135560026014553480156200009057600080fd5b50733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060400160405280600a8152602001694c4f59414c2047414e4760b01b815250604051806040016040528060068152602001654c4f47414e4760d01b81525062000104620000fe6200027b60201b60201c565b6200027f565b600362000112838262000374565b50600462000121828262000374565b506000600190815560095550506daaeb6d7670e522a718067333cd4e3b1562000273578015620001c157604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b158015620001a257600080fd5b505af1158015620001b7573d6000803e3d6000fd5b5050505062000273565b6001600160a01b03821615620002125760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af29039060440162000187565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401600060405180830381600087803b1580156200025957600080fd5b505af11580156200026e573d6000803e3d6000fd5b505050505b505062000440565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620002fa57607f821691505b6020821081036200031b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200036f57600081815260208120601f850160051c810160208610156200034a5750805b601f850160051c820191505b818110156200036b5782815560010162000356565b5050505b505050565b81516001600160401b03811115620003905762000390620002cf565b620003a881620003a18454620002e5565b8462000321565b602080601f831160018114620003e05760008415620003c75750858301515b600019600386901b1c1916600185901b1785556200036b565b600085815260208120601f198616915b828110156200041157888601518255948401946001909101908401620003f0565b5085821015620004305787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61227880620004506000396000f3fe6080604052600436106102515760003560e01c80638da5cb5b11610139578063c87b56dd116100b6578063e8a3d4851161007a578063e8a3d4851461064d578063e985e9c514610662578063f2fde38b14610682578063f7777747146106a2578063f814943d146106c2578063fb92488b146106e257600080fd5b8063c87b56dd146105cc578063cfdbf254146105ec578063d8258d9514610602578063dbddb26a14610618578063e75722301461062d57600080fd5b8063a4cdd719116100fd578063a4cdd71914610554578063a76a958714610569578063b88d4fde14610583578063c002d23d14610596578063c144a4ba146105ac57600080fd5b80638da5cb5b146104ce57806395d89b41146104ec578063a0712d6814610501578063a1db246e14610514578063a22cb4651461053457600080fd5b806342842e0e116101d25780635fe75587116101965780635fe75587146104235780636352211e1461043957806370a0823114610459578063715018a6146104795780637304ff6c1461048e57806375b64471146104ae57600080fd5b806342842e0e146103a657806342966c68146103b9578063507862d1146103d957806356b48d63146103ee57806356b4f6731461040e57600080fd5b80631422374f116102195780631422374f1461031457806318160ddd146103385780631d9857781461035157806323b872dd1461037e57806324600fc31461039157600080fd5b80630116bc2d1461025657806301ffc9a71461028557806306fdde03146102a5578063081812fc146102c7578063095ea7b3146102ff575b600080fd5b34801561026257600080fd5b50600f546102709060ff1681565b60405190151581526020015b60405180910390f35b34801561029157600080fd5b506102706102a0366004611bab565b610702565b3480156102b157600080fd5b506102ba610754565b60405161027c9190611c18565b3480156102d357600080fd5b506102e76102e2366004611c2b565b6107e6565b6040516001600160a01b03909116815260200161027c565b61031261030d366004611c5b565b61082a565b005b34801561032057600080fd5b5061032a60145481565b60405190815260200161027c565b34801561034457600080fd5b506002546001540361032a565b34801561035d57600080fd5b5061032a61036c366004611c85565b600b6020526000908152604090205481565b61031261038c366004611ca0565b6108ca565b34801561039d57600080fd5b50610312610988565b6103126103b4366004611ca0565b610a7a565b3480156103c557600080fd5b506103126103d4366004611c2b565b610b2e565b3480156103e557600080fd5b506102ba610b3c565b3480156103fa57600080fd5b50610312610409366004611d88565b610bca565b34801561041a57600080fd5b506102ba610be2565b34801561042f57600080fd5b5061032a60135481565b34801561044557600080fd5b506102e7610454366004611c2b565b610bef565b34801561046557600080fd5b5061032a610474366004611c85565b610bfa565b34801561048557600080fd5b50610312610c49565b34801561049a57600080fd5b506103126104a9366004611dcb565b610c5d565b3480156104ba57600080fd5b506103126104c9366004611c2b565b610c86565b3480156104da57600080fd5b506000546001600160a01b03166102e7565b3480156104f857600080fd5b506102ba610c93565b61031261050f366004611c2b565b610ca2565b34801561052057600080fd5b5061031261052f366004611c2b565b610ffa565b34801561054057600080fd5b5061031261054f366004611e1b565b611007565b34801561056057600080fd5b50610312611073565b34801561057557600080fd5b50600c546102709060ff1681565b610312610591366004611e52565b61108f565b3480156105a257600080fd5b5061032a60115481565b3480156105b857600080fd5b506103126105c7366004611c2b565b61114a565b3480156105d857600080fd5b506102ba6105e7366004611c2b565b611157565b3480156105f857600080fd5b5061032a60125481565b34801561060e57600080fd5b5061032a60105481565b34801561062457600080fd5b506102ba61122e565b34801561063957600080fd5b5061032a610648366004611c2b565b61123b565b34801561065957600080fd5b506102ba61128f565b34801561066e57600080fd5b5061027061067d366004611ece565b61129e565b34801561068e57600080fd5b5061031261069d366004611c85565b6112cc565b3480156106ae57600080fd5b506103126106bd366004611f01565b611342565b3480156106ce57600080fd5b506103126106dd366004611c2b565b6113bd565b3480156106ee57600080fd5b506103126106fd366004611c2b565b6113ca565b60006301ffc9a760e01b6001600160e01b03198316148061073357506380ac58cd60e01b6001600160e01b03198316145b8061074e5750635b5e139f60e01b6001600160e01b03198316145b92915050565b60606003805461076390611f24565b80601f016020809104026020016040519081016040528092919081815260200182805461078f90611f24565b80156107dc5780601f106107b1576101008083540402835291602001916107dc565b820191906000526020600020905b8154815290600101906020018083116107bf57829003601f168201915b5050505050905090565b60006107f1826113d7565b61080e576040516333d1c03960e21b815260040160405180910390fd5b506000908152600760205260409020546001600160a01b031690565b600061083582610bef565b9050336001600160a01b0382161461086e57610851813361129e565b61086e576040516367d9dca160e11b815260040160405180910390fd5b60008281526007602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6daaeb6d7670e522a718067333cd4e3b1561097857604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c6171134906044016020604051808303816000875af1158015610930573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109549190611f5e565b61097857604051633b79c77360e21b81523360048201526024015b60405180910390fd5b6109838383836113ff565b505050565b610990611590565b6002600954036109e25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161096f565b6002600955604051600090339047908381818185875af1925050503d8060008114610a29576040519150601f19603f3d011682016040523d82523d6000602084013e610a2e565b606091505b5050905080610a725760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015260640161096f565b506001600955565b6daaeb6d7670e522a718067333cd4e3b15610b2357604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c6171134906044016020604051808303816000875af1158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b049190611f5e565b610b2357604051633b79c77360e21b815233600482015260240161096f565b6109838383836115ea565b610b39816001611605565b50565b600d8054610b4990611f24565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7590611f24565b8015610bc25780601f10610b9757610100808354040283529160200191610bc2565b820191906000526020600020905b815481529060010190602001808311610ba557829003601f168201915b505050505081565b610bd2611590565b600a610bde8282611fc1565b5050565b600a8054610b4990611f24565b600061074e8261173e565b60006001600160a01b038216610c23576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526006602052604090205467ffffffffffffffff1690565b610c51611590565b610c5b60006117ac565b565b610c65611590565b600e610c718282611fc1565b5050600c805460ff1916911515919091179055565b610c8e611590565b601055565b60606004805461076390611f24565b323314610cf15760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000604482015260640161096f565b600260095403610d435760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161096f565b6002600955336000908152600b60205260408120546014548291610d6691612097565b9050808310610db957610d798184612097565b601154610d8691906120aa565b336000908152600b6020526040902054909250610da49082906120c1565b336000908152600b6020526040902055610de8565b336000908152600b6020526040812054909250610dd79084906120c1565b336000908152600b60205260409020555b600f5460ff16610e305760405162461bcd60e51b81526020600482015260136024820152724d696e74206e6f74207265616479207965742160681b604482015260640161096f565b60105483610e416002546001540390565b610e4b91906120c1565b1115610e895760405162461bcd60e51b815260206004820152600d60248201526c4e6f206d6f7265206c6566742160981b604482015260640161096f565b60135483610e9633610bfa565b610ea091906120c1565b1115610eee5760405162461bcd60e51b815260206004820152601d60248201527f547269656420746f206d696e74206f766572206f766572206c696d6974000000604482015260640161096f565b601254831115610f5e5760405162461bcd60e51b815260206004820152603560248201527f547269656420746f206d696e74206f766572206c696d69742c20726574727920604482015274776974682072656475636564207175616e7469747960581b606482015260840161096f565b81341015610fa65760405162461bcd60e51b81526020600482015260156024820152744d7573742073656e64206d6f7265206d6f6e65792160581b604482015260640161096f565b610fb033846117fc565b81341115610ff057336108fc610fc68434612097565b6040518115909202916000818181858888f19350505050158015610fee573d6000803e3d6000fd5b505b5050600160095550565b611002611590565b601455565b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61107b611590565b600f805460ff19811660ff90911615179055565b6daaeb6d7670e522a718067333cd4e3b1561113857604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c6171134906044016020604051808303816000875af11580156110f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111199190611f5e565b61113857604051633b79c77360e21b815233600482015260240161096f565b61114484848484611816565b50505050565b611152611590565b601255565b600c5460609060ff161561119757600e6111708361185a565b6040516020016111819291906120d4565b6040516020818303038152906040529050919050565b600d80546111a490611f24565b80601f01602080910402602001604051908101604052809291908181526020018280546111d090611f24565b801561121d5780601f106111f25761010080835404028352916020019161121d565b820191906000526020600020905b81548152906001019060200180831161120057829003601f168201915b50505050509050919050565b919050565b600e8054610b4990611f24565b336000908152600b60205260408120546014548291829161125c9190612097565b90508084106112835761126f8185612097565b60115461127c91906120aa565b9150611288565b600091505b5092915050565b6060600a805461076390611f24565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b6112d4611590565b6001600160a01b0381166113395760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161096f565b610b39816117ac565b61134a611590565b6010548261135b6002546001540390565b61136591906120c1565b11156113b35760405162461bcd60e51b815260206004820152601860248201527f4e6f206d6f7265204c4f59414c5920696e2073746f636b210000000000000000604482015260640161096f565b610bde81836117fc565b6113c5611590565b601355565b6113d2611590565b601155565b60006001548210801561074e575050600090815260056020526040902054600160e01b161590565b600061140a8261173e565b9050836001600160a01b0316816001600160a01b03161461143d5760405162a1148160e81b815260040160405180910390fd5b600082815260076020526040902080546114698187335b6001600160a01b039081169116811491141790565b61149457611477863361129e565b61149457604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b0385166114bb57604051633a954ecd60e21b815260040160405180910390fd5b80156114c657600082555b6001600160a01b038681166000908152600660205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260056020526040812091909155600160e11b84169003611558576001840160008181526005602052604081205490036115565760015481146115565760008181526005602052604090208490555b505b83856001600160a01b0316876001600160a01b031660008051602061222383398151915260405160405180910390a45b505050505050565b6000546001600160a01b03163314610c5b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161096f565b6109838383836040518060200160405280600081525061108f565b60006116108361173e565b90508060008061162e86600090815260076020526040902080549091565b91509150841561166e57611643818433611454565b61166e57611651833361129e565b61166e57604051632ce44b5f60e11b815260040160405180910390fd5b801561167957600082555b6001600160a01b038316600081815260066020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b17600360e01b17600087815260056020526040812091909155600160e11b85169003611707576001860160008181526005602052604081205490036117055760015481146117055760008181526005602052604090208590555b505b60405186906000906001600160a01b03861690600080516020612223833981519152908390a4505060028054600101905550505050565b6000816001548110156117935760008181526005602052604081205490600160e01b82169003611791575b8060000361178a575060001901600081815260056020526040902054611769565b9392505050565b505b604051636f96cda160e11b815260040160405180910390fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610bde828260405180602001604052806000815250611963565b6118218484846108ca565b6001600160a01b0383163b156111445761183d848484846119d0565b611144576040516368d2bf6b60e11b815260040160405180910390fd5b6060816000036118815750506040805180820190915260018152600360fc1b602082015290565b8160005b81156118ab57806118958161215b565b91506118a49050600a8361218a565b9150611885565b60008167ffffffffffffffff8111156118c6576118c6611cdc565b6040519080825280601f01601f1916602001820160405280156118f0576020820181803683370190505b5090505b841561195b57611905600183612097565b9150611912600a8661219e565b61191d9060306120c1565b60f81b818381518110611932576119326121b2565b60200101906001600160f81b031916908160001a905350611954600a8661218a565b94506118f4565b949350505050565b61196d8383611abb565b6001600160a01b0383163b15610983576001548281035b61199760008683806001019450866119d0565b6119b4576040516368d2bf6b60e11b815260040160405180910390fd5b8181106119845781600154146119c957600080fd5b5050505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611a059033908990889088906004016121c8565b6020604051808303816000875af1925050508015611a40575060408051601f3d908101601f19168201909252611a3d91810190612205565b60015b611a9e573d808015611a6e576040519150601f19603f3d011682016040523d82523d6000602084013e611a73565b606091505b508051600003611a96576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b6001546000829003611ae05760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03831660008181526006602090815260408083208054680100000000000000018802019055848352600590915281206001851460e11b4260a01b178317905582840190839083906000805160206122238339815191528180a4600183015b818114611b6b5780836000600080516020612223833981519152600080a4600101611b45565b5081600003611b8c57604051622e076360e81b815260040160405180910390fd5b60015550505050565b6001600160e01b031981168114610b3957600080fd5b600060208284031215611bbd57600080fd5b813561178a81611b95565b60005b83811015611be3578181015183820152602001611bcb565b50506000910152565b60008151808452611c04816020860160208601611bc8565b601f01601f19169290920160200192915050565b60208152600061178a6020830184611bec565b600060208284031215611c3d57600080fd5b5035919050565b80356001600160a01b038116811461122957600080fd5b60008060408385031215611c6e57600080fd5b611c7783611c44565b946020939093013593505050565b600060208284031215611c9757600080fd5b61178a82611c44565b600080600060608486031215611cb557600080fd5b611cbe84611c44565b9250611ccc60208501611c44565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611d0d57611d0d611cdc565b604051601f8501601f19908116603f01168101908282118183101715611d3557611d35611cdc565b81604052809350858152868686011115611d4e57600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112611d7957600080fd5b61178a83833560208501611cf2565b600060208284031215611d9a57600080fd5b813567ffffffffffffffff811115611db157600080fd5b61195b84828501611d68565b8015158114610b3957600080fd5b60008060408385031215611dde57600080fd5b8235611de981611dbd565b9150602083013567ffffffffffffffff811115611e0557600080fd5b611e1185828601611d68565b9150509250929050565b60008060408385031215611e2e57600080fd5b611e3783611c44565b91506020830135611e4781611dbd565b809150509250929050565b60008060008060808587031215611e6857600080fd5b611e7185611c44565b9350611e7f60208601611c44565b925060408501359150606085013567ffffffffffffffff811115611ea257600080fd5b8501601f81018713611eb357600080fd5b611ec287823560208401611cf2565b91505092959194509250565b60008060408385031215611ee157600080fd5b611eea83611c44565b9150611ef860208401611c44565b90509250929050565b60008060408385031215611f1457600080fd5b82359150611ef860208401611c44565b600181811c90821680611f3857607f821691505b602082108103611f5857634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215611f7057600080fd5b815161178a81611dbd565b601f82111561098357600081815260208120601f850160051c81016020861015611fa25750805b601f850160051c820191505b8181101561158857828155600101611fae565b815167ffffffffffffffff811115611fdb57611fdb611cdc565b611fef81611fe98454611f24565b84611f7b565b602080601f831160018114612024576000841561200c5750858301515b600019600386901b1c1916600185901b178555611588565b600085815260208120601f198616915b8281101561205357888601518255948401946001909101908401612034565b50858210156120715787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8181038181111561074e5761074e612081565b808202811582820484141761074e5761074e612081565b8082018082111561074e5761074e612081565b60008084546120e281611f24565b600182811680156120fa576001811461210f5761213e565b60ff198416875282151583028701945061213e565b8860005260208060002060005b858110156121355781548a82015290840190820161211c565b50505082870194505b505050508351612152818360208801611bc8565b01949350505050565b60006001820161216d5761216d612081565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261219957612199612174565b500490565b6000826121ad576121ad612174565b500690565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906121fb90830184611bec565b9695505050505050565b60006020828403121561221757600080fd5b815161178a81611b9556feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212202088027e46d5b17f56ba6ca9f0670a1aadab36bd485809b1acbc852dcd80cb0a64736f6c63430008110033
Deployed Bytecode
0x6080604052600436106102515760003560e01c80638da5cb5b11610139578063c87b56dd116100b6578063e8a3d4851161007a578063e8a3d4851461064d578063e985e9c514610662578063f2fde38b14610682578063f7777747146106a2578063f814943d146106c2578063fb92488b146106e257600080fd5b8063c87b56dd146105cc578063cfdbf254146105ec578063d8258d9514610602578063dbddb26a14610618578063e75722301461062d57600080fd5b8063a4cdd719116100fd578063a4cdd71914610554578063a76a958714610569578063b88d4fde14610583578063c002d23d14610596578063c144a4ba146105ac57600080fd5b80638da5cb5b146104ce57806395d89b41146104ec578063a0712d6814610501578063a1db246e14610514578063a22cb4651461053457600080fd5b806342842e0e116101d25780635fe75587116101965780635fe75587146104235780636352211e1461043957806370a0823114610459578063715018a6146104795780637304ff6c1461048e57806375b64471146104ae57600080fd5b806342842e0e146103a657806342966c68146103b9578063507862d1146103d957806356b48d63146103ee57806356b4f6731461040e57600080fd5b80631422374f116102195780631422374f1461031457806318160ddd146103385780631d9857781461035157806323b872dd1461037e57806324600fc31461039157600080fd5b80630116bc2d1461025657806301ffc9a71461028557806306fdde03146102a5578063081812fc146102c7578063095ea7b3146102ff575b600080fd5b34801561026257600080fd5b50600f546102709060ff1681565b60405190151581526020015b60405180910390f35b34801561029157600080fd5b506102706102a0366004611bab565b610702565b3480156102b157600080fd5b506102ba610754565b60405161027c9190611c18565b3480156102d357600080fd5b506102e76102e2366004611c2b565b6107e6565b6040516001600160a01b03909116815260200161027c565b61031261030d366004611c5b565b61082a565b005b34801561032057600080fd5b5061032a60145481565b60405190815260200161027c565b34801561034457600080fd5b506002546001540361032a565b34801561035d57600080fd5b5061032a61036c366004611c85565b600b6020526000908152604090205481565b61031261038c366004611ca0565b6108ca565b34801561039d57600080fd5b50610312610988565b6103126103b4366004611ca0565b610a7a565b3480156103c557600080fd5b506103126103d4366004611c2b565b610b2e565b3480156103e557600080fd5b506102ba610b3c565b3480156103fa57600080fd5b50610312610409366004611d88565b610bca565b34801561041a57600080fd5b506102ba610be2565b34801561042f57600080fd5b5061032a60135481565b34801561044557600080fd5b506102e7610454366004611c2b565b610bef565b34801561046557600080fd5b5061032a610474366004611c85565b610bfa565b34801561048557600080fd5b50610312610c49565b34801561049a57600080fd5b506103126104a9366004611dcb565b610c5d565b3480156104ba57600080fd5b506103126104c9366004611c2b565b610c86565b3480156104da57600080fd5b506000546001600160a01b03166102e7565b3480156104f857600080fd5b506102ba610c93565b61031261050f366004611c2b565b610ca2565b34801561052057600080fd5b5061031261052f366004611c2b565b610ffa565b34801561054057600080fd5b5061031261054f366004611e1b565b611007565b34801561056057600080fd5b50610312611073565b34801561057557600080fd5b50600c546102709060ff1681565b610312610591366004611e52565b61108f565b3480156105a257600080fd5b5061032a60115481565b3480156105b857600080fd5b506103126105c7366004611c2b565b61114a565b3480156105d857600080fd5b506102ba6105e7366004611c2b565b611157565b3480156105f857600080fd5b5061032a60125481565b34801561060e57600080fd5b5061032a60105481565b34801561062457600080fd5b506102ba61122e565b34801561063957600080fd5b5061032a610648366004611c2b565b61123b565b34801561065957600080fd5b506102ba61128f565b34801561066e57600080fd5b5061027061067d366004611ece565b61129e565b34801561068e57600080fd5b5061031261069d366004611c85565b6112cc565b3480156106ae57600080fd5b506103126106bd366004611f01565b611342565b3480156106ce57600080fd5b506103126106dd366004611c2b565b6113bd565b3480156106ee57600080fd5b506103126106fd366004611c2b565b6113ca565b60006301ffc9a760e01b6001600160e01b03198316148061073357506380ac58cd60e01b6001600160e01b03198316145b8061074e5750635b5e139f60e01b6001600160e01b03198316145b92915050565b60606003805461076390611f24565b80601f016020809104026020016040519081016040528092919081815260200182805461078f90611f24565b80156107dc5780601f106107b1576101008083540402835291602001916107dc565b820191906000526020600020905b8154815290600101906020018083116107bf57829003601f168201915b5050505050905090565b60006107f1826113d7565b61080e576040516333d1c03960e21b815260040160405180910390fd5b506000908152600760205260409020546001600160a01b031690565b600061083582610bef565b9050336001600160a01b0382161461086e57610851813361129e565b61086e576040516367d9dca160e11b815260040160405180910390fd5b60008281526007602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6daaeb6d7670e522a718067333cd4e3b1561097857604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c6171134906044016020604051808303816000875af1158015610930573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109549190611f5e565b61097857604051633b79c77360e21b81523360048201526024015b60405180910390fd5b6109838383836113ff565b505050565b610990611590565b6002600954036109e25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161096f565b6002600955604051600090339047908381818185875af1925050503d8060008114610a29576040519150601f19603f3d011682016040523d82523d6000602084013e610a2e565b606091505b5050905080610a725760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015260640161096f565b506001600955565b6daaeb6d7670e522a718067333cd4e3b15610b2357604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c6171134906044016020604051808303816000875af1158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b049190611f5e565b610b2357604051633b79c77360e21b815233600482015260240161096f565b6109838383836115ea565b610b39816001611605565b50565b600d8054610b4990611f24565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7590611f24565b8015610bc25780601f10610b9757610100808354040283529160200191610bc2565b820191906000526020600020905b815481529060010190602001808311610ba557829003601f168201915b505050505081565b610bd2611590565b600a610bde8282611fc1565b5050565b600a8054610b4990611f24565b600061074e8261173e565b60006001600160a01b038216610c23576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526006602052604090205467ffffffffffffffff1690565b610c51611590565b610c5b60006117ac565b565b610c65611590565b600e610c718282611fc1565b5050600c805460ff1916911515919091179055565b610c8e611590565b601055565b60606004805461076390611f24565b323314610cf15760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000604482015260640161096f565b600260095403610d435760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161096f565b6002600955336000908152600b60205260408120546014548291610d6691612097565b9050808310610db957610d798184612097565b601154610d8691906120aa565b336000908152600b6020526040902054909250610da49082906120c1565b336000908152600b6020526040902055610de8565b336000908152600b6020526040812054909250610dd79084906120c1565b336000908152600b60205260409020555b600f5460ff16610e305760405162461bcd60e51b81526020600482015260136024820152724d696e74206e6f74207265616479207965742160681b604482015260640161096f565b60105483610e416002546001540390565b610e4b91906120c1565b1115610e895760405162461bcd60e51b815260206004820152600d60248201526c4e6f206d6f7265206c6566742160981b604482015260640161096f565b60135483610e9633610bfa565b610ea091906120c1565b1115610eee5760405162461bcd60e51b815260206004820152601d60248201527f547269656420746f206d696e74206f766572206f766572206c696d6974000000604482015260640161096f565b601254831115610f5e5760405162461bcd60e51b815260206004820152603560248201527f547269656420746f206d696e74206f766572206c696d69742c20726574727920604482015274776974682072656475636564207175616e7469747960581b606482015260840161096f565b81341015610fa65760405162461bcd60e51b81526020600482015260156024820152744d7573742073656e64206d6f7265206d6f6e65792160581b604482015260640161096f565b610fb033846117fc565b81341115610ff057336108fc610fc68434612097565b6040518115909202916000818181858888f19350505050158015610fee573d6000803e3d6000fd5b505b5050600160095550565b611002611590565b601455565b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61107b611590565b600f805460ff19811660ff90911615179055565b6daaeb6d7670e522a718067333cd4e3b1561113857604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c6171134906044016020604051808303816000875af11580156110f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111199190611f5e565b61113857604051633b79c77360e21b815233600482015260240161096f565b61114484848484611816565b50505050565b611152611590565b601255565b600c5460609060ff161561119757600e6111708361185a565b6040516020016111819291906120d4565b6040516020818303038152906040529050919050565b600d80546111a490611f24565b80601f01602080910402602001604051908101604052809291908181526020018280546111d090611f24565b801561121d5780601f106111f25761010080835404028352916020019161121d565b820191906000526020600020905b81548152906001019060200180831161120057829003601f168201915b50505050509050919050565b919050565b600e8054610b4990611f24565b336000908152600b60205260408120546014548291829161125c9190612097565b90508084106112835761126f8185612097565b60115461127c91906120aa565b9150611288565b600091505b5092915050565b6060600a805461076390611f24565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b6112d4611590565b6001600160a01b0381166113395760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161096f565b610b39816117ac565b61134a611590565b6010548261135b6002546001540390565b61136591906120c1565b11156113b35760405162461bcd60e51b815260206004820152601860248201527f4e6f206d6f7265204c4f59414c5920696e2073746f636b210000000000000000604482015260640161096f565b610bde81836117fc565b6113c5611590565b601355565b6113d2611590565b601155565b60006001548210801561074e575050600090815260056020526040902054600160e01b161590565b600061140a8261173e565b9050836001600160a01b0316816001600160a01b03161461143d5760405162a1148160e81b815260040160405180910390fd5b600082815260076020526040902080546114698187335b6001600160a01b039081169116811491141790565b61149457611477863361129e565b61149457604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b0385166114bb57604051633a954ecd60e21b815260040160405180910390fd5b80156114c657600082555b6001600160a01b038681166000908152600660205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260056020526040812091909155600160e11b84169003611558576001840160008181526005602052604081205490036115565760015481146115565760008181526005602052604090208490555b505b83856001600160a01b0316876001600160a01b031660008051602061222383398151915260405160405180910390a45b505050505050565b6000546001600160a01b03163314610c5b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161096f565b6109838383836040518060200160405280600081525061108f565b60006116108361173e565b90508060008061162e86600090815260076020526040902080549091565b91509150841561166e57611643818433611454565b61166e57611651833361129e565b61166e57604051632ce44b5f60e11b815260040160405180910390fd5b801561167957600082555b6001600160a01b038316600081815260066020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b17600360e01b17600087815260056020526040812091909155600160e11b85169003611707576001860160008181526005602052604081205490036117055760015481146117055760008181526005602052604090208590555b505b60405186906000906001600160a01b03861690600080516020612223833981519152908390a4505060028054600101905550505050565b6000816001548110156117935760008181526005602052604081205490600160e01b82169003611791575b8060000361178a575060001901600081815260056020526040902054611769565b9392505050565b505b604051636f96cda160e11b815260040160405180910390fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610bde828260405180602001604052806000815250611963565b6118218484846108ca565b6001600160a01b0383163b156111445761183d848484846119d0565b611144576040516368d2bf6b60e11b815260040160405180910390fd5b6060816000036118815750506040805180820190915260018152600360fc1b602082015290565b8160005b81156118ab57806118958161215b565b91506118a49050600a8361218a565b9150611885565b60008167ffffffffffffffff8111156118c6576118c6611cdc565b6040519080825280601f01601f1916602001820160405280156118f0576020820181803683370190505b5090505b841561195b57611905600183612097565b9150611912600a8661219e565b61191d9060306120c1565b60f81b818381518110611932576119326121b2565b60200101906001600160f81b031916908160001a905350611954600a8661218a565b94506118f4565b949350505050565b61196d8383611abb565b6001600160a01b0383163b15610983576001548281035b61199760008683806001019450866119d0565b6119b4576040516368d2bf6b60e11b815260040160405180910390fd5b8181106119845781600154146119c957600080fd5b5050505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611a059033908990889088906004016121c8565b6020604051808303816000875af1925050508015611a40575060408051601f3d908101601f19168201909252611a3d91810190612205565b60015b611a9e573d808015611a6e576040519150601f19603f3d011682016040523d82523d6000602084013e611a73565b606091505b508051600003611a96576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b6001546000829003611ae05760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03831660008181526006602090815260408083208054680100000000000000018802019055848352600590915281206001851460e11b4260a01b178317905582840190839083906000805160206122238339815191528180a4600183015b818114611b6b5780836000600080516020612223833981519152600080a4600101611b45565b5081600003611b8c57604051622e076360e81b815260040160405180910390fd5b60015550505050565b6001600160e01b031981168114610b3957600080fd5b600060208284031215611bbd57600080fd5b813561178a81611b95565b60005b83811015611be3578181015183820152602001611bcb565b50506000910152565b60008151808452611c04816020860160208601611bc8565b601f01601f19169290920160200192915050565b60208152600061178a6020830184611bec565b600060208284031215611c3d57600080fd5b5035919050565b80356001600160a01b038116811461122957600080fd5b60008060408385031215611c6e57600080fd5b611c7783611c44565b946020939093013593505050565b600060208284031215611c9757600080fd5b61178a82611c44565b600080600060608486031215611cb557600080fd5b611cbe84611c44565b9250611ccc60208501611c44565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611d0d57611d0d611cdc565b604051601f8501601f19908116603f01168101908282118183101715611d3557611d35611cdc565b81604052809350858152868686011115611d4e57600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112611d7957600080fd5b61178a83833560208501611cf2565b600060208284031215611d9a57600080fd5b813567ffffffffffffffff811115611db157600080fd5b61195b84828501611d68565b8015158114610b3957600080fd5b60008060408385031215611dde57600080fd5b8235611de981611dbd565b9150602083013567ffffffffffffffff811115611e0557600080fd5b611e1185828601611d68565b9150509250929050565b60008060408385031215611e2e57600080fd5b611e3783611c44565b91506020830135611e4781611dbd565b809150509250929050565b60008060008060808587031215611e6857600080fd5b611e7185611c44565b9350611e7f60208601611c44565b925060408501359150606085013567ffffffffffffffff811115611ea257600080fd5b8501601f81018713611eb357600080fd5b611ec287823560208401611cf2565b91505092959194509250565b60008060408385031215611ee157600080fd5b611eea83611c44565b9150611ef860208401611c44565b90509250929050565b60008060408385031215611f1457600080fd5b82359150611ef860208401611c44565b600181811c90821680611f3857607f821691505b602082108103611f5857634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215611f7057600080fd5b815161178a81611dbd565b601f82111561098357600081815260208120601f850160051c81016020861015611fa25750805b601f850160051c820191505b8181101561158857828155600101611fae565b815167ffffffffffffffff811115611fdb57611fdb611cdc565b611fef81611fe98454611f24565b84611f7b565b602080601f831160018114612024576000841561200c5750858301515b600019600386901b1c1916600185901b178555611588565b600085815260208120601f198616915b8281101561205357888601518255948401946001909101908401612034565b50858210156120715787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8181038181111561074e5761074e612081565b808202811582820484141761074e5761074e612081565b8082018082111561074e5761074e612081565b60008084546120e281611f24565b600182811680156120fa576001811461210f5761213e565b60ff198416875282151583028701945061213e565b8860005260208060002060005b858110156121355781548a82015290840190820161211c565b50505082870194505b505050508351612152818360208801611bc8565b01949350505050565b60006001820161216d5761216d612081565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261219957612199612174565b500490565b6000826121ad576121ad612174565b500690565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906121fb90830184611bec565b9695505050505050565b60006020828403121561221757600080fd5b815161178a81611b9556feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212202088027e46d5b17f56ba6ca9f0670a1aadab36bd485809b1acbc852dcd80cb0a64736f6c63430008110033
Deployed Bytecode Sourcemap
34092:4636:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34363:39;;;;;;;;;;-1:-1:-1;34363:39:0;;;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;34363:39:0;;;;;;;;14587:244;;;;;;;;;;-1:-1:-1;14587:244:0;;;;;:::i;:::-;;:::i;14839:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18415:218::-;;;;;;;;;;-1:-1:-1;18415:218:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1697:32:1;;;1679:51;;1667:2;1652:18;18415:218:0;1533:203:1;17999:408:0;;;;;;:::i;:::-;;:::i;:::-;;34555:38;;;;;;;;;;;;;;;;;;;2324:25:1;;;2312:2;2297:18;34555:38:0;2178:177:1;12950:180:0;;;;;;;;;;-1:-1:-1;13081:12:0;;13065:13;;:28;12950:180;;34226:45;;;;;;;;;;-1:-1:-1;34226:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;37730:185;;;;;;:::i;:::-;;:::i;36588:191::-;;;;;;;;;;;;;:::i;37923:193::-;;;;;;:::i;:::-;;:::i;33963:94::-;;;;;;;;;;-1:-1:-1;33963:94:0;;;;;:::i;:::-;;:::i;34297:33::-;;;;;;;;;;;;;:::i;37049:112::-;;;;;;;;;;-1:-1:-1;37049:112:0;;;;;:::i;:::-;;:::i;34192:31::-;;;;;;;;;;;;;:::i;34518:34::-;;;;;;;;;;;;;;;;15487:152;;;;;;;;;;-1:-1:-1;15487:152:0;;;;;:::i;:::-;;:::i;13415:233::-;;;;;;;;;;-1:-1:-1;13415:233:0;;;;;:::i;:::-;;:::i;945:103::-;;;;;;;;;;;;;:::i;36787:149::-;;;;;;;;;;-1:-1:-1;36787:149:0;;;;;:::i;:::-;;:::i;37169:106::-;;;;;;;;;;-1:-1:-1;37169:106:0;;;;;:::i;:::-;;:::i;710:87::-;;;;;;;;;;-1:-1:-1;756:7:0;783:6;-1:-1:-1;;;;;783:6:0;710:87;;14947:104;;;;;;;;;;;;;:::i;35380:1084::-;;;;;;:::i;:::-;;:::i;37391:110::-;;;;;;;;;;-1:-1:-1;37391:110:0;;;;;:::i;:::-;;:::i;18641:234::-;;;;;;;;;;-1:-1:-1;18641:234:0;;;;;:::i;:::-;;:::i;36470:110::-;;;;;;;;;;;;;:::i;34274:20::-;;;;;;;;;;-1:-1:-1;34274:20:0;;;;;;;;38124:250;;;;;;:::i;:::-;;:::i;34444:36::-;;;;;;;;;;;;;;;;37624:98;;;;;;;;;;-1:-1:-1;37624:98:0;;;;;:::i;:::-;;:::i;38382:341::-;;;;;;;;;;-1:-1:-1;38382:341:0;;;;;:::i;:::-;;:::i;34484:31::-;;;;;;;;;;;;;;;;34405:35;;;;;;;;;;;;;;;;34333:27;;;;;;;;;;;;;:::i;35048:324::-;;;;;;;;;;-1:-1:-1;35048:324:0;;;;;:::i;:::-;;:::i;36944:97::-;;;;;;;;;;;;;:::i;18883:164::-;;;;;;;;;;-1:-1:-1;18883:164:0;;;;;:::i;:::-;;:::i;1058:201::-;;;;;;;;;;-1:-1:-1;1058:201:0;;;;;:::i;:::-;;:::i;34654:257::-;;;;;;;;;;-1:-1:-1;34654:257:0;;;;;:::i;:::-;;:::i;37509:107::-;;;;;;;;;;-1:-1:-1;37509:107:0;;;;;:::i;:::-;;:::i;37283:100::-;;;;;;;;;;-1:-1:-1;37283:100:0;;;;;:::i;:::-;;:::i;14587:244::-;14672:4;-1:-1:-1;;;;;;;;;14711:25:0;;;;:68;;-1:-1:-1;;;;;;;;;;14754:25:0;;;14711:68;:111;;;-1:-1:-1;;;;;;;;;;14797:25:0;;;14711:111;14691:131;14587:244;-1:-1:-1;;14587:244:0:o;14839:100::-;14893:13;14926:5;14919:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14839:100;:::o;18415:218::-;18491:7;18516:16;18524:7;18516;:16::i;:::-;18511:64;;18541:34;;-1:-1:-1;;;18541:34:0;;;;;;;;;;;18511:64;-1:-1:-1;18595:24:0;;;;:15;:24;;;;;:30;-1:-1:-1;;;;;18595:30:0;;18415:218::o;17999:408::-;18088:13;18104:16;18112:7;18104;:16::i;:::-;18088:32;-1:-1:-1;29522:10:0;-1:-1:-1;;;;;18137:28:0;;;18133:175;;18185:44;18202:5;29522:10;18883:164;:::i;18185:44::-;18180:128;;18257:35;;-1:-1:-1;;;18257:35:0;;;;;;;;;;;18180:128;18320:24;;;;:15;:24;;;;;;:35;;-1:-1:-1;;;;;;18320:35:0;-1:-1:-1;;;;;18320:35:0;;;;;;;;;18371:28;;18320:24;;18371:28;;;;;;;18077:330;17999:408;;:::o;37730:185::-;30410:42;31153:43;:47;31149:225;;31222:67;;-1:-1:-1;;;31222:67:0;;31271:4;31222:67;;;6899:34:1;31278:10:0;6949:18:1;;;6942:43;30410:42:0;;31222:40;;6834:18:1;;31222:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31217:146;;31317:30;;-1:-1:-1;;;31317:30:0;;31336:10;31317:30;;;1679:51:1;1652:18;;31317:30:0;;;;;;;;31217:146;37870:37:::1;37889:4;37895:2;37899:7;37870:18;:37::i;:::-;37730:185:::0;;;:::o;36588:191::-;669:13;:11;:13::i;:::-;1619:1:::1;1777:7;;:19:::0;1769:63:::1;;;::::0;-1:-1:-1;;;1769:63:0;;7448:2:1;1769:63:0::1;::::0;::::1;7430:21:1::0;7487:2;7467:18;;;7460:30;7526:33;7506:18;;;7499:61;7577:18;;1769:63:0::1;7246:355:1::0;1769:63:0::1;1619:1;1845:7;:18:::0;36675:49:::2;::::0;36657:12:::2;::::0;36675:10:::2;::::0;36698:21:::2;::::0;36657:12;36675:49;36657:12;36675:49;36698:21;36675:10;:49:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36656:68;;;36743:7;36735:36;;;::::0;-1:-1:-1;;;36735:36:0;;8018:2:1;36735:36:0::2;::::0;::::2;8000:21:1::0;8057:2;8037:18;;;8030:30;-1:-1:-1;;;8076:18:1;;;8069:46;8132:18;;36735:36:0::2;7816:340:1::0;36735:36:0::2;-1:-1:-1::0;1575:1:0::1;1890:7;:22:::0;36588:191::o;37923:193::-;30410:42;31153:43;:47;31149:225;;31222:67;;-1:-1:-1;;;31222:67:0;;31271:4;31222:67;;;6899:34:1;31278:10:0;6949:18:1;;;6942:43;30410:42:0;;31222:40;;6834:18:1;;31222:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31217:146;;31317:30;;-1:-1:-1;;;31317:30:0;;31336:10;31317:30;;;1679:51:1;1652:18;;31317:30:0;1533:203:1;31217:146:0;38067:41:::1;38090:4;38096:2;38100:7;38067:22;:41::i;33963:94::-:0;34029:20;34035:7;34044:4;34029:5;:20::i;:::-;33963:94;:::o;34297:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37049:112::-;669:13;:11;:13::i;:::-;37126:12:::1;:27;37141:12:::0;37126;:27:::1;:::i;:::-;;37049:112:::0;:::o;34192:31::-;;;;;;;:::i;15487:152::-;15559:7;15602:27;15621:7;15602:18;:27::i;13415:233::-;13487:7;-1:-1:-1;;;;;13511:19:0;;13507:60;;13539:28;;-1:-1:-1;;;13539:28:0;;;;;;;;;;;13507:60;-1:-1:-1;;;;;;13585:25:0;;;;;:18;:25;;;;;;11223:13;13585:55;;13415:233::o;945:103::-;669:13;:11;:13::i;:::-;1010:30:::1;1037:1;1010:18;:30::i;:::-;945:103::o:0;36787:149::-;669:13;:11;:13::i;:::-;36878:8:::1;:19;36889:8:::0;36878;:19:::1;:::i;:::-;-1:-1:-1::0;;36908:8:0::1;:20:::0;;-1:-1:-1;;36908:20:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36787:149::o;37169:106::-;669:13;:11;:13::i;:::-;37245:15:::1;:22:::0;37169:106::o;14947:104::-;15003:13;15036:7;15029:14;;;;;:::i;35380:1084::-;34962:9;34975:10;34962:23;34954:66;;;;-1:-1:-1;;;34954:66:0;;10567:2:1;34954:66:0;;;10549:21:1;10606:2;10586:18;;;10579:30;10645:32;10625:18;;;10618:60;10695:18;;34954:66:0;10365:354:1;34954:66:0;1619:1:::1;1777:7;;:19:::0;1769:63:::1;;;::::0;-1:-1:-1;;;1769:63:0;;7448:2:1;1769:63:0::1;::::0;::::1;7430:21:1::0;7487:2;7467:18;;;7460:30;7526:33;7506:18;;;7499:61;7577:18;;1769:63:0::1;7246:355:1::0;1769:63:0::1;1619:1;1845:7;:18:::0;35577:10:::2;35505;35563:25:::0;;;:13:::2;:25;::::0;;;;;35538:22:::2;::::0;35505:10;;35538:50:::2;::::0;::::2;:::i;:::-;35526:62;;35615:4;35603:8;:16;35599:285;;35660:15;35671:4:::0;35660:8;:15:::2;:::i;:::-;35645:10;;35644:32;;;;:::i;:::-;35733:10;35719:25;::::0;;;:13:::2;:25;::::0;;;;;35636:40;;-1:-1:-1;35719:32:0::2;::::0;35747:4;;35719:32:::2;:::i;:::-;35705:10;35691:25;::::0;;;:13:::2;:25;::::0;;;;:60;35599:285:::2;;;35850:10;35792:1;35836:25:::0;;;:13:::2;:25;::::0;;;;;35792:1;;-1:-1:-1;35836:36:0::2;::::0;35864:8;;35836:36:::2;:::i;:::-;35822:10;35808:25;::::0;;;:13:::2;:25;::::0;;;;:64;35599:285:::2;35904:19;::::0;::::2;;35896:51;;;::::0;-1:-1:-1;;;35896:51:0;;11494:2:1;35896:51:0::2;::::0;::::2;11476:21:1::0;11533:2;11513:18;;;11506:30;-1:-1:-1;;;11552:18:1;;;11545:49;11611:18;;35896:51:0::2;11292:343:1::0;35896:51:0::2;35994:15;;35982:8;35966:13;13081:12:::0;;13065:13;;:28;;12950:180;35966:13:::2;:24;;;;:::i;:::-;:43;;35958:69;;;::::0;-1:-1:-1;;;35958:69:0;;11842:2:1;35958:69:0::2;::::0;::::2;11824:21:1::0;11881:2;11861:18;;;11854:30;-1:-1:-1;;;11900:18:1;;;11893:43;11953:18;;35958:69:0::2;11640:337:1::0;35958:69:0::2;36084:17;;36072:8;36048:21;36058:10;36048:9;:21::i;:::-;:32;;;;:::i;:::-;:53;;36040:95;;;::::0;-1:-1:-1;;;36040:95:0;;12184:2:1;36040:95:0::2;::::0;::::2;12166:21:1::0;12223:2;12203:18;;;12196:30;12262:31;12242:18;;;12235:59;12311:18;;36040:95:0::2;11982:353:1::0;36040:95:0::2;36168:14;;36156:8;:26;;36148:92;;;::::0;-1:-1:-1;;;36148:92:0;;12542:2:1;36148:92:0::2;::::0;::::2;12524:21:1::0;12581:2;12561:18;;;12554:30;12620:34;12600:18;;;12593:62;-1:-1:-1;;;12671:18:1;;;12664:51;12732:19;;36148:92:0::2;12340:417:1::0;36148:92:0::2;36272:5;36259:9;:18;;36251:52;;;::::0;-1:-1:-1;;;36251:52:0;;12964:2:1;36251:52:0::2;::::0;::::2;12946:21:1::0;13003:2;12983:18;;;12976:30;-1:-1:-1;;;13022:18:1;;;13015:51;13083:18;;36251:52:0::2;12762:345:1::0;36251:52:0::2;36316:31;36326:10;36338:8;36316:9;:31::i;:::-;36376:5;36364:9;:17;36360:97;;;36406:10;36398:47;36427:17;36439:5:::0;36427:9:::2;:17;:::i;:::-;36398:47;::::0;;::::2;::::0;;::::2;::::0;::::2;::::0;;;;;;::::2;;;;;;;;;;;;;::::0;::::2;;;;;;36360:97;-1:-1:-1::0;;1575:1:0::1;1890:7;:22:::0;-1:-1:-1;35380:1084:0:o;37391:110::-;669:13;:11;:13::i;:::-;37464:22:::1;:29:::0;37391:110::o;18641:234::-;29522:10;18736:39;;;;:18;:39;;;;;;;;-1:-1:-1;;;;;18736:49:0;;;;;;;;;;;;:60;;-1:-1:-1;;18736:60:0;;;;;;;;;;18812:55;;154:41:1;;;18736:49:0;;29522:10;18812:55;;127:18:1;18812:55:0;;;;;;;18641:234;;:::o;36470:110::-;669:13;:11;:13::i;:::-;36553:19:::1;::::0;;-1:-1:-1;;36530:42:0;::::1;36553:19;::::0;;::::1;36552:20;36530:42;::::0;;36470:110::o;38124:250::-;30410:42;31153:43;:47;31149:225;;31222:67;;-1:-1:-1;;;31222:67:0;;31271:4;31222:67;;;6899:34:1;31278:10:0;6949:18:1;;;6942:43;30410:42:0;;31222:40;;6834:18:1;;31222:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31217:146;;31317:30;;-1:-1:-1;;;31317:30:0;;31336:10;31317:30;;;1679:51:1;1652:18;;31317:30:0;1533:203:1;31217:146:0;38319:47:::1;38342:4;38348:2;38352:7;38361:4;38319:22;:47::i;:::-;38124:250:::0;;;;:::o;37624:98::-;669:13;:11;:13::i;:::-;37693:14:::1;:21:::0;37624:98::o;38382:341::-;38539:8;;38504:13;;38539:8;;38535:181;;;38612:8;38622:26;38639:8;38622:16;:26::i;:::-;38595:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38564:86;;38382:341;;;:::o;38535:181::-;38690:14;38683:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38382:341;;;:::o;38535:181::-;38382:341;;;:::o;34333:27::-;;;;;;;:::i;35048:324::-;35189:10;35101:4;35175:25;;;:13;:25;;;;;;35150:22;;35101:4;;;;35150:50;;35175:25;35150:50;:::i;:::-;35138:62;;35227:4;35215:8;:16;35211:131;;35272:15;35283:4;35272:8;:15;:::i;:::-;35257:10;;35256:32;;;;:::i;:::-;35248:40;;35211:131;;;35329:1;35321:9;;35211:131;-1:-1:-1;35359:5:0;35048:324;-1:-1:-1;;35048:324:0:o;36944:97::-;36988:13;37021:12;37014:19;;;;;:::i;18883:164::-;-1:-1:-1;;;;;19004:25:0;;;18980:4;19004:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;18883:164::o;1058:201::-;669:13;:11;:13::i;:::-;-1:-1:-1;;;;;1147:22:0;::::1;1139:73;;;::::0;-1:-1:-1;;;1139:73:0;;14339:2:1;1139:73:0::1;::::0;::::1;14321:21:1::0;14378:2;14358:18;;;14351:30;14417:34;14397:18;;;14390:62;-1:-1:-1;;;14468:18:1;;;14461:36;14514:19;;1139:73:0::1;14137:402:1::0;1139:73:0::1;1223:28;1242:8;1223:18;:28::i;34654:257::-:0;669:13;:11;:13::i;:::-;34786:15:::1;;34774:8;34758:13;13081:12:::0;;13065:13;;:28;;12950:180;34758:13:::1;:24;;;;:::i;:::-;:43;;34736:117;;;::::0;-1:-1:-1;;;34736:117:0;;14746:2:1;34736:117:0::1;::::0;::::1;14728:21:1::0;14785:2;14765:18;;;14758:30;14824:26;14804:18;;;14797:54;14868:18;;34736:117:0::1;14544:348:1::0;34736:117:0::1;34874:29;34884:8;34894;34874:9;:29::i;37509:107::-:0;669:13;:11;:13::i;:::-;37584:17:::1;:24:::0;37509:107::o;37283:100::-;669:13;:11;:13::i;:::-;37353:10:::1;:22:::0;37283:100::o;19055:282::-;19120:4;19210:13;;19200:7;:23;19157:153;;;;-1:-1:-1;;19261:26:0;;;;:17;:26;;;;;;-1:-1:-1;;;19261:44:0;:49;;19055:282::o;20150:1651::-;20292:27;20322;20341:7;20322:18;:27::i;:::-;20292:57;;20407:4;-1:-1:-1;;;;;20366:45:0;20382:19;-1:-1:-1;;;;;20366:45:0;;20362:86;;20420:28;;-1:-1:-1;;;20420:28:0;;;;;;;;;;;20362:86;20462:27;19963:24;;;:15;:24;;;;;20098:26;;20571:68;20098:26;20613:4;29522:10;20619:19;-1:-1:-1;;;;;19610:32:0;;;19553:28;;19671:20;;19693:30;;19668:56;;19345:397;20571:68;20566:180;;20659:43;20676:4;29522:10;18883:164;:::i;20659:43::-;20654:92;;20711:35;;-1:-1:-1;;;20711:35:0;;;;;;;;;;;20654:92;-1:-1:-1;;;;;20763:16:0;;20759:52;;20788:23;;-1:-1:-1;;;20788:23:0;;;;;;;;;;;20759:52;20907:15;20904:85;;;20972:1;20951:19;20944:30;20904:85;-1:-1:-1;;;;;21041:24:0;;;;;;;:18;:24;;;;;;21039:26;;-1:-1:-1;;21039:26:0;;;21083:22;;;;;;;;;21081:24;;-1:-1:-1;21081:24:0;;;17620:11;17595:23;17591:41;17578:63;-1:-1:-1;;;17578:63:0;21123:26;;;;:17;:26;;;;;:175;;;;-1:-1:-1;;;21319:47:0;;:52;;21315:370;;21424:1;21414:11;;21392:19;21450:30;;;:17;:30;;;;;;:35;;21446:224;;21531:13;;21516:11;:28;21512:139;;21575:30;;;;:17;:30;;;;;:52;;;21512:139;21373:312;21315:370;21732:7;21728:2;-1:-1:-1;;;;;21713:27:0;21722:4;-1:-1:-1;;;;;21713:27:0;-1:-1:-1;;;;;;;;;;;21713:27:0;;;;;;;;;21751:42;20281:1520;;;20150:1651;;;:::o;805:132::-;756:7;783:6;-1:-1:-1;;;;;783:6:0;29522:10;869:23;861:68;;;;-1:-1:-1;;;861:68:0;;15099:2:1;861:68:0;;;15081:21:1;;;15118:18;;;15111:30;15177:34;15157:18;;;15150:62;15229:18;;861:68:0;14897:356:1;21809:193:0;21955:39;21972:4;21978:2;21982:7;21955:39;;;;;;;;;;;;:16;:39::i;26805:1679::-;26885:27;26915;26934:7;26915:18;:27::i;:::-;26885:57;-1:-1:-1;26885:57:0;26955:12;;27077:35;27104:7;19852:27;19963:24;;;:15;:24;;;;;20098:26;;19963:24;;19750:392;27077:35;27020:92;;;;27129:13;27125:244;;;27178:68;27203:15;27220:4;29522:10;27226:19;29435:105;27178:68;27173:184;;27270:43;27287:4;29522:10;18883:164;:::i;27270:43::-;27265:92;;27322:35;;-1:-1:-1;;;27322:35:0;;;;;;;;;;;27265:92;27472:15;27469:101;;;27553:1;27532:19;27525:30;27469:101;-1:-1:-1;;;;;27620:24:0;;;;;;:18;:24;;;;;:60;;27648:32;27620:60;;;17620:11;17595:23;17591:41;17578:63;-1:-1:-1;;;17578:63:0;27697:26;;;;:17;:26;;;;;:205;;;;-1:-1:-1;;;27923:47:0;;:52;;27919:370;;28028:1;28018:11;;27996:19;28054:30;;;:17;:30;;;;;;:35;;28050:224;;28135:13;;28120:11;:28;28116:139;;28179:30;;;;:17;:30;;;;;:52;;;28116:139;27977:312;27919:370;28317:35;;28344:7;;28340:1;;-1:-1:-1;;;;;28317:35:0;;;-1:-1:-1;;;;;;;;;;;28317:35:0;28340:1;;28317:35;-1:-1:-1;;28451:12:0;:14;;;;;;-1:-1:-1;;;;26805:1679:0:o;16194:633::-;16261:7;16296;16398:13;;16391:4;:20;16387:373;;;16436:14;16453:23;;;:17;:23;;;;;;;-1:-1:-1;;;16505:24:0;;:29;;16501:240;;16565:113;16572:6;16582:1;16572:11;16565:113;;-1:-1:-1;;;16643:6:0;16625:25;;;;:17;:25;;;;;;16565:113;;;16711:6;16194:633;-1:-1:-1;;;16194:633:0:o;16501:240::-;16413:347;16387:373;16788:31;;-1:-1:-1;;;16788:31:0;;;;;;;;;;;1267:191;1341:16;1360:6;;-1:-1:-1;;;;;1377:17:0;;;-1:-1:-1;;;;;;1377:17:0;;;;;;1410:40;;1360:6;;;;;;;1410:40;;1341:16;1410:40;1330:128;1267:191;:::o;26588:112::-;26665:27;26675:2;26679:8;26665:27;;;;;;;;;;;;:9;:27::i;22010:407::-;22185:31;22198:4;22204:2;22208:7;22185:12;:31::i;:::-;-1:-1:-1;;;;;22231:14:0;;;:19;22227:183;;22270:56;22301:4;22307:2;22311:7;22320:5;22270:30;:56::i;:::-;22265:145;;22354:40;;-1:-1:-1;;;22354:40:0;;;;;;;;;;;2094:534;2150:13;2182:5;2191:1;2182:10;2178:53;;-1:-1:-1;;2209:10:0;;;;;;;;;;;;-1:-1:-1;;;2209:10:0;;;;;2094:534::o;2178:53::-;2256:5;2241:12;2297:78;2304:9;;2297:78;;2330:8;;;;:::i;:::-;;-1:-1:-1;2353:10:0;;-1:-1:-1;2361:2:0;2353:10;;:::i;:::-;;;2297:78;;;2385:19;2417:6;2407:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2407:17:0;;2385:39;;2435:154;2442:10;;2435:154;;2469:11;2479:1;2469:11;;:::i;:::-;;-1:-1:-1;2538:10:0;2546:2;2538:5;:10;:::i;:::-;2525:24;;:2;:24;:::i;:::-;2512:39;;2495:6;2502;2495:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;2495:56:0;;;;;;;;-1:-1:-1;2566:11:0;2575:2;2566:11;;:::i;:::-;;;2435:154;;;2613:6;2094:534;-1:-1:-1;;;;2094:534:0:o;25891:689::-;26022:19;26028:2;26032:8;26022:5;:19::i;:::-;-1:-1:-1;;;;;26083:14:0;;;:19;26079:483;;26137:13;;26185:14;;;26218:233;26249:62;26288:1;26292:2;26296:7;;;;;;26305:5;26249:30;:62::i;:::-;26244:167;;26347:40;;-1:-1:-1;;;26347:40:0;;;;;;;;;;;26244:167;26446:3;26438:5;:11;26218:233;;26533:3;26516:13;;:20;26512:34;;26538:8;;;26512:34;26104:458;;25891:689;;;:::o;22758:716::-;22942:88;;-1:-1:-1;;;22942:88:0;;22921:4;;-1:-1:-1;;;;;22942:45:0;;;;;:88;;29522:10;;23009:4;;23015:7;;23024:5;;22942:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22942:88:0;;;;;;;;-1:-1:-1;;22942:88:0;;;;;;;;;;;;:::i;:::-;;;22938:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23225:6;:13;23242:1;23225:18;23221:235;;23271:40;;-1:-1:-1;;;23271:40:0;;;;;;;;;;;23221:235;23414:6;23408:13;23399:6;23395:2;23391:15;23384:38;22938:529;-1:-1:-1;;;;;;23101:64:0;-1:-1:-1;;;23101:64:0;;-1:-1:-1;22758:716:0;;;;;;:::o;23482:1442::-;23578:13;;23555:20;23606:13;;;23602:44;;23628:18;;-1:-1:-1;;;23628:18:0;;;;;;;;;;;23602:44;-1:-1:-1;;;;;23760:22:0;;;;;;:18;:22;;;;11294:2;23760:22;;;:71;;23798:32;23786:45;;23760:71;;;23848:31;;;:17;:31;;;;;-1:-1:-1;17957:15:0;;17931:24;17927:46;17620:11;17595:23;17591:41;17588:52;17578:63;;23848:173;;24083:23;;;;23848:31;;23760:22;;-1:-1:-1;;;;;;;;;;;23760:22:0;;24210:215;24505:1;24491:12;24487:20;24445:279;24546:3;24537:7;24534:16;24445:279;;24697:7;24687:8;24684:1;-1:-1:-1;;;;;;;;;;;24654:1:0;24651;24646:59;24599:1;24586:15;24445:279;;;24449:77;24757:8;24769:1;24757:13;24753:45;;24779:19;;-1:-1:-1;;;24779:19:0;;;;;;;;;;;24753:45;24815:13;:19;-1:-1:-1;37730:185:0;;;:::o;206:131:1:-;-1:-1:-1;;;;;;280:32:1;;270:43;;260:71;;327:1;324;317:12;342:245;400:6;453:2;441:9;432:7;428:23;424:32;421:52;;;469:1;466;459:12;421:52;508:9;495:23;527:30;551:5;527:30;:::i;592:250::-;677:1;687:113;701:6;698:1;695:13;687:113;;;777:11;;;771:18;758:11;;;751:39;723:2;716:10;687:113;;;-1:-1:-1;;834:1:1;816:16;;809:27;592:250::o;847:271::-;889:3;927:5;921:12;954:6;949:3;942:19;970:76;1039:6;1032:4;1027:3;1023:14;1016:4;1009:5;1005:16;970:76;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:1;1066:39;;;;1107:4;1062:50;;847:271;-1:-1:-1;;847:271:1:o;1123:220::-;1272:2;1261:9;1254:21;1235:4;1292:45;1333:2;1322:9;1318:18;1310:6;1292:45;:::i;1348:180::-;1407:6;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;-1:-1:-1;1499:23:1;;1348:180;-1:-1:-1;1348:180:1:o;1741:173::-;1809:20;;-1:-1:-1;;;;;1858:31:1;;1848:42;;1838:70;;1904:1;1901;1894:12;1919:254;1987:6;1995;2048:2;2036:9;2027:7;2023:23;2019:32;2016:52;;;2064:1;2061;2054:12;2016:52;2087:29;2106:9;2087:29;:::i;:::-;2077:39;2163:2;2148:18;;;;2135:32;;-1:-1:-1;;;1919:254:1:o;2360:186::-;2419:6;2472:2;2460:9;2451:7;2447:23;2443:32;2440:52;;;2488:1;2485;2478:12;2440:52;2511:29;2530:9;2511:29;:::i;2551:328::-;2628:6;2636;2644;2697:2;2685:9;2676:7;2672:23;2668:32;2665:52;;;2713:1;2710;2703:12;2665:52;2736:29;2755:9;2736:29;:::i;:::-;2726:39;;2784:38;2818:2;2807:9;2803:18;2784:38;:::i;:::-;2774:48;;2869:2;2858:9;2854:18;2841:32;2831:42;;2551:328;;;;;:::o;2884:127::-;2945:10;2940:3;2936:20;2933:1;2926:31;2976:4;2973:1;2966:15;3000:4;2997:1;2990:15;3016:632;3081:5;3111:18;3152:2;3144:6;3141:14;3138:40;;;3158:18;;:::i;:::-;3233:2;3227:9;3201:2;3287:15;;-1:-1:-1;;3283:24:1;;;3309:2;3279:33;3275:42;3263:55;;;3333:18;;;3353:22;;;3330:46;3327:72;;;3379:18;;:::i;:::-;3419:10;3415:2;3408:22;3448:6;3439:15;;3478:6;3470;3463:22;3518:3;3509:6;3504:3;3500:16;3497:25;3494:45;;;3535:1;3532;3525:12;3494:45;3585:6;3580:3;3573:4;3565:6;3561:17;3548:44;3640:1;3633:4;3624:6;3616;3612:19;3608:30;3601:41;;;;3016:632;;;;;:::o;3653:222::-;3696:5;3749:3;3742:4;3734:6;3730:17;3726:27;3716:55;;3767:1;3764;3757:12;3716:55;3789:80;3865:3;3856:6;3843:20;3836:4;3828:6;3824:17;3789:80;:::i;3880:322::-;3949:6;4002:2;3990:9;3981:7;3977:23;3973:32;3970:52;;;4018:1;4015;4008:12;3970:52;4058:9;4045:23;4091:18;4083:6;4080:30;4077:50;;;4123:1;4120;4113:12;4077:50;4146;4188:7;4179:6;4168:9;4164:22;4146:50;:::i;4207:118::-;4293:5;4286:13;4279:21;4272:5;4269:32;4259:60;;4315:1;4312;4305:12;4330:451;4405:6;4413;4466:2;4454:9;4445:7;4441:23;4437:32;4434:52;;;4482:1;4479;4472:12;4434:52;4521:9;4508:23;4540:28;4562:5;4540:28;:::i;:::-;4587:5;-1:-1:-1;4643:2:1;4628:18;;4615:32;4670:18;4659:30;;4656:50;;;4702:1;4699;4692:12;4656:50;4725;4767:7;4758:6;4747:9;4743:22;4725:50;:::i;:::-;4715:60;;;4330:451;;;;;:::o;4786:315::-;4851:6;4859;4912:2;4900:9;4891:7;4887:23;4883:32;4880:52;;;4928:1;4925;4918:12;4880:52;4951:29;4970:9;4951:29;:::i;:::-;4941:39;;5030:2;5019:9;5015:18;5002:32;5043:28;5065:5;5043:28;:::i;:::-;5090:5;5080:15;;;4786:315;;;;;:::o;5106:667::-;5201:6;5209;5217;5225;5278:3;5266:9;5257:7;5253:23;5249:33;5246:53;;;5295:1;5292;5285:12;5246:53;5318:29;5337:9;5318:29;:::i;:::-;5308:39;;5366:38;5400:2;5389:9;5385:18;5366:38;:::i;:::-;5356:48;;5451:2;5440:9;5436:18;5423:32;5413:42;;5506:2;5495:9;5491:18;5478:32;5533:18;5525:6;5522:30;5519:50;;;5565:1;5562;5555:12;5519:50;5588:22;;5641:4;5633:13;;5629:27;-1:-1:-1;5619:55:1;;5670:1;5667;5660:12;5619:55;5693:74;5759:7;5754:2;5741:16;5736:2;5732;5728:11;5693:74;:::i;:::-;5683:84;;;5106:667;;;;;;;:::o;5778:260::-;5846:6;5854;5907:2;5895:9;5886:7;5882:23;5878:32;5875:52;;;5923:1;5920;5913:12;5875:52;5946:29;5965:9;5946:29;:::i;:::-;5936:39;;5994:38;6028:2;6017:9;6013:18;5994:38;:::i;:::-;5984:48;;5778:260;;;;;:::o;6043:254::-;6111:6;6119;6172:2;6160:9;6151:7;6147:23;6143:32;6140:52;;;6188:1;6185;6178:12;6140:52;6224:9;6211:23;6201:33;;6253:38;6287:2;6276:9;6272:18;6253:38;:::i;6302:380::-;6381:1;6377:12;;;;6424;;;6445:61;;6499:4;6491:6;6487:17;6477:27;;6445:61;6552:2;6544:6;6541:14;6521:18;6518:38;6515:161;;6598:10;6593:3;6589:20;6586:1;6579:31;6633:4;6630:1;6623:15;6661:4;6658:1;6651:15;6515:161;;6302:380;;;:::o;6996:245::-;7063:6;7116:2;7104:9;7095:7;7091:23;7087:32;7084:52;;;7132:1;7129;7122:12;7084:52;7164:9;7158:16;7183:28;7205:5;7183:28;:::i;8287:545::-;8389:2;8384:3;8381:11;8378:448;;;8425:1;8450:5;8446:2;8439:17;8495:4;8491:2;8481:19;8565:2;8553:10;8549:19;8546:1;8542:27;8536:4;8532:38;8601:4;8589:10;8586:20;8583:47;;;-1:-1:-1;8624:4:1;8583:47;8679:2;8674:3;8670:12;8667:1;8663:20;8657:4;8653:31;8643:41;;8734:82;8752:2;8745:5;8742:13;8734:82;;;8797:17;;;8778:1;8767:13;8734:82;;9008:1352;9134:3;9128:10;9161:18;9153:6;9150:30;9147:56;;;9183:18;;:::i;:::-;9212:97;9302:6;9262:38;9294:4;9288:11;9262:38;:::i;:::-;9256:4;9212:97;:::i;:::-;9364:4;;9428:2;9417:14;;9445:1;9440:663;;;;10147:1;10164:6;10161:89;;;-1:-1:-1;10216:19:1;;;10210:26;10161:89;-1:-1:-1;;8965:1:1;8961:11;;;8957:24;8953:29;8943:40;8989:1;8985:11;;;8940:57;10263:81;;9410:944;;9440:663;8234:1;8227:14;;;8271:4;8258:18;;-1:-1:-1;;9476:20:1;;;9594:236;9608:7;9605:1;9602:14;9594:236;;;9697:19;;;9691:26;9676:42;;9789:27;;;;9757:1;9745:14;;;;9624:19;;9594:236;;;9598:3;9858:6;9849:7;9846:19;9843:201;;;9919:19;;;9913:26;-1:-1:-1;;10002:1:1;9998:14;;;10014:3;9994:24;9990:37;9986:42;9971:58;9956:74;;9843:201;-1:-1:-1;;;;;10090:1:1;10074:14;;;10070:22;10057:36;;-1:-1:-1;9008:1352:1:o;10724:127::-;10785:10;10780:3;10776:20;10773:1;10766:31;10816:4;10813:1;10806:15;10840:4;10837:1;10830:15;10856:128;10923:9;;;10944:11;;;10941:37;;;10958:18;;:::i;10989:168::-;11062:9;;;11093;;11110:15;;;11104:22;;11090:37;11080:71;;11131:18;;:::i;11162:125::-;11227:9;;;11248:10;;;11245:36;;;11261:18;;:::i;13112:1020::-;13288:3;13317:1;13350:6;13344:13;13380:36;13406:9;13380:36;:::i;:::-;13435:1;13452:18;;;13479:133;;;;13626:1;13621:356;;;;13445:532;;13479:133;-1:-1:-1;;13512:24:1;;13500:37;;13585:14;;13578:22;13566:35;;13557:45;;;-1:-1:-1;13479:133:1;;13621:356;13652:6;13649:1;13642:17;13682:4;13727:2;13724:1;13714:16;13752:1;13766:165;13780:6;13777:1;13774:13;13766:165;;;13858:14;;13845:11;;;13838:35;13901:16;;;;13795:10;;13766:165;;;13770:3;;;13960:6;13955:3;13951:16;13944:23;;13445:532;;;;;14008:6;14002:13;14024:68;14083:8;14078:3;14071:4;14063:6;14059:17;14024:68;:::i;:::-;14108:18;;13112:1020;-1:-1:-1;;;;13112:1020:1:o;15258:135::-;15297:3;15318:17;;;15315:43;;15338:18;;:::i;:::-;-1:-1:-1;15385:1:1;15374:13;;15258:135::o;15398:127::-;15459:10;15454:3;15450:20;15447:1;15440:31;15490:4;15487:1;15480:15;15514:4;15511:1;15504:15;15530:120;15570:1;15596;15586:35;;15601:18;;:::i;:::-;-1:-1:-1;15635:9:1;;15530:120::o;15655:112::-;15687:1;15713;15703:35;;15718:18;;:::i;:::-;-1:-1:-1;15752:9:1;;15655:112::o;15772:127::-;15833:10;15828:3;15824:20;15821:1;15814:31;15864:4;15861:1;15854:15;15888:4;15885:1;15878:15;15904:489;-1:-1:-1;;;;;16173:15:1;;;16155:34;;16225:15;;16220:2;16205:18;;16198:43;16272:2;16257:18;;16250:34;;;16320:3;16315:2;16300:18;;16293:31;;;16098:4;;16341:46;;16367:19;;16359:6;16341:46;:::i;:::-;16333:54;15904:489;-1:-1:-1;;;;;;15904:489:1:o;16398:249::-;16467:6;16520:2;16508:9;16499:7;16495:23;16491:32;16488:52;;;16536:1;16533;16526:12;16488:52;16568:9;16562:16;16587:30;16611:5;16587:30;:::i
Swarm Source
ipfs://2088027e46d5b17f56ba6ca9f0670a1aadab36bd485809b1acbc852dcd80cb0a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.