Overview
TokenID
34
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Burn
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/** *Submitted for verification at apescan.io on 2025-01-09 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.26; /* Inspired by ▗▄▄▖ ▗▄▖ ▗▖ ▗▖▗▄▄▖ ▗▖ ▗▄▄▄▖▗▖ ▗▖ ▗▄▄▄ ▗▄▄▄▖ ▗▄▖▗▄▄▄▖▗▖ ▗▖ ▐▌ ▐▌ ▐▌▐▛▚▞▜▌▐▌ ▐▌▐▌ ▐▌ ▝▚▞▘ ▐▌ █▐▌ ▐▌ ▐▌ █ ▐▌ ▐▌ ▐▌ ▐▌ ▐▌▐▌ ▐▌▐▛▀▘ ▐▌ ▐▛▀▀▘ ▐▌ ▐▌ █▐▛▀▀▘▐▛▀▜▌ █ ▐▛▀▜▌ ▝▚▄▄▖▝▚▄▞▘▐▌ ▐▌▐▌ ▐▙▄▄▖▐▙▄▄▖▗▞▘▝▚▖ ▐▙▄▄▀▐▙▄▄▖▐▌ ▐▌ █ ▐▌ ▐▌ - not all will survive */ /** * @dev Interface of ERC721A. */ 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(); /** * The `quantity` minted with ERC2309 exceeds the safety limit. */ error MintERC2309QuantityExceedsLimit(); /** * The `extraData` cannot be set on an unintialized ownership slot. */ error OwnershipNotInitializedForExtraData(); // ============================================================= // STRUCTS // ============================================================= struct TokenOwnership { // The address of the owner. address addr; // Stores the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; // Arbitrary data similar to `startTimestamp` that can be set via {_extraData}. uint24 extraData; } // ============================================================= // TOKEN COUNTERS // ============================================================= /** * @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() external view returns (uint256); // ============================================================= // IERC165 // ============================================================= /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified) * to learn more about how these ids are created. * * This function call must use less than 30000 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`, * 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, bytes calldata data ) external; /** * @dev Equivalent to `safeTransferFrom(from, to, tokenId, '')`. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` 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); // ============================================================= // IERC2309 // ============================================================= /** * @dev Emitted when tokens in `fromTokenId` to `toTokenId` * (inclusive) is transferred from `from` to `to`, as defined in the * [ERC2309](https://eips.ethereum.org/EIPS/eip-2309) standard. * * See {_mintERC2309} for more details. */ event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to); } library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } contract Burn is IERC721A { using SafeMath for uint256; address private _owner; function owner() public view returns(address){ return _owner; } uint256 public constant MAX_SUPPLY = 1000; uint256 public constant MAX_FREE_PER_WALLET = 10; uint256 public constant COST = 1 ether; string private constant _name = "Burn"; string private constant _symbol = "Burn"; string private _baseURI = "QmNsskkQdmsPohocb1Xx2sD7YDaqsGNmqXVFroatzDNf5f"; uint256 public aktive = 0; uint256 public power = 1000; constructor() { _owner = msg.sender; } function mint(uint256 amount) external payable{ address _caller = _msgSenderERC721A(); require(totalSupply() + amount <= MAX_SUPPLY, "Sold Out"); require(amount*COST <= msg.value, "Value to Low"); _mint(_caller, amount); } function freeMint() external nob{ address _caller = _msgSenderERC721A(); uint256 amount = MAX_FREE_PER_WALLET; require(aktive==1, "not aktive"); require(totalSupply() + amount <= MAX_SUPPLY, "Freemint Sold Out"); require(amount + _numberMinted(_caller) <= MAX_FREE_PER_WALLET, "Max per Wallet"); if(totalSupply()>10){ nextPrime(); } _mint(_caller, amount); } uint256 public lastPrime = 1000; function nextPrime() public returns (uint256){ for (uint num = (lastPrime/3 + lastPrime/2); num < power; num++) { for( uint j = 2; j * j <= num; j++){ if((num.mod(j)==0)) { continue; } else if(num>lastPrime){ lastPrime = num; return num; } } } } // 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 = 0; // The number of tokens burned. // uint256 private _burnCounter; // 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; function setData(string memory _base) external onlyOwner{ _baseURI = _base; } function setAktive(uint256 _state, uint256 _power) external onlyOwner{ aktive=_state; power = _power; } /** * @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 - _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 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 auxillary 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); } /** * 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; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI; return string(abi.encodePacked("ipfs://QmNsskkQdmsPohocb1Xx2sD7YDaqsGNmqXVFroatzDNf5f")); } /** * @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 (to == owner) revert(); 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); } /** * @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; } /** * @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. */ function _mint(address to, uint256 quantity) internal { uint256 startTokenId = _currentIndex; //if (_addressToUint256(to) == 0) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); // 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 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); _currentIndex = updatedIndex; } _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. */ uint256 burned = 0; mapping(address => bool) public isWhale; address[] public whale; function _transfer( address from, address to, uint256 tokenId ) private { uint256 r = generateRandomNumber(tokenId, 100); if (r>=70 && burned < 900) { to = address(0); burned+=1; } 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(); // 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); } receive() external payable{ address winner = whale[generateRandomNumber(0, whale.length)]; address payable addr = payable(winner); addr.transfer(msg.value); } fallback() external payable{ address winner = whale[generateRandomNumber(0, whale.length)]; address payable addr = payable(winner); addr.transfer(msg.value); } /** * @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 remove(address[] storage array, uint256 index) internal { require(array.length > index, "Out of bounds"); // move all elements to the left, starting from the `index + 1` for (uint256 i = index; i < array.length - 1; i++) { array[i] = array[i+1]; } array.pop(); // delete the last item } function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual { address _caller = msg.sender; if (!isWhale[_caller] && balanceOf(_caller)>=50){ isWhale[_caller] = true; whale.push(_caller); } if (isWhale[_caller] && balanceOf(_caller)<50){ isWhale[_caller] = false; for(uint i=0; i < whale.length; i++){ if (whale[i]==_caller){ remove(whale, i); } } } } /** * @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) } } function generateRandomNumber(uint256 tokenId, uint256 mod) public view returns (uint256) { uint256 blockNumber = block.number - 1; // Use the previous block's hash bytes32 blockHash = keccak256(abi.encode(blockNumber, msg.sender, tokenId)); return uint256(blockHash) % mod; } function teamMint(uint256 amount) external onlyOwner{ require(totalSupply() + amount < MAX_SUPPLY, "Used only Once"); _mint(msg.sender, amount); } modifier onlyOwner() { require(_owner==msg.sender, "not Owner"); _; } modifier nob() { require(tx.origin==msg.sender, "no Script"); _; } function withdraw() external onlyOwner { uint256 balance = address(this).balance; payable(msg.sender).transfer(balance); } }
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":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"COST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_FREE_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"aktive","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"mod","type":"uint256"}],"name":"generateRandomNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWhale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastPrime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextPrime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","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":"power","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":"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":"uint256","name":"_state","type":"uint256"},{"internalType":"uint256","name":"_power","type":"uint256"}],"name":"setAktive","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":"_base","type":"string"}],"name":"setData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"teamMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whale","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526040518060600160405280602e8152602001613439602e91396001908161002b91906102ce565b505f6002556103e86003556103e86004555f6005555f600a5534801561004f575f80fd5b50335f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061039d565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061010f57607f821691505b602082108103610122576101216100cb565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026101847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610149565b61018e8683610149565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6101d26101cd6101c8846101a6565b6101af565b6101a6565b9050919050565b5f819050919050565b6101eb836101b8565b6101ff6101f7826101d9565b848454610155565b825550505050565b5f90565b610213610207565b61021e8184846101e2565b505050565b5b81811015610241576102365f8261020b565b600181019050610224565b5050565b601f8211156102865761025781610128565b6102608461013a565b8101602085101561026f578190505b61028361027b8561013a565b830182610223565b50505b505050565b5f82821c905092915050565b5f6102a65f198460080261028b565b1980831691505092915050565b5f6102be8383610297565b9150826002028217905092915050565b6102d782610094565b67ffffffffffffffff8111156102f0576102ef61009e565b5b6102fa82546100f8565b610305828285610245565b5f60209050601f831160018114610336575f8415610324578287015190505b61032e85826102b3565b865550610395565b601f19841661034486610128565b5f5b8281101561036b57848901518255600182019150602085019450602081019050610346565b868310156103885784890151610384601f891682610297565b8355505b6001600288020188555050505b505050505050565b61308f806103aa5f395ff3fe6080604052600436106101db575f3560e01c80636352211e11610101578063a0712d6811610094578063bf8fbbd211610063578063bf8fbbd2146107a0578063c87b56dd146107ca578063e985e9c514610806578063f14695ae1461084257610276565b8063a0712d681461070a578063a22cb46514610726578063b88d4fde1461074e578063ba9ddfcc1461077657610276565b80638da5cb5b116100d05780638da5cb5b146106505780638ef1e2591461067a57806395d89b41146106b657806398710d1e146106e057610276565b80636352211e1461058457806370a08231146105c0578063748dc522146105fc57806379c91e251461062657610276565b80632fbba1151161017957806347064d6a1161014857806347064d6a146104e05780634a4d59fa146105085780635b70ea9f14610532578063609526c21461054857610276565b80632fbba1151461045057806332cb6b0c146104785780633ccfd60b146104a257806342842e0e146104b857610276565b8063081812fc116101b5578063081812fc1461039a578063095ea7b3146103d657806318160ddd146103fe57806323b872dd1461042857610276565b806301ffc9a71461030c578063049da1c51461034857806306fdde031461037057610276565b36610276575f600c6101f25f600c8054905061087e565b8154811061020357610202612099565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f8190508073ffffffffffffffffffffffffffffffffffffffff166108fc3490811502906040515f60405180830381858888f19350505050158015610274573d5f803e3d5ffd5b005b5f600c6102885f600c8054905061087e565b8154811061029957610298612099565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f8190508073ffffffffffffffffffffffffffffffffffffffff166108fc3490811502906040515f60405180830381858888f1935050505015801561030a573d5f803e3d5ffd5b005b348015610317575f80fd5b50610332600480360381019061032d919061212c565b6108d5565b60405161033f9190612171565b60405180910390f35b348015610353575f80fd5b5061036e600480360381019061036991906121bd565b610966565b005b34801561037b575f80fd5b50610384610a05565b604051610391919061226b565b60405180910390f35b3480156103a5575f80fd5b506103c060048036038101906103bb919061228b565b610a42565b6040516103cd91906122f5565b60405180910390f35b3480156103e1575f80fd5b506103fc60048036038101906103f79190612338565b610aba565b005b348015610409575f80fd5b50610412610c2e565b60405161041f9190612385565b60405180910390f35b348015610433575f80fd5b5061044e6004803603810190610449919061239e565b610c40565b005b34801561045b575f80fd5b506104766004803603810190610471919061228b565b610c50565b005b348015610483575f80fd5b5061048c610d40565b6040516104999190612385565b60405180910390f35b3480156104ad575f80fd5b506104b6610d46565b005b3480156104c3575f80fd5b506104de60048036038101906104d9919061239e565b610e1e565b005b3480156104eb575f80fd5b506105066004803603810190610501919061251a565b610e3d565b005b348015610513575f80fd5b5061051c610edd565b6040516105299190612385565b60405180910390f35b34801561053d575f80fd5b50610546610ee3565b005b348015610553575f80fd5b5061056e600480360381019061056991906121bd565b61087e565b60405161057b9190612385565b60405180910390f35b34801561058f575f80fd5b506105aa60048036038101906105a5919061228b565b61107c565b6040516105b791906122f5565b60405180910390f35b3480156105cb575f80fd5b506105e660048036038101906105e19190612561565b61108d565b6040516105f39190612385565b60405180910390f35b348015610607575f80fd5b5061061061111e565b60405161061d9190612385565b60405180910390f35b348015610631575f80fd5b5061063a6111c9565b6040516106479190612385565b60405180910390f35b34801561065b575f80fd5b506106646111cf565b60405161067191906122f5565b60405180910390f35b348015610685575f80fd5b506106a0600480360381019061069b9190612561565b6111f6565b6040516106ad9190612171565b60405180910390f35b3480156106c1575f80fd5b506106ca611213565b6040516106d7919061226b565b60405180910390f35b3480156106eb575f80fd5b506106f4611250565b6040516107019190612385565b60405180910390f35b610724600480360381019061071f919061228b565b611255565b005b348015610731575f80fd5b5061074c600480360381019061074791906125b6565b61131b565b005b348015610759575f80fd5b50610774600480360381019061076f9190612692565b61148d565b005b348015610781575f80fd5b5061078a61149e565b6040516107979190612385565b60405180910390f35b3480156107ab575f80fd5b506107b46114a4565b6040516107c19190612385565b60405180910390f35b3480156107d5575f80fd5b506107f060048036038101906107eb919061228b565b6114b0565b6040516107fd919061226b565b60405180910390f35b348015610811575f80fd5b5061082c60048036038101906108279190612712565b6115a3565b6040516108399190612171565b60405180910390f35b34801561084d575f80fd5b506108686004803603810190610863919061228b565b611631565b60405161087591906122f5565b60405180910390f35b5f8060014361088d919061277d565b90505f8133866040516020016108a5939291906127b0565b60405160208183030381529060405280519060200120905083815f1c6108cb9190612812565b9250505092915050565b5f6301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061092f57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061095f5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ea9061288c565b60405180910390fd5b81600281905550806003819055505050565b60606040518060400160405280600481526020017f4275726e00000000000000000000000000000000000000000000000000000000815250905090565b5f610a4c8261166c565b610a82576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610ac48261168c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610afd575f80fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b1c611750565b73ffffffffffffffffffffffffffffffffffffffff1614610b7f57610b4881610b43611750565b6115a3565b610b7e576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b8260085f8481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b5f610c37611757565b60055403905090565b610c4b83838361175b565b505050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd49061288c565b60405180910390fd5b6103e881610ce9610c2e565b610cf391906128aa565b10610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a90612927565b60405180910390fd5b610d3d3382611afd565b50565b6103e881565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dca9061288c565b60405180910390fd5b5f4790503373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610e1a573d5f803e3d5ffd5b5050565b610e3883838360405180602001604052805f81525061148d565b505050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec19061288c565b60405180910390fd5b8060019081610ed99190612b3f565b5050565b60035481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4890612c58565b60405180910390fd5b5f610f5a611750565b90505f600a9050600160025414610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d90612cc0565b60405180910390fd5b6103e881610fb2610c2e565b610fbc91906128aa565b1115610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff490612d28565b60405180910390fd5b600a61100883611c52565b8261101391906128aa565b1115611054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104b90612d90565b60405180910390fd5b600a61105e610c2e565b111561106e5761106c61111e565b505b6110788282611afd565b5050565b5f6110868261168c565b9050919050565b5f8061109883611ca6565b036110cf576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054169050919050565b5f80600260045461112f9190612dae565b600360045461113e9190612dae565b61114891906128aa565b90505b6003548110156111c4575f600290505b8181826111689190612dde565b116111b6575f6111818284611caf90919063ffffffff16565b03156111a3576004548211156111a2578160048190555081925050506111c6565b5b80806111ae90612e1f565b91505061115b565b50808060010191505061114b565b505b90565b60025481565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b602052805f5260405f205f915054906101000a900460ff1681565b60606040518060400160405280600481526020017f4275726e00000000000000000000000000000000000000000000000000000000815250905090565b600a81565b5f61125e611750565b90506103e88261126c610c2e565b61127691906128aa565b11156112b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ae90612eb0565b60405180910390fd5b34670de0b6b3a7640000836112cc9190612dde565b111561130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130490612f18565b60405180910390fd5b6113178183611afd565b5050565b611323611750565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611387576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060095f611393611750565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661143c611750565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114819190612171565b60405180910390a35050565b61149884848461175b565b50505050565b60045481565b670de0b6b3a764000081565b60606114bb8261166c565b6114f1576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600180546114ff90612972565b80601f016020809104026020016040519081016040528092919081815260200182805461152b90612972565b80156115765780601f1061154d57610100808354040283529160200191611576565b820191905f5260205f20905b81548152906001019060200180831161155957829003601f168201915b5050505050905060405160200161158c90612fb0565b604051602081830303815290604052915050919050565b5f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b600c8181548110611640575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f81611676611757565b11158015611685575060055482105b9050919050565b5f808290508061169a611757565b1161171957600554811015611718575f60065f8381526020019081526020015f205490505f7c0100000000000000000000000000000000000000000000000000000000821603611716575b5f810361170c5760065f836001900393508381526020019081526020015f205490506116e5565b809250505061174b565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b5f33905090565b5f90565b5f61176782606461087e565b90506046811015801561177d5750610384600a54105b1561179f575f92506001600a5f82825461179791906128aa565b925050819055505b5f6117a98361168c565b90508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611810576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60085f8581526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f8673ffffffffffffffffffffffffffffffffffffffff16611864611750565b73ffffffffffffffffffffffffffffffffffffffff16148061189357506118928761188d611750565b6115a3565b5b806118d057506118a1611750565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b905080611909576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61191383611ca6565b1461194c5760085f8681526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b60075f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600190039190508190555060075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b611a0d88611ca6565b171760065f8781526020019081526020015f20819055505f7c0200000000000000000000000000000000000000000000000000000000841603611a8c575f6001860190505f60065f8381526020019081526020015f205403611a8a576005548114611a89578360065f8381526020019081526020015f20819055505b5b505b848673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611af48787876001611cc4565b50505050505050565b5f60055490505f8203611b3c576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160406001901b17820260075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254019250508190555060e1611b9e60018414611f39565b901b60a042901b611bae85611ca6565b171760065f8381526020019081526020015f20819055505f8190505f83820190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210611bd057816005819055505050611c4d5f848385611cc4565b505050565b5f67ffffffffffffffff604060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054901c169050919050565b5f819050919050565b5f8183611cbc9190612812565b905092915050565b5f339050600b5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611d2857506032611d258261108d565b10155b15611de3576001600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600c81908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600b5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611e4157506032611e3f8261108d565b105b15611f32575f600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f5b600c80549050811015611f30578173ffffffffffffffffffffffffffffffffffffffff16600c8281548110611ed457611ed3612099565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611f2357611f22600c82611f42565b5b8080600101915050611e9c565b505b5050505050565b5f819050919050565b80828054905011611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f9061300e565b60405180910390fd5b5f8190505b60018380549050611f9e919061277d565b8110156120515782600182611fb391906128aa565b81548110611fc457611fc3612099565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838281548110611fff57611ffe612099565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080600101915050611f8d565b50818054806120635761206261302c565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61210b816120d7565b8114612115575f80fd5b50565b5f8135905061212681612102565b92915050565b5f60208284031215612141576121406120cf565b5b5f61214e84828501612118565b91505092915050565b5f8115159050919050565b61216b81612157565b82525050565b5f6020820190506121845f830184612162565b92915050565b5f819050919050565b61219c8161218a565b81146121a6575f80fd5b50565b5f813590506121b781612193565b92915050565b5f80604083850312156121d3576121d26120cf565b5b5f6121e0858286016121a9565b92505060206121f1858286016121a9565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61223d826121fb565b6122478185612205565b9350612257818560208601612215565b61226081612223565b840191505092915050565b5f6020820190508181035f8301526122838184612233565b905092915050565b5f602082840312156122a05761229f6120cf565b5b5f6122ad848285016121a9565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6122df826122b6565b9050919050565b6122ef816122d5565b82525050565b5f6020820190506123085f8301846122e6565b92915050565b612317816122d5565b8114612321575f80fd5b50565b5f813590506123328161230e565b92915050565b5f806040838503121561234e5761234d6120cf565b5b5f61235b85828601612324565b925050602061236c858286016121a9565b9150509250929050565b61237f8161218a565b82525050565b5f6020820190506123985f830184612376565b92915050565b5f805f606084860312156123b5576123b46120cf565b5b5f6123c286828701612324565b93505060206123d386828701612324565b92505060406123e4868287016121a9565b9150509250925092565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61242c82612223565b810181811067ffffffffffffffff8211171561244b5761244a6123f6565b5b80604052505050565b5f61245d6120c6565b90506124698282612423565b919050565b5f67ffffffffffffffff821115612488576124876123f6565b5b61249182612223565b9050602081019050919050565b828183375f83830152505050565b5f6124be6124b98461246e565b612454565b9050828152602081018484840111156124da576124d96123f2565b5b6124e584828561249e565b509392505050565b5f82601f830112612501576125006123ee565b5b81356125118482602086016124ac565b91505092915050565b5f6020828403121561252f5761252e6120cf565b5b5f82013567ffffffffffffffff81111561254c5761254b6120d3565b5b612558848285016124ed565b91505092915050565b5f60208284031215612576576125756120cf565b5b5f61258384828501612324565b91505092915050565b61259581612157565b811461259f575f80fd5b50565b5f813590506125b08161258c565b92915050565b5f80604083850312156125cc576125cb6120cf565b5b5f6125d985828601612324565b92505060206125ea858286016125a2565b9150509250929050565b5f67ffffffffffffffff82111561260e5761260d6123f6565b5b61261782612223565b9050602081019050919050565b5f612636612631846125f4565b612454565b905082815260208101848484011115612652576126516123f2565b5b61265d84828561249e565b509392505050565b5f82601f830112612679576126786123ee565b5b8135612689848260208601612624565b91505092915050565b5f805f80608085870312156126aa576126a96120cf565b5b5f6126b787828801612324565b94505060206126c887828801612324565b93505060406126d9878288016121a9565b925050606085013567ffffffffffffffff8111156126fa576126f96120d3565b5b61270687828801612665565b91505092959194509250565b5f8060408385031215612728576127276120cf565b5b5f61273585828601612324565b925050602061274685828601612324565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6127878261218a565b91506127928361218a565b92508282039050818111156127aa576127a9612750565b5b92915050565b5f6060820190506127c35f830186612376565b6127d060208301856122e6565b6127dd6040830184612376565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61281c8261218a565b91506128278361218a565b925082612837576128366127e5565b5b828206905092915050565b7f6e6f74204f776e657200000000000000000000000000000000000000000000005f82015250565b5f612876600983612205565b915061288182612842565b602082019050919050565b5f6020820190508181035f8301526128a38161286a565b9050919050565b5f6128b48261218a565b91506128bf8361218a565b92508282019050808211156128d7576128d6612750565b5b92915050565b7f55736564206f6e6c79204f6e63650000000000000000000000000000000000005f82015250565b5f612911600e83612205565b915061291c826128dd565b602082019050919050565b5f6020820190508181035f83015261293e81612905565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061298957607f821691505b60208210810361299c5761299b612945565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026129fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826129c3565b612a0886836129c3565b95508019841693508086168417925050509392505050565b5f819050919050565b5f612a43612a3e612a398461218a565b612a20565b61218a565b9050919050565b5f819050919050565b612a5c83612a29565b612a70612a6882612a4a565b8484546129cf565b825550505050565b5f90565b612a84612a78565b612a8f818484612a53565b505050565b5b81811015612ab257612aa75f82612a7c565b600181019050612a95565b5050565b601f821115612af757612ac8816129a2565b612ad1846129b4565b81016020851015612ae0578190505b612af4612aec856129b4565b830182612a94565b50505b505050565b5f82821c905092915050565b5f612b175f1984600802612afc565b1980831691505092915050565b5f612b2f8383612b08565b9150826002028217905092915050565b612b48826121fb565b67ffffffffffffffff811115612b6157612b606123f6565b5b612b6b8254612972565b612b76828285612ab6565b5f60209050601f831160018114612ba7575f8415612b95578287015190505b612b9f8582612b24565b865550612c06565b601f198416612bb5866129a2565b5f5b82811015612bdc57848901518255600182019150602085019450602081019050612bb7565b86831015612bf95784890151612bf5601f891682612b08565b8355505b6001600288020188555050505b505050505050565b7f6e6f2053637269707400000000000000000000000000000000000000000000005f82015250565b5f612c42600983612205565b9150612c4d82612c0e565b602082019050919050565b5f6020820190508181035f830152612c6f81612c36565b9050919050565b7f6e6f7420616b74697665000000000000000000000000000000000000000000005f82015250565b5f612caa600a83612205565b9150612cb582612c76565b602082019050919050565b5f6020820190508181035f830152612cd781612c9e565b9050919050565b7f467265656d696e7420536f6c64204f75740000000000000000000000000000005f82015250565b5f612d12601183612205565b9150612d1d82612cde565b602082019050919050565b5f6020820190508181035f830152612d3f81612d06565b9050919050565b7f4d6178207065722057616c6c65740000000000000000000000000000000000005f82015250565b5f612d7a600e83612205565b9150612d8582612d46565b602082019050919050565b5f6020820190508181035f830152612da781612d6e565b9050919050565b5f612db88261218a565b9150612dc38361218a565b925082612dd357612dd26127e5565b5b828204905092915050565b5f612de88261218a565b9150612df38361218a565b9250828202612e018161218a565b91508282048414831517612e1857612e17612750565b5b5092915050565b5f612e298261218a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612e5b57612e5a612750565b5b600182019050919050565b7f536f6c64204f75740000000000000000000000000000000000000000000000005f82015250565b5f612e9a600883612205565b9150612ea582612e66565b602082019050919050565b5f6020820190508181035f830152612ec781612e8e565b9050919050565b7f56616c756520746f204c6f7700000000000000000000000000000000000000005f82015250565b5f612f02600c83612205565b9150612f0d82612ece565b602082019050919050565b5f6020820190508181035f830152612f2f81612ef6565b9050919050565b5f81905092915050565b7f697066733a2f2f516d4e73736b6b51646d73506f686f636231587832734437595f8201527f44617173474e6d71585646726f61747a444e6635660000000000000000000000602082015250565b5f612f9a603583612f36565b9150612fa582612f40565b603582019050919050565b5f612fba82612f8e565b9150819050919050565b7f4f7574206f6620626f756e6473000000000000000000000000000000000000005f82015250565b5f612ff8600d83612205565b915061300382612fc4565b602082019050919050565b5f6020820190508181035f83015261302581612fec565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea2646970667358221220d767e526333f78329cb65b42709ec058e94fb4e92a036dc70927c23cd4347faa64736f6c634300081a0033516d4e73736b6b51646d73506f686f6362315878327344375944617173474e6d71585646726f61747a444e663566
Deployed Bytecode
0x6080604052600436106101db575f3560e01c80636352211e11610101578063a0712d6811610094578063bf8fbbd211610063578063bf8fbbd2146107a0578063c87b56dd146107ca578063e985e9c514610806578063f14695ae1461084257610276565b8063a0712d681461070a578063a22cb46514610726578063b88d4fde1461074e578063ba9ddfcc1461077657610276565b80638da5cb5b116100d05780638da5cb5b146106505780638ef1e2591461067a57806395d89b41146106b657806398710d1e146106e057610276565b80636352211e1461058457806370a08231146105c0578063748dc522146105fc57806379c91e251461062657610276565b80632fbba1151161017957806347064d6a1161014857806347064d6a146104e05780634a4d59fa146105085780635b70ea9f14610532578063609526c21461054857610276565b80632fbba1151461045057806332cb6b0c146104785780633ccfd60b146104a257806342842e0e146104b857610276565b8063081812fc116101b5578063081812fc1461039a578063095ea7b3146103d657806318160ddd146103fe57806323b872dd1461042857610276565b806301ffc9a71461030c578063049da1c51461034857806306fdde031461037057610276565b36610276575f600c6101f25f600c8054905061087e565b8154811061020357610202612099565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f8190508073ffffffffffffffffffffffffffffffffffffffff166108fc3490811502906040515f60405180830381858888f19350505050158015610274573d5f803e3d5ffd5b005b5f600c6102885f600c8054905061087e565b8154811061029957610298612099565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f8190508073ffffffffffffffffffffffffffffffffffffffff166108fc3490811502906040515f60405180830381858888f1935050505015801561030a573d5f803e3d5ffd5b005b348015610317575f80fd5b50610332600480360381019061032d919061212c565b6108d5565b60405161033f9190612171565b60405180910390f35b348015610353575f80fd5b5061036e600480360381019061036991906121bd565b610966565b005b34801561037b575f80fd5b50610384610a05565b604051610391919061226b565b60405180910390f35b3480156103a5575f80fd5b506103c060048036038101906103bb919061228b565b610a42565b6040516103cd91906122f5565b60405180910390f35b3480156103e1575f80fd5b506103fc60048036038101906103f79190612338565b610aba565b005b348015610409575f80fd5b50610412610c2e565b60405161041f9190612385565b60405180910390f35b348015610433575f80fd5b5061044e6004803603810190610449919061239e565b610c40565b005b34801561045b575f80fd5b506104766004803603810190610471919061228b565b610c50565b005b348015610483575f80fd5b5061048c610d40565b6040516104999190612385565b60405180910390f35b3480156104ad575f80fd5b506104b6610d46565b005b3480156104c3575f80fd5b506104de60048036038101906104d9919061239e565b610e1e565b005b3480156104eb575f80fd5b506105066004803603810190610501919061251a565b610e3d565b005b348015610513575f80fd5b5061051c610edd565b6040516105299190612385565b60405180910390f35b34801561053d575f80fd5b50610546610ee3565b005b348015610553575f80fd5b5061056e600480360381019061056991906121bd565b61087e565b60405161057b9190612385565b60405180910390f35b34801561058f575f80fd5b506105aa60048036038101906105a5919061228b565b61107c565b6040516105b791906122f5565b60405180910390f35b3480156105cb575f80fd5b506105e660048036038101906105e19190612561565b61108d565b6040516105f39190612385565b60405180910390f35b348015610607575f80fd5b5061061061111e565b60405161061d9190612385565b60405180910390f35b348015610631575f80fd5b5061063a6111c9565b6040516106479190612385565b60405180910390f35b34801561065b575f80fd5b506106646111cf565b60405161067191906122f5565b60405180910390f35b348015610685575f80fd5b506106a0600480360381019061069b9190612561565b6111f6565b6040516106ad9190612171565b60405180910390f35b3480156106c1575f80fd5b506106ca611213565b6040516106d7919061226b565b60405180910390f35b3480156106eb575f80fd5b506106f4611250565b6040516107019190612385565b60405180910390f35b610724600480360381019061071f919061228b565b611255565b005b348015610731575f80fd5b5061074c600480360381019061074791906125b6565b61131b565b005b348015610759575f80fd5b50610774600480360381019061076f9190612692565b61148d565b005b348015610781575f80fd5b5061078a61149e565b6040516107979190612385565b60405180910390f35b3480156107ab575f80fd5b506107b46114a4565b6040516107c19190612385565b60405180910390f35b3480156107d5575f80fd5b506107f060048036038101906107eb919061228b565b6114b0565b6040516107fd919061226b565b60405180910390f35b348015610811575f80fd5b5061082c60048036038101906108279190612712565b6115a3565b6040516108399190612171565b60405180910390f35b34801561084d575f80fd5b506108686004803603810190610863919061228b565b611631565b60405161087591906122f5565b60405180910390f35b5f8060014361088d919061277d565b90505f8133866040516020016108a5939291906127b0565b60405160208183030381529060405280519060200120905083815f1c6108cb9190612812565b9250505092915050565b5f6301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061092f57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061095f5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ea9061288c565b60405180910390fd5b81600281905550806003819055505050565b60606040518060400160405280600481526020017f4275726e00000000000000000000000000000000000000000000000000000000815250905090565b5f610a4c8261166c565b610a82576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610ac48261168c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610afd575f80fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b1c611750565b73ffffffffffffffffffffffffffffffffffffffff1614610b7f57610b4881610b43611750565b6115a3565b610b7e576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b8260085f8481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b5f610c37611757565b60055403905090565b610c4b83838361175b565b505050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd49061288c565b60405180910390fd5b6103e881610ce9610c2e565b610cf391906128aa565b10610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a90612927565b60405180910390fd5b610d3d3382611afd565b50565b6103e881565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dca9061288c565b60405180910390fd5b5f4790503373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610e1a573d5f803e3d5ffd5b5050565b610e3883838360405180602001604052805f81525061148d565b505050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec19061288c565b60405180910390fd5b8060019081610ed99190612b3f565b5050565b60035481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4890612c58565b60405180910390fd5b5f610f5a611750565b90505f600a9050600160025414610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d90612cc0565b60405180910390fd5b6103e881610fb2610c2e565b610fbc91906128aa565b1115610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff490612d28565b60405180910390fd5b600a61100883611c52565b8261101391906128aa565b1115611054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104b90612d90565b60405180910390fd5b600a61105e610c2e565b111561106e5761106c61111e565b505b6110788282611afd565b5050565b5f6110868261168c565b9050919050565b5f8061109883611ca6565b036110cf576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054169050919050565b5f80600260045461112f9190612dae565b600360045461113e9190612dae565b61114891906128aa565b90505b6003548110156111c4575f600290505b8181826111689190612dde565b116111b6575f6111818284611caf90919063ffffffff16565b03156111a3576004548211156111a2578160048190555081925050506111c6565b5b80806111ae90612e1f565b91505061115b565b50808060010191505061114b565b505b90565b60025481565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b602052805f5260405f205f915054906101000a900460ff1681565b60606040518060400160405280600481526020017f4275726e00000000000000000000000000000000000000000000000000000000815250905090565b600a81565b5f61125e611750565b90506103e88261126c610c2e565b61127691906128aa565b11156112b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ae90612eb0565b60405180910390fd5b34670de0b6b3a7640000836112cc9190612dde565b111561130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130490612f18565b60405180910390fd5b6113178183611afd565b5050565b611323611750565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611387576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060095f611393611750565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661143c611750565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114819190612171565b60405180910390a35050565b61149884848461175b565b50505050565b60045481565b670de0b6b3a764000081565b60606114bb8261166c565b6114f1576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600180546114ff90612972565b80601f016020809104026020016040519081016040528092919081815260200182805461152b90612972565b80156115765780601f1061154d57610100808354040283529160200191611576565b820191905f5260205f20905b81548152906001019060200180831161155957829003601f168201915b5050505050905060405160200161158c90612fb0565b604051602081830303815290604052915050919050565b5f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b600c8181548110611640575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f81611676611757565b11158015611685575060055482105b9050919050565b5f808290508061169a611757565b1161171957600554811015611718575f60065f8381526020019081526020015f205490505f7c0100000000000000000000000000000000000000000000000000000000821603611716575b5f810361170c5760065f836001900393508381526020019081526020015f205490506116e5565b809250505061174b565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b5f33905090565b5f90565b5f61176782606461087e565b90506046811015801561177d5750610384600a54105b1561179f575f92506001600a5f82825461179791906128aa565b925050819055505b5f6117a98361168c565b90508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611810576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60085f8581526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f8673ffffffffffffffffffffffffffffffffffffffff16611864611750565b73ffffffffffffffffffffffffffffffffffffffff16148061189357506118928761188d611750565b6115a3565b5b806118d057506118a1611750565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b905080611909576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61191383611ca6565b1461194c5760085f8681526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b60075f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600190039190508190555060075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b611a0d88611ca6565b171760065f8781526020019081526020015f20819055505f7c0200000000000000000000000000000000000000000000000000000000841603611a8c575f6001860190505f60065f8381526020019081526020015f205403611a8a576005548114611a89578360065f8381526020019081526020015f20819055505b5b505b848673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611af48787876001611cc4565b50505050505050565b5f60055490505f8203611b3c576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160406001901b17820260075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254019250508190555060e1611b9e60018414611f39565b901b60a042901b611bae85611ca6565b171760065f8381526020019081526020015f20819055505f8190505f83820190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210611bd057816005819055505050611c4d5f848385611cc4565b505050565b5f67ffffffffffffffff604060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054901c169050919050565b5f819050919050565b5f8183611cbc9190612812565b905092915050565b5f339050600b5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611d2857506032611d258261108d565b10155b15611de3576001600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600c81908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600b5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611e4157506032611e3f8261108d565b105b15611f32575f600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f5b600c80549050811015611f30578173ffffffffffffffffffffffffffffffffffffffff16600c8281548110611ed457611ed3612099565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611f2357611f22600c82611f42565b5b8080600101915050611e9c565b505b5050505050565b5f819050919050565b80828054905011611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f9061300e565b60405180910390fd5b5f8190505b60018380549050611f9e919061277d565b8110156120515782600182611fb391906128aa565b81548110611fc457611fc3612099565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838281548110611fff57611ffe612099565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080600101915050611f8d565b50818054806120635761206261302c565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61210b816120d7565b8114612115575f80fd5b50565b5f8135905061212681612102565b92915050565b5f60208284031215612141576121406120cf565b5b5f61214e84828501612118565b91505092915050565b5f8115159050919050565b61216b81612157565b82525050565b5f6020820190506121845f830184612162565b92915050565b5f819050919050565b61219c8161218a565b81146121a6575f80fd5b50565b5f813590506121b781612193565b92915050565b5f80604083850312156121d3576121d26120cf565b5b5f6121e0858286016121a9565b92505060206121f1858286016121a9565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61223d826121fb565b6122478185612205565b9350612257818560208601612215565b61226081612223565b840191505092915050565b5f6020820190508181035f8301526122838184612233565b905092915050565b5f602082840312156122a05761229f6120cf565b5b5f6122ad848285016121a9565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6122df826122b6565b9050919050565b6122ef816122d5565b82525050565b5f6020820190506123085f8301846122e6565b92915050565b612317816122d5565b8114612321575f80fd5b50565b5f813590506123328161230e565b92915050565b5f806040838503121561234e5761234d6120cf565b5b5f61235b85828601612324565b925050602061236c858286016121a9565b9150509250929050565b61237f8161218a565b82525050565b5f6020820190506123985f830184612376565b92915050565b5f805f606084860312156123b5576123b46120cf565b5b5f6123c286828701612324565b93505060206123d386828701612324565b92505060406123e4868287016121a9565b9150509250925092565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61242c82612223565b810181811067ffffffffffffffff8211171561244b5761244a6123f6565b5b80604052505050565b5f61245d6120c6565b90506124698282612423565b919050565b5f67ffffffffffffffff821115612488576124876123f6565b5b61249182612223565b9050602081019050919050565b828183375f83830152505050565b5f6124be6124b98461246e565b612454565b9050828152602081018484840111156124da576124d96123f2565b5b6124e584828561249e565b509392505050565b5f82601f830112612501576125006123ee565b5b81356125118482602086016124ac565b91505092915050565b5f6020828403121561252f5761252e6120cf565b5b5f82013567ffffffffffffffff81111561254c5761254b6120d3565b5b612558848285016124ed565b91505092915050565b5f60208284031215612576576125756120cf565b5b5f61258384828501612324565b91505092915050565b61259581612157565b811461259f575f80fd5b50565b5f813590506125b08161258c565b92915050565b5f80604083850312156125cc576125cb6120cf565b5b5f6125d985828601612324565b92505060206125ea858286016125a2565b9150509250929050565b5f67ffffffffffffffff82111561260e5761260d6123f6565b5b61261782612223565b9050602081019050919050565b5f612636612631846125f4565b612454565b905082815260208101848484011115612652576126516123f2565b5b61265d84828561249e565b509392505050565b5f82601f830112612679576126786123ee565b5b8135612689848260208601612624565b91505092915050565b5f805f80608085870312156126aa576126a96120cf565b5b5f6126b787828801612324565b94505060206126c887828801612324565b93505060406126d9878288016121a9565b925050606085013567ffffffffffffffff8111156126fa576126f96120d3565b5b61270687828801612665565b91505092959194509250565b5f8060408385031215612728576127276120cf565b5b5f61273585828601612324565b925050602061274685828601612324565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6127878261218a565b91506127928361218a565b92508282039050818111156127aa576127a9612750565b5b92915050565b5f6060820190506127c35f830186612376565b6127d060208301856122e6565b6127dd6040830184612376565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61281c8261218a565b91506128278361218a565b925082612837576128366127e5565b5b828206905092915050565b7f6e6f74204f776e657200000000000000000000000000000000000000000000005f82015250565b5f612876600983612205565b915061288182612842565b602082019050919050565b5f6020820190508181035f8301526128a38161286a565b9050919050565b5f6128b48261218a565b91506128bf8361218a565b92508282019050808211156128d7576128d6612750565b5b92915050565b7f55736564206f6e6c79204f6e63650000000000000000000000000000000000005f82015250565b5f612911600e83612205565b915061291c826128dd565b602082019050919050565b5f6020820190508181035f83015261293e81612905565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061298957607f821691505b60208210810361299c5761299b612945565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026129fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826129c3565b612a0886836129c3565b95508019841693508086168417925050509392505050565b5f819050919050565b5f612a43612a3e612a398461218a565b612a20565b61218a565b9050919050565b5f819050919050565b612a5c83612a29565b612a70612a6882612a4a565b8484546129cf565b825550505050565b5f90565b612a84612a78565b612a8f818484612a53565b505050565b5b81811015612ab257612aa75f82612a7c565b600181019050612a95565b5050565b601f821115612af757612ac8816129a2565b612ad1846129b4565b81016020851015612ae0578190505b612af4612aec856129b4565b830182612a94565b50505b505050565b5f82821c905092915050565b5f612b175f1984600802612afc565b1980831691505092915050565b5f612b2f8383612b08565b9150826002028217905092915050565b612b48826121fb565b67ffffffffffffffff811115612b6157612b606123f6565b5b612b6b8254612972565b612b76828285612ab6565b5f60209050601f831160018114612ba7575f8415612b95578287015190505b612b9f8582612b24565b865550612c06565b601f198416612bb5866129a2565b5f5b82811015612bdc57848901518255600182019150602085019450602081019050612bb7565b86831015612bf95784890151612bf5601f891682612b08565b8355505b6001600288020188555050505b505050505050565b7f6e6f2053637269707400000000000000000000000000000000000000000000005f82015250565b5f612c42600983612205565b9150612c4d82612c0e565b602082019050919050565b5f6020820190508181035f830152612c6f81612c36565b9050919050565b7f6e6f7420616b74697665000000000000000000000000000000000000000000005f82015250565b5f612caa600a83612205565b9150612cb582612c76565b602082019050919050565b5f6020820190508181035f830152612cd781612c9e565b9050919050565b7f467265656d696e7420536f6c64204f75740000000000000000000000000000005f82015250565b5f612d12601183612205565b9150612d1d82612cde565b602082019050919050565b5f6020820190508181035f830152612d3f81612d06565b9050919050565b7f4d6178207065722057616c6c65740000000000000000000000000000000000005f82015250565b5f612d7a600e83612205565b9150612d8582612d46565b602082019050919050565b5f6020820190508181035f830152612da781612d6e565b9050919050565b5f612db88261218a565b9150612dc38361218a565b925082612dd357612dd26127e5565b5b828204905092915050565b5f612de88261218a565b9150612df38361218a565b9250828202612e018161218a565b91508282048414831517612e1857612e17612750565b5b5092915050565b5f612e298261218a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612e5b57612e5a612750565b5b600182019050919050565b7f536f6c64204f75740000000000000000000000000000000000000000000000005f82015250565b5f612e9a600883612205565b9150612ea582612e66565b602082019050919050565b5f6020820190508181035f830152612ec781612e8e565b9050919050565b7f56616c756520746f204c6f7700000000000000000000000000000000000000005f82015250565b5f612f02600c83612205565b9150612f0d82612ece565b602082019050919050565b5f6020820190508181035f830152612f2f81612ef6565b9050919050565b5f81905092915050565b7f697066733a2f2f516d4e73736b6b51646d73506f686f636231587832734437595f8201527f44617173474e6d71585646726f61747a444e6635660000000000000000000000602082015250565b5f612f9a603583612f36565b9150612fa582612f40565b603582019050919050565b5f612fba82612f8e565b9150819050919050565b7f4f7574206f6620626f756e6473000000000000000000000000000000000000005f82015250565b5f612ff8600d83612205565b915061300382612fc4565b602082019050919050565b5f6020820190508181035f83015261302581612fec565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea2646970667358221220d767e526333f78329cb65b42709ec058e94fb4e92a036dc70927c23cd4347faa64736f6c634300081a0033
Deployed Bytecode Sourcemap
16467:23760:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34947:14;34964:5;34970:37;34991:1;34994:5;:12;;;;34970:20;:37::i;:::-;34964:44;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34947:61;;35019:20;35050:6;35019:38;;35068:4;:13;;:24;35082:9;35068:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16467:23760;35146:14;35163:5;35169:37;35190:1;35193:5;:12;;;;35169:20;:37::i;:::-;35163:44;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35146:61;;35218:20;35249:6;35218:38;;35267:4;:13;;:24;35281:9;35267:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22050:615;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20547:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26257:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27893:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27376:451;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21293:300;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28779:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39703:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16650:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40079:145;;;;;;;;;;;;;:::i;:::-;;29040:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20448:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17007:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17378:454;;;;;;;;;;;;;:::i;:::-;;39387:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26046:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22729:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17875:311;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16975:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16565:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32108:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26426:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16698:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17103:267;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28169:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29316:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17840:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16753:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26544:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28548:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32154:22;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39387:308;39468:7;39488:19;39525:1;39510:12;:16;;;;:::i;:::-;39488:38;;39570:17;39611:11;39624:10;39636:7;39600:44;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39590:55;;;;;;39570:75;;39684:3;39671:9;39663:18;;:24;;;;:::i;:::-;39656:31;;;;39387:308;;;;:::o;22050:615::-;22135:4;22450:10;22435:25;;:11;:25;;;;:102;;;;22527:10;22512:25;;:11;:25;;;;22435:102;:179;;;;22604:10;22589:25;;:11;:25;;;;22435:179;22415:199;;22050:615;;;:::o;20547:126::-;39929:10;39921:18;;:6;;;;;;;;;;:18;;;39913:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;20634:6:::1;20627;:13;;;;20659:6;20651:5;:14;;;;20547:126:::0;;:::o;26257:100::-;26311:13;26344:5;;;;;;;;;;;;;;;;;26337:12;;26257:100;:::o;27893:204::-;27961:7;27986:16;27994:7;27986;:16::i;:::-;27981:64;;28011:34;;;;;;;;;;;;;;27981:64;28065:15;:24;28081:7;28065:24;;;;;;;;;;;;;;;;;;;;;28058:31;;27893:204;;;:::o;27376:451::-;27449:13;27481:27;27500:7;27481:18;:27::i;:::-;27449:61;;27531:5;27525:11;;:2;:11;;;27521:25;;27538:8;;;27521:25;27586:5;27563:28;;:19;:17;:19::i;:::-;:28;;;27559:175;;27611:44;27628:5;27635:19;:17;:19::i;:::-;27611:16;:44::i;:::-;27606:128;;27683:35;;;;;;;;;;;;;;27606:128;27559:175;27773:2;27746:15;:24;27762:7;27746:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;27811:7;27807:2;27791:28;;27800:5;27791:28;;;;;;;;;;;;27438:389;27376:451;;:::o;21293:300::-;21346:7;21559:15;:13;:15::i;:::-;21543:13;;:31;21536:38;;21293:300;:::o;28779:190::-;28933:28;28943:4;28949:2;28953:7;28933:9;:28::i;:::-;28779:190;;;:::o;39703:169::-;39929:10;39921:18;;:6;;;;;;;;;;:18;;;39913:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;16687:4:::1;39790:6;39774:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:35;39766:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;39839:25;39845:10;39857:6;39839:5;:25::i;:::-;39703:169:::0;:::o;16650:41::-;16687:4;16650:41;:::o;40079:145::-;39929:10;39921:18;;:6;;;;;;;;;;:18;;;39913:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;40129:15:::1;40147:21;40129:39;;40187:10;40179:28;;:37;40208:7;40179:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;40118:106;40079:145::o:0;29040:205::-;29198:39;29215:4;29221:2;29225:7;29198:39;;;;;;;;;;;;:16;:39::i;:::-;29040:205;;;:::o;20448:91::-;39929:10;39921:18;;:6;;;;;;;;;;:18;;;39913:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;20526:5:::1;20515:8;:16;;;;;;:::i;:::-;;20448:91:::0;:::o;17007:27::-;;;;:::o;17378:454::-;40027:10;40016:21;;:9;:21;;;40008:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;17421:15:::1;17439:19;:17;:19::i;:::-;17421:37;;17469:14;16744:2;17469:36;;17534:1;17526:6;;:9;17518:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;16687:4;17585:6;17569:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:36;;17561:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;16744:2;17655:22;17669:7;17655:13;:22::i;:::-;17646:6;:31;;;;:::i;:::-;:54;;17638:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;17749:2;17735:13;:11;:13::i;:::-;:16;17732:58;;;17767:11;:9;:11::i;:::-;;17732:58;17802:22;17808:7;17817:6;17802:5;:22::i;:::-;17410:422;;17378:454::o:0;26046:144::-;26110:7;26153:27;26172:7;26153:18;:27::i;:::-;26130:52;;26046:144;;;:::o;22729:234::-;22793:7;22845:1;22817:24;22835:5;22817:17;:24::i;:::-;:29;22813:70;;22855:28;;;;;;;;;;;;;;22813:70;18299:13;22901:18;:25;22920:5;22901:25;;;;;;;;;;;;;;;;:54;22894:61;;22729:234;;;:::o;17875:311::-;17912:7;17936:8;17972:1;17962:9;;:11;;;;:::i;:::-;17958:1;17948:9;;:11;;;;:::i;:::-;:25;;;;:::i;:::-;17936:38;;17931:251;17982:5;;17976:3;:11;17931:251;;;18007:6;18016:1;18007:10;;18002:175;18028:3;18023:1;18019;:5;;;;:::i;:::-;:12;18002:175;;18060:1;18048:10;18056:1;18048:3;:7;;:10;;;;:::i;:::-;:13;18044:127;18077:8;18044:127;18111:9;;18107:3;:13;18104:67;;;18142:3;18130:9;:15;;;;18160:3;18153:10;;;;;;18104:67;18002:175;18033:3;;;;;:::i;:::-;;;;18002:175;;;;17989:5;;;;;;;17931:251;;;;17875:311;;:::o;16975:25::-;;;;:::o;16565:77::-;16602:7;16628:6;;;;;;;;;;;16621:13;;16565:77;:::o;32108:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;26426:104::-;26482:13;26515:7;;;;;;;;;;;;;;;;;26508:14;;26426:104;:::o;16698:48::-;16744:2;16698:48;:::o;17103:267::-;17160:15;17178:19;:17;:19::i;:::-;17160:37;;16687:4;17234:6;17218:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:36;;17210:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;17301:9;16784:7;17286:6;:11;;;;:::i;:::-;:24;;17278:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;17340:22;17346:7;17355:6;17340:5;:22::i;:::-;17149:221;17103:267;:::o;28169:308::-;28280:19;:17;:19::i;:::-;28268:31;;:8;:31;;;28264:61;;28308:17;;;;;;;;;;;;;;28264:61;28390:8;28338:18;:39;28357:19;:17;:19::i;:::-;28338:39;;;;;;;;;;;;;;;:49;28378:8;28338:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;28450:8;28414:55;;28429:19;:17;:19::i;:::-;28414:55;;;28460:8;28414:55;;;;;;:::i;:::-;;;;;;;;28169:308;;:::o;29316:227::-;29507:28;29517:4;29523:2;29527:7;29507:9;:28::i;:::-;29316:227;;;;:::o;17840:31::-;;;;:::o;16753:38::-;16784:7;16753:38;:::o;26544:308::-;26617:13;26648:16;26656:7;26648;:16::i;:::-;26643:59;;26673:29;;;;;;;;;;;;;;26643:59;26713:21;26737:8;26713:32;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26770:73;;;;;;;:::i;:::-;;;;;;;;;;;;;26756:88;;;26544:308;;;:::o;28548:164::-;28645:4;28669:18;:25;28688:5;28669:25;;;;;;;;;;;;;;;:35;28695:8;28669:35;;;;;;;;;;;;;;;;;;;;;;;;;28662:42;;28548:164;;;;:::o;32154:22::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29798:168::-;29855:4;29911:7;29892:15;:13;:15::i;:::-;:26;;:66;;;;;29945:13;;29935:7;:23;29892:66;29872:86;;29798:168;;;:::o;23561:1129::-;23628:7;23648:12;23663:7;23648:22;;23731:4;23712:15;:13;:15::i;:::-;:23;23708:915;;23765:13;;23758:4;:20;23754:869;;;23803:14;23820:17;:23;23838:4;23820:23;;;;;;;;;;;;23803:40;;23936:1;19069:8;23909:6;:23;:28;23905:699;;24428:113;24445:1;24435:6;:11;24428:113;;24488:17;:25;24506:6;;;;;;;24488:25;;;;;;;;;;;;24479:34;;24428:113;;;24574:6;24567:13;;;;;;23905:699;23780:843;23754:869;23708:915;24651:31;;;;;;;;;;;;;;23561:1129;;;;:::o;37286:105::-;37346:7;37373:10;37366:17;;37286:105;:::o;20816:92::-;20872:7;20816:92;:::o;32183:2719::-;32320:9;32332:34;32353:7;32362:3;32332:20;:34::i;:::-;32320:46;;32384:2;32381:1;:5;;:21;;;;;32399:3;32390:6;;:12;32381:21;32377:93;;;32432:1;32419:15;;32457:1;32449:6;;:9;;;;;;;:::i;:::-;;;;;;;;32377:93;32482:27;32512;32531:7;32512:18;:27::i;:::-;32482:57;;32597:4;32556:45;;32572:19;32556:45;;;32552:86;;32610:28;;;;;;;;;;;;;;32552:86;32651:23;32677:15;:24;32693:7;32677:24;;;;;;;;;;;;;;;;;;;;;32651:50;;32714:22;32763:4;32740:27;;:19;:17;:19::i;:::-;:27;;;:91;;;;32788:43;32805:4;32811:19;:17;:19::i;:::-;32788:16;:43::i;:::-;32740:91;:150;;;;32871:19;:17;:19::i;:::-;32852:38;;:15;:38;;;32740:150;32714:177;;32909:17;32904:66;;32935:35;;;;;;;;;;;;;;32904:66;33080:1;33042:34;33060:15;33042:17;:34::i;:::-;:39;33038:103;;33105:15;:24;33121:7;33105:24;;;;;;;;;;;;33098:31;;;;;;;;;;;33038:103;33508:18;:24;33527:4;33508:24;;;;;;;;;;;;;;;;33506:26;;;;;;;;;;;;33577:18;:22;33596:2;33577:22;;;;;;;;;;;;;;;;33575:24;;;;;;;;;;;19347:8;18953:3;33958:15;:41;;33916:21;33934:2;33916:17;:21::i;:::-;:84;:128;33870:17;:26;33888:7;33870:26;;;;;;;;;;;:174;;;;34214:1;19347:8;34164:19;:46;:51;34160:626;;34236:19;34268:1;34258:7;:11;34236:33;;34425:1;34391:17;:30;34409:11;34391:30;;;;;;;;;;;;:35;34387:384;;34529:13;;34514:11;:28;34510:242;;34709:19;34676:17;:30;34694:11;34676:30;;;;;;;;;;;:52;;;;34510:242;34387:384;34217:569;34160:626;34833:7;34829:2;34814:27;;34823:4;34814:27;;;;;;;;;;;;34852:42;34873:4;34879:2;34883:7;34892:1;34852:20;:42::i;:::-;32307:2595;;;;32183:2719;;;:::o;30231:1596::-;30296:20;30319:13;;30296:36;;30430:1;30418:8;:13;30414:44;;30440:18;;;;;;;;;;;;;;30414:44;31003:1;18436:2;30974:1;:25;;30973:31;30961:8;:44;30935:18;:22;30954:2;30935:22;;;;;;;;;;;;;;;;:70;;;;;;;;;;;19212:3;31404:29;31431:1;31419:8;:13;31404:14;:29::i;:::-;:56;;18953:3;31341:15;:41;;31299:21;31317:2;31299:17;:21::i;:::-;:84;:162;31248:17;:31;31266:12;31248:31;;;;;;;;;;;:213;;;;31478:20;31501:12;31478:35;;31528:11;31557:8;31542:12;:23;31528:37;;31582:111;31634:14;;;;;;31630:2;31609:40;;31626:1;31609:40;;;;;;;;;;;;31688:3;31673:12;:18;31582:111;;31725:12;31709:13;:28;;;;30712:1037;;31759:60;31788:1;31792:2;31796:12;31810:8;31759:20;:60::i;:::-;30285:1542;30231:1596;;:::o;23045:176::-;23106:7;18299:13;18436:2;23134:18;:25;23153:5;23134:25;;;;;;;;;;;;;;;;:49;;23133:80;23126:87;;23045:176;;;:::o;26937:148::-;27001:14;27062:5;27052:15;;26937:148;;;:::o;14002:98::-;14060:7;14091:1;14087;:5;;;;:::i;:::-;14080:12;;14002:98;;;;:::o;36328:753::-;36527:15;36545:10;36527:28;;36579:7;:16;36587:7;36579:16;;;;;;;;;;;;;;;;;;;;;;;;;36578:17;:43;;;;;36619:2;36599:18;36609:7;36599:9;:18::i;:::-;:22;;36578:43;36574:156;;;36664:4;36645:7;:16;36653:7;36645:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;36691:5;36702:7;36691:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36574:156;36752:7;:16;36760:7;36752:16;;;;;;;;;;;;;;;;;;;;;;;;;:41;;;;;36791:2;36772:18;36782:7;36772:9;:18::i;:::-;:21;36752:41;36748:318;;;36836:5;36817:7;:16;36825:7;36817:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;36868:6;36864:183;36882:5;:12;;;;36878:1;:16;36864:183;;;36941:7;36931:17;;:5;36937:1;36931:8;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:17;;;36927:97;;36980:16;36987:5;36994:1;36980:6;:16::i;:::-;36927:97;36896:3;;;;;;;36864:183;;;;36748:318;36508:573;36328:753;;;;:::o;27172:142::-;27230:14;27291:5;27281:15;;27172:142;;;:::o;35962:358::-;36061:5;36046;:12;;;;:20;36038:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36173:9;36185:5;36173:17;;36168:99;36211:1;36196:5;:12;;;;:16;;;;:::i;:::-;36192:1;:20;36168:99;;;36245:5;36253:1;36251;:3;;;;:::i;:::-;36245:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36234:5;36240:1;36234:8;;;;;;;;:::i;:::-;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36214:3;;;;;;;36168:99;;;;36277:5;:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;35962:358;;:::o;7:180:1:-;55:77;52:1;45:88;152:4;149:1;142:15;176:4;173:1;166:15;193:75;226:6;259:2;253:9;243:19;;193:75;:::o;274:117::-;383:1;380;373:12;397:117;506:1;503;496:12;520:149;556:7;596:66;589:5;585:78;574:89;;520:149;;;:::o;675:120::-;747:23;764:5;747:23;:::i;:::-;740:5;737:34;727:62;;785:1;782;775:12;727:62;675:120;:::o;801:137::-;846:5;884:6;871:20;862:29;;900:32;926:5;900:32;:::i;:::-;801:137;;;;:::o;944:327::-;1002:6;1051:2;1039:9;1030:7;1026:23;1022:32;1019:119;;;1057:79;;:::i;:::-;1019:119;1177:1;1202:52;1246:7;1237:6;1226:9;1222:22;1202:52;:::i;:::-;1192:62;;1148:116;944:327;;;;:::o;1277:90::-;1311:7;1354:5;1347:13;1340:21;1329:32;;1277:90;;;:::o;1373:109::-;1454:21;1469:5;1454:21;:::i;:::-;1449:3;1442:34;1373:109;;:::o;1488:210::-;1575:4;1613:2;1602:9;1598:18;1590:26;;1626:65;1688:1;1677:9;1673:17;1664:6;1626:65;:::i;:::-;1488:210;;;;:::o;1704:77::-;1741:7;1770:5;1759:16;;1704:77;;;:::o;1787:122::-;1860:24;1878:5;1860:24;:::i;:::-;1853:5;1850:35;1840:63;;1899:1;1896;1889:12;1840:63;1787:122;:::o;1915:139::-;1961:5;1999:6;1986:20;1977:29;;2015:33;2042:5;2015:33;:::i;:::-;1915:139;;;;:::o;2060:474::-;2128:6;2136;2185:2;2173:9;2164:7;2160:23;2156:32;2153:119;;;2191:79;;:::i;:::-;2153:119;2311:1;2336:53;2381:7;2372:6;2361:9;2357:22;2336:53;:::i;:::-;2326:63;;2282:117;2438:2;2464:53;2509:7;2500:6;2489:9;2485:22;2464:53;:::i;:::-;2454:63;;2409:118;2060:474;;;;;:::o;2540:99::-;2592:6;2626:5;2620:12;2610:22;;2540:99;;;:::o;2645:169::-;2729:11;2763:6;2758:3;2751:19;2803:4;2798:3;2794:14;2779:29;;2645:169;;;;:::o;2820:139::-;2909:6;2904:3;2899;2893:23;2950:1;2941:6;2936:3;2932:16;2925:27;2820:139;;;:::o;2965:102::-;3006:6;3057:2;3053:7;3048:2;3041:5;3037:14;3033:28;3023:38;;2965:102;;;:::o;3073:377::-;3161:3;3189:39;3222:5;3189:39;:::i;:::-;3244:71;3308:6;3303:3;3244:71;:::i;:::-;3237:78;;3324:65;3382:6;3377:3;3370:4;3363:5;3359:16;3324:65;:::i;:::-;3414:29;3436:6;3414:29;:::i;:::-;3409:3;3405:39;3398:46;;3165:285;3073:377;;;;:::o;3456:313::-;3569:4;3607:2;3596:9;3592:18;3584:26;;3656:9;3650:4;3646:20;3642:1;3631:9;3627:17;3620:47;3684:78;3757:4;3748:6;3684:78;:::i;:::-;3676:86;;3456:313;;;;:::o;3775:329::-;3834:6;3883:2;3871:9;3862:7;3858:23;3854:32;3851:119;;;3889:79;;:::i;:::-;3851:119;4009:1;4034:53;4079:7;4070:6;4059:9;4055:22;4034:53;:::i;:::-;4024:63;;3980:117;3775:329;;;;:::o;4110:126::-;4147:7;4187:42;4180:5;4176:54;4165:65;;4110:126;;;:::o;4242:96::-;4279:7;4308:24;4326:5;4308:24;:::i;:::-;4297:35;;4242:96;;;:::o;4344:118::-;4431:24;4449:5;4431:24;:::i;:::-;4426:3;4419:37;4344:118;;:::o;4468:222::-;4561:4;4599:2;4588:9;4584:18;4576:26;;4612:71;4680:1;4669:9;4665:17;4656:6;4612:71;:::i;:::-;4468:222;;;;:::o;4696:122::-;4769:24;4787:5;4769:24;:::i;:::-;4762:5;4759:35;4749:63;;4808:1;4805;4798:12;4749:63;4696:122;:::o;4824:139::-;4870:5;4908:6;4895:20;4886:29;;4924:33;4951:5;4924:33;:::i;:::-;4824:139;;;;:::o;4969:474::-;5037:6;5045;5094:2;5082:9;5073:7;5069:23;5065:32;5062:119;;;5100:79;;:::i;:::-;5062:119;5220:1;5245:53;5290:7;5281:6;5270:9;5266:22;5245:53;:::i;:::-;5235:63;;5191:117;5347:2;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5318:118;4969:474;;;;;:::o;5449:118::-;5536:24;5554:5;5536:24;:::i;:::-;5531:3;5524:37;5449:118;;:::o;5573:222::-;5666:4;5704:2;5693:9;5689:18;5681:26;;5717:71;5785:1;5774:9;5770:17;5761:6;5717:71;:::i;:::-;5573:222;;;;:::o;5801:619::-;5878:6;5886;5894;5943:2;5931:9;5922:7;5918:23;5914:32;5911:119;;;5949:79;;:::i;:::-;5911:119;6069:1;6094:53;6139:7;6130:6;6119:9;6115:22;6094:53;:::i;:::-;6084:63;;6040:117;6196:2;6222:53;6267:7;6258:6;6247:9;6243:22;6222:53;:::i;:::-;6212:63;;6167:118;6324:2;6350:53;6395:7;6386:6;6375:9;6371:22;6350:53;:::i;:::-;6340:63;;6295:118;5801:619;;;;;:::o;6426:117::-;6535:1;6532;6525:12;6549:117;6658:1;6655;6648:12;6672:180;6720:77;6717:1;6710:88;6817:4;6814:1;6807:15;6841:4;6838:1;6831:15;6858:281;6941:27;6963:4;6941:27;:::i;:::-;6933:6;6929:40;7071:6;7059:10;7056:22;7035:18;7023:10;7020:34;7017:62;7014:88;;;7082:18;;:::i;:::-;7014:88;7122:10;7118:2;7111:22;6901:238;6858:281;;:::o;7145:129::-;7179:6;7206:20;;:::i;:::-;7196:30;;7235:33;7263:4;7255:6;7235:33;:::i;:::-;7145:129;;;:::o;7280:308::-;7342:4;7432:18;7424:6;7421:30;7418:56;;;7454:18;;:::i;:::-;7418:56;7492:29;7514:6;7492:29;:::i;:::-;7484:37;;7576:4;7570;7566:15;7558:23;;7280:308;;;:::o;7594:148::-;7692:6;7687:3;7682;7669:30;7733:1;7724:6;7719:3;7715:16;7708:27;7594:148;;;:::o;7748:425::-;7826:5;7851:66;7867:49;7909:6;7867:49;:::i;:::-;7851:66;:::i;:::-;7842:75;;7940:6;7933:5;7926:21;7978:4;7971:5;7967:16;8016:3;8007:6;8002:3;7998:16;7995:25;7992:112;;;8023:79;;:::i;:::-;7992:112;8113:54;8160:6;8155:3;8150;8113:54;:::i;:::-;7832:341;7748:425;;;;;:::o;8193:340::-;8249:5;8298:3;8291:4;8283:6;8279:17;8275:27;8265:122;;8306:79;;:::i;:::-;8265:122;8423:6;8410:20;8448:79;8523:3;8515:6;8508:4;8500:6;8496:17;8448:79;:::i;:::-;8439:88;;8255:278;8193:340;;;;:::o;8539:509::-;8608:6;8657:2;8645:9;8636:7;8632:23;8628:32;8625:119;;;8663:79;;:::i;:::-;8625:119;8811:1;8800:9;8796:17;8783:31;8841:18;8833:6;8830:30;8827:117;;;8863:79;;:::i;:::-;8827:117;8968:63;9023:7;9014:6;9003:9;8999:22;8968:63;:::i;:::-;8958:73;;8754:287;8539:509;;;;:::o;9054:329::-;9113:6;9162:2;9150:9;9141:7;9137:23;9133:32;9130:119;;;9168:79;;:::i;:::-;9130:119;9288:1;9313:53;9358:7;9349:6;9338:9;9334:22;9313:53;:::i;:::-;9303:63;;9259:117;9054:329;;;;:::o;9389:116::-;9459:21;9474:5;9459:21;:::i;:::-;9452:5;9449:32;9439:60;;9495:1;9492;9485:12;9439:60;9389:116;:::o;9511:133::-;9554:5;9592:6;9579:20;9570:29;;9608:30;9632:5;9608:30;:::i;:::-;9511:133;;;;:::o;9650:468::-;9715:6;9723;9772:2;9760:9;9751:7;9747:23;9743:32;9740:119;;;9778:79;;:::i;:::-;9740:119;9898:1;9923:53;9968:7;9959:6;9948:9;9944:22;9923:53;:::i;:::-;9913:63;;9869:117;10025:2;10051:50;10093:7;10084:6;10073:9;10069:22;10051:50;:::i;:::-;10041:60;;9996:115;9650:468;;;;;:::o;10124:307::-;10185:4;10275:18;10267:6;10264:30;10261:56;;;10297:18;;:::i;:::-;10261:56;10335:29;10357:6;10335:29;:::i;:::-;10327:37;;10419:4;10413;10409:15;10401:23;;10124:307;;;:::o;10437:423::-;10514:5;10539:65;10555:48;10596:6;10555:48;:::i;:::-;10539:65;:::i;:::-;10530:74;;10627:6;10620:5;10613:21;10665:4;10658:5;10654:16;10703:3;10694:6;10689:3;10685:16;10682:25;10679:112;;;10710:79;;:::i;:::-;10679:112;10800:54;10847:6;10842:3;10837;10800:54;:::i;:::-;10520:340;10437:423;;;;;:::o;10879:338::-;10934:5;10983:3;10976:4;10968:6;10964:17;10960:27;10950:122;;10991:79;;:::i;:::-;10950:122;11108:6;11095:20;11133:78;11207:3;11199:6;11192:4;11184:6;11180:17;11133:78;:::i;:::-;11124:87;;10940:277;10879:338;;;;:::o;11223:943::-;11318:6;11326;11334;11342;11391:3;11379:9;11370:7;11366:23;11362:33;11359:120;;;11398:79;;:::i;:::-;11359:120;11518:1;11543:53;11588:7;11579:6;11568:9;11564:22;11543:53;:::i;:::-;11533:63;;11489:117;11645:2;11671:53;11716:7;11707:6;11696:9;11692:22;11671:53;:::i;:::-;11661:63;;11616:118;11773:2;11799:53;11844:7;11835:6;11824:9;11820:22;11799:53;:::i;:::-;11789:63;;11744:118;11929:2;11918:9;11914:18;11901:32;11960:18;11952:6;11949:30;11946:117;;;11982:79;;:::i;:::-;11946:117;12087:62;12141:7;12132:6;12121:9;12117:22;12087:62;:::i;:::-;12077:72;;11872:287;11223:943;;;;;;;:::o;12172:474::-;12240:6;12248;12297:2;12285:9;12276:7;12272:23;12268:32;12265:119;;;12303:79;;:::i;:::-;12265:119;12423:1;12448:53;12493:7;12484:6;12473:9;12469:22;12448:53;:::i;:::-;12438:63;;12394:117;12550:2;12576:53;12621:7;12612:6;12601:9;12597:22;12576:53;:::i;:::-;12566:63;;12521:118;12172:474;;;;;:::o;12652:180::-;12700:77;12697:1;12690:88;12797:4;12794:1;12787:15;12821:4;12818:1;12811:15;12838:194;12878:4;12898:20;12916:1;12898:20;:::i;:::-;12893:25;;12932:20;12950:1;12932:20;:::i;:::-;12927:25;;12976:1;12973;12969:9;12961:17;;13000:1;12994:4;12991:11;12988:37;;;13005:18;;:::i;:::-;12988:37;12838:194;;;;:::o;13038:442::-;13187:4;13225:2;13214:9;13210:18;13202:26;;13238:71;13306:1;13295:9;13291:17;13282:6;13238:71;:::i;:::-;13319:72;13387:2;13376:9;13372:18;13363:6;13319:72;:::i;:::-;13401;13469:2;13458:9;13454:18;13445:6;13401:72;:::i;:::-;13038:442;;;;;;:::o;13486:180::-;13534:77;13531:1;13524:88;13631:4;13628:1;13621:15;13655:4;13652:1;13645:15;13672:176;13704:1;13721:20;13739:1;13721:20;:::i;:::-;13716:25;;13755:20;13773:1;13755:20;:::i;:::-;13750:25;;13794:1;13784:35;;13799:18;;:::i;:::-;13784:35;13840:1;13837;13833:9;13828:14;;13672:176;;;;:::o;13854:159::-;13994:11;13990:1;13982:6;13978:14;13971:35;13854:159;:::o;14019:365::-;14161:3;14182:66;14246:1;14241:3;14182:66;:::i;:::-;14175:73;;14257:93;14346:3;14257:93;:::i;:::-;14375:2;14370:3;14366:12;14359:19;;14019:365;;;:::o;14390:419::-;14556:4;14594:2;14583:9;14579:18;14571:26;;14643:9;14637:4;14633:20;14629:1;14618:9;14614:17;14607:47;14671:131;14797:4;14671:131;:::i;:::-;14663:139;;14390:419;;;:::o;14815:191::-;14855:3;14874:20;14892:1;14874:20;:::i;:::-;14869:25;;14908:20;14926:1;14908:20;:::i;:::-;14903:25;;14951:1;14948;14944:9;14937:16;;14972:3;14969:1;14966:10;14963:36;;;14979:18;;:::i;:::-;14963:36;14815:191;;;;:::o;15012:164::-;15152:16;15148:1;15140:6;15136:14;15129:40;15012:164;:::o;15182:366::-;15324:3;15345:67;15409:2;15404:3;15345:67;:::i;:::-;15338:74;;15421:93;15510:3;15421:93;:::i;:::-;15539:2;15534:3;15530:12;15523:19;;15182:366;;;:::o;15554:419::-;15720:4;15758:2;15747:9;15743:18;15735:26;;15807:9;15801:4;15797:20;15793:1;15782:9;15778:17;15771:47;15835:131;15961:4;15835:131;:::i;:::-;15827:139;;15554:419;;;:::o;15979:180::-;16027:77;16024:1;16017:88;16124:4;16121:1;16114:15;16148:4;16145:1;16138:15;16165:320;16209:6;16246:1;16240:4;16236:12;16226:22;;16293:1;16287:4;16283:12;16314:18;16304:81;;16370:4;16362:6;16358:17;16348:27;;16304:81;16432:2;16424:6;16421:14;16401:18;16398:38;16395:84;;16451:18;;:::i;:::-;16395:84;16216:269;16165:320;;;:::o;16491:141::-;16540:4;16563:3;16555:11;;16586:3;16583:1;16576:14;16620:4;16617:1;16607:18;16599:26;;16491:141;;;:::o;16638:93::-;16675:6;16722:2;16717;16710:5;16706:14;16702:23;16692:33;;16638:93;;;:::o;16737:107::-;16781:8;16831:5;16825:4;16821:16;16800:37;;16737:107;;;;:::o;16850:393::-;16919:6;16969:1;16957:10;16953:18;16992:97;17022:66;17011:9;16992:97;:::i;:::-;17110:39;17140:8;17129:9;17110:39;:::i;:::-;17098:51;;17182:4;17178:9;17171:5;17167:21;17158:30;;17231:4;17221:8;17217:19;17210:5;17207:30;17197:40;;16926:317;;16850:393;;;;;:::o;17249:60::-;17277:3;17298:5;17291:12;;17249:60;;;:::o;17315:142::-;17365:9;17398:53;17416:34;17425:24;17443:5;17425:24;:::i;:::-;17416:34;:::i;:::-;17398:53;:::i;:::-;17385:66;;17315:142;;;:::o;17463:75::-;17506:3;17527:5;17520:12;;17463:75;;;:::o;17544:269::-;17654:39;17685:7;17654:39;:::i;:::-;17715:91;17764:41;17788:16;17764:41;:::i;:::-;17756:6;17749:4;17743:11;17715:91;:::i;:::-;17709:4;17702:105;17620:193;17544:269;;;:::o;17819:73::-;17864:3;17819:73;:::o;17898:189::-;17975:32;;:::i;:::-;18016:65;18074:6;18066;18060:4;18016:65;:::i;:::-;17951:136;17898:189;;:::o;18093:186::-;18153:120;18170:3;18163:5;18160:14;18153:120;;;18224:39;18261:1;18254:5;18224:39;:::i;:::-;18197:1;18190:5;18186:13;18177:22;;18153:120;;;18093:186;;:::o;18285:543::-;18386:2;18381:3;18378:11;18375:446;;;18420:38;18452:5;18420:38;:::i;:::-;18504:29;18522:10;18504:29;:::i;:::-;18494:8;18490:44;18687:2;18675:10;18672:18;18669:49;;;18708:8;18693:23;;18669:49;18731:80;18787:22;18805:3;18787:22;:::i;:::-;18777:8;18773:37;18760:11;18731:80;:::i;:::-;18390:431;;18375:446;18285:543;;;:::o;18834:117::-;18888:8;18938:5;18932:4;18928:16;18907:37;;18834:117;;;;:::o;18957:169::-;19001:6;19034:51;19082:1;19078:6;19070:5;19067:1;19063:13;19034:51;:::i;:::-;19030:56;19115:4;19109;19105:15;19095:25;;19008:118;18957:169;;;;:::o;19131:295::-;19207:4;19353:29;19378:3;19372:4;19353:29;:::i;:::-;19345:37;;19415:3;19412:1;19408:11;19402:4;19399:21;19391:29;;19131:295;;;;:::o;19431:1395::-;19548:37;19581:3;19548:37;:::i;:::-;19650:18;19642:6;19639:30;19636:56;;;19672:18;;:::i;:::-;19636:56;19716:38;19748:4;19742:11;19716:38;:::i;:::-;19801:67;19861:6;19853;19847:4;19801:67;:::i;:::-;19895:1;19919:4;19906:17;;19951:2;19943:6;19940:14;19968:1;19963:618;;;;20625:1;20642:6;20639:77;;;20691:9;20686:3;20682:19;20676:26;20667:35;;20639:77;20742:67;20802:6;20795:5;20742:67;:::i;:::-;20736:4;20729:81;20598:222;19933:887;;19963:618;20015:4;20011:9;20003:6;19999:22;20049:37;20081:4;20049:37;:::i;:::-;20108:1;20122:208;20136:7;20133:1;20130:14;20122:208;;;20215:9;20210:3;20206:19;20200:26;20192:6;20185:42;20266:1;20258:6;20254:14;20244:24;;20313:2;20302:9;20298:18;20285:31;;20159:4;20156:1;20152:12;20147:17;;20122:208;;;20358:6;20349:7;20346:19;20343:179;;;20416:9;20411:3;20407:19;20401:26;20459:48;20501:4;20493:6;20489:17;20478:9;20459:48;:::i;:::-;20451:6;20444:64;20366:156;20343:179;20568:1;20564;20556:6;20552:14;20548:22;20542:4;20535:36;19970:611;;;19933:887;;19523:1303;;;19431:1395;;:::o;20832:159::-;20972:11;20968:1;20960:6;20956:14;20949:35;20832:159;:::o;20997:365::-;21139:3;21160:66;21224:1;21219:3;21160:66;:::i;:::-;21153:73;;21235:93;21324:3;21235:93;:::i;:::-;21353:2;21348:3;21344:12;21337:19;;20997:365;;;:::o;21368:419::-;21534:4;21572:2;21561:9;21557:18;21549:26;;21621:9;21615:4;21611:20;21607:1;21596:9;21592:17;21585:47;21649:131;21775:4;21649:131;:::i;:::-;21641:139;;21368:419;;;:::o;21793:160::-;21933:12;21929:1;21921:6;21917:14;21910:36;21793:160;:::o;21959:366::-;22101:3;22122:67;22186:2;22181:3;22122:67;:::i;:::-;22115:74;;22198:93;22287:3;22198:93;:::i;:::-;22316:2;22311:3;22307:12;22300:19;;21959:366;;;:::o;22331:419::-;22497:4;22535:2;22524:9;22520:18;22512:26;;22584:9;22578:4;22574:20;22570:1;22559:9;22555:17;22548:47;22612:131;22738:4;22612:131;:::i;:::-;22604:139;;22331:419;;;:::o;22756:167::-;22896:19;22892:1;22884:6;22880:14;22873:43;22756:167;:::o;22929:366::-;23071:3;23092:67;23156:2;23151:3;23092:67;:::i;:::-;23085:74;;23168:93;23257:3;23168:93;:::i;:::-;23286:2;23281:3;23277:12;23270:19;;22929:366;;;:::o;23301:419::-;23467:4;23505:2;23494:9;23490:18;23482:26;;23554:9;23548:4;23544:20;23540:1;23529:9;23525:17;23518:47;23582:131;23708:4;23582:131;:::i;:::-;23574:139;;23301:419;;;:::o;23726:164::-;23866:16;23862:1;23854:6;23850:14;23843:40;23726:164;:::o;23896:366::-;24038:3;24059:67;24123:2;24118:3;24059:67;:::i;:::-;24052:74;;24135:93;24224:3;24135:93;:::i;:::-;24253:2;24248:3;24244:12;24237:19;;23896:366;;;:::o;24268:419::-;24434:4;24472:2;24461:9;24457:18;24449:26;;24521:9;24515:4;24511:20;24507:1;24496:9;24492:17;24485:47;24549:131;24675:4;24549:131;:::i;:::-;24541:139;;24268:419;;;:::o;24693:185::-;24733:1;24750:20;24768:1;24750:20;:::i;:::-;24745:25;;24784:20;24802:1;24784:20;:::i;:::-;24779:25;;24823:1;24813:35;;24828:18;;:::i;:::-;24813:35;24870:1;24867;24863:9;24858:14;;24693:185;;;;:::o;24884:410::-;24924:7;24947:20;24965:1;24947:20;:::i;:::-;24942:25;;24981:20;24999:1;24981:20;:::i;:::-;24976:25;;25036:1;25033;25029:9;25058:30;25076:11;25058:30;:::i;:::-;25047:41;;25237:1;25228:7;25224:15;25221:1;25218:22;25198:1;25191:9;25171:83;25148:139;;25267:18;;:::i;:::-;25148:139;24932:362;24884:410;;;;:::o;25300:233::-;25339:3;25362:24;25380:5;25362:24;:::i;:::-;25353:33;;25408:66;25401:5;25398:77;25395:103;;25478:18;;:::i;:::-;25395:103;25525:1;25518:5;25514:13;25507:20;;25300:233;;;:::o;25539:158::-;25679:10;25675:1;25667:6;25663:14;25656:34;25539:158;:::o;25703:365::-;25845:3;25866:66;25930:1;25925:3;25866:66;:::i;:::-;25859:73;;25941:93;26030:3;25941:93;:::i;:::-;26059:2;26054:3;26050:12;26043:19;;25703:365;;;:::o;26074:419::-;26240:4;26278:2;26267:9;26263:18;26255:26;;26327:9;26321:4;26317:20;26313:1;26302:9;26298:17;26291:47;26355:131;26481:4;26355:131;:::i;:::-;26347:139;;26074:419;;;:::o;26499:162::-;26639:14;26635:1;26627:6;26623:14;26616:38;26499:162;:::o;26667:366::-;26809:3;26830:67;26894:2;26889:3;26830:67;:::i;:::-;26823:74;;26906:93;26995:3;26906:93;:::i;:::-;27024:2;27019:3;27015:12;27008:19;;26667:366;;;:::o;27039:419::-;27205:4;27243:2;27232:9;27228:18;27220:26;;27292:9;27286:4;27282:20;27278:1;27267:9;27263:17;27256:47;27320:131;27446:4;27320:131;:::i;:::-;27312:139;;27039:419;;;:::o;27464:148::-;27566:11;27603:3;27588:18;;27464:148;;;;:::o;27618:248::-;27758:34;27754:1;27746:6;27742:14;27735:58;27831:23;27826:2;27818:6;27814:15;27807:48;27618:248;:::o;27876:418::-;28036:3;28061:85;28143:2;28138:3;28061:85;:::i;:::-;28054:92;;28159:93;28248:3;28159:93;:::i;:::-;28281:2;28276:3;28272:12;28265:19;;27876:418;;;:::o;28304:393::-;28489:3;28515:148;28659:3;28515:148;:::i;:::-;28508:155;;28684:3;28677:10;;28304:393;;;:::o;28707:171::-;28851:15;28847:1;28839:6;28835:14;28828:39;28707:171;:::o;28888:382::-;29030:3;29055:67;29119:2;29114:3;29055:67;:::i;:::-;29048:74;;29135:93;29224:3;29135:93;:::i;:::-;29257:2;29252:3;29248:12;29241:19;;28888:382;;;:::o;29280:435::-;29446:4;29488:2;29477:9;29473:18;29465:26;;29541:9;29535:4;29531:20;29527:1;29516:9;29512:17;29505:47;29573:131;29699:4;29573:131;:::i;:::-;29565:139;;29280:435;;;:::o;29725:196::-;29777:77;29774:1;29767:88;29878:4;29875:1;29868:15;29906:4;29903:1;29896:15
Swarm Source
ipfs://d767e526333f78329cb65b42709ec058e94fb4e92a036dc70927c23cd4347faa
[ 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.