Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
500 DSR
Holders
386
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 DSRLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Disruptions
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.7; import './ERC721A.sol'; import './Ownable.sol'; import './ReentrancyGuard.sol'; import './Strings.sol'; contract Disruptions is ERC721A, Ownable, ReentrancyGuard { // ===== Variables ===== string public baseTokenURI; uint256 public mintPrice = 0.0 ether; uint256 public collectionSize = 500; uint256 public maxItemsPerTx = 1; uint256 public maxPublicMint = 1; bool public publicSale; address[] private disruptAddresses; mapping(address => uint256) public walletMints; mapping(address => uint256) public totalDisruptions; mapping(address => bool) userAddr; // ===== Constructor ===== constructor() ERC721A("Disruptions", "DSR") {} // ===== Modifier ===== function isOwner() internal view returns(bool) { return owner() == msg.sender; } // ===== Mint ===== function mint(uint256 _mintAmount) public payable nonReentrant { uint256 s = totalSupply(); require(publicSale, "Public Minting is on Pause"); require(_mintAmount > 0, "Cant mint 0"); require(s + _mintAmount <= collectionSize, "Minting supply exceeded"); require((walletMints[msg.sender] + _mintAmount) <= maxPublicMint, "Cannot mint beyond max mint!"); _safeMint(msg.sender, _mintAmount); walletMints[msg.sender] += _mintAmount; } // ===== Setter (owner only) ===== function setMintPrice(uint256 _mintPrice) external onlyOwner { mintPrice = _mintPrice; } function setMaxItemsPerTx(uint256 _maxItemsPerTx) external onlyOwner { maxItemsPerTx = _maxItemsPerTx; } function setMaxPublicMint(uint256 _maxPublicMint) external onlyOwner { maxPublicMint = _maxPublicMint; } function setBaseTokenURI(string memory _baseTokenURI) external onlyOwner { baseTokenURI = _baseTokenURI; } function togglePublicSale() external onlyOwner{ publicSale = !publicSale; } function setDisruptlist(address[] calldata _addressArray) public onlyOwner { delete disruptAddresses; disruptAddresses = _addressArray; } function disrupt() external nonReentrant { uint256 disruptions = 20; require(totalDisruptions[msg.sender] + disruptions <= disruptions, "Already disrupted!"); require(allowedToDisrupt(msg.sender), "You can't disrupt!"); _safeMint(msg.sender, disruptions); totalDisruptions[msg.sender] += disruptions; } function allowedToDisrupt(address _user) private view returns (bool) { uint i = 0; while (i < disruptAddresses.length) { if(disruptAddresses[i] == _user) { return true; } i++; } return false; } // ===== Withdraw to owner ===== function withdraw() public payable onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } // ===== View ===== function tokenURI(uint256 tokenId) public view override(ERC721A) returns (string memory) { return string(abi.encodePacked(baseTokenURI, Strings.toString(tokenId), ".json")); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // ERC721A Contracts v4.0.0 // Creator: Chiru Labs pragma solidity ^0.8.4; import './IERC721A.sol'; /** * @dev ERC721 token receiver interface. */ interface ERC721A__IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is IERC721A { // Mask of an entry in packed address data. uint256 private constant BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1; // The bit position of `numberMinted` in packed address data. uint256 private constant BITPOS_NUMBER_MINTED = 64; // The bit position of `numberBurned` in packed address data. uint256 private constant BITPOS_NUMBER_BURNED = 128; // The bit position of `aux` in packed address data. uint256 private constant BITPOS_AUX = 192; // Mask of all 256 bits in packed address data except the 64 bits for `aux`. uint256 private constant BITMASK_AUX_COMPLEMENT = (1 << 192) - 1; // The bit position of `startTimestamp` in packed ownership. uint256 private constant BITPOS_START_TIMESTAMP = 160; // The bit mask of the `burned` bit in packed ownership. uint256 private constant BITMASK_BURNED = 1 << 224; // The bit position of the `nextInitialized` bit in packed ownership. uint256 private constant BITPOS_NEXT_INITIALIZED = 225; // The bit mask of the `nextInitialized` bit in packed ownership. uint256 private constant BITMASK_NEXT_INITIALIZED = 1 << 225; // The tokenId of the next token to be minted. uint256 private _currentIndex; // The number of tokens burned. uint256 private _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. // See `_packedOwnershipOf` implementation for details. // // Bits Layout: // - [0..159] `addr` // - [160..223] `startTimestamp` // - [224] `burned` // - [225] `nextInitialized` mapping(uint256 => uint256) private _packedOwnerships; // Mapping owner address to address data. // // Bits Layout: // - [0..63] `balance` // - [64..127] `numberMinted` // - [128..191] `numberBurned` // - [192..255] `aux` mapping(address => uint256) private _packedAddressData; // Mapping from token ID to approved address. mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * @dev Returns the starting token ID. * To change the starting token ID, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Returns the next token ID to be minted. */ function _nextTokenId() internal view returns (uint256) { return _currentIndex; } /** * @dev Returns the total number of tokens in existence. * Burned tokens will reduce the count. * To get the total number of tokens minted, please see `_totalMinted`. */ function totalSupply() public view override returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than `_currentIndex - _startTokenId()` times. unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * @dev Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to `_startTokenId()` unchecked { return _currentIndex - _startTokenId(); } } /** * @dev Returns the total number of tokens burned. */ function _totalBurned() internal view returns (uint256) { return _burnCounter; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { // The interface IDs are constants representing the first 4 bytes of the XOR of // all function selectors in the interface. See: https://eips.ethereum.org/EIPS/eip-165 // e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)` return interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165. interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721. interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata. } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (_addressToUint256(owner) == 0) revert BalanceQueryForZeroAddress(); return _packedAddressData[owner] & BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> BITPOS_NUMBER_MINTED) & BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> BITPOS_NUMBER_BURNED) & BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the auxiliary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return uint64(_packedAddressData[owner] >> BITPOS_AUX); } /** * Sets the auxiliary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { uint256 packed = _packedAddressData[owner]; uint256 auxCasted; assembly { // Cast aux without masking. auxCasted := aux } packed = (packed & BITMASK_AUX_COMPLEMENT) | (auxCasted << BITPOS_AUX); _packedAddressData[owner] = packed; } /** * Returns the packed ownership data of `tokenId`. */ function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr) if (curr < _currentIndex) { uint256 packed = _packedOwnerships[curr]; // If not burned. if (packed & BITMASK_BURNED == 0) { // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. // // We can directly compare the packed value. // If the address is zero, packed is zero. while (packed == 0) { packed = _packedOwnerships[--curr]; } return packed; } } } revert OwnerQueryForNonexistentToken(); } /** * Returns the unpacked `TokenOwnership` struct from `packed`. */ 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; } /** * Returns the unpacked `TokenOwnership` struct at `index`. */ function _ownershipAt(uint256 index) internal view returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnerships[index]); } /** * @dev Initializes the ownership slot minted at `index` for efficiency purposes. */ function _initializeOwnershipAt(uint256 index) internal { if (_packedOwnerships[index] == 0) { _packedOwnerships[index] = _packedOwnershipOf(index); } } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnershipOf(tokenId)); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return address(uint160(_packedOwnershipOf(tokenId))); } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev Casts the address to uint256 without masking. */ function _addressToUint256(address value) private pure returns (uint256 result) { assembly { result := value } } /** * @dev Casts the boolean to uint256 without branching. */ function _boolToUint256(bool value) private pure returns (uint256 result) { assembly { result := value } } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = address(uint160(_packedOwnershipOf(tokenId))); if (_msgSenderERC721A() != owner) if (!isApprovedForAll(owner, _msgSenderERC721A())) { revert ApprovalCallerNotOwnerNorApproved(); } _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSenderERC721A()) revert ApproveToCaller(); _operatorApprovals[_msgSenderERC721A()][operator] = approved; emit ApprovalForAll(_msgSenderERC721A(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (to.code.length != 0) if (!_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && // If within bounds, _packedOwnerships[tokenId] & BITMASK_BURNED == 0; // and not burned. } /** * @dev Equivalent to `_safeMint(to, quantity, '')`. */ function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement * {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event for each mint. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _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(); } } } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event for each mint. */ function _mint(address to, uint256 quantity) internal { uint256 startTokenId = _currentIndex; if (_addressToUint256(to) == 0) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the balance and number minted. _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1); // Updates: // - `address` to the owner. // - `startTimestamp` to the timestamp of minting. // - `burned` to `false`. // - `nextInitialized` to `quantity == 1`. _packedOwnerships[startTokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED); uint256 offset; do { emit Transfer(address(0), to, startTokenId + offset++); } while (offset < quantity); _currentIndex = startTokenId + quantity; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner(); address approvedAddress = _tokenApprovals[tokenId]; bool isApprovedOrOwner = (_msgSenderERC721A() == from || isApprovedForAll(from, _msgSenderERC721A()) || approvedAddress == _msgSenderERC721A()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (_addressToUint256(to) == 0) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner. if (_addressToUint256(approvedAddress) != 0) { delete _tokenApprovals[tokenId]; } // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { // We can directly increment and decrement the balances. --_packedAddressData[from]; // Updates: `balance -= 1`. ++_packedAddressData[to]; // Updates: `balance += 1`. // Updates: // - `address` to the next owner. // - `startTimestamp` to the timestamp of transfering. // - `burned` to `false`. // - `nextInitialized` to `true`. _packedOwnerships[tokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | BITMASK_NEXT_INITIALIZED; // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Equivalent to `_burn(tokenId, false)`. */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); address from = address(uint160(prevOwnershipPacked)); address approvedAddress = _tokenApprovals[tokenId]; if (approvalCheck) { bool isApprovedOrOwner = (_msgSenderERC721A() == from || isApprovedForAll(from, _msgSenderERC721A()) || approvedAddress == _msgSenderERC721A()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner. if (_addressToUint256(approvedAddress) != 0) { delete _tokenApprovals[tokenId]; } // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { // Updates: // - `balance -= 1`. // - `numberBurned += 1`. // // We can directly decrement the balance, and increment the number burned. // This is equivalent to `packed -= 1; packed += 1 << BITPOS_NUMBER_BURNED;`. _packedAddressData[from] += (1 << BITPOS_NUMBER_BURNED) - 1; // Updates: // - `address` to the last owner. // - `startTimestamp` to the timestamp of burning. // - `burned` to `true`. // - `nextInitialized` to `true`. _packedOwnerships[tokenId] = _addressToUint256(from) | (block.timestamp << BITPOS_START_TIMESTAMP) | BITMASK_BURNED | BITMASK_NEXT_INITIALIZED; // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _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)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Returns the message sender (defaults to `msg.sender`). * * If you are writing GSN compatible contracts, you need to override this function. */ function _msgSenderERC721A() internal view virtual returns (address) { return msg.sender; } /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function _toString(uint256 value) internal pure returns (string memory ptr) { assembly { // The maximum value of a uint256 contains 78 digits (1 byte per digit), // but we allocate 128 bytes to keep the free memory pointer 32-byte word aliged. // We will need 1 32-byte word to store the length, // and 3 32-byte words to store a maximum of 78 digits. Total: 32 + 3 * 32 = 128. ptr := add(mload(0x40), 128) // Update the free memory pointer to allocate. mstore(0x40, ptr) // Cache the end of the memory to calculate the length later. let end := ptr // We write the string from the rightmost digit to the leftmost digit. // The following is essentially a do-while loop that also handles the zero case. // Costs a bit more than early returning for the zero case, // but cheaper in terms of deployment and overall runtime costs. for { // Initialize and perform the first pass without check. let temp := value // Move the pointer 1 byte leftwards to point to an empty character slot. ptr := sub(ptr, 1) // Write the character to the pointer. 48 is the ASCII index of '0'. mstore8(ptr, add(48, mod(temp, 10))) temp := div(temp, 10) } temp { // Keep dividing `temp` until zero. temp := div(temp, 10) } { // Body of the for loop. ptr := sub(ptr, 1) mstore8(ptr, add(48, mod(temp, 10))) } let length := sub(end, ptr) // Move the pointer 32 bytes leftwards to make room for the length. ptr := sub(ptr, 32) // Store the length. mstore(ptr, length) } } }
// SPDX-License-Identifier: MIT // ERC721A Contracts v4.0.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of an ERC721A compliant contract. */ interface IERC721A { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * The caller cannot approve to their own address. */ error ApproveToCaller(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } /** * @dev Returns the total amount of tokens stored by the contract. * * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens. */ function totalSupply() external view returns (uint256); // ============================== // IERC165 // ============================== /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); // ============================== // IERC721 // ============================== /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); // ============================== // IERC721Metadata // ============================== /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } }
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":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","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":"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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectionSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disrupt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxItemsPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPublicMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseTokenURI","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addressArray","type":"address[]"}],"name":"setDisruptlist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxItemsPerTx","type":"uint256"}],"name":"setMaxItemsPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPublicMint","type":"uint256"}],"name":"setMaxPublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalDisruptions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"walletMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526000600b556101f4600c556001600d556001600e553480156200002657600080fd5b506040518060400160405280600b81526020017f44697372757074696f6e730000000000000000000000000000000000000000008152506040518060400160405280600381526020017f44535200000000000000000000000000000000000000000000000000000000008152508160029080519060200190620000ab929190620001de565b508060039080519060200190620000c4929190620001de565b50620000d56200010b60201b60201c565b6000819055505050620000fd620000f16200011060201b60201c565b6200011860201b60201c565b6001600981905550620002f3565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001ec906200028e565b90600052602060002090601f0160209004810192826200021057600085556200025c565b82601f106200022b57805160ff19168380011785556200025c565b828001600101855582156200025c579182015b828111156200025b5782518255916020019190600101906200023e565b5b5090506200026b91906200026f565b5090565b5b808211156200028a57600081600090555060010162000270565b5090565b60006002820490506001821680620002a757607f821691505b60208210811415620002be57620002bd620002c4565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61334b80620003036000396000f3fe6080604052600436106101f95760003560e01c806370a082311161010d578063b88d4fde116100a0578063e222c7f91161006f578063e222c7f9146106df578063e985e9c5146106f6578063f0293fd314610733578063f2fde38b14610770578063f4a0a52814610799576101f9565b8063b88d4fde14610623578063c87b56dd1461064c578063cabadaa014610689578063d547cfb7146106b4576101f9565b806395d89b41116100dc57806395d89b411461059c57806398772e80146105c7578063a0712d68146105de578063a22cb465146105fa576101f9565b806370a08231146104f4578063715018a6146105315780637a4e5715146105485780638da5cb5b14610571576101f9565b806330666a4d1161019057806345c0f5331161015f57806345c0f533146103fb578063620e3173146104265780636215fbab1461044f5780636352211e1461048c5780636817c76c146104c9576101f9565b806330666a4d1461037257806333bc1c5c1461039d5780633ccfd60b146103c857806342842e0e146103d2576101f9565b806318160ddd116101cc57806318160ddd146102cc57806323b872dd146102f7578063270ab52c1461032057806330176e1314610349576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b50610225600480360381019061022091906126e1565b6107c2565b6040516102329190612b2c565b60405180910390f35b34801561024757600080fd5b50610250610854565b60405161025d9190612b47565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190612784565b6108e6565b60405161029a9190612ac5565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c59190612654565b610962565b005b3480156102d857600080fd5b506102e1610aa3565b6040516102ee9190612c89565b60405180910390f35b34801561030357600080fd5b5061031e6004803603810190610319919061253e565b610aba565b005b34801561032c57600080fd5b5061034760048036038101906103429190612784565b610aca565b005b34801561035557600080fd5b50610370600480360381019061036b919061273b565b610adc565b005b34801561037e57600080fd5b50610387610afe565b6040516103949190612c89565b60405180910390f35b3480156103a957600080fd5b506103b2610b04565b6040516103bf9190612b2c565b60405180910390f35b6103d0610b17565b005b3480156103de57600080fd5b506103f960048036038101906103f4919061253e565b610b9f565b005b34801561040757600080fd5b50610410610bbf565b60405161041d9190612c89565b60405180910390f35b34801561043257600080fd5b5061044d60048036038101906104489190612694565b610bc5565b005b34801561045b57600080fd5b50610476600480360381019061047191906124d1565b610bf1565b6040516104839190612c89565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae9190612784565b610c09565b6040516104c09190612ac5565b60405180910390f35b3480156104d557600080fd5b506104de610c1b565b6040516104eb9190612c89565b60405180910390f35b34801561050057600080fd5b5061051b600480360381019061051691906124d1565b610c21565b6040516105289190612c89565b60405180910390f35b34801561053d57600080fd5b50610546610cb6565b005b34801561055457600080fd5b5061056f600480360381019061056a9190612784565b610cca565b005b34801561057d57600080fd5b50610586610cdc565b6040516105939190612ac5565b60405180910390f35b3480156105a857600080fd5b506105b1610d06565b6040516105be9190612b47565b60405180910390f35b3480156105d357600080fd5b506105dc610d98565b005b6105f860048036038101906105f39190612784565b610f2c565b005b34801561060657600080fd5b50610621600480360381019061061c9190612614565b611163565b005b34801561062f57600080fd5b5061064a60048036038101906106459190612591565b6112db565b005b34801561065857600080fd5b50610673600480360381019061066e9190612784565b61134e565b6040516106809190612b47565b60405180910390f35b34801561069557600080fd5b5061069e611382565b6040516106ab9190612c89565b60405180910390f35b3480156106c057600080fd5b506106c9611388565b6040516106d69190612b47565b60405180910390f35b3480156106eb57600080fd5b506106f4611416565b005b34801561070257600080fd5b5061071d600480360381019061071891906124fe565b61144a565b60405161072a9190612b2c565b60405180910390f35b34801561073f57600080fd5b5061075a600480360381019061075591906124d1565b6114de565b6040516107679190612c89565b60405180910390f35b34801561077c57600080fd5b50610797600480360381019061079291906124d1565b6114f6565b005b3480156107a557600080fd5b506107c060048036038101906107bb9190612784565b61157a565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061081d57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061084d5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461086390612eff565b80601f016020809104026020016040519081016040528092919081815260200182805461088f90612eff565b80156108dc5780601f106108b1576101008083540402835291602001916108dc565b820191906000526020600020905b8154815290600101906020018083116108bf57829003601f168201915b5050505050905090565b60006108f18261158c565b610927576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061096d826115eb565b90508073ffffffffffffffffffffffffffffffffffffffff1661098e6116b9565b73ffffffffffffffffffffffffffffffffffffffff16146109f1576109ba816109b56116b9565b61144a565b6109f0576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000610aad6116c1565b6001546000540303905090565b610ac58383836116c6565b505050565b610ad2611a8e565b80600e8190555050565b610ae4611a8e565b80600a9080519060200190610afa9291906121ce565b5050565b600d5481565b600f60009054906101000a900460ff1681565b610b1f611a8e565b6000610b29610cdc565b73ffffffffffffffffffffffffffffffffffffffff1647604051610b4c90612ab0565b60006040518083038185875af1925050503d8060008114610b89576040519150601f19603f3d011682016040523d82523d6000602084013e610b8e565b606091505b5050905080610b9c57600080fd5b50565b610bba838383604051806020016040528060008152506112db565b505050565b600c5481565b610bcd611a8e565b60106000610bdb9190612254565b818160109190610bec929190612275565b505050565b60126020528060005260406000206000915090505481565b6000610c14826115eb565b9050919050565b600b5481565b600080610c2d83611b0c565b1415610c65576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b610cbe611a8e565b610cc86000611b16565b565b610cd2611a8e565b80600d8190555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054610d1590612eff565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4190612eff565b8015610d8e5780601f10610d6357610100808354040283529160200191610d8e565b820191906000526020600020905b815481529060010190602001808311610d7157829003601f168201915b5050505050905090565b60026009541415610dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd590612c69565b60405180910390fd5b60026009819055506000601490508081601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e389190612d8e565b1115610e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7090612ba9565b60405180910390fd5b610e8233611bdc565b610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb890612b89565b60405180910390fd5b610ecb3382611c8b565b80601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f1a9190612d8e565b92505081905550506001600981905550565b60026009541415610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6990612c69565b60405180910390fd5b60026009819055506000610f84610aa3565b9050600f60009054906101000a900460ff16610fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcc90612be9565b60405180910390fd5b60008211611018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100f90612b69565b60405180910390fd5b600c5482826110279190612d8e565b1115611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f90612c49565b60405180910390fd5b600e5482601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110b69190612d8e565b11156110f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ee90612c09565b60405180910390fd5b6111013383611c8b565b81601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111509190612d8e565b9250508190555050600160098190555050565b61116b6116b9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111d0576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006111dd6116b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661128a6116b9565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112cf9190612b2c565b60405180910390a35050565b6112e68484846116c6565b60008373ffffffffffffffffffffffffffffffffffffffff163b146113485761131184848484611ca9565b611347576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060600a61135b83611e09565b60405160200161136c929190612a81565b6040516020818303038152906040529050919050565b600e5481565b600a805461139590612eff565b80601f01602080910402602001604051908101604052809291908181526020018280546113c190612eff565b801561140e5780601f106113e35761010080835404028352916020019161140e565b820191906000526020600020905b8154815290600101906020018083116113f157829003601f168201915b505050505081565b61141e611a8e565b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60116020528060005260406000206000915090505481565b6114fe611a8e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561156e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156590612bc9565b60405180910390fd5b61157781611b16565b50565b611582611a8e565b80600b8190555050565b6000816115976116c1565b111580156115a6575060005482105b80156115e4575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600080829050806115fa6116c1565b11611682576000548110156116815760006004600083815260200190815260200160002054905060007c01000000000000000000000000000000000000000000000000000000008216141561167f575b600081141561167557600460008360019003935083815260200190815260200160002054905061164a565b80925050506116b4565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b600090565b60006116d1826115eb565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611738576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008573ffffffffffffffffffffffffffffffffffffffff166117916116b9565b73ffffffffffffffffffffffffffffffffffffffff1614806117c057506117bf866117ba6116b9565b61144a565b5b806117fd57506117ce6116b9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b905080611836576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061184186611b0c565b1415611879576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118868686866001611f6a565b600061189183611b0c565b146118cd576006600085815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b61199487611b0c565b1717600460008681526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000084161415611a1e576000600185019050600060046000838152602001908152602001600020541415611a1c576000548114611a1b578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a868686866001611f70565b505050505050565b611a96611f76565b73ffffffffffffffffffffffffffffffffffffffff16611ab4610cdc565b73ffffffffffffffffffffffffffffffffffffffff1614611b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0190612c29565b60405180910390fd5b565b6000819050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600090505b601080549050811015611c80578273ffffffffffffffffffffffffffffffffffffffff1660108281548110611c1c57611c1b613069565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611c6d576001915050611c86565b8080611c7890612f62565b915050611be4565b60009150505b919050565b611ca5828260405180602001604052806000815250611f7e565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611ccf6116b9565b8786866040518563ffffffff1660e01b8152600401611cf19493929190612ae0565b602060405180830381600087803b158015611d0b57600080fd5b505af1925050508015611d3c57506040513d601f19601f82011682018060405250810190611d39919061270e565b60015b611db6573d8060008114611d6c576040519150601f19603f3d011682016040523d82523d6000602084013e611d71565b606091505b50600081511415611dae576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606000821415611e51576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611f65565b600082905060005b60008214611e83578080611e6c90612f62565b915050600a82611e7c9190612de4565b9150611e59565b60008167ffffffffffffffff811115611e9f57611e9e613098565b5b6040519080825280601f01601f191660200182016040528015611ed15781602001600182028036833780820191505090505b5090505b60008514611f5e57600182611eea9190612e15565b9150600a85611ef99190612fab565b6030611f059190612d8e565b60f81b818381518110611f1b57611f1a613069565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611f579190612de4565b9450611ed5565b8093505050505b919050565b50505050565b50505050565b600033905090565b611f88838361201b565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461201657600080549050600083820390505b611fc86000868380600101945086611ca9565b611ffe576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818110611fb557816000541461201357600080fd5b50505b505050565b600080549050600061202c84611b0c565b1415612064576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082141561209f576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120ac6000848385611f6a565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e1612111600184146121c4565b901b60a042901b61212185611b0c565b1717600460008381526020019081526020016000208190555060005b8080600101915082018473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a482811061213d57828201600081905550506121bf6000848385611f70565b505050565b6000819050919050565b8280546121da90612eff565b90600052602060002090601f0160209004810192826121fc5760008555612243565b82601f1061221557805160ff1916838001178555612243565b82800160010185558215612243579182015b82811115612242578251825591602001919060010190612227565b5b5090506122509190612315565b5090565b50805460008255906000526020600020908101906122729190612315565b50565b828054828255906000526020600020908101928215612304579160200282015b8281111561230357823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612295565b5b5090506123119190612315565b5090565b5b8082111561232e576000816000905550600101612316565b5090565b600061234561234084612cc9565b612ca4565b905082815260208101848484011115612361576123606130d6565b5b61236c848285612ebd565b509392505050565b600061238761238284612cfa565b612ca4565b9050828152602081018484840111156123a3576123a26130d6565b5b6123ae848285612ebd565b509392505050565b6000813590506123c5816132b9565b92915050565b60008083601f8401126123e1576123e06130cc565b5b8235905067ffffffffffffffff8111156123fe576123fd6130c7565b5b60208301915083602082028301111561241a576124196130d1565b5b9250929050565b600081359050612430816132d0565b92915050565b600081359050612445816132e7565b92915050565b60008151905061245a816132e7565b92915050565b600082601f830112612475576124746130cc565b5b8135612485848260208601612332565b91505092915050565b600082601f8301126124a3576124a26130cc565b5b81356124b3848260208601612374565b91505092915050565b6000813590506124cb816132fe565b92915050565b6000602082840312156124e7576124e66130e0565b5b60006124f5848285016123b6565b91505092915050565b60008060408385031215612515576125146130e0565b5b6000612523858286016123b6565b9250506020612534858286016123b6565b9150509250929050565b600080600060608486031215612557576125566130e0565b5b6000612565868287016123b6565b9350506020612576868287016123b6565b9250506040612587868287016124bc565b9150509250925092565b600080600080608085870312156125ab576125aa6130e0565b5b60006125b9878288016123b6565b94505060206125ca878288016123b6565b93505060406125db878288016124bc565b925050606085013567ffffffffffffffff8111156125fc576125fb6130db565b5b61260887828801612460565b91505092959194509250565b6000806040838503121561262b5761262a6130e0565b5b6000612639858286016123b6565b925050602061264a85828601612421565b9150509250929050565b6000806040838503121561266b5761266a6130e0565b5b6000612679858286016123b6565b925050602061268a858286016124bc565b9150509250929050565b600080602083850312156126ab576126aa6130e0565b5b600083013567ffffffffffffffff8111156126c9576126c86130db565b5b6126d5858286016123cb565b92509250509250929050565b6000602082840312156126f7576126f66130e0565b5b600061270584828501612436565b91505092915050565b600060208284031215612724576127236130e0565b5b60006127328482850161244b565b91505092915050565b600060208284031215612751576127506130e0565b5b600082013567ffffffffffffffff81111561276f5761276e6130db565b5b61277b8482850161248e565b91505092915050565b60006020828403121561279a576127996130e0565b5b60006127a8848285016124bc565b91505092915050565b6127ba81612e49565b82525050565b6127c981612e5b565b82525050565b60006127da82612d40565b6127e48185612d56565b93506127f4818560208601612ecc565b6127fd816130e5565b840191505092915050565b600061281382612d4b565b61281d8185612d72565b935061282d818560208601612ecc565b612836816130e5565b840191505092915050565b600061284c82612d4b565b6128568185612d83565b9350612866818560208601612ecc565b80840191505092915050565b6000815461287f81612eff565b6128898186612d83565b945060018216600081146128a457600181146128b5576128e8565b60ff198316865281860193506128e8565b6128be85612d2b565b60005b838110156128e0578154818901526001820191506020810190506128c1565b838801955050505b50505092915050565b60006128fe600b83612d72565b9150612909826130f6565b602082019050919050565b6000612921601283612d72565b915061292c8261311f565b602082019050919050565b6000612944601283612d72565b915061294f82613148565b602082019050919050565b6000612967602683612d72565b915061297282613171565b604082019050919050565b600061298a601a83612d72565b9150612995826131c0565b602082019050919050565b60006129ad601c83612d72565b91506129b8826131e9565b602082019050919050565b60006129d0600583612d83565b91506129db82613212565b600582019050919050565b60006129f3602083612d72565b91506129fe8261323b565b602082019050919050565b6000612a16600083612d67565b9150612a2182613264565b600082019050919050565b6000612a39601783612d72565b9150612a4482613267565b602082019050919050565b6000612a5c601f83612d72565b9150612a6782613290565b602082019050919050565b612a7b81612eb3565b82525050565b6000612a8d8285612872565b9150612a998284612841565b9150612aa4826129c3565b91508190509392505050565b6000612abb82612a09565b9150819050919050565b6000602082019050612ada60008301846127b1565b92915050565b6000608082019050612af560008301876127b1565b612b0260208301866127b1565b612b0f6040830185612a72565b8181036060830152612b2181846127cf565b905095945050505050565b6000602082019050612b4160008301846127c0565b92915050565b60006020820190508181036000830152612b618184612808565b905092915050565b60006020820190508181036000830152612b82816128f1565b9050919050565b60006020820190508181036000830152612ba281612914565b9050919050565b60006020820190508181036000830152612bc281612937565b9050919050565b60006020820190508181036000830152612be28161295a565b9050919050565b60006020820190508181036000830152612c028161297d565b9050919050565b60006020820190508181036000830152612c22816129a0565b9050919050565b60006020820190508181036000830152612c42816129e6565b9050919050565b60006020820190508181036000830152612c6281612a2c565b9050919050565b60006020820190508181036000830152612c8281612a4f565b9050919050565b6000602082019050612c9e6000830184612a72565b92915050565b6000612cae612cbf565b9050612cba8282612f31565b919050565b6000604051905090565b600067ffffffffffffffff821115612ce457612ce3613098565b5b612ced826130e5565b9050602081019050919050565b600067ffffffffffffffff821115612d1557612d14613098565b5b612d1e826130e5565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000612d9982612eb3565b9150612da483612eb3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612dd957612dd8612fdc565b5b828201905092915050565b6000612def82612eb3565b9150612dfa83612eb3565b925082612e0a57612e0961300b565b5b828204905092915050565b6000612e2082612eb3565b9150612e2b83612eb3565b925082821015612e3e57612e3d612fdc565b5b828203905092915050565b6000612e5482612e93565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612eea578082015181840152602081019050612ecf565b83811115612ef9576000848401525b50505050565b60006002820490506001821680612f1757607f821691505b60208210811415612f2b57612f2a61303a565b5b50919050565b612f3a826130e5565b810181811067ffffffffffffffff82111715612f5957612f58613098565b5b80604052505050565b6000612f6d82612eb3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612fa057612f9f612fdc565b5b600182019050919050565b6000612fb682612eb3565b9150612fc183612eb3565b925082612fd157612fd061300b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f43616e74206d696e742030000000000000000000000000000000000000000000600082015250565b7f596f752063616e27742064697372757074210000000000000000000000000000600082015250565b7f416c726561647920646973727570746564210000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5075626c6963204d696e74696e67206973206f6e205061757365000000000000600082015250565b7f43616e6e6f74206d696e74206265796f6e64206d6178206d696e742100000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f4d696e74696e6720737570706c79206578636565646564000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6132c281612e49565b81146132cd57600080fd5b50565b6132d981612e5b565b81146132e457600080fd5b50565b6132f081612e67565b81146132fb57600080fd5b50565b61330781612eb3565b811461331257600080fd5b5056fea26469706673582212209793f24801042318476db9510aaf88add980e06d3e6e9e676c020fc147577dc464736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101f95760003560e01c806370a082311161010d578063b88d4fde116100a0578063e222c7f91161006f578063e222c7f9146106df578063e985e9c5146106f6578063f0293fd314610733578063f2fde38b14610770578063f4a0a52814610799576101f9565b8063b88d4fde14610623578063c87b56dd1461064c578063cabadaa014610689578063d547cfb7146106b4576101f9565b806395d89b41116100dc57806395d89b411461059c57806398772e80146105c7578063a0712d68146105de578063a22cb465146105fa576101f9565b806370a08231146104f4578063715018a6146105315780637a4e5715146105485780638da5cb5b14610571576101f9565b806330666a4d1161019057806345c0f5331161015f57806345c0f533146103fb578063620e3173146104265780636215fbab1461044f5780636352211e1461048c5780636817c76c146104c9576101f9565b806330666a4d1461037257806333bc1c5c1461039d5780633ccfd60b146103c857806342842e0e146103d2576101f9565b806318160ddd116101cc57806318160ddd146102cc57806323b872dd146102f7578063270ab52c1461032057806330176e1314610349576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b50610225600480360381019061022091906126e1565b6107c2565b6040516102329190612b2c565b60405180910390f35b34801561024757600080fd5b50610250610854565b60405161025d9190612b47565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190612784565b6108e6565b60405161029a9190612ac5565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c59190612654565b610962565b005b3480156102d857600080fd5b506102e1610aa3565b6040516102ee9190612c89565b60405180910390f35b34801561030357600080fd5b5061031e6004803603810190610319919061253e565b610aba565b005b34801561032c57600080fd5b5061034760048036038101906103429190612784565b610aca565b005b34801561035557600080fd5b50610370600480360381019061036b919061273b565b610adc565b005b34801561037e57600080fd5b50610387610afe565b6040516103949190612c89565b60405180910390f35b3480156103a957600080fd5b506103b2610b04565b6040516103bf9190612b2c565b60405180910390f35b6103d0610b17565b005b3480156103de57600080fd5b506103f960048036038101906103f4919061253e565b610b9f565b005b34801561040757600080fd5b50610410610bbf565b60405161041d9190612c89565b60405180910390f35b34801561043257600080fd5b5061044d60048036038101906104489190612694565b610bc5565b005b34801561045b57600080fd5b50610476600480360381019061047191906124d1565b610bf1565b6040516104839190612c89565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae9190612784565b610c09565b6040516104c09190612ac5565b60405180910390f35b3480156104d557600080fd5b506104de610c1b565b6040516104eb9190612c89565b60405180910390f35b34801561050057600080fd5b5061051b600480360381019061051691906124d1565b610c21565b6040516105289190612c89565b60405180910390f35b34801561053d57600080fd5b50610546610cb6565b005b34801561055457600080fd5b5061056f600480360381019061056a9190612784565b610cca565b005b34801561057d57600080fd5b50610586610cdc565b6040516105939190612ac5565b60405180910390f35b3480156105a857600080fd5b506105b1610d06565b6040516105be9190612b47565b60405180910390f35b3480156105d357600080fd5b506105dc610d98565b005b6105f860048036038101906105f39190612784565b610f2c565b005b34801561060657600080fd5b50610621600480360381019061061c9190612614565b611163565b005b34801561062f57600080fd5b5061064a60048036038101906106459190612591565b6112db565b005b34801561065857600080fd5b50610673600480360381019061066e9190612784565b61134e565b6040516106809190612b47565b60405180910390f35b34801561069557600080fd5b5061069e611382565b6040516106ab9190612c89565b60405180910390f35b3480156106c057600080fd5b506106c9611388565b6040516106d69190612b47565b60405180910390f35b3480156106eb57600080fd5b506106f4611416565b005b34801561070257600080fd5b5061071d600480360381019061071891906124fe565b61144a565b60405161072a9190612b2c565b60405180910390f35b34801561073f57600080fd5b5061075a600480360381019061075591906124d1565b6114de565b6040516107679190612c89565b60405180910390f35b34801561077c57600080fd5b50610797600480360381019061079291906124d1565b6114f6565b005b3480156107a557600080fd5b506107c060048036038101906107bb9190612784565b61157a565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061081d57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061084d5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461086390612eff565b80601f016020809104026020016040519081016040528092919081815260200182805461088f90612eff565b80156108dc5780601f106108b1576101008083540402835291602001916108dc565b820191906000526020600020905b8154815290600101906020018083116108bf57829003601f168201915b5050505050905090565b60006108f18261158c565b610927576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061096d826115eb565b90508073ffffffffffffffffffffffffffffffffffffffff1661098e6116b9565b73ffffffffffffffffffffffffffffffffffffffff16146109f1576109ba816109b56116b9565b61144a565b6109f0576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000610aad6116c1565b6001546000540303905090565b610ac58383836116c6565b505050565b610ad2611a8e565b80600e8190555050565b610ae4611a8e565b80600a9080519060200190610afa9291906121ce565b5050565b600d5481565b600f60009054906101000a900460ff1681565b610b1f611a8e565b6000610b29610cdc565b73ffffffffffffffffffffffffffffffffffffffff1647604051610b4c90612ab0565b60006040518083038185875af1925050503d8060008114610b89576040519150601f19603f3d011682016040523d82523d6000602084013e610b8e565b606091505b5050905080610b9c57600080fd5b50565b610bba838383604051806020016040528060008152506112db565b505050565b600c5481565b610bcd611a8e565b60106000610bdb9190612254565b818160109190610bec929190612275565b505050565b60126020528060005260406000206000915090505481565b6000610c14826115eb565b9050919050565b600b5481565b600080610c2d83611b0c565b1415610c65576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b610cbe611a8e565b610cc86000611b16565b565b610cd2611a8e565b80600d8190555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054610d1590612eff565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4190612eff565b8015610d8e5780601f10610d6357610100808354040283529160200191610d8e565b820191906000526020600020905b815481529060010190602001808311610d7157829003601f168201915b5050505050905090565b60026009541415610dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd590612c69565b60405180910390fd5b60026009819055506000601490508081601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e389190612d8e565b1115610e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7090612ba9565b60405180910390fd5b610e8233611bdc565b610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb890612b89565b60405180910390fd5b610ecb3382611c8b565b80601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f1a9190612d8e565b92505081905550506001600981905550565b60026009541415610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6990612c69565b60405180910390fd5b60026009819055506000610f84610aa3565b9050600f60009054906101000a900460ff16610fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcc90612be9565b60405180910390fd5b60008211611018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100f90612b69565b60405180910390fd5b600c5482826110279190612d8e565b1115611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f90612c49565b60405180910390fd5b600e5482601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110b69190612d8e565b11156110f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ee90612c09565b60405180910390fd5b6111013383611c8b565b81601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111509190612d8e565b9250508190555050600160098190555050565b61116b6116b9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111d0576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006111dd6116b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661128a6116b9565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112cf9190612b2c565b60405180910390a35050565b6112e68484846116c6565b60008373ffffffffffffffffffffffffffffffffffffffff163b146113485761131184848484611ca9565b611347576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060600a61135b83611e09565b60405160200161136c929190612a81565b6040516020818303038152906040529050919050565b600e5481565b600a805461139590612eff565b80601f01602080910402602001604051908101604052809291908181526020018280546113c190612eff565b801561140e5780601f106113e35761010080835404028352916020019161140e565b820191906000526020600020905b8154815290600101906020018083116113f157829003601f168201915b505050505081565b61141e611a8e565b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60116020528060005260406000206000915090505481565b6114fe611a8e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561156e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156590612bc9565b60405180910390fd5b61157781611b16565b50565b611582611a8e565b80600b8190555050565b6000816115976116c1565b111580156115a6575060005482105b80156115e4575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600080829050806115fa6116c1565b11611682576000548110156116815760006004600083815260200190815260200160002054905060007c01000000000000000000000000000000000000000000000000000000008216141561167f575b600081141561167557600460008360019003935083815260200190815260200160002054905061164a565b80925050506116b4565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b600090565b60006116d1826115eb565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611738576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008573ffffffffffffffffffffffffffffffffffffffff166117916116b9565b73ffffffffffffffffffffffffffffffffffffffff1614806117c057506117bf866117ba6116b9565b61144a565b5b806117fd57506117ce6116b9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b905080611836576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061184186611b0c565b1415611879576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118868686866001611f6a565b600061189183611b0c565b146118cd576006600085815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b61199487611b0c565b1717600460008681526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000084161415611a1e576000600185019050600060046000838152602001908152602001600020541415611a1c576000548114611a1b578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a868686866001611f70565b505050505050565b611a96611f76565b73ffffffffffffffffffffffffffffffffffffffff16611ab4610cdc565b73ffffffffffffffffffffffffffffffffffffffff1614611b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0190612c29565b60405180910390fd5b565b6000819050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600090505b601080549050811015611c80578273ffffffffffffffffffffffffffffffffffffffff1660108281548110611c1c57611c1b613069565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611c6d576001915050611c86565b8080611c7890612f62565b915050611be4565b60009150505b919050565b611ca5828260405180602001604052806000815250611f7e565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611ccf6116b9565b8786866040518563ffffffff1660e01b8152600401611cf19493929190612ae0565b602060405180830381600087803b158015611d0b57600080fd5b505af1925050508015611d3c57506040513d601f19601f82011682018060405250810190611d39919061270e565b60015b611db6573d8060008114611d6c576040519150601f19603f3d011682016040523d82523d6000602084013e611d71565b606091505b50600081511415611dae576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606000821415611e51576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611f65565b600082905060005b60008214611e83578080611e6c90612f62565b915050600a82611e7c9190612de4565b9150611e59565b60008167ffffffffffffffff811115611e9f57611e9e613098565b5b6040519080825280601f01601f191660200182016040528015611ed15781602001600182028036833780820191505090505b5090505b60008514611f5e57600182611eea9190612e15565b9150600a85611ef99190612fab565b6030611f059190612d8e565b60f81b818381518110611f1b57611f1a613069565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611f579190612de4565b9450611ed5565b8093505050505b919050565b50505050565b50505050565b600033905090565b611f88838361201b565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461201657600080549050600083820390505b611fc86000868380600101945086611ca9565b611ffe576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818110611fb557816000541461201357600080fd5b50505b505050565b600080549050600061202c84611b0c565b1415612064576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082141561209f576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120ac6000848385611f6a565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e1612111600184146121c4565b901b60a042901b61212185611b0c565b1717600460008381526020019081526020016000208190555060005b8080600101915082018473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a482811061213d57828201600081905550506121bf6000848385611f70565b505050565b6000819050919050565b8280546121da90612eff565b90600052602060002090601f0160209004810192826121fc5760008555612243565b82601f1061221557805160ff1916838001178555612243565b82800160010185558215612243579182015b82811115612242578251825591602001919060010190612227565b5b5090506122509190612315565b5090565b50805460008255906000526020600020908101906122729190612315565b50565b828054828255906000526020600020908101928215612304579160200282015b8281111561230357823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612295565b5b5090506123119190612315565b5090565b5b8082111561232e576000816000905550600101612316565b5090565b600061234561234084612cc9565b612ca4565b905082815260208101848484011115612361576123606130d6565b5b61236c848285612ebd565b509392505050565b600061238761238284612cfa565b612ca4565b9050828152602081018484840111156123a3576123a26130d6565b5b6123ae848285612ebd565b509392505050565b6000813590506123c5816132b9565b92915050565b60008083601f8401126123e1576123e06130cc565b5b8235905067ffffffffffffffff8111156123fe576123fd6130c7565b5b60208301915083602082028301111561241a576124196130d1565b5b9250929050565b600081359050612430816132d0565b92915050565b600081359050612445816132e7565b92915050565b60008151905061245a816132e7565b92915050565b600082601f830112612475576124746130cc565b5b8135612485848260208601612332565b91505092915050565b600082601f8301126124a3576124a26130cc565b5b81356124b3848260208601612374565b91505092915050565b6000813590506124cb816132fe565b92915050565b6000602082840312156124e7576124e66130e0565b5b60006124f5848285016123b6565b91505092915050565b60008060408385031215612515576125146130e0565b5b6000612523858286016123b6565b9250506020612534858286016123b6565b9150509250929050565b600080600060608486031215612557576125566130e0565b5b6000612565868287016123b6565b9350506020612576868287016123b6565b9250506040612587868287016124bc565b9150509250925092565b600080600080608085870312156125ab576125aa6130e0565b5b60006125b9878288016123b6565b94505060206125ca878288016123b6565b93505060406125db878288016124bc565b925050606085013567ffffffffffffffff8111156125fc576125fb6130db565b5b61260887828801612460565b91505092959194509250565b6000806040838503121561262b5761262a6130e0565b5b6000612639858286016123b6565b925050602061264a85828601612421565b9150509250929050565b6000806040838503121561266b5761266a6130e0565b5b6000612679858286016123b6565b925050602061268a858286016124bc565b9150509250929050565b600080602083850312156126ab576126aa6130e0565b5b600083013567ffffffffffffffff8111156126c9576126c86130db565b5b6126d5858286016123cb565b92509250509250929050565b6000602082840312156126f7576126f66130e0565b5b600061270584828501612436565b91505092915050565b600060208284031215612724576127236130e0565b5b60006127328482850161244b565b91505092915050565b600060208284031215612751576127506130e0565b5b600082013567ffffffffffffffff81111561276f5761276e6130db565b5b61277b8482850161248e565b91505092915050565b60006020828403121561279a576127996130e0565b5b60006127a8848285016124bc565b91505092915050565b6127ba81612e49565b82525050565b6127c981612e5b565b82525050565b60006127da82612d40565b6127e48185612d56565b93506127f4818560208601612ecc565b6127fd816130e5565b840191505092915050565b600061281382612d4b565b61281d8185612d72565b935061282d818560208601612ecc565b612836816130e5565b840191505092915050565b600061284c82612d4b565b6128568185612d83565b9350612866818560208601612ecc565b80840191505092915050565b6000815461287f81612eff565b6128898186612d83565b945060018216600081146128a457600181146128b5576128e8565b60ff198316865281860193506128e8565b6128be85612d2b565b60005b838110156128e0578154818901526001820191506020810190506128c1565b838801955050505b50505092915050565b60006128fe600b83612d72565b9150612909826130f6565b602082019050919050565b6000612921601283612d72565b915061292c8261311f565b602082019050919050565b6000612944601283612d72565b915061294f82613148565b602082019050919050565b6000612967602683612d72565b915061297282613171565b604082019050919050565b600061298a601a83612d72565b9150612995826131c0565b602082019050919050565b60006129ad601c83612d72565b91506129b8826131e9565b602082019050919050565b60006129d0600583612d83565b91506129db82613212565b600582019050919050565b60006129f3602083612d72565b91506129fe8261323b565b602082019050919050565b6000612a16600083612d67565b9150612a2182613264565b600082019050919050565b6000612a39601783612d72565b9150612a4482613267565b602082019050919050565b6000612a5c601f83612d72565b9150612a6782613290565b602082019050919050565b612a7b81612eb3565b82525050565b6000612a8d8285612872565b9150612a998284612841565b9150612aa4826129c3565b91508190509392505050565b6000612abb82612a09565b9150819050919050565b6000602082019050612ada60008301846127b1565b92915050565b6000608082019050612af560008301876127b1565b612b0260208301866127b1565b612b0f6040830185612a72565b8181036060830152612b2181846127cf565b905095945050505050565b6000602082019050612b4160008301846127c0565b92915050565b60006020820190508181036000830152612b618184612808565b905092915050565b60006020820190508181036000830152612b82816128f1565b9050919050565b60006020820190508181036000830152612ba281612914565b9050919050565b60006020820190508181036000830152612bc281612937565b9050919050565b60006020820190508181036000830152612be28161295a565b9050919050565b60006020820190508181036000830152612c028161297d565b9050919050565b60006020820190508181036000830152612c22816129a0565b9050919050565b60006020820190508181036000830152612c42816129e6565b9050919050565b60006020820190508181036000830152612c6281612a2c565b9050919050565b60006020820190508181036000830152612c8281612a4f565b9050919050565b6000602082019050612c9e6000830184612a72565b92915050565b6000612cae612cbf565b9050612cba8282612f31565b919050565b6000604051905090565b600067ffffffffffffffff821115612ce457612ce3613098565b5b612ced826130e5565b9050602081019050919050565b600067ffffffffffffffff821115612d1557612d14613098565b5b612d1e826130e5565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000612d9982612eb3565b9150612da483612eb3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612dd957612dd8612fdc565b5b828201905092915050565b6000612def82612eb3565b9150612dfa83612eb3565b925082612e0a57612e0961300b565b5b828204905092915050565b6000612e2082612eb3565b9150612e2b83612eb3565b925082821015612e3e57612e3d612fdc565b5b828203905092915050565b6000612e5482612e93565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612eea578082015181840152602081019050612ecf565b83811115612ef9576000848401525b50505050565b60006002820490506001821680612f1757607f821691505b60208210811415612f2b57612f2a61303a565b5b50919050565b612f3a826130e5565b810181811067ffffffffffffffff82111715612f5957612f58613098565b5b80604052505050565b6000612f6d82612eb3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612fa057612f9f612fdc565b5b600182019050919050565b6000612fb682612eb3565b9150612fc183612eb3565b925082612fd157612fd061300b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f43616e74206d696e742030000000000000000000000000000000000000000000600082015250565b7f596f752063616e27742064697372757074210000000000000000000000000000600082015250565b7f416c726561647920646973727570746564210000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5075626c6963204d696e74696e67206973206f6e205061757365000000000000600082015250565b7f43616e6e6f74206d696e74206265796f6e64206d6178206d696e742100000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f4d696e74696e6720737570706c79206578636565646564000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6132c281612e49565b81146132cd57600080fd5b50565b6132d981612e5b565b81146132e457600080fd5b50565b6132f081612e67565b81146132fb57600080fd5b50565b61330781612eb3565b811461331257600080fd5b5056fea26469706673582212209793f24801042318476db9510aaf88add980e06d3e6e9e676c020fc147577dc464736f6c63430008070033
Deployed Bytecode Sourcemap
162:3101:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4874:607:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9784:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11727:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11261:405;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3957:309;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12587:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1668:116:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1790:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;371:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;448:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2842:152;;;:::i;:::-;;12817:179:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;330:35:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2007:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;570:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9580:142:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;288:36:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5540:231:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1809:101:4;;;;;;;;;;;;;:::i;:::-;;1546:116:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1179:85:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9946:102:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2170:346:1;;;;;;;;;;;;;:::i;:::-;;901:493;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11994:303:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13062:385;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3024:236:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;409:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;256:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1914:87;;;;;;;;;;;;;:::i;:::-;;12363:162:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;518:46:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2059:198:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1440:100:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4874:607:2;4959:4;5269:10;5254:25;;:11;:25;;;;:101;;;;5345:10;5330:25;;:11;:25;;;;5254:101;:177;;;;5421:10;5406:25;;:11;:25;;;;5254:177;5235:196;;4874:607;;;:::o;9784:98::-;9838:13;9870:5;9863:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9784:98;:::o;11727:200::-;11795:7;11819:16;11827:7;11819;:16::i;:::-;11814:64;;11844:34;;;;;;;;;;;;;;11814:64;11896:15;:24;11912:7;11896:24;;;;;;;;;;;;;;;;;;;;;11889:31;;11727:200;;;:::o;11261:405::-;11333:13;11365:27;11384:7;11365:18;:27::i;:::-;11333:61;;11432:5;11409:28;;:19;:17;:19::i;:::-;:28;;;11405:172;;11456:44;11473:5;11480:19;:17;:19::i;:::-;11456:16;:44::i;:::-;11451:126;;11527:35;;;;;;;;;;;;;;11451:126;11405:172;11614:2;11587:15;:24;11603:7;11587:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11651:7;11647:2;11631:28;;11640:5;11631:28;;;;;;;;;;;;11323:343;11261:405;;:::o;3957:309::-;4010:7;4234:15;:13;:15::i;:::-;4219:12;;4203:13;;:28;:46;4196:53;;3957:309;:::o;12587:164::-;12716:28;12726:4;12732:2;12736:7;12716:9;:28::i;:::-;12587:164;;;:::o;1668:116:1:-;1072:13:4;:11;:13::i;:::-;1763:14:1::1;1747:13;:30;;;;1668:116:::0;:::o;1790:118::-;1072:13:4;:11;:13::i;:::-;1888::1::1;1873:12;:28;;;;;;;;;;;;:::i;:::-;;1790:118:::0;:::o;371:32::-;;;;:::o;448:22::-;;;;;;;;;;;;;:::o;2842:152::-;1072:13:4;:11;:13::i;:::-;2898:7:1::1;2919;:5;:7::i;:::-;2911:21;;2940;2911:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2897:69;;;2984:2;2976:11;;;::::0;::::1;;2887:107;2842:152::o:0;12817:179:2:-;12950:39;12967:4;12973:2;12977:7;12950:39;;;;;;;;;;;;:16;:39::i;:::-;12817:179;;;:::o;330:35:1:-;;;;:::o;2007:157::-;1072:13:4;:11;:13::i;:::-;2099:16:1::1;;2092:23;;;;:::i;:::-;2144:13;;2125:16;:32;;;;;;;:::i;:::-;;2007:157:::0;;:::o;570:51::-;;;;;;;;;;;;;;;;;:::o;9580:142:2:-;9644:7;9686:27;9705:7;9686:18;:27::i;:::-;9663:52;;9580:142;;;:::o;288:36:1:-;;;;:::o;5540:231:2:-;5604:7;5655:1;5627:24;5645:5;5627:17;:24::i;:::-;:29;5623:70;;;5665:28;;;;;;;;;;;;;;5623:70;1017:13;5710:18;:25;5729:5;5710:25;;;;;;;;;;;;;;;;:54;5703:61;;5540:231;;;:::o;1809:101:4:-;1072:13;:11;:13::i;:::-;1873:30:::1;1900:1;1873:18;:30::i;:::-;1809:101::o:0;1546:116:1:-;1072:13:4;:11;:13::i;:::-;1641:14:1::1;1625:13;:30;;;;1546:116:::0;:::o;1179:85:4:-;1225:7;1251:6;;;;;;;;;;;1244:13;;1179:85;:::o;9946:102:2:-;10002:13;10034:7;10027:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9946:102;:::o;2170:346:1:-;1744:1:5;2325:7;;:19;;2317:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1;2455:7;:18;;;;2221:19:1::1;2243:2;2221:24;;2309:11;2294;2263:16;:28;2280:10;2263:28;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;:57;;2255:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;2361:28;2378:10;2361:16;:28::i;:::-;2353:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;2422:34;2432:10;2444:11;2422:9;:34::i;:::-;2498:11;2466:16;:28;2483:10;2466:28;;;;;;;;;;;;;;;;:43;;;;;;;:::i;:::-;;;;;;;;2211:305;1701:1:5::0;2628:7;:22;;;;2170:346:1:o;901:493::-;1744:1:5;2325:7;;:19;;2317:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1;2455:7;:18;;;;974:9:1::1;986:13;:11;:13::i;:::-;974:25;;1017:10;;;;;;;;;;;1009:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;1090:1;1076:11;:15;1068:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;1144:14;;1129:11;1125:1;:15;;;;:::i;:::-;:33;;1117:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;1248:13;;1231:11;1205;:23;1217:10;1205:23;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;1204:57;;1196:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;1305:34;1315:10;1327:11;1305:9;:34::i;:::-;1376:11;1349;:23;1361:10;1349:23;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;964:430;1701:1:5::0;2628:7;:22;;;;901:493:1;:::o;11994:303:2:-;12104:19;:17;:19::i;:::-;12092:31;;:8;:31;;;12088:61;;;12132:17;;;;;;;;;;;;;;12088:61;12212:8;12160:18;:39;12179:19;:17;:19::i;:::-;12160:39;;;;;;;;;;;;;;;:49;12200:8;12160:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;12271:8;12235:55;;12250:19;:17;:19::i;:::-;12235:55;;;12281:8;12235:55;;;;;;:::i;:::-;;;;;;;;11994:303;;:::o;13062:385::-;13223:28;13233:4;13239:2;13243:7;13223:9;:28::i;:::-;13283:1;13265:2;:14;;;:19;13261:180;;13303:56;13334:4;13340:2;13344:7;13353:5;13303:30;:56::i;:::-;13298:143;;13386:40;;;;;;;;;;;;;;13298:143;13261:180;13062:385;;;;:::o;3024:236:1:-;3130:13;3202:12;3216:25;3233:7;3216:16;:25::i;:::-;3185:67;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3159:94;;3024:236;;;:::o;409:32::-;;;;:::o;256:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1914:87::-;1072:13:4;:11;:13::i;:::-;1984:10:1::1;;;;;;;;;;;1983:11;1970:10;;:24;;;;;;;;;;;;;;;;;;1914:87::o:0;12363:162:2:-;12460:4;12483:18;:25;12502:5;12483:25;;;;;;;;;;;;;;;:35;12509:8;12483:35;;;;;;;;;;;;;;;;;;;;;;;;;12476:42;;12363:162;;;;:::o;518:46:1:-;;;;;;;;;;;;;;;;;:::o;2059:198:4:-;1072:13;:11;:13::i;:::-;2167:1:::1;2147:22;;:8;:22;;;;2139:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2222:28;2241:8;2222:18;:28::i;:::-;2059:198:::0;:::o;1440:100:1:-;1072:13:4;:11;:13::i;:::-;1523:10:1::1;1511:9;:22;;;;1440:100:::0;:::o;13693:268:2:-;13750:4;13804:7;13785:15;:13;:15::i;:::-;:26;;:65;;;;;13837:13;;13827:7;:23;13785:65;:150;;;;;13934:1;1769:8;13887:17;:26;13905:7;13887:26;;;;;;;;;;;;:43;:48;13785:150;13766:169;;13693:268;;;:::o;7157:1105::-;7224:7;7243:12;7258:7;7243:22;;7323:4;7304:15;:13;:15::i;:::-;:23;7300:898;;7356:13;;7349:4;:20;7345:853;;;7393:14;7410:17;:23;7428:4;7410:23;;;;;;;;;;;;7393:40;;7524:1;1769:8;7497:6;:23;:28;7493:687;;;8008:111;8025:1;8015:6;:11;8008:111;;;8067:17;:25;8085:6;;;;;;;8067:25;;;;;;;;;;;;8058:34;;8008:111;;;8151:6;8144:13;;;;;;7493:687;7371:827;7345:853;7300:898;8224:31;;;;;;;;;;;;;;7157:1105;;;;:::o;26037:103::-;26097:7;26123:10;26116:17;;26037:103;:::o;3497:90::-;3553:7;3497:90;:::o;17254:2595::-;17364:27;17394;17413:7;17394:18;:27::i;:::-;17364:57;;17477:4;17436:45;;17452:19;17436:45;;;17432:86;;17490:28;;;;;;;;;;;;;;17432:86;17529:23;17555:15;:24;17571:7;17555:24;;;;;;;;;;;;;;;;;;;;;17529:50;;17590:22;17639:4;17616:27;;:19;:17;:19::i;:::-;:27;;;:86;;;;17659:43;17676:4;17682:19;:17;:19::i;:::-;17659:16;:43::i;:::-;17616:86;:140;;;;17737:19;:17;:19::i;:::-;17718:38;;:15;:38;;;17616:140;17590:167;;17773:17;17768:66;;17799:35;;;;;;;;;;;;;;17768:66;17873:1;17848:21;17866:2;17848:17;:21::i;:::-;:26;17844:62;;;17883:23;;;;;;;;;;;;;;17844:62;17917:43;17939:4;17945:2;17949:7;17958:1;17917:21;:43::i;:::-;18065:1;18027:34;18045:15;18027:17;:34::i;:::-;:39;18023:101;;18089:15;:24;18105:7;18089:24;;;;;;;;;;;;18082:31;;;;;;;;;;;18023:101;18484:18;:24;18503:4;18484:24;;;;;;;;;;;;;;;;18482:26;;;;;;;;;;;;18552:18;:22;18571:2;18552:22;;;;;;;;;;;;;;;;18550:24;;;;;;;;;;;2041:8;1656:3;18924:15;:41;;18883:21;18901:2;18883:17;:21::i;:::-;:83;:126;18838:17;:26;18856:7;18838:26;;;;;;;;;;;:171;;;;19176:1;2041:8;19126:19;:46;:51;19122:616;;;19197:19;19229:1;19219:7;:11;19197:33;;19384:1;19350:17;:30;19368:11;19350:30;;;;;;;;;;;;:35;19346:378;;;19486:13;;19471:11;:28;19467:239;;19664:19;19631:17;:30;19649:11;19631:30;;;;;;;;;;;:52;;;;19467:239;19346:378;19179:559;19122:616;19782:7;19778:2;19763:27;;19772:4;19763:27;;;;;;;;;;;;19800:42;19821:4;19827:2;19831:7;19840:1;19800:20;:42::i;:::-;17354:2495;;;17254:2595;;;:::o;1337:130:4:-;1411:12;:10;:12::i;:::-;1400:23;;:7;:5;:7::i;:::-;:23;;;1392:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1337:130::o;10840:144:2:-;10904:14;10963:5;10953:15;;10840:144;;;:::o;2411:187:4:-;2484:16;2503:6;;;;;;;;;;;2484:25;;2528:8;2519:6;;:17;;;;;;;;;;;;;;;;;;2582:8;2551:40;;2572:8;2551:40;;;;;;;;;;;;2474:124;2411:187;:::o;2522:277:1:-;2585:4;2601:6;2610:1;2601:10;;2621:150;2632:16;:23;;;;2628:1;:27;2621:150;;;2697:5;2674:28;;:16;2691:1;2674:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:28;;;2671:77;;;2729:4;2722:11;;;;;2671:77;2757:3;;;;;:::i;:::-;;;;2621:150;;;2787:5;2780:12;;;2522:277;;;;:::o;14040:102:2:-;14108:27;14118:2;14122:8;14108:27;;;;;;;;;;;;:9;:27::i;:::-;14040:102;;:::o;23577:697::-;23735:4;23780:2;23755:45;;;23801:19;:17;:19::i;:::-;23822:4;23828:7;23837:5;23755:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;23751:517;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24050:1;24033:6;:13;:18;24029:229;;;24078:40;;;;;;;;;;;;;;24029:229;24218:6;24212:13;24203:6;24199:2;24195:15;24188:38;23751:517;23921:54;;;23911:64;;;:6;:64;;;;23904:71;;;23577:697;;;;;;:::o;377:703:6:-;433:13;659:1;650:5;:10;646:51;;;676:10;;;;;;;;;;;;;;;;;;;;;646:51;706:12;721:5;706:20;;736:14;760:75;775:1;767:4;:9;760:75;;792:8;;;;;:::i;:::-;;;;822:2;814:10;;;;;:::i;:::-;;;760:75;;;844:19;876:6;866:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;844:39;;893:150;909:1;900:5;:10;893:150;;936:1;926:11;;;;;:::i;:::-;;;1002:2;994:5;:10;;;;:::i;:::-;981:2;:24;;;;:::i;:::-;968:39;;951:6;958;951:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1030:2;1021:11;;;;;:::i;:::-;;;893:150;;;1066:6;1052:21;;;;;377:703;;;;:::o;24905:154:2:-;;;;;:::o;25700:153::-;;;;;:::o;640:96:0:-;693:7;719:10;712:17;;640:96;:::o;14516:661:2:-;14634:19;14640:2;14644:8;14634:5;:19::i;:::-;14710:1;14692:2;:14;;;:19;14688:473;;14731:11;14745:13;;14731:27;;14776:13;14798:8;14792:3;:14;14776:30;;14824:229;14854:62;14893:1;14897:2;14901:7;;;;;;14910:5;14854:30;:62::i;:::-;14849:165;;14951:40;;;;;;;;;;;;;;14849:165;15048:3;15040:5;:11;14824:229;;15133:3;15116:13;;:20;15112:34;;15138:8;;;15112:34;14713:448;;14688:473;14516:661;;;:::o;15438:1574::-;15502:20;15525:13;;15502:36;;15577:1;15552:21;15570:2;15552:17;:21::i;:::-;:26;15548:58;;;15587:19;;;;;;;;;;;;;;15548:58;15632:1;15620:8;:13;15616:44;;;15642:18;;;;;;;;;;;;;;15616:44;15671:61;15701:1;15705:2;15709:12;15723:8;15671:21;:61::i;:::-;16264:1;1151:2;16235:1;:25;;16234:31;16222:8;:44;16196:18;:22;16215:2;16196:22;;;;;;;;;;;;;;;;:70;;;;;;;;;;;1909:3;16655:29;16682:1;16670:8;:13;16655:14;:29::i;:::-;:56;;1656:3;16593:15;:41;;16552:21;16570:2;16552:17;:21::i;:::-;:83;:160;16502:17;:31;16520:12;16502:31;;;;;;;;;;;:210;;;;16727:14;16755:117;16821:8;;;;;;16806:12;:23;16802:2;16781:49;;16798:1;16781:49;;;;;;;;;;;;16862:8;16853:6;:17;16755:117;;16917:8;16902:12;:23;16886:13;:39;;;;15979:957;16945:60;16974:1;16978:2;16982:12;16996:8;16945:20;:60::i;:::-;15492:1520;15438:1574;;:::o;11066:138::-;11124:14;11183:5;11173:15;;11066:138;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:7:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:327::-;6834:6;6883:2;6871:9;6862:7;6858:23;6854:32;6851:119;;;6889:79;;:::i;:::-;6851:119;7009:1;7034:52;7078:7;7069:6;7058:9;7054:22;7034:52;:::i;:::-;7024:62;;6980:116;6776:327;;;;:::o;7109:349::-;7178:6;7227:2;7215:9;7206:7;7202:23;7198:32;7195:119;;;7233:79;;:::i;:::-;7195:119;7353:1;7378:63;7433:7;7424:6;7413:9;7409:22;7378:63;:::i;:::-;7368:73;;7324:127;7109:349;;;;:::o;7464:509::-;7533:6;7582:2;7570:9;7561:7;7557:23;7553:32;7550:119;;;7588:79;;:::i;:::-;7550:119;7736:1;7725:9;7721:17;7708:31;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:63;7948:7;7939:6;7928:9;7924:22;7893:63;:::i;:::-;7883:73;;7679:287;7464:509;;;;:::o;7979:329::-;8038:6;8087:2;8075:9;8066:7;8062:23;8058:32;8055:119;;;8093:79;;:::i;:::-;8055:119;8213:1;8238:53;8283:7;8274:6;8263:9;8259:22;8238:53;:::i;:::-;8228:63;;8184:117;7979:329;;;;:::o;8314:118::-;8401:24;8419:5;8401:24;:::i;:::-;8396:3;8389:37;8314:118;;:::o;8438:109::-;8519:21;8534:5;8519:21;:::i;:::-;8514:3;8507:34;8438:109;;:::o;8553:360::-;8639:3;8667:38;8699:5;8667:38;:::i;:::-;8721:70;8784:6;8779:3;8721:70;:::i;:::-;8714:77;;8800:52;8845:6;8840:3;8833:4;8826:5;8822:16;8800:52;:::i;:::-;8877:29;8899:6;8877:29;:::i;:::-;8872:3;8868:39;8861:46;;8643:270;8553:360;;;;:::o;8919:364::-;9007:3;9035:39;9068:5;9035:39;:::i;:::-;9090:71;9154:6;9149:3;9090:71;:::i;:::-;9083:78;;9170:52;9215:6;9210:3;9203:4;9196:5;9192:16;9170:52;:::i;:::-;9247:29;9269:6;9247:29;:::i;:::-;9242:3;9238:39;9231:46;;9011:272;8919:364;;;;:::o;9289:377::-;9395:3;9423:39;9456:5;9423:39;:::i;:::-;9478:89;9560:6;9555:3;9478:89;:::i;:::-;9471:96;;9576:52;9621:6;9616:3;9609:4;9602:5;9598:16;9576:52;:::i;:::-;9653:6;9648:3;9644:16;9637:23;;9399:267;9289:377;;;;:::o;9696:845::-;9799:3;9836:5;9830:12;9865:36;9891:9;9865:36;:::i;:::-;9917:89;9999:6;9994:3;9917:89;:::i;:::-;9910:96;;10037:1;10026:9;10022:17;10053:1;10048:137;;;;10199:1;10194:341;;;;10015:520;;10048:137;10132:4;10128:9;10117;10113:25;10108:3;10101:38;10168:6;10163:3;10159:16;10152:23;;10048:137;;10194:341;10261:38;10293:5;10261:38;:::i;:::-;10321:1;10335:154;10349:6;10346:1;10343:13;10335:154;;;10423:7;10417:14;10413:1;10408:3;10404:11;10397:35;10473:1;10464:7;10460:15;10449:26;;10371:4;10368:1;10364:12;10359:17;;10335:154;;;10518:6;10513:3;10509:16;10502:23;;10201:334;;10015:520;;9803:738;;9696:845;;;;:::o;10547:366::-;10689:3;10710:67;10774:2;10769:3;10710:67;:::i;:::-;10703:74;;10786:93;10875:3;10786:93;:::i;:::-;10904:2;10899:3;10895:12;10888:19;;10547:366;;;:::o;10919:::-;11061:3;11082:67;11146:2;11141:3;11082:67;:::i;:::-;11075:74;;11158:93;11247:3;11158:93;:::i;:::-;11276:2;11271:3;11267:12;11260:19;;10919:366;;;:::o;11291:::-;11433:3;11454:67;11518:2;11513:3;11454:67;:::i;:::-;11447:74;;11530:93;11619:3;11530:93;:::i;:::-;11648:2;11643:3;11639:12;11632:19;;11291:366;;;:::o;11663:::-;11805:3;11826:67;11890:2;11885:3;11826:67;:::i;:::-;11819:74;;11902:93;11991:3;11902:93;:::i;:::-;12020:2;12015:3;12011:12;12004:19;;11663:366;;;:::o;12035:::-;12177:3;12198:67;12262:2;12257:3;12198:67;:::i;:::-;12191:74;;12274:93;12363:3;12274:93;:::i;:::-;12392:2;12387:3;12383:12;12376:19;;12035:366;;;:::o;12407:::-;12549:3;12570:67;12634:2;12629:3;12570:67;:::i;:::-;12563:74;;12646:93;12735:3;12646:93;:::i;:::-;12764:2;12759:3;12755:12;12748:19;;12407:366;;;:::o;12779:400::-;12939:3;12960:84;13042:1;13037:3;12960:84;:::i;:::-;12953:91;;13053:93;13142:3;13053:93;:::i;:::-;13171:1;13166:3;13162:11;13155:18;;12779:400;;;:::o;13185:366::-;13327:3;13348:67;13412:2;13407:3;13348:67;:::i;:::-;13341:74;;13424:93;13513:3;13424:93;:::i;:::-;13542:2;13537:3;13533:12;13526:19;;13185:366;;;:::o;13557:398::-;13716:3;13737:83;13818:1;13813:3;13737:83;:::i;:::-;13730:90;;13829:93;13918:3;13829:93;:::i;:::-;13947:1;13942:3;13938:11;13931:18;;13557:398;;;:::o;13961:366::-;14103:3;14124:67;14188:2;14183:3;14124:67;:::i;:::-;14117:74;;14200:93;14289:3;14200:93;:::i;:::-;14318:2;14313:3;14309:12;14302:19;;13961:366;;;:::o;14333:::-;14475:3;14496:67;14560:2;14555:3;14496:67;:::i;:::-;14489:74;;14572:93;14661:3;14572:93;:::i;:::-;14690:2;14685:3;14681:12;14674:19;;14333:366;;;:::o;14705:118::-;14792:24;14810:5;14792:24;:::i;:::-;14787:3;14780:37;14705:118;;:::o;14829:695::-;15107:3;15129:92;15217:3;15208:6;15129:92;:::i;:::-;15122:99;;15238:95;15329:3;15320:6;15238:95;:::i;:::-;15231:102;;15350:148;15494:3;15350:148;:::i;:::-;15343:155;;15515:3;15508:10;;14829:695;;;;;:::o;15530:379::-;15714:3;15736:147;15879:3;15736:147;:::i;:::-;15729:154;;15900:3;15893:10;;15530:379;;;:::o;15915:222::-;16008:4;16046:2;16035:9;16031:18;16023:26;;16059:71;16127:1;16116:9;16112:17;16103:6;16059:71;:::i;:::-;15915:222;;;;:::o;16143:640::-;16338:4;16376:3;16365:9;16361:19;16353:27;;16390:71;16458:1;16447:9;16443:17;16434:6;16390:71;:::i;:::-;16471:72;16539:2;16528:9;16524:18;16515:6;16471:72;:::i;:::-;16553;16621:2;16610:9;16606:18;16597:6;16553:72;:::i;:::-;16672:9;16666:4;16662:20;16657:2;16646:9;16642:18;16635:48;16700:76;16771:4;16762:6;16700:76;:::i;:::-;16692:84;;16143:640;;;;;;;:::o;16789:210::-;16876:4;16914:2;16903:9;16899:18;16891:26;;16927:65;16989:1;16978:9;16974:17;16965:6;16927:65;:::i;:::-;16789:210;;;;:::o;17005:313::-;17118:4;17156:2;17145:9;17141:18;17133:26;;17205:9;17199:4;17195:20;17191:1;17180:9;17176:17;17169:47;17233:78;17306:4;17297:6;17233:78;:::i;:::-;17225:86;;17005:313;;;;:::o;17324:419::-;17490:4;17528:2;17517:9;17513:18;17505:26;;17577:9;17571:4;17567:20;17563:1;17552:9;17548:17;17541:47;17605:131;17731:4;17605:131;:::i;:::-;17597:139;;17324:419;;;:::o;17749:::-;17915:4;17953:2;17942:9;17938:18;17930:26;;18002:9;17996:4;17992:20;17988:1;17977:9;17973:17;17966:47;18030:131;18156:4;18030:131;:::i;:::-;18022:139;;17749:419;;;:::o;18174:::-;18340:4;18378:2;18367:9;18363:18;18355:26;;18427:9;18421:4;18417:20;18413:1;18402:9;18398:17;18391:47;18455:131;18581:4;18455:131;:::i;:::-;18447:139;;18174:419;;;:::o;18599:::-;18765:4;18803:2;18792:9;18788:18;18780:26;;18852:9;18846:4;18842:20;18838:1;18827:9;18823:17;18816:47;18880:131;19006:4;18880:131;:::i;:::-;18872:139;;18599:419;;;:::o;19024:::-;19190:4;19228:2;19217:9;19213:18;19205:26;;19277:9;19271:4;19267:20;19263:1;19252:9;19248:17;19241:47;19305:131;19431:4;19305:131;:::i;:::-;19297:139;;19024:419;;;:::o;19449:::-;19615:4;19653:2;19642:9;19638:18;19630:26;;19702:9;19696:4;19692:20;19688:1;19677:9;19673:17;19666:47;19730:131;19856:4;19730:131;:::i;:::-;19722:139;;19449:419;;;:::o;19874:::-;20040:4;20078:2;20067:9;20063:18;20055:26;;20127:9;20121:4;20117:20;20113:1;20102:9;20098:17;20091:47;20155:131;20281:4;20155:131;:::i;:::-;20147:139;;19874:419;;;:::o;20299:::-;20465:4;20503:2;20492:9;20488:18;20480:26;;20552:9;20546:4;20542:20;20538:1;20527:9;20523:17;20516:47;20580:131;20706:4;20580:131;:::i;:::-;20572:139;;20299:419;;;:::o;20724:::-;20890:4;20928:2;20917:9;20913:18;20905:26;;20977:9;20971:4;20967:20;20963:1;20952:9;20948:17;20941:47;21005:131;21131:4;21005:131;:::i;:::-;20997:139;;20724:419;;;:::o;21149:222::-;21242:4;21280:2;21269:9;21265:18;21257:26;;21293:71;21361:1;21350:9;21346:17;21337:6;21293:71;:::i;:::-;21149:222;;;;:::o;21377:129::-;21411:6;21438:20;;:::i;:::-;21428:30;;21467:33;21495:4;21487:6;21467:33;:::i;:::-;21377:129;;;:::o;21512:75::-;21545:6;21578:2;21572:9;21562:19;;21512:75;:::o;21593:307::-;21654:4;21744:18;21736:6;21733:30;21730:56;;;21766:18;;:::i;:::-;21730:56;21804:29;21826:6;21804:29;:::i;:::-;21796:37;;21888:4;21882;21878:15;21870:23;;21593:307;;;:::o;21906:308::-;21968:4;22058:18;22050:6;22047:30;22044:56;;;22080:18;;:::i;:::-;22044:56;22118:29;22140:6;22118:29;:::i;:::-;22110:37;;22202:4;22196;22192:15;22184:23;;21906:308;;;:::o;22220:141::-;22269:4;22292:3;22284:11;;22315:3;22312:1;22305:14;22349:4;22346:1;22336:18;22328:26;;22220:141;;;:::o;22367:98::-;22418:6;22452:5;22446:12;22436:22;;22367:98;;;:::o;22471:99::-;22523:6;22557:5;22551:12;22541:22;;22471:99;;;:::o;22576:168::-;22659:11;22693:6;22688:3;22681:19;22733:4;22728:3;22724:14;22709:29;;22576:168;;;;:::o;22750:147::-;22851:11;22888:3;22873:18;;22750:147;;;;:::o;22903:169::-;22987:11;23021:6;23016:3;23009:19;23061:4;23056:3;23052:14;23037:29;;22903:169;;;;:::o;23078:148::-;23180:11;23217:3;23202:18;;23078:148;;;;:::o;23232:305::-;23272:3;23291:20;23309:1;23291:20;:::i;:::-;23286:25;;23325:20;23343:1;23325:20;:::i;:::-;23320:25;;23479:1;23411:66;23407:74;23404:1;23401:81;23398:107;;;23485:18;;:::i;:::-;23398:107;23529:1;23526;23522:9;23515:16;;23232:305;;;;:::o;23543:185::-;23583:1;23600:20;23618:1;23600:20;:::i;:::-;23595:25;;23634:20;23652:1;23634:20;:::i;:::-;23629:25;;23673:1;23663:35;;23678:18;;:::i;:::-;23663:35;23720:1;23717;23713:9;23708:14;;23543:185;;;;:::o;23734:191::-;23774:4;23794:20;23812:1;23794:20;:::i;:::-;23789:25;;23828:20;23846:1;23828:20;:::i;:::-;23823:25;;23867:1;23864;23861:8;23858:34;;;23872:18;;:::i;:::-;23858:34;23917:1;23914;23910:9;23902:17;;23734:191;;;;:::o;23931:96::-;23968:7;23997:24;24015:5;23997:24;:::i;:::-;23986:35;;23931:96;;;:::o;24033:90::-;24067:7;24110:5;24103:13;24096:21;24085:32;;24033:90;;;:::o;24129:149::-;24165:7;24205:66;24198:5;24194:78;24183:89;;24129:149;;;:::o;24284:126::-;24321:7;24361:42;24354:5;24350:54;24339:65;;24284:126;;;:::o;24416:77::-;24453:7;24482:5;24471:16;;24416:77;;;:::o;24499:154::-;24583:6;24578:3;24573;24560:30;24645:1;24636:6;24631:3;24627:16;24620:27;24499:154;;;:::o;24659:307::-;24727:1;24737:113;24751:6;24748:1;24745:13;24737:113;;;24836:1;24831:3;24827:11;24821:18;24817:1;24812:3;24808:11;24801:39;24773:2;24770:1;24766:10;24761:15;;24737:113;;;24868:6;24865:1;24862:13;24859:101;;;24948:1;24939:6;24934:3;24930:16;24923:27;24859:101;24708:258;24659:307;;;:::o;24972:320::-;25016:6;25053:1;25047:4;25043:12;25033:22;;25100:1;25094:4;25090:12;25121:18;25111:81;;25177:4;25169:6;25165:17;25155:27;;25111:81;25239:2;25231:6;25228:14;25208:18;25205:38;25202:84;;;25258:18;;:::i;:::-;25202:84;25023:269;24972:320;;;:::o;25298:281::-;25381:27;25403:4;25381:27;:::i;:::-;25373:6;25369:40;25511:6;25499:10;25496:22;25475:18;25463:10;25460:34;25457:62;25454:88;;;25522:18;;:::i;:::-;25454:88;25562:10;25558:2;25551:22;25341:238;25298:281;;:::o;25585:233::-;25624:3;25647:24;25665:5;25647:24;:::i;:::-;25638:33;;25693:66;25686:5;25683:77;25680:103;;;25763:18;;:::i;:::-;25680:103;25810:1;25803:5;25799:13;25792:20;;25585:233;;;:::o;25824:176::-;25856:1;25873:20;25891:1;25873:20;:::i;:::-;25868:25;;25907:20;25925:1;25907:20;:::i;:::-;25902:25;;25946:1;25936:35;;25951:18;;:::i;:::-;25936:35;25992:1;25989;25985:9;25980:14;;25824:176;;;;:::o;26006:180::-;26054:77;26051:1;26044:88;26151:4;26148:1;26141:15;26175:4;26172:1;26165:15;26192:180;26240:77;26237:1;26230:88;26337:4;26334:1;26327:15;26361:4;26358:1;26351:15;26378:180;26426:77;26423:1;26416:88;26523:4;26520:1;26513:15;26547:4;26544:1;26537:15;26564:180;26612:77;26609:1;26602:88;26709:4;26706:1;26699:15;26733:4;26730:1;26723:15;26750:180;26798:77;26795:1;26788:88;26895:4;26892:1;26885:15;26919:4;26916:1;26909:15;26936:117;27045:1;27042;27035:12;27059:117;27168:1;27165;27158:12;27182:117;27291:1;27288;27281:12;27305:117;27414:1;27411;27404:12;27428:117;27537:1;27534;27527:12;27551:117;27660:1;27657;27650:12;27674:102;27715:6;27766:2;27762:7;27757:2;27750:5;27746:14;27742:28;27732:38;;27674:102;;;:::o;27782:161::-;27922:13;27918:1;27910:6;27906:14;27899:37;27782:161;:::o;27949:168::-;28089:20;28085:1;28077:6;28073:14;28066:44;27949:168;:::o;28123:::-;28263:20;28259:1;28251:6;28247:14;28240:44;28123:168;:::o;28297:225::-;28437:34;28433:1;28425:6;28421:14;28414:58;28506:8;28501:2;28493:6;28489:15;28482:33;28297:225;:::o;28528:176::-;28668:28;28664:1;28656:6;28652:14;28645:52;28528:176;:::o;28710:178::-;28850:30;28846:1;28838:6;28834:14;28827:54;28710:178;:::o;28894:155::-;29034:7;29030:1;29022:6;29018:14;29011:31;28894:155;:::o;29055:182::-;29195:34;29191:1;29183:6;29179:14;29172:58;29055:182;:::o;29243:114::-;;:::o;29363:173::-;29503:25;29499:1;29491:6;29487:14;29480:49;29363:173;:::o;29542:181::-;29682:33;29678:1;29670:6;29666:14;29659:57;29542:181;:::o;29729:122::-;29802:24;29820:5;29802:24;:::i;:::-;29795:5;29792:35;29782:63;;29841:1;29838;29831:12;29782:63;29729:122;:::o;29857:116::-;29927:21;29942:5;29927:21;:::i;:::-;29920:5;29917:32;29907:60;;29963:1;29960;29953:12;29907:60;29857:116;:::o;29979:120::-;30051:23;30068:5;30051:23;:::i;:::-;30044:5;30041:34;30031:62;;30089:1;30086;30079:12;30031:62;29979:120;:::o;30105:122::-;30178:24;30196:5;30178:24;:::i;:::-;30171:5;30168:35;30158:63;;30217:1;30214;30207:12;30158:63;30105:122;:::o
Swarm Source
ipfs://9793f24801042318476db9510aaf88add980e06d3e6e9e676c020fc147577dc4
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.